php升级到php7.x的影响(三),微信支付回调的失败

今天客户反应支付过的订单,系统里还显示未支付
看了看回调日志文件,居然是空的
原本程序里回调是这样获取回调内容的$xml = $GLOBALS['HTTP_RAW_POST_DATA'];
这个获取不到内容,用这个试试$xml = file_get_contents('php://input');
果然!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,关于微信支付回调信息的解密,你可以按照以下步骤进行: 1. 从微信支付平台获取到回调的原始加密信息,包括加密的文本信息、加密的随机串、加密的签名信息等。 2. 使用商户平台的私钥对加密的随机串进行解密,得到对称加密的密钥。 3. 使用对称加密的密钥对加密的文本信息进行解密,得到明文的回调信息。 4. 对明文的回调信息进行验签,确保信息的完整性和可信度。 下面是一个示例代码,可以帮助你完成微信支付回调信息的解密和验签过程: ```php /** * 微信支付回调信息解密和验签示例代码 */ // 从微信支付平台获取回调的原始加密信息 $xml = file_get_contents('php://input'); // 从商户平台获取私钥 $private_key = file_get_contents('/path/to/your/private/key.pem'); // 解析回调信息中的加密文本、随机串和签名信息 $data = simplexml_load_string($xml, 'SimpleXMLElement', LIBXML_NOCDATA); $encrypt_data = base64_decode($data->Encrypt); $nonce = $data->Nonce; $signature = $data->Signature; // 使用商户平台的私钥解密随机串,得到对称加密的密钥 $rand_str = openssl_decrypt($nonce, 'AES-256-ECB', $private_key, OPENSSL_RAW_DATA); $key = substr($rand_str, 0, 32); // 使用对称加密的密钥解密加密文本,得到明文的回调信息 $iv = substr($rand_str, 32); $decrypted = openssl_decrypt($encrypt_data, 'AES-256-CBC', $key, OPENSSL_RAW_DATA, $iv); // 验证明文的回调信息的签名是否正确 $merchant_id = 'YOUR_MERCHANT_ID'; $timestamp = $data->TimeStamp; $msg_signature = $data->MsgSignature; $signature_params = [$merchant_id, $timestamp, $nonce, $decrypted]; sort($signature_params, SORT_STRING); $signature_str = implode($signature_params); $signature = sha1($signature_str); if ($signature === $msg_signature) { // 验签通过,对明文的回调信息进行处理 $decoded = json_decode($decrypted); // TODO: 处理回调信息 } else { // 验签失败回调信息可能被篡改,不予处理 header('HTTP/1.1 400 Bad Request'); echo 'Invalid signature'; } ``` 以上代码仅供参考,具体实现方式可能会有所不同,需要根据自己的实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值