首页 > 解决方案 > 如何创建和签署亚马逊 mws 请求字符串

问题描述

我必须创建与 iOS 应用程序的亚马逊 MWS 集成问题是我无法创建和签署请求请帮助我提供一些代码示例,如果你有的话会非常好。

我尝试过查看文档并创建字符串,但它说签名无效

标签: objective-c

解决方案


首先,您必须包含 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 发送正确的签名,您可以进行一些测试并控制。


推荐阅读