Commit 45b84a46d9fd2e57eb3db67d3757f5607f1dc81b
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 | ### 支付宝接入 |