jueves, 29 de septiembre de 2016

iOS: Generate amazon signature

NSMutableArray* array = @[ [NSString stringWithFormat:@"AWSAccessKeyId=%@", self.credentials[@"AWSAccessKeyId"]],
                                   [NSString stringWithFormat:@"AssociateTag=%@", self.credentials[@"AssociateTag"]],
                                   @"Availability=Available",
                                   [NSString stringWithFormat:@"Keywords=%@", [string urlencode]],
                                   @"Operation=ItemSearch",
                                   @"ResponseGroup=Medium",
                                   // [NSString stringWithFormat:@"SearchIndex=%@", category],
                                   @"SearchIndex=All",
                                   @"Service=AWSECommerceService-Y",
                                   [NSString stringWithFormat:@"Timestamp=%@", [[DateHelper UTFStringFromDate:[NSDate date]] urlencode]]
                                   ].mutableCopy;

if (page != 0) {
    [array insertObject:[NSString stringWithFormat:@"ItemPage=%ld", page] atIndex:3];
}
       
[array addObject:[NSString stringWithFormat:@"Signature=%@", [self _getSignatureFromParams:array]]];

...

- (NSString*)_getSignatureFromParams:(NSArray*)params
{
    NSString* paramsString = [params componentsJoinedByString:@"&"];
   
    NSString* string = [NSString stringWithFormat:@"GET\nwebservices.amazon.com\n/onca/xml\n%@", paramsString];
   
    NSData *keyData = // AWSSecretKey"
    NSData *paramData = [string dataUsingEncoding:NSUTF8StringEncoding];
    NSMutableData* hash = [NSMutableData dataWithLength:CC_SHA256_DIGEST_LENGTH ];
    CCHmac(kCCHmacAlgSHA256, keyData.bytes, keyData.length, paramData.bytes, paramData.length, hash.mutableBytes);
   
    return [[hash base64EncodedStringWithOptions:0] urlencode];

}

No hay comentarios:

Publicar un comentario