iOS - 需求 - 将参数进行字典排序组成字符串(待签名字符串)
2015-06-03 10:47
357 查看
将所有POST参数(sign除外)进行字典排序,组成字符串:
比如:(根据首字母排序,参数间用&相连,字典转成json格式)
解决办法:
1.首先传入的是参数字典.
2.获取字典的所有key
3.创建一个可变字符串
4.将key和value对应用’=’相连起来
5.其中value是字典的话,就转成json格式,再相连
6.如果有空格,换行等等的格式字符,就将其替换掉
示例:
上述代码中,timestamp是最后的一个key,是不用用&相连的,所以拿出来单独拼接.biz_content是一个字典,所以也单独进行判断,转成json格式进行拼接,这样就完成待签名字符串的整理了.
比如:(根据首字母排序,参数间用&相连,字典转成json格式)
[code]ap_id=20140723007148&biz_conte={"outTradeNo":201503201",toalAmount": "8.8",discountAmount":8.",unDiscountAmount":80",subject": 扫码支付",godsDetail": [{"godsI": "aple-01",godsName":ipad",godsCategory":78230",price":8.8",quantiy":1"}],"operatorId": "op01",storeId":pudong01",terminalId":t_01",timeExpire": "20150329101"}&charset=utf-8&method=alipay.trade.precate×tamp=2014-0724 03:750
解决办法:
1.首先传入的是参数字典.
2.获取字典的所有key
3.创建一个可变字符串
4.将key和value对应用’=’相连起来
5.其中value是字典的话,就转成json格式,再相连
6.如果有空格,换行等等的格式字符,就将其替换掉
示例:
[code]NSMutableString *contentString =[NSMutableString string]; NSDictionary* dict = [self convertToDict]; NSArray *keys = [dict allKeys]; //按字母顺序排序 NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) { return [obj1 compare:obj2 options:NSNumericSearch]; }]; //拼接字符串 for (NSString *categoryId in sortedArray) { if (![categoryId isEqualToString:@"sign"] && ![categoryId isEqualToString:@"timestamp"]){ if([categoryId isEqualToString:@"biz_content"]){ NSError *error = nil; NSDictionary* bizDict = [dict objectForKey:@"biz_content"]; NSData *jsonData = [NSJSONSerialization dataWithJSONObject:bizDict options:NSJSONWritingPrettyPrinted error: &error]; NSMutableData *tempJsonData = [NSMutableData dataWithData:jsonData]; NSString* jsonString1 = [[NSString alloc] initWithData:tempJsonData encoding:NSUTF8StringEncoding]; NSString *jsonString2 = [jsonString1 stringByReplacingOccurrencesOfString:@" : " withString:@":"]; [contentString appendFormat:@"biz_content=%@&",jsonString2]; }else{ [contentString appendFormat:@"%@=%@&", categoryId, [dict valueForKey:categoryId]]; } } } //添加key字段 [contentString appendFormat:@"timestamp=%@", [dict objectForKey:@"timestamp"]]; NSString *strUrl1 = [contentString stringByReplacingOccurrencesOfString:@" " withString:@""]; // NSString *strUrl2 = [strUrl1 stringByReplacingOccurrencesOfString:@"\t" withString:@""]; NSString *strUrl3 = [strUrl1 stringByReplacingOccurrencesOfString:@"\n" withString:@""];
上述代码中,timestamp是最后的一个key,是不用用&相连的,所以拿出来单独拼接.biz_content是一个字典,所以也单独进行判断,转成json格式进行拼接,这样就完成待签名字符串的整理了.
相关文章推荐
- 使用Xcode和Instruments调试解决iOS内存泄露
- iOS:KVO的概述与使用
- iOS容易造成循环引用的三种场景之Block以及对应的使用方法(二)
- Autolayout及VFL经验分享【更新ing】
- iOS 彻底学会使用delegate
- iOS NSNotification的使用
- ios之下拉刷新上拉加载更多
- iOS开发系列--音频播放、录音、视频播放、拍照、视频录制
- iOS推送生成服务器端p12文件
- iOS 内存管理笔记
- iOS-cornerstone破解版
- iOS开发 LaunchImage和LaunchScreen.xib
- git - 简易指南
- git - 简易指南
- imageNamed 与 imageWithContentsOfFile的区别
- imageNamed 与 imageWithContentsOfFile的区别
- 详解OS X和iOS图像处理框架Core Image
- 【iOS】学习材料
- ios image filter
- GitHub 上都有哪些值得关注学习的 iOS 开源项目?