V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
iugo
V2EX  ›  问与答

微信网页调用支付, 生成预订单号时成功返回 XML, 但是 JS 提交支付的时候提示签名错误?

  •  
  •   iugo · 2015-07-09 11:01:40 +08:00 · 2960 次点击
    这是一个创建于 3427 天前的主题,其中的信息可能已经有所发展或是发生改变。

    微信支付困扰我几天了.

    出错点

    目前遇到的问题是, 在 JS 发起支付请求后返回 "商户签名错误".

    使用的 JS 代码

    我在两个地方看到有不同的示例代码

    第一个地方: http://mp.weixin.qq.com/wiki/7/aaa137b55fb2e0456bf8dd9148dd613f.html#.E5.8F.91.E8.B5.B7.E4.B8.80.E4.B8.AA.E5.BE.AE.E4.BF.A1.E6.94.AF.E4.BB.98.E8.AF.B7.E6.B1.82

    第一个地方是微信 JSSDK 的线上文档, 按照里面的要求放上示例代码后根本无法发起请求.

    第二个地方: https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7

    我就是使用第二个地方的 JS 示例代码后出错. 可以发起请求, 但是提示 "商户签名错误", 支付中断.

    关于我使用的签名

    我看到微信中有两个签名, 一个是微信支付中说的 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=4_3

    我利用上面那个方法成功完成 "统一下单". 发送 XML 请求并得到 XML 返回.

    我在 JS 里面填写的就是统一下单时的签名.

    如果不是这个签名, 那我要拼接什么参数用什么算法得到这个 paySign?

    微信中的签名

    我看到的签名有三种:

    1. signature

    JS-SDK 使用权限签名

    尝试生成过, 但没验证对错.

    SHA1 算法.

    可以找到要拼接的字符串.

    2.sign

    统一下单的签名

    已经成功生成.

    MD5 算法.

    可以找到要拼接的字符串.

    3. paySign JS

    提交支付所用的签名

    不知道这个是什么.

    第 1 条附言  ·  2015-07-09 11:58:50 +08:00
    问题解决, 总结一下:

    微信有三个签名, signature, sign, paySign 微信支付的时候需要后两个.

    sign 是在统一下单时生成预订单号使用.

    paySign 是在 JS 调取支付时使用.

    这二者均采用字符串拼接然后 MD5 加密, 再统一转换为大写的方法.

    paySign 所需的字符串在文档中说得不够清楚, 具体需要看 https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_7 这个链接. 记得在最后加上 key, 别忘了.

    JS 调用支付一定不要看 JSSDK 中的文档, 根本没用. 只需要看上一段给的链接就行了. 但注意示例代码是有问题的, 不能直接用. 问题出在 `"timeStamp":" 1395712654"` 这一行, 看到字符串内多出的那个空格了吗? 去掉!

    再说一遍, 如果是网页调用支付不要看微信 JSSDK, 不要看!
    2 条回复    2015-07-09 11:21:35 +08:00
    b821025551b
        1
    b821025551b  
       2015-07-09 11:17:18 +08:00
    最后一步发起请求的字段用这个:timestamp,签名时用这个:timeStamp 试试。
    iugo
        2
    iugo  
    OP
       2015-07-09 11:21:35 +08:00
    目前找到了 paysign 这东西怎么拼接: $pay_sign = "appId=$appid&nonceStr=$nonce_str&package=prepay_id=$prepay_id&signType=MD5&timeStamp=$timestamp";

    新的错误诞生了, 提示
    调用支付JSAPI缺少参数: sign
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5562 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 03:46 · PVG 11:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.