微信app支付签名错误

先放一下申请微信支付的百度经验文档,https://jingyan.baidu.com/article/02027811706ea61bcd9ce54c.html

最近在做微信app支付,调用微信的统一下单支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1时,老是返回“签名错误”。我在日志中打印出生成的字符串和签名,然后用相同的数据在微信支付提供的在线支付调试工具生成签名,地址为https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=20_1,发现生成的签名结果一样,能够校验通过,但接口就是返回

<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[签名错误]]></return_msg>
</xml>

POST给微信的xml内容:

<xml>
    <appid>我的app_id</appid>
    <mch_id>就是我的商户id</mch_id>
    <body>会员充值</body>
    <spbill_create_ip>127.0.0.1</spbill_create_ip>
    <total_fee>1</total_fee>
    <out_trade_no>612ab716dc4b39970e8a7f6ee863266c</out_trade_no>
    <nonce_str>wIFezB5xLcfaAtEgXQ4j2r6TyM8NbW9G</nonce_str>
    <notify_url>我的回调地址</notify_url>
    <trade_type>APP</trade_type>
    <sign>4CD090AE9057E5983B6EEE8520B70C7D</sign>
</xml>

如果带上CDATA,这个时候,其实每个节点生成的数据都是空,解决办法是直接去掉CDATA。

这个时候就是签名错误的表演时间了,第一反应官网提供的路径去生成了一下签名做比较,结果发现签名算法是没错的(https://pay.weixin.qq.com/wiki/tools/signverify/),然后检查了下注意事项里的说明,这个时候我的情况就是注意事项的第一种咯,但是我的商户key是我刚用md5方式生成的啊,难不成这个还能复制错,不会的不会的。

注意事项:
(1)本工具只校验签名算法是否正确,无法校验商户KEY是否正确,如通过本工具校验通过,但实际接口返回签名失败,请检查:
          1,当前商户KEY是否正确
          2,加入签名的参数是否和接口提交的参数个数一致,字段名是否和接口文档一致
(1)如选择XML或deeplink校验,校验参数需包含sign字段
(2)注意参数名需区分大小写,必须与文档的参数名大小写一致
(3)暂不支付IE浏览器

然后就上网搜了下这个问题,发现遇到的还真不少呢,下面贴一段大家的解决办法:

找了各种方法 , 百度谷歌搜索了一下午 , 发现很多同行都遇到了一样的问题 , 得到了以下解决方法

  1、确认公众号的appSecret和商户号的API密钥没有搞混。

  2、重置商户API密钥。(本人亲测是这样解决了问题,tx真是个坑,我严重鄙视。)

  3、确认公众号授权的域名和目录是正确的。
  4、参数body含有中文字符,改换英文签名成功,那么就转换字符编码试试。
    $dat = iconv('UTF-8','ISO8859-1',array2xml($package));
 
然而 , 并没有解决问题 , 先吐槽一下微信支付这个巨坑 , 不是说它的api水平有多烂,但你至少说明白一点啊,每次看微信api都头痛。比阿里差的不是一个数量级的。调阿里api都是,优雅、简单、舒服,效率高。调微信api的感觉是,愤怒、头痛、恶心,想打人。
 
后续问题解决后会在该随笔追加解决方案 .
 
追加: 问题已解决 , 重置了三次商户密钥.(....................)
 
在解决过程中又发现了一个较大的坑 , 在二维码支付模式中 , 本来的设计是生成二维码之后展示到页面上让用户去长按识别来支付 , 但是今天发现微信关闭了这个功能 , 只能是用另外一台手机去扫码支付 .
由于用户体验及其不好 , 后改用公众号支付模式。

wtf? 你们的解决办法,难道都是重置商户秘钥,刚设置好的再重置一遍?死马当作活马医吧,再次登上商户平台,找到设置秘钥的地方,看到了提示,32位的字符,要包括数字和大小写。那我第一次是md5生成的全部小写字符就不符合要求了,但是如果真的有这么个限制,为啥在设置秘钥的时候,不校验下呢?毕竟那么多人都踩在了这个坑上。重新md5生成一个32位的全部小写的字符串,然后随便改一个字符为大写,结果成功返回想要的结果。

最后吐槽下微信支付的申请,我妥妥的申请了一周(只申请),三个平台,开放平台,公众号平台(开发者认证),支付平台。申请完了,还要自己去绑定,我就呵呵了,我就想要个微信支付功能而已,光申请就申请了N久,然后有些资料填一遍再填一遍。对比支付宝支付,真的是一个天上,一个地下(支付宝app支付申请加上调试通过,一下午搞定)。在搜微信支付的这些问题时,看到那么多人骂这些文档和流程,我也就放心了。哦,对了,截止到目前,微信app支付服务端连个sdk或者demo都没有呢。
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值