iOS开发大众点评URL签名生成规则和SHA-1编码
来源:互联网 发布:tenga air tech知乎 编辑:程序博客网 时间:2024/05/09 04:37
URL签名生成规则
所有大众点评API的有效访问URL包括以下三个部分: 1. 资源访问路径,如/v1/deal/find_deals; 2. 请求参数:即API对应所需的参数名和参数值param=value,多个请求参数间用&连接 如deal_id=1-85462&appkey=00000; 3. 签名串,由签名算法生成
签名算法如下: 1. 对除appkey以外的所有请求参数进行字典升序排列; 2. 将以上排序后的参数表进行字符串连接,如key1value1key2value2key3value3…keyNvalueN; 3. 将app key作为前缀,将app secret作为后缀,对该字符串进行SHA-1计算,并转换成16进制编码; 4. 转换为全大写形式后即获得签名串
签名串获得后,将其作为sign参数附加到对应的URL中,即可正常访问API。
注意:请保证HTTP请求数据编码务必为UTF-8格式,URL也务必为UTF-8编码格式。
具体调用示例请参见https://github.com/dianping/dianping-open-sdk
+ (NSDictionary *)parseQueryString:(NSString *)query { NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithCapacity:6]; NSArray *pairs = [query componentsSeparatedByString:@"&"]; for (NSString *pair in pairs) { NSArray *elements = [pair componentsSeparatedByString:@"="]; if ([elements count] <= 1) { return nil; } NSString *key = [[elements objectAtIndex:0] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; NSString *val = [[elements objectAtIndex:1] stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding]; [dict setObject:val forKey:key]; } return dict;}+ (NSString *)serializeURL:(NSString *)baseURL params:(NSDictionary *)params{ NSURL* parsedURL = [NSURL URLWithString:[baseURL stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; NSMutableDictionary *paramsDic = [NSMutableDictionary dictionaryWithDictionary:[self parseQueryString:[parsedURL query]]]; if (params) { [paramsDic setValuesForKeysWithDictionary:params]; } NSMutableString *signString = [NSMutableString stringWithString:DIANPING_APP_KEY]; NSMutableString *paramsString = [NSMutableString stringWithFormat:@"appkey=%@", DIANPING_APP_KEY]; NSArray *sortedKeys = [[paramsDic allKeys] sortedArrayUsingSelector: @selector(compare:)]; for (NSString *key in sortedKeys) { [signString appendFormat:@"%@%@", key, [paramsDic objectForKey:key]]; [paramsString appendFormat:@"&%@=%@", key, [paramsDic objectForKey:key]]; } [signString appendString:DIANPING_APP_Secret]; unsigned char digest[CC_SHA1_DIGEST_LENGTH]; NSData *stringBytes = [signString dataUsingEncoding: NSUTF8StringEncoding]; if (CC_SHA1([stringBytes bytes], (long)[stringBytes length], digest)) { /* SHA-1 hash has been calculated and stored in 'digest'. */ NSMutableString *digestString = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH]; for (int i=0; i<CC_SHA1_DIGEST_LENGTH; i++) { unsigned char aChar = digest[i]; [digestString appendFormat:@"%02X", aChar]; } [paramsString appendFormat:@"&sign=%@", [digestString uppercaseString]]; return [NSString stringWithFormat:@"%@://%@%@?%@", [parsedURL scheme], [parsedURL host], [parsedURL path], [paramsString stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; } else { return nil; }}
直接调用这个方法即可签名成功,+ (NSString )serializeURL:(NSString )baseURL params:(NSDictionary *)params
NSString *url = [LGClient serializeURL:string params:nil];//string是大众点评的需要请求的接口
这个url就可以用来请求大众点评数据了
0 0
- iOS开发大众点评URL签名生成规则和SHA-1编码
- iOS开发--大众点评API请求签名生成代码示例
- 微信小程序开发手记和大众点评实战系列
- 大众点评部署和使用
- IOS开发:url编码和解码
- AndroidStudio签名+SHA、MD5编码
- IOS 大众点评 首页界面 仿真实现
- IOS 大众点评 团购界面实现
- IOS 大众点评 搜索界面实现
- 大众点评
- 大众点评测试开发第二大题
- iOS开发之--URL 编码
- iOS开发URL解码编码
- 大众点评实习生面试题(1)
- 大众点评2015 在线笔试(1)
- ios url 编码和解码
- ios url 编码和解码
- ios url 编码和解码
- NSDateFormatter用法
- 智慧的博弈强盗分金币
- MapReduce源码理解
- jQuery UI 使用指南
- 【计蒜客系列】挑战难题12:最后一个单词的长度
- iOS开发大众点评URL签名生成规则和SHA-1编码
- PAT 数据结构 08-排序6. PAT Judge (25)
- 在vmvare10上运行win10
- tomcat 部署多个war包项目和配置域名
- 操作系统期末总结文档和考试卷解析
- uitableview cell实现性能优化
- HTTP Header 详解
- Tower of Hanoi
- Android数据库LitePal框架学习笔记(1)---数据库的adb操作以及LitePal使用入门