最近在做微信支付,調(diào)用微信的統(tǒng)一下單支付接口http://mch.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=9_1時,老是返回“簽名錯誤”,偶爾可以成功,不知道是怎么回事。我在日志中打印出生成的字符串和簽名,然后用相同的數(shù)據(jù)在微信支付提供的在線支付調(diào)試工具生成簽名,發(fā)現(xiàn)生成的簽名結(jié)果一樣!生成的最終xml也一樣,但接口就是返回
xml>return_code>![CDATA[FAIL]]>/return_code>
return_msg>![CDATA[簽名錯誤]]>/return_msg>
/xml>
POST給微信的xml內(nèi)容:
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顯示簽名錯誤 , 第一反應(yīng)官網(wǎng)提供的路徑去生成了一下簽名做比較 , 結(jié)果發(fā)現(xiàn)簽名算法是沒錯的.
https://pay.weixin.qq.com/wiki/tools/signverify/
找了各種方法 , 百度谷歌搜索了一下午 , 發(fā)現(xiàn)很多同行都遇到了一樣的問題 , 得到了以下解決方法
1、確認(rèn)公眾號的appSecret和商戶號的API密鑰沒有搞混。
2、重置商戶API密鑰。(本人親測是這樣解決了問題,tx真是個坑,我嚴(yán)重鄙視。)
3、確認(rèn)公眾號授權(quán)的域名和目錄是正確的。
4、參數(shù)body含有中文字符,改換英文簽名成功,那么就轉(zhuǎn)換字符編碼試試。
$dat = iconv('UTF-8','ISO8859-1',array2xml($package));
然而 , 并沒有解決問題 , 先吐槽一下微信支付這個巨坑 , 不是說它的api水平有多爛,但你至少說明白一點啊,每次看微信api都頭痛。比阿里差的不是一個數(shù)量級的。調(diào)阿里api都是,優(yōu)雅、簡單、舒服,效率高。調(diào)微信api的感覺是,憤怒、頭痛、惡心,想打人。
后續(xù)問題解決后會在該隨筆追加解決方案 .
追加: 問題已解決 , 重置了三次商戶密鑰.(....................)
在解決過程中又發(fā)現(xiàn)了一個較大的坑 , 在二維碼支付模式中 , 本來的設(shè)計是生成二維碼之后展示到頁面上讓用戶去長按識別來支付 , 但是今天發(fā)現(xiàn)微信關(guān)閉了這個功能 , 只能是用另外一臺手機(jī)去掃碼支付 .
由于用戶體驗及其不好 , 后改用公眾號支付模式 .
總結(jié)
以上所述是小編給大家介紹的微信支付--簽名錯誤問題的解決方法,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!
您可能感興趣的文章:- C# 微信支付 wx.chooseWXPay 簽名錯誤的解決方法
- 使用weixin-java-tools完成微信授權(quán)登錄、微信支付的示例
- php對微信支付回調(diào)處理的方法
- JS實現(xiàn)仿微信支付彈窗功能
- php實現(xiàn)微信支付之企業(yè)付款
- Android微信支付獲取二次簽名Sign的方法