解决问题备忘:Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》

这篇具有很好参考价值的文章主要介绍了解决问题备忘:Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

环境:php7.3.4nts文章来源地址https://www.toymoban.com/news/detail-502842.html

<?php

//新手,不会较为规范的代码,如下:

header("Access-Control-Allow-Origin: *");
$openid = !empty($_GET['openid']) ? $_GET['openid'] : die('openid无效');//用户的openid

$appid = '';//公众号appid
$mchid = '';//商户号
$description = '';//商品描述
$out_trade_no = date('Ymd') . str_pad(mt_rand(1, 99999), 10, '0', STR_PAD_LEFT);//商户订单号
$notify_url = 'https://www.weixin.qq.com/wxpay/pay.php';//【异步通知地址】
$money = '1';//金额,单位:分

$url = 'https://api.mch.weixin.qq.com/v3/pay/transactions/jsapi';
$data = '{"mchid":"'.$mchid.'","out_trade_no":"'.$out_trade_no.'","appid":"'.$appid.'","description":"'.$description.'","notify_url":"'.$notify_url.'","amount":{"total":'.$money.',"currency":"CNY"},"payer": {"openid":"'.$oid.'"}}';

//证书序列号,在商户证书那里可以看到
$serial_no = '';


//private_key是直接打开apiclient_key.pem文件复制出来的

$private_key = '-----BEGIN PRIVATE KEY-----
此处省略若干行
-----END PRIVATE KEY-----';


$url_parts = parse_url($url);
$timestamp = time();
$nonce = $out_trade_no;
$canonical_url = ($url_parts['path'] . (!empty($url_parts['query']) ? "?${url_parts['query']}" : ""));
$message = "POST".chr(10).$canonical_url.chr(10).$timestamp.chr(10).$nonce.chr(10).$data.chr(10);

openssl_sign($message, $raw_sign, $private_key, 'sha256WithRSAEncryption');
$sign = base64_encode($raw_sign);
$schema = 'WECHATPAY2-SHA256-RSA2048';
$token = sprintf('mchid="%s",nonce_str="%s",timestamp="%d",serial_no="%s",signature="%s"', $mchid, $nonce, $timestamp, $serial_no, $sign);

$ret = posturl($url,$data,$schema.' '.$token);

//在同目录下创建一个log文件记录返回值,我是直接在服务器真实测试的,调试输出麻烦所以用了这个。
$handle=fopen("./log.txt","a+");
$str=fwrite($handle,$ret."\r\n");
fclose($handle);

die;
$json = json_decode($ret,1);


function posturl($url, $data, $Authorization){
    $headerArray =array("Content-type:application/json;charset='utf-8'","Accept:application/json","Authorization:".$Authorization,"User-Agent:".$_SERVER['HTTP_USER_AGENT']);
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}
?>

