我試圖複製生成簽名哈希與API通信的方法,有麻煩重現基於c#方法示例的PHP中的相同示例結果我被給了。試圖創建api的C#簽名哈希方法的PHP
字問題的版本我試圖做的是:(從API文檔)
計算請求籤名
的請求籤名,與SHA-1散列碼的HMAC,通過按順序連接服務,方法和時間戳參數的值,然後使用祕密訪問密鑰作爲「密鑰」計算符合RFC 2104的HMAC來計算。所計算的HMAC值必須Base64編碼
測試數據:
service_name = 「Zoyto Fulfillment Service」
timestamp: 「2010-07-21T04:33:55Z」
api_secret = 「2c0774063f4bb1a10ca39ba6c806636a57d78dc3」
method = 「getOrderStatus」
Result should be:
signature: 「mlePFDcrTAxd+PWA6hOGGtvu2Zc=」
我有交流#方法的下面的代碼例如用於創建簽名散列作出API調用:
public string createSignature(string api_secret, string method, string timestamp, string service_name) {
DateTime currentTime = DateTime.UtcNow; string toSign = service_name.ToLower() + method.ToLower() + timestamp.ToLower();
byte[] toSignBytes = Encoding.UTF8.GetBytes(toSign); byte[] secretBytes = Encoding.UTF8.GetBytes(api_secret);
HMAC signer = new HMACSHA1(secretBytes byte[] sigBytes = signer.ComputeHash(toSignBytes);
string signature = Convert.ToBase64String(sigBytes);
return signature;
}
目前,我的PHP方法是這樣的:
$testSecret = '2c0774063f4bb1a10ca39ba6c806636a57d78dc3';
$testSvc = 'Zoyto Fulfillment Service';
$testStamp = strtotime('2010-07-21 04:33:55');
$method = 'getOrderStatus';
$sig = utf8_encode($testSvc.$method.$testStamp);
$hash = hash_hmac("sha1", $sig, $testSecret, true);
$sig = base64_encode($hash);
return $sig;
//returns:
//OUhgiIqxngaFm1Rquxm1lZ/3CzE=
任何幫助表示讚賞
C#代碼對第四行語法錯誤。如果您可以先解決這個問題,我可以幫助您使用PHP代碼。 –