我想从我的应用程序内部实现itemLookup从亚马逊的API。我已经看过早期版本的Swift的文档,但他们似乎不再工作,但我有它的工作到一定程度。亚马逊签名创建
我从Javascript移植的代码作为this post
描述这是我迄今为止:
func callAmazon(){
let amazonAccessID = "XXXXXX"
let secretKey = "XXXXXXXXX"
let associateTag = "XXXXX"
var parameters = [String]();
let timestamp = ISO8601FormatStringFromDate(NSDate())
parameters.append("AWSAccessKeyId=" + amazonAccessID);
parameters.append("Keywords=" + "boots");
parameters.append("Operation=ItemSearch");
parameters.append("Service=AWSECommerceService");
parameters.append("Timestamp=" + (timestamp as String));
parameters.append("Version=2013-08-01");
parameters.append("AssociateTag=" + associateTag);
parameters.sortInPlace {$0 < $1}
let paramString = parameters.joinWithSeparator("&")
let method = NSMutableURLRequest().HTTPMethod
let signingKey = "\(method)\n" + "webservices.amazon.com\n" + "/onca/xml\n" + paramString
let signature = sha256(signingKey, secretKey: secretKey)
let finalString = signature.encodeURIComponent()
let amazonUrl = "http://webservices.amazon.com/onca/xml?" + paramString + "&Signature=" + finalString!
print("AmazonURL!!! : ", amazonUrl)
Alamofire.request(.GET, amazonUrl, parameters: nil).response {
(request, response, data, error) in
let xml = SHXMLParser().parseData(data!)
print(xml)// output the FilmID element.
}
}
func sha256(StringToSign : String, secretKey : String) -> String{
var hex = StringToSign.hmac(.SHA256, key: secretKey)
let hexData = hex.dataUsingEncoding(NSUTF8StringEncoding)
let finalString = hexData?.base64EncodedStringWithOptions(.Encoding64CharacterLineLength)
return finalString!
}
这是输出。
[ItemSearchErrorResponse: {
Error = {
Code = SignatureDoesNotMatch;
Message = "The request signature we calculated does not match the signature you provided. Check your AWS Secret Access Key and signing method. Consult the service documentation for details.";
};
RequestId = "3d560ce4-a862-4792-953d-c0119cd0478b";
xmlns = "http://ecs.amazonaws.com/doc/2013-08-01/";
}]
因此,我如何创建我的签名显然有问题,任何人都可以引导我在正确的方向?
你好贾里德,请张贴正确的答案,因为我也面临同样的问题。 –
这是这个问题的解决方案 [amazon-signature-creation-solution-in-swift-3](https://stackoverflow.com/questions/46400364/amazon-signature-creation-solution-in-swift-3 ) –