Python 和 PHP 對騰訊雲簽名 hmac_sha256 演算法實現
開宗明義,米撲科技在使用騰訊雲的API介面簽名中,按照官方示例開發PHP、Python的介面,經常會提示簽名錯誤
123456789 | { "Response" : { "Error" : { "Code" : "InvalidParameter.SignatureFailure" , "Message" : "The provided credentials could not be validated. Please check your signature is correct." }, "RequestId" : "1ee6ae98-a971-ad9f-4ecc-abcd69ea1234" } } |
本文原文,請參見米撲部落格:
經過多次嘗試探究,發現原因有二:
1)騰訊雲官方示例不嚴謹,沒有urlencode() 或 urllib.quote() 編碼導致提示簽名錯誤
2)騰訊官方只提供了PHP示例,沒有提供Python示例,兩者簽名函式有一些細節
直接給出乾貨,下面示例是 米撲科技 封裝好的騰訊雲簽名函式,以饗讀者。
PHP 簽名示例
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 | /** * 簽名並獲取URL結果,json格式返回 * * 1. 查詢彈性IP列表, DescribeAddresses * 2. 解綁彈性IP, DisassociateAddress * 3. 釋放彈性IP, ReleaseAddresses * 4. 公網IP轉彈性IP, TransformAddress * * @param string $req_action : DescribeAddresses, DisassociateAddress, ReleaseAddresses, TransformAddress * @param string $params : 以 & 開頭, 如 &xxx=yyy */ function qcloud_eip_sign( $req_action = 'DescribeAddresses' , $req_region = 'ap-beijing' , $req_extra_params = '' , $retry_NUM =3) { global $QCloud_SecretId ; global $QCloud_SecretKey ; // $req_action='DescribeAddresses' // $req_region = 'ap-beijing'; // ap-guangzhou $req_method = 'GET' ; // GET POST $req_api = 'eip.api.qcloud.com/v2/index.php' ; $req_version = '2017-03-12' ; $req_timestamp = strtotime ( date ( 'YmdHis' )); // 1402992826 $req_nonce = rand(1000, 1000000); // 隨機正整數
|