微信支付--簽名錯誤問題


最近在做微信支付,調用微信的統一下單支付接口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真是個坑,我嚴重鄙視。)

  3、確認公眾號授權的域名和目錄是正確的。
  4、參數body含有中文字符,改換英文簽名成功,那么就轉換 字符編碼試試。
    $dat = iconv('UTF-8','ISO8859-1',array2xml($package));
 
然而 , 並沒有解決問題 , 先吐槽一下微信支付這個巨坑 , 不是說它的api水平有多爛,但你至少說明白一點啊,每次看微信api都頭痛。比阿里差的不是一個數量級的。調阿里api都是,優雅、簡單、舒服,效率高。調微信api的感覺是,憤怒、頭痛、惡心,想打人。
 
后續問題解決后會在該隨筆追加解決方案 .
 
追加: 問題已解決 , 重置了三次商戶密鑰.(....................)
 
在解決過程中又發現了一個較大的坑 , 在二維碼支付模式中 , 本來的設計是生成二維碼之后展示到頁面上讓用戶去長按識別來支付 , 但是今天發現微信關閉了這個功能 , 只能是用另外一台手機去掃碼支付 .
由於用戶體驗及其不好 , 后改用公眾號支付模式 .


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM