银联支付回调数据无法通过其官方 sdk 验签

2018-03-08 15:22:41 +08:00
 zjsxwc

我的 sdk 是从官方这里下载的( https://open.unionpay.com/ajweb/help/file/toDetailPage?id=606&flag=2 )

然后跑 demo 时,使用其前端回调FrontReceive.php以及退款接口Refund.php等都可以对银联发送过来的数据正常验签,唯独最重要的后台接收BackReceive.php后台回调返回过来的数据一直验签失败,不管是我线上环境还是它自己提供的 demo 都能重现这个问题。

你们有碰到吗?

2557 次点击
所在节点    全球工单系统
3 条回复
adminxc
2018-03-08 15:44:33 +08:00
没有
cq65617875
2018-03-08 15:51:12 +08:00
编码问题查一查?
zjsxwc
2018-03-08 16:15:09 +08:00
解决了, 银联回调唯独在后台回调时,把`signPubKeyCert`公钥证书里的换行符\r\n 返回了\n。

暂时解决办法是这么补救下:
```
private function fixSignPubKeyCert(&$post) {
if (empty($post["signPubKeyCert"])) {
return;
}
$signPubKeyCert = $post["signPubKeyCert"];
$validNewLinePosition = strpos($signPubKeyCert, "\r\n");
if ($validNewLinePosition === false) {
$post["signPubKeyCert"] = str_replace("\n", "\r\n", $signPubKeyCert);
}
}


$this->fixSignPubKeyCert($_POST);

```



@zjsxwc @adminxc @cq65617875

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/436161

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX