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