Commit 45b84a46d9fd2e57eb3db67d3757f5607f1dc81b

Authored by 李毅
1 parent a226f5c1

update

Showing 1 changed file with 59 additions and 1 deletions
06.支付云/4.2app.md
@@ -14,11 +14,69 @@ mch_id | 商户号 | 微信商户平台中获取 @@ -14,11 +14,69 @@ mch_id | 商户号 | 微信商户平台中获取
14 key | 支付key | 微信商户平台中获取 14 key | 支付key | 微信商户平台中获取
15 API 调用文件 |API 调用安全文件 |用于退款,微信商户平台中获取。 15 API 调用文件 |API 调用安全文件 |用于退款,微信商户平台中获取。
16 16
17 -将以上信息以邮件提交到 liyi@cnlive.com ,以视讯云登录用户的邮件号发送。 17 +将以上信息以邮件提交到 liyi@cnlive.com ,以视讯云登录用户的邮发送。
18 18
19 #### demo 19 #### demo
20 ##### IOS 20 ##### IOS
  21 +1) 生成支付云预支付订单所需参数sign,将预支付订单的参数列表中必传参数(sign参数除外)和非必传参数(根据业务需求自行判断需传哪些参数)拼接成参数字典
21 22
  23 +```object-c
  24 +NSDictionary *parameter = @{ @"account":account, //和支付云对接app支付对应的命名一致 如: @"testDemoAlipay"
  25 + @"type": @"3",//以支付宝为例
  26 + @"appId":AppId, //AppID
  27 + @"out_trade_no":outTradeNo, //唯一订单号
  28 + @"total_fee":totalFee, //订单总价
  29 +@"notify_url":notifyUrl, //回调地址(用户付款通知业务系统接收地址)
  30 + @"body":body, //订单信息
  31 +@"user_id":userId, //用户id
  32 + @"attach.value":descript, //商品描述
  33 + @"attach.sid":userId, //用户id
  34 + @"attach.orderId":outTradeNo//唯一订单号
  35 + };
  36 +//将此参数字典parameter按照ASCII码值从小到大排序,并拼接AppKey如: d8da4312037a6aaff83dc8809c023fc9b06847a3f130e5得到string
  37 +//注意:所有参数的值均不能为空,若参数值为空则参数字典去除此键值对.
  38 +
  39 +NSString *string = [NSString stringWithFormat:@"%@&key=%@", [self signvalue:parameter], AppKey];
  40 +
  41 +- (NSString *)signvalue:(NSDictionary*)parameter
  42 +{
  43 + //对所有传入参数按照字段名的 ASCII 码从小到大排序
  44 + NSArray *keyArr=[parameter allKeys];
  45 + NSArray *arr = [keyArr sortedArrayUsingSelector:@selector(compare:)];
  46 + NSMutableString *string1 = [[NSMutableString alloc]init];
  47 + for (int i=0; i<arr.count; i++) {
  48 + NSString *parameterString = parameter[[arr objectAtIndex:i]];
  49 + if (parameterString.length > 0) {
  50 + [string1 appendString:[NSString stringWithFormat:@"%@=%@&",[arr objectAtIndex:i],parameter[[arr objectAtIndex:i]]]];
  51 + }
  52 + }
  53 + if (string1.length > 0) {
  54 + [string1 deleteCharactersInRange:NSMakeRange(string1.length-1, 1)];
  55 + }
  56 + return string1;
  57 +}
  58 +
  59 +```
  60 +
  61 +2)将步骤1中得到的string进行SHA1加密并全部大写即得到sign签名字符串,需要导入文件#import<CommonCrypto/CommonDigest.h>
  62 +```object-c
  63 +NSString *signString = [[self sha1:string] uppercaseString];
  64 +
  65 +- (NSString*)sha1:(NSString *)string
  66 +{
  67 + NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
  68 + uint8_t digest[CC_SHA1_DIGEST_LENGTH];
  69 + CC_SHA1(data.bytes, (int)data.length, digest);
  70 + NSMutableString* output = [NSMutableString stringWithCapacity:CC_SHA1_DIGEST_LENGTH * 2];
  71 + for(int i = 0; i < CC_SHA1_DIGEST_LENGTH; i++)
  72 + [output appendFormat:@"%02x", digest[i]];
  73 + while ([[output substringToIndex:1] isEqualToString:@"0"]) {
  74 + output = [[NSMutableString alloc] initWithString:[output substringFromIndex:1]];
  75 + }
  76 + return output;
  77 +}
  78 +```
  79 +sign样例: 7656A9FEFB5D8A08AB41723A843FC3C0B3818A0A
22 ##### Android 80 ##### Android
23 81
24 ### 支付宝接入 82 ### 支付宝接入