1.V3簽名錯(cuò)誤
1.1服務(wù)端簽名錯(cuò)誤(如下單) 參數(shù)錯(cuò)誤和方式錯(cuò)誤無(wú)先后順序
1.1.1 簽名方式錯(cuò)誤
當(dāng)簽名參數(shù)無(wú)誤時(shí),就是簽名的方式有問(wèn)題,可以使用以下方式檢查
使用官方驗(yàn)簽工具進(jìn)行驗(yàn)簽,地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/download/Product_5.zip
明文填寫(xiě)方式參考官方簽名生成文檔 ,地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_0.shtml
注意紅色方框內(nèi)容,【\n】在驗(yàn)簽工具明文中是換行的意思,不是字符串,注意一共有5個(gè),所以POST請(qǐng)求在驗(yàn)簽工具里面最后一行需要換一行,GET需要換兩行,并且GET請(qǐng)求需要在URL末尾附加有’?'和對(duì)應(yīng)的查詢字符串
POST請(qǐng)求可參考以下截圖
GET請(qǐng)求可參考以下截圖,注意【?】為英文狀態(tài)下的?
1.1.2 簽名參數(shù)錯(cuò)誤(含私鑰等參數(shù)) 參數(shù)錯(cuò)誤和方式錯(cuò)誤無(wú)先后順序
當(dāng)簽名方式無(wú)誤時(shí),就是簽名的參數(shù)有問(wèn)題,可以使用以下方式檢查
使用官方postman腳本進(jìn)行測(cè)試,地址:https://github.com/wechatpay-apiv3/wechatpay-postman-script
注意:需要先下載腳本后導(dǎo)入postman里進(jìn)行配置
嚴(yán)格按照官方步驟進(jìn)行配置,注意這里的配置,Authorization的值就是{{auth}},不需要自己生成簽名
配置好之后先測(cè)試下載證書(shū)(官方已經(jīng)配置好,直接可以調(diào)用)如果成功下載證書(shū),說(shuō)明私鑰、商戶號(hào)、證書(shū)序列號(hào)是沒(méi)有問(wèn)題的,根據(jù)請(qǐng)求方式選擇【證書(shū)下載】或者【發(fā)放指定批次的代金券】替換一下參數(shù)和請(qǐng)求URL即可測(cè)試出錯(cuò)的接口
1.1.3 Authorization頭部值錯(cuò)誤
1.商戶號(hào)mchid 與使用私鑰不匹配或不存在(注意:千萬(wàn)不可以有空格)
2.證書(shū)序列號(hào)serial_no與當(dāng)前私鑰對(duì)應(yīng)在商戶平臺(tái)查看的證書(shū)序列號(hào)不匹配(注意:如果不匹配可能會(huì)導(dǎo)致系統(tǒng)繁忙,請(qǐng)稍后重試)
3.隨機(jī)字符串nonce_str與組成簽名的明文中的隨機(jī)字符串一致(注意:千萬(wàn)不可以有空格)
4.時(shí)間戳timestamp與組成簽名的明文中的時(shí)間戳一致(注意:千萬(wàn)不可以有空格)
5.組成請(qǐng)求頭時(shí)是一行數(shù)據(jù),WECHATPAY2-SHA256-RSA2048 mchid=“1900009191”【中間是一個(gè)空格,不是換行】
6.無(wú)論是下單還是喚起,如果是服務(wù)商模式,均使用服務(wù)商的參數(shù)(私鑰、商戶號(hào)、證書(shū)序列號(hào))喚起和下單一定需要使用相同的私鑰進(jìn)行簽名
1.2喚起簽名錯(cuò)誤
1.2.1 簽名參數(shù)錯(cuò)誤
1.嚴(yán)格按照文檔需要的參數(shù)進(jìn)行簽名,如小程序喚起支付
注意參與簽名時(shí)不要有空格
2.私鑰文件需要和下單時(shí)一樣,如果是服務(wù)商模式,均使用服務(wù)商的
3.喚起的參數(shù)字段名大小寫(xiě)必須與文檔中一致,注意簽名方式為RSA
4.測(cè)試時(shí)以上均無(wú)誤,則把前端參數(shù)寫(xiě)死后測(cè)試
1.2.2 簽名方式錯(cuò)誤(前后端簽名方式需一致)
1.簽名方式按照文檔中的方式進(jìn)行簽名,可用簽名驗(yàn)證工具進(jìn)行驗(yàn)簽,明文排放規(guī)則如下
這里的【\n】在驗(yàn)簽工具明文中是換行的意思,不是字符串注意一共有4個(gè),明文最后一行需換行
2.V2簽名錯(cuò)誤
2.1服務(wù)端簽名錯(cuò)誤(如下單)
使用官方簽名工具驗(yàn)證簽名,復(fù)制請(qǐng)求的XML請(qǐng)求串,使用api秘鑰驗(yàn)簽
簽名方式按照加密的方式驗(yàn)證,例如MD5
點(diǎn)擊校驗(yàn)簽名,就會(huì)得到驗(yàn)簽的結(jié)果
使用官方簽名工具生成簽名,使用postman測(cè)試,無(wú)需任何配置,復(fù)制粘貼請(qǐng)求地址和請(qǐng)求參數(shù),就可以校驗(yàn)參數(shù)和秘鑰是否正確
注:需要使用證書(shū)的接口,可以自行在網(wǎng)上查詢?nèi)绾螌?dǎo)入證書(shū)
地址:https://pay.weixin.qq.com/wiki/doc/api/micropay.php?chapter=20_1
注意簽名方式和字段簽名方式需要保持一致,填寫(xiě)時(shí)不要有空格,注意大小寫(xiě)需要與文檔一致
如果使用驗(yàn)簽工具生成簽名后請(qǐng)求接口依然提示簽名錯(cuò)誤,那就是API秘鑰有問(wèn)題,登錄商戶平臺(tái)重置秘鑰后再重試
秘鑰key設(shè)置方式:https://kf.qq.com/faq/161220VnAvUb161220NJRbiM.html
如果是服務(wù)商模式,均使用服務(wù)商的秘鑰
2.2喚起簽名錯(cuò)誤(前后端簽名方式需一致)
喚起支付時(shí)需要按照文檔要求生成簽名,不是用下單成功后返回的簽名,注意簽名的參數(shù)大小寫(xiě)需要與文檔一致
可以使用驗(yàn)簽工具生成簽名值寫(xiě)死在前端進(jìn)行測(cè)試,簽名方式及秘鑰key需要下單時(shí)一致
喚起時(shí)的簽名錯(cuò)誤可能有:
1.如參與簽名字段的大小寫(xiě)或者不是文檔規(guī)定使用的參數(shù)(有缺少或有多余的參數(shù))
2.生成簽名的秘鑰key錯(cuò)誤,注意一點(diǎn)是在商戶平臺(tái)設(shè)置的api秘鑰,設(shè)置地址:https://kf.qq.com/faq/161220VnAvUb161220NJRbiM.html
服務(wù)商模式下單和喚起都需要使用服務(wù)商的秘鑰
3.前后端交互問(wèn)題,可能前端傳遞的參數(shù)為空或錯(cuò)誤
4.注意喚起的方法里的字段需要與文檔中一致,不可以缺少或者多余
字段注意不要有空格,需要真實(shí)參數(shù)【appId必須是當(dāng)前喚起主體的appId,例如小程序就必須是當(dāng)前喚起支付的小程序appId,且和下單時(shí)的appId一致】
3.V3驗(yàn)證簽名錯(cuò)誤
在代碼中驗(yàn)簽失敗的時(shí)候,可以使用官方驗(yàn)簽工具進(jìn)行驗(yàn)簽,下載地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/download/Product_5.zip
驗(yàn)簽是需要使用平臺(tái)證書(shū),不是使用商戶證書(shū),平臺(tái)證書(shū)接口文檔:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay5_1.shtml
獲取到平臺(tái)證書(shū)后需要解密,解密文檔:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_2.shtml
明文和簽名填寫(xiě)方式參考官方驗(yàn)證簽名文檔 ,文檔地址:https://pay.weixin.qq.com/wiki/doc/apiv3/wechatpay/wechatpay4_1.shtml
平臺(tái)證書(shū)、明文、簽名都得到之后,可以使用驗(yàn)簽工具進(jìn)行驗(yàn)簽,文檔中的/n換行在驗(yàn)簽工具中是需要手動(dòng)換行的,所以最后一行也是需要換行。如圖
如有其他簽名錯(cuò)誤及解決方法歡迎補(bǔ)充