到了这里,关于解决问题备忘:Http头Authorization值格式错误,请参考《微信支付商户REST API签名规则》的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 解决 Https 站点请求 Http 接口服务后报 the content must be served over HTTPS 错误的问题

    之前将自己所有的 Http 站点全部更新为 Https 站点,但是在请求后台接口服务的时候还是 Http 请求,导致部署之后,直接在控制台报 This request has been blocked; the content must be served over HTTPS; 的错误 因为我不想耗费精力,将所有的后台接口服务也更新为支持 Https 请求,所以访问了

    2024年02月16日
    浏览(33)
  • bios无法识别usb键盘问题解决备忘

    戴尔的T3600工作站bios中无法使用usb键盘,参考: USB 3.0 和 USB 2.0 在 Precision T3600、T5600 或 T7600 系统上出现故障 | Dell 中国 https://www.dell.com/support/kbdoc/zh-cn/000141904/usb-3-0-%E5%92%8C-usb-2-0-%E5%9C%A8-precision-t3600-t5600-%E6%88%96-t7600-%E7%B3%BB%E7%BB%9F%E4%B8%8A%E5%87%BA%E7%8E%B0%E6%95%85%E9%9A%9C  所以就是

    2024年02月11日
    浏览(39)
  • 解决问题:HTTP 错误 500.19 - Internal Server Error 无法访问请求的页面,因为该页的相关配置数据无效。安装AspNetCoreModuleV2 模块即可

        缺少 AspNetCoreModuleV2 模块,下载安装即可。 ps:.net framework是可以直接发布,IIS指定就能正常访问的。但aspnetcore 项目略有不同,要额外安装一个模块,如果没有安装,会报HTTP 错误 500.19 - Internal Server Error的错。 1、官方版本地址:https://dotnet.microsoft.com/download/dotnet  根据需

    2024年02月12日
    浏览(33)
  • 【HTTP完全注解】揭开Authorization神秘的面纱

    Authorization是HTTP 提供一个用于权限控制和认证的通用框架,可能有不少小伙伴会感到疑惑\\\" Cookie不就可以做权限控制和认证吗? \\\",确实如此! Cookie确实是在单个系统内认证用户身份、保持会话状态的有效方式,但如果涉及到多个系统、多个域名或多个应用程序之间认证、授

    2024年04月25日
    浏览(23)
  • 深入理解 HTTP Authorization 头:基础知识

    在当今的互联网世界中,安全性贯穿于 web 应用的每个方面,HTTP Authorization 头的使用在这个过程中扮演着不可或缺的角色。它是 HTTP 请求中的一个重要部分,用来在客户端和服务器之间安全地传输认证信息。用途广泛,无论是浏览器还是其他客户端应用,都依赖它来验证用户

    2024年04月15日
    浏览(35)
  • HTTP 503错误是什么,HTTP 503错误的原因和解决方法

    HTTP 503错误是指服务器暂时无法处理客户端的请求,常常出现在服务器超负荷或维护期间。在这种情况下,服务器会向客户端返回一个503状态码,告诉客户端请求无法完成。 1.服务器超负荷 当服务器上的请求量超过其容量时,服务器就无法正确处理这些请求。这种情况可能是

    2024年02月11日
    浏览(34)
  • 前端以Json格式传递列表时的书写格式错误及解决方案

    报错 JSON parse error: Cannot deserialize value of type java.util.ArrayListcom.tzy.entity.ComponentOilProperties from Object value (token JsonToken.START_OBJECT ); nested exception is com.fasterxml.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type java.util.ArrayListcom.tzy.entity.ComponentOilProperties from Object value (toke

    2024年02月11日
    浏览(28)
  • 什么是HTTP 500错误,怎么解决

    目录 什么是HTTP 500 HTTP 500错误的常见原因: 如何修复HTTP 500 总结 HTTP 500内部服务器错误是指在客户端发出请求后,服务器在处理请求过程中发生了未知的问题,导致服务器无法完成请求。HTTP 500错误是一个通用的服务器错误状态码,它表示服务器遇到了无法处理的错误,从而

    2024年02月09日
    浏览(36)
  • HTTP 500错误:服务器内部错误,原因及解决方案

    大家好,今天我们来聊聊一个常见的问题——HTTP 500错误,也就是服务器内部错误。这个错误就像是一个神秘的魔法,时不时地出现在你的网页上,让你的用户和你在一片懵逼中互相猜疑。 首先,我们来了解一下这个错误。HTTP 500错误是服务器在处理请求时发生了内部错误,

    2024年02月04日
    浏览(52)
  • hadoop namenode格式化错误以及启动不了解决方案

    重启虚拟机,启动Zookeeper和journalnode 启动三台机器的zookeeper 和 journalnode 第一次格式化namenode时报错,namennode可能会自动进入了安全模式,所以需要关闭安全模式 重新格式化 需要先关闭所有服务 查看配置文件是否有错误 然后删除tmp文件,并重新格式化namenode,tmp文件查看co

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包