objective-c - 如何创建和签署亚马逊 mws 请求字符串
问题描述
我必须创建与 iOS 应用程序的亚马逊 MWS 集成问题是我无法创建和签署请求请帮助我提供一些代码示例,如果你有的话会非常好。
我尝试过查看文档并创建字符串,但它说签名无效
解决方案
首先,您必须包含 Crypto 定义以消化您的请求
#import <CommonCrypto/CommonHMAC.h>
通过使用此功能,您可以消化您的请求。密钥是亚马逊提供的秘钥
NSString *calcSignature(NSString *aString, NSString *key)
{
const char *cKey = [key cStringUsingEncoding: NSUTF8StringEncoding];
const char *cData = [aString cStringUsingEncoding: NSUTF8StringEncoding];
// Calculate SHA256-signature
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC
length:sizeof(cHMAC)];
// return Base64 encoded
return [HMAC base64EncodedStringWithOptions:0];
}
消化以下示例 requestString
POST /Feeds/2009-01-01 HTTP/1.1
Content-Type: x-www-form-urlencoded
Host: mws.amazonservices.com
User-Agent: <Your User Agent Header>
AWSAccessKeyId=0PExampleR2
&Action=CancelFeedSubmissions
&FeedSubmissionIdList.Id.1=1058369303
&FeedTypeList.Type.1=_POST_PRODUCT_DATA_
&FeedTypeList.Type.2=_POST_PRODUCT_PRICING_DATA_
&MWSAuthToken=amzn.mws.4ea38b7b-f563-7709-4bae-87aeaEXAMPLE
&Marketplace=ATExampleER
&SellerId=A1ExampleE6
&SignatureMethod=HmacSHA256
&SignatureVersion=2
&Timestamp=2009-02-04T17%3A34%3A14.203Z
&Version=2009-01-01
现在您可以计算签名
NSString *signatureString = calcSignature(requestString, amazonSecretKey);
这些签名附加到请求中,您应该得到结果。如果您使用 Amazon Scratchpad 发送正确的签名,您可以进行一些测试并控制。
推荐阅读
- nginx - 使用 Nginx 的 Canary 部署 - 流量未路由到 Canary 服务器
- ruby-on-rails - 如何选择尚未保存在 Rails 中的关联记录?
- sql - 在子过程中创建临时表
- python - 为什么小于运算符不能在这两个字符串之间工作?
- ruby - 如果用户输入无效输入,程序不应崩溃并再次提示用户 - 重构 cli 项目
- javascript - 以嵌套形式提取反应挂钩时挂钩调用无效
- javascript - 无法读取未定义的属性“fetchBans”
- javascript - 为什么当我删除回车时我的 javascript 不起作用?
- php - 自定义/扩展 laravel 分页方法
- python - ValueError:输入数组应具有与目标数组相同数量的样本。找到 1280 个输入样本和 320 个目标样本