收藏
回答

V3合单支付 支付签名验证失败(已解决)

问题详细说明:接口获取到预支付id->二次加密->返回小程序->调起支付提示支付签名验证失败。


支付提示:

自检过程:1、签名验证,下载工具使用签名/验签商户私钥进行加密,验证是否与代码加密效果一致;2、小程序调起支付参数对照文档,大小写一致,获取服务器数据正常。

代码:

  //支付加密
   private function getPayEncrypt($arr)
   {
      global $_W;
      //$str是待加密字符串
      $str = '';
      foreach ($arr as $item) {
         $str .= $item.chr(hexdec('0x0A'));//"\n"; 这个位置可以直接用\n 
      }
      $public_key = load_model_class('front')->get_config_by_name('wechat_apiclient_key_pem');//商户私钥
      if (openssl_sign($str,$encrypted,$public_key,"sha256WithRSAEncryption")) {
         $sign = base64_encode($encrypted);
      } else {
         throw new Exception('encrypt failed');
      }
}

签名工具验证截图:



二次签名计算—加密数据及签名:

string(113"wx1d117817c02dda11
1605861527
KIanKsuNqXalHXDhASdiqrbMUebRaceG
prepay_id=up_wx201638470087069e766a5c92e6a7910000
"
string(344)
"nPXMZj+cu94X27uuLuE3UWlPkS1UnHrwlnGS+Cw5ulnpHBs0b7ADD2e1ug7pYOIIMADeCO/HD/A9xKBOBNyl7XMRsQR0K4rRC9QbedXlR+HvZCI3vlPNHbsldWMp0gbNHbHVIliTW3RcqTf6fApmWP7am5Vweq/V2q0mSPwjApyjCXQIIv8iYP45GCCHWvvYV1WyS+I8Q/QP0pJ+sn+r0q1f2OU4hvF87m2ak1LLtw/dOhhHW0FaXoCsC9akrnk4B8DPleBNCAsDkhwtmmqLcXTIm4LFzqzSdmsgApfmuUj1qxpkXadK59AKYEPFTwJsZXsKhpWLDbLCcuqQfxLapg=="
最后一次编辑于  2020-11-20
回答关注问题邀请回答
收藏

3 个回答

  • 决别
    决别
    2021-08-03

    我用用php '\n' 不行,验证不通过 ,换成了 "\n" 就可以。不能用单引号

    2021-08-03
    有用 1
    回复 1
    • Adam Deng
      Adam Deng
      04-05
      单引号输出的就是\n而不是回车……这个是php的常识……
      04-05
      回复
  • 摩尼摩尼哄
    摩尼摩尼哄
    2021-10-13

    这个工具有连接地址吗?在官网没找到这个工具

    2021-10-13
    有用
    回复
  • 北望沣渭
    北望沣渭
    2020-11-20
    'timeStamp' => strval($time),
    
    2020-11-20
    有用
    回复 1
    • 我和我的小可爱
      我和我的小可爱
      2020-11-20
      还是返回支付签名失败。。。
      2020-11-20
      回复
登录 后发表内容
问题标签