视频一区二区三区自拍_千金肉奴隷1985未删减版在线观看_国产成人黄色视频在线播放_少女免费播放片高清在线观看_国产精品v欧美精品v

簽名相關QA

最新更新時間:2020.11.02 版本說明


Q:為什么請求返回401 Unauthorized?

A:請根據報文中的message信息,在下表中找到錯誤的原因和對應的解決方案。


錯誤描述 原因 解決方案
商戶未設置APIv3密鑰。 商戶未設置APIv3密鑰 請登陸商戶平臺設置APIv3密鑰。
商戶未申請過證書。 商戶未申請過API證書 請參考什么是API證書?如何獲取API證書?
商戶證書序列號有誤。 使用了錯誤的商戶證書,或者使用了已經失效的歷史的商戶證書,或者獲取的商戶證書序列號有誤 請檢查商戶證書,可登陸商戶平臺查看正確的證書序列號。
商戶證書已過期。 使用了已經過期的商戶證書和私鑰 請到商戶平臺進行續(xù)期,使用續(xù)期后的新證書
商戶證書已作廢。 使用了商戶主動作廢的商戶證書和私鑰 請到商戶平臺重新申請證書后,使用新申請的證書
錯誤的簽名,導致驗簽失敗。 使用了錯誤的商戶私鑰,或簽名串構造不正確 請見下一問題
Http頭Authorization值格式錯誤。 缺少qian頭,或其格式不正確 請檢查上送的Authorization
Http頭Authorization認證類型不正確。 不支持Authorization中聲明的簽名算法 請檢查上送的Authorization,目前僅支持WECHATPAY2-SHA256-RSA2048
Http頭Authorization中的timestamp與發(fā)起請求的時間不得超過5分鐘。 Authorization頭中的時間戳timestamp所示時間距離當前時間超過5分鐘 請檢查系統時間是否準確,或者獲取時間的邏輯是否正確
已更換證書,請使用新證書。 商戶主動重新申請了商戶API證書 請使用新申請的商戶API證書

Q:如何定位"錯誤的簽名,導致驗簽失敗 “的錯誤?

A:為了方便開發(fā)者定位,我們對于驗簽失敗,會在應答的錯誤詳情timestampdetail中加入驗簽信息。驗簽信息是我們根據商戶的HTTP請求構造簽名串的各種信息。


    ● method,HTTP請求方法

    ● url,請求的URL

    ● truncated_sign_message,微信支付驗簽時使用的簽名串(換行符顯示成\n)。為了方便查看,我們對最后的請求報文主體做了截斷

    ● sign_message_length,微信支付驗簽時使用的簽名串的字節(jié)長度



{
    "code": "SIGN_ERROR",
    "message": "錯誤的簽名,驗簽失敗",
    "detail": {
        "field": "signature",
        "issue": "sign not match",
        "location": "authorization",
        "sign_information": {
            "method": "GET",
            "url": "/payscore/user-service-state?service_id=500001&appid=wxeaf7bf1de621b0c2&openid=oWm9Z5JQwgV7BKAQUeKsUMVSjTpQ",
            "truncated_sign_message": "GET\n/payscore/user-service-state?service_id=500001&appid=wxeaf7bf1de621b0c2&openid=oWm9Z5JQwgV7BKAQUeKsUMVSjTpQ\n1559194069\n18a427e78d2344e1a71156a2690cc4d6\n\n",
            "sign_message_length": 157
        }
    }
}
                                

建議開發(fā)者在程序中將自己組裝的簽名串以及簽名串的字節(jié)長度在調試信息中輸出,跟微信支付返回的驗簽信息進行仔細對比,排查以下幾種常見的錯誤:


簽名串的最后一行沒有附加換行符

如果請求報文主體為空(如GET請求),最后一行應為一個換行符。


簽名串中的參數,跟實際請求的參數不一致

    ● 手工拼接的URL,和實際請求發(fā)送的不一致。我們建議的實現是,使用HTTP庫構造請求對象或者URL對象,再使用相應的方法取得URL。

    ● 簽名和設置Authorization頭時,使用了前后生成的兩個時間戳。

    ● 簽名和設置Authorization頭時,使用了前后生成的兩個不同的隨機串。

    ● 簽名和請求時,使用了前后兩次序列化的JSON串作為請求主體。


? 商戶的開發(fā)者可以將關鍵參數生成并保存在變量中,簽名和發(fā)送請求時統一使用,避免前后生成的信息不一致。


文本的編碼不一致

生成簽名串使用了非UTF-8編碼或者未設置具體編碼。


使用了錯誤的商戶私鑰

開發(fā)者可以使用如下的openssl命令檢查私鑰和商戶證書中的modulus(p、q兩個大素數的乘積)是否一致。如果兩者一致,那么私鑰和證書是成對的。



$ openssl x509 -noout -modulus -in 1900009191_20180326_cert.pem
Modulus=C6D43C87B991...
$ openssl rsa -noout -modulus -in 1900009191_20180326_key.pem
Modulus=C6D43C87B991...
                                

1、modulus長度為2048位,輸出為512個字節(jié)。

2、檢查密鑰匹配前,請先查看證書序列號,檢查是否是正確的商戶證書。

Q:為什么微信支付的回調缺少簽名的幾個HTTP頭?

A:微信支付的回調,在HTTP頭部包含了以下四個HTTP頭:

    ● Wechatpay-Timestamp

    ● Wechatpay-Nonce

    ● Wechatpay-Singature

    ● Wechatpay-Serial


某些代理服務器或CDN服務提供商,轉發(fā)時會“過濾“微信支付擴展的HTTP頭,會導致驗簽的應用層無法取到微信支付的簽名信息。遇到這種情況時,建議商戶調整代理服務器配置,或者通過直連的方式接受微信支付的回調。



版本說明

關閉
V1.0
2020.11.02
1. 簽名相關QA上線

技術咨詢

文檔反饋