最近在做微信支付,調用微信的統一下單支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1時,老是返回“簽名錯誤”,偶爾可以成功,不知道是怎么回事。我在日志中打印出生成的字符串和簽名,然后用相同的數據在微信支付提供的在線支付調試工具生成簽名,發現生成的簽名結果一樣!生成的最終xml也一樣,但接口就是返回
<xml><return_code><![CDATA[FAIL]]></return_code>
<return_msg><![CDATA[簽名錯誤]]></return_msg>
</xml>
POST給微信的xml內容:
<xml>
<appid><![CDATA[wxe587fed28211bccb]]></appid>
<body><![CDATA[Demo]]></body>
<device_info><![CDATA[WEB]]></device_info>
<fee_type><![CDATA[CNY]]></fee_type>
<mch_id><![CDATA[1265056801]]></mch_id>
<nonce_str><![CDATA[ejnshgum39igp6qwpvzwb5jbwk8yigqz]]></nonce_str>
<notify_url><![CDATA[http://testpay.le1.com.cn/wechat/notify.htm]]></notify_url>
<openid><![CDATA[opZb3wsfU6RUZGxgFZ6OXVbdVxcU]]></openid>
<out_trade_no><![CDATA[1002_09745565EpuxTunUCD0AA72E]]></out_trade_no>
<product_id><![CDATA[QWE789C1523QWE78]]></product_id>
<sign><![CDATA[BF4BB39FFAFC4DF470C5A3F7784678BD]]></sign>
<spbill_create_ip><![CDATA[172.16.12.171]]></spbill_create_ip>
<total_fee><![CDATA[1]]></total_fee>
<trade_type><![CDATA[NATIVE]]></trade_type>
</xml>
首先 , 看到返回msg顯示簽名錯誤 , 第一反應官網提供的路徑去生成了一下簽名做比較 , 結果發現簽名算法是沒錯的.
https://pay.weixin.qq.com/wiki/tools/signverify/
找了各種方法 , 百度谷歌搜索了一下午 , 發現很多同行都遇到了一樣的問題 , 得到了以下解決方法
1、確認公眾號的appSecret和商戶號的API密鑰沒有搞混。
2、重置商戶API密鑰。(本人親測是這樣解決了問題,tx真是個坑,我嚴重鄙視。)