V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
工单节点使用指南
• 请用平和的语言准确描述你所遇到的问题
• 厂商的技术支持和你一样也是有喜怒哀乐的普通人类,尊重是相互的
• 如果是关于 V2EX 本身的问题反馈,请使用 反馈 节点
zjsxwc
V2EX  ›  全球工单系统

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

  •  
  •   zjsxwc · 2018-03-08 15:22:41 +08:00 · 2552 次点击
    这是一个创建于 2258 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    你们有碰到吗?

    3 条回复    2018-03-08 16:15:09 +08:00
    adminxc
        1
    adminxc  
       2018-03-08 15:44:33 +08:00
    没有
    cq65617875
        2
    cq65617875  
       2018-03-08 15:51:12 +08:00
    编码问题查一查?
    zjsxwc
        3
    zjsxwc  
    OP
       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
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1079 人在线   最高记录 6547   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 22:22 · PVG 06:22 · LAX 15:22 · JFK 18:22
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.