有对接过微信支付的吗?微信支付回调验签怎么才能成功呢?
背景:微信支付成功回调通知,验证通知消息是否来自于微信,一直验证不过去。
代码:
<?php
$timeStamp = $request->header('Wechatpay-Timestamp');
$wechatNonce = $request->header('Wechatpay-Nonce');
$requestData = file_get_contents('php://input');
$requestData = json_encode(json_decode($requestData));
$signature = $request->header('Wechatpay-Signature'); //微信头部携带的签名值
//验证签名
openssl_verify(Formatter::joinedByLineFeed($timeStamp,$wechatNonce,$requestData),base64_decode($signature), $this->platformPublicKeyInstance, OPENSSL_ALGO_SHA256)
//上文的 $this->platformPublicKeyInstance 是微信平台的公钥
结果:
这个验证结果一直是0,搜了好多教程,也找不出问题,请问大家有成功的吗?可以指点一下吗?
解决了!!!!
困扰了许久的问题,因为保存了支付回调的信息,一直在本地测试都是false,感觉无望了,想着正式环境再测一下,结果就验签过了。
部分代码:
<?php
$timeStamp = $request->header('Wechatpay-Timestamp');
$wechatNonce = $request->header('Wechatpay-Nonce');
$requestData = file_get_contents('php://input');
$signature = $request->header('Wechatpay-Signature');
// 检查通知时间偏移量,允许5分钟之内的偏移
$timeOffsetStatus = 300 >= abs(Formatter::timestamp() - (int)$timeStamp);
$verifiedStatus = Rsa::verify(
// 构造验签名串
Formatter::joinedByLineFeed($timeStamp, $wechatNonce,$requestData),
$signature,
$this->platformPublicKeyInstance
);
//重点是这句 $requestData = file_get_contents('php://input'); 之前是用了 $request->input()的方式获取的,一直通过不了。本地测试的时候,我也用了 file_get_contents的方法,但也一直过不了。正式支付测试的时候,就过了。可能因为数据不是最新的缘故的吧。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: