#import "GTMBase64.h"
#import "MD5.h"
#include <CommonCrypto/CommonDigest.h>
#include <CommonCrypto/CommonHMAC.h>
- -(void)distinguishSence:(NSString *)type
image_url :(NSString *)image_url
content :(NSString *)content
Success:(TTIClientManagerBlock)success
failuer:(TTIClientManagerBlock)failure {
//以下为阿里云api签名
NSString *inPutText = [NSString stringWithFormat:@"{\"type\": \"1\", \"content\":\"%@\"}",content];
//GTM时间
NSDate *date = [NSDate date];
NSTimeZone *tzGMT = [NSTimeZone timeZoneWithName:@"GMT"];
[NSTimeZone setDefaultTimeZone:tzGMT];
NSDateFormatter *iosDateFormater=[[NSDateFormatter alloc]init];
iosDateFormater.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'";
iosDateFormater.locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
NSString *dateGMT = [iosDateFormater stringFromDate:date];
NSString *path = [[NSURL URLWithString:@"https://dtplus-cn-shanghai.data.aliyuncs.com/image/scene"] path];
NSString *url = @"https://dtplus-cn-shanghai.data.aliyuncs.com/image/scene";
NSString *accept = @"application/json";
NSString *content_type = @"application/json";
NSString *AccessKeyId = @"";
NSString *AccessKeySecret = @"xxx";
const char *cStr = [inPutText UTF8String];
unsigned char digest[CC_MD5_DIGEST_LENGTH];
CC_MD5( cStr, (CC_LONG)strlen(cStr), digest );
NSData * base64 = [[NSData alloc]initWithBytes:digest length:CC_MD5_DIGEST_LENGTH];
base64 = [GTMBase64 encodeData:base64];
NSString *md5Body = [[NSString alloc] initWithData:base64 encoding:NSUTF8StringEncoding];
NSString *stringToSign = [NSString stringWithFormat:@"POST\n%@\n%@\n%@\n%@\n%@", accept, md5Body, content_type, dateGMT, path];
NSString *signature = [self HmacSha1WithSecret:AccessKeySecret data:stringToSign];
NSString *authHeader = [NSString stringWithFormat:@"Dataplus %@:%@", AccessKeyId, signature];
NSURL *nsurl = [NSURL URLWithString:url];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:nsurl];
request.HTTPMethod = @"POST";
[request setValue:@"application/json" forHTTPHeaderField:@"content-type"];
[request setValue:@"application/json" forHTTPHeaderField:@"accept"];
[request setValue:dateGMT forHTTPHeaderField:@"date"];
[request setValue:authHeader forHTTPHeaderField:@"Authorization"];
[request setValue:@"keep-alive" forHTTPHeaderField:@"Connection"];
request.HTTPBody = [inPutText dataUsingEncoding:NSUTF8StringEncoding];
NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
if (error) { //请求失败
DLOG(@"请求失败");
failure(nil, error);
} else { //请求成功
DLOG(@"请求成功");
NSDictionary *jsonDict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];
success(nil, jsonDict);
}
}];
[dataTask resume]; //开始请求
}
- (NSString *)HmacSha1WithSecret:(NSString *)key data:(NSString *)data {
const char *cKey = [key cStringUsingEncoding:NSUTF8StringEncoding];
const char *cData = [data cStringUsingEncoding:NSUTF8StringEncoding];
unsigned char cHMAC[CC_SHA1_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA1, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMAC = [[NSData alloc] initWithBytes:cHMAC length:sizeof(cHMAC)];
NSString *hash = [HMAC base64EncodedString];
return hash;
}