url增加簽名驗證防竄改


學習給API加上簽名加密驗證功能,摘抄了騰訊支付的說明書文檔

————————————————————————————————————————————————————————————————

為了提高傳輸過程參數的防篡改性,必須使用簽名參數sig。

  1. 簽名參數sig生成的步驟

第1步: 把需要包含在簽名中的參數按key升序排序。 具體需要包含哪些參數,見各接口參數說明中關於sig的描述。
第2步: 把排序后的key和它對應的value拼接成一個字符串。
第3步: 把分配給商家的appkey拼接在第2步得到的字符串后面。
第4步: 計算第3步字符串的md5值,使用md5值的16進制字符串作為sig的內容。
2. 示例
原始請求信息
應用ID:appid=600
商戶appkey=4dd1af55f7f140ac8827518472af3d87
原始請求:
http://openapi.pengyou.qq.com/v2/r/qzone/qz_get_balance?
appid=600&
appkey=HWAffC6MK1DQ5ztm&
appname=app600&
device=0&
openid=00000000000000000000000000000009&
openkey=1111111111446414117133E71111111111C50AE4A7111111&
ts=1300444184&
userip=112.90.139.30
查詢時需要包含在簽名里的參數:appid,appkey,appname,openid,openkey,ts。
下面開始生成sig:
第1步: 將參數按key升序排序
得到:appid,appkey,appname,openid,openkey,ts

第2步: 把所有鍵值對字符串拼接成一個字符串得到:
appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184

第3步: 把分配給商家的appkey拼接在第2步驟得到的字符串后面得到:
appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184
HWAffC6MK1DQ5ztm

第4步: 計算第3步驟字符串的md5值
md5
(appid600appkeyHWAffC6MK1DQ5ztmappnameapp600openid00000000000000000000000000000009
openkey1111111111446414117133E71111111111C50AE4A7111111ts1300444184
HWAffC6MK1DQ5ztm)
得到:
sig=eddf71eaa362748beda2cca96a4786ff

加簽名后的請求串
http://openapi.pengyou.qq.com/v2/r/qzone/qz_get_balance?
appid=600&
appkey=HWAffC6MK1DQ5ztm&
appname=app600&
device=0&
openid=00000000000000000000000000000009&
openkey=1111111111446414117133E71111111111C50AE4A7111111&
ts=1300444184&
userip=112.90.139.30&
sig=4d7c026abf32d84cc8afb9f36d365e28

FAQ

  1. 為什么總是返回“1000:請求參數數錯誤”?

  2. 生成sig的時候:
    (1)第一步中,把device也作為簽名的因子了。注意sig生成時具體需要包含哪些參數,見各接口參數說明中關於sig的描述。
    (2)第二步中,拼接字符串時,沒有將key排序后,再進行key-value字符串拼接。
    (3)第二步中,拼接字符串時,把‘=’,‘&’也放簽名原串里面了。注意只拼接key和它對應的value。
    建議開發者按照API接口示例中的HTTP請求源串自行生成sig,然后和示例中的sig進行比對,如果不同,說明生成過程有誤,請按步驟仔細檢查,重新生成。

  3. 測試環境和正式環境下OpenAPI的IP地址是不一樣的,測試聯調的IP是119.147.19.43,不要聯調到正式環境上。

  4. 如果上述原因都排除,還是出現請求參數錯誤,請聯系騰訊社區開放平台服務團隊的支付API技術支持人員,提供同一次請求里面的信息:
    (1)HTTP請求源串。
    (2)實現簽名時,做md5前的原串和md5后的簽名。

  5. 如果參數中包含URI非法字符,是應該先做urlencode,還是先生成簽名?
    服務后台會先對請求包進行URL解碼,再對解碼后的sig進行校驗,因此請先按照上面的步驟生成sig簽名值,然后再對請求進行urlencode。


免責聲明!

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



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