在团队后台统一下单生成预支付订单返回的数据中,我们在调起支付接口中能够用的就是那个随机字符串nonceStr,以及最重要的prepayid.
其他的调起支付接口需要的参数,都是我们自己弄的。
简单的一些配置流程按着官方文档一步一步进行就可以了。
来说说,这个跳转发生的坑在哪,
个人经验就是在自己生成sign的时候,那个拼接字符串出了问题。
首先这个字符串里不仅需要request需要的那几个参数,而且要在最前面加上appid。
其次,需要注意的就是,每一个字符串里的字段名都是小写,不要驼峰。
最后,最最关键的是,要拼接的key值,是商户平台上的key。
就这样,基本就是没有问题了。
利用MD5对字符串加密
-(NSString *)createMD5:(NSString *)stringSignTemp {
const char *signStr = [stringSignTemp UTF8String];
unsigned char result[16];
CC_MD5(signStr, strlen(signStr), result);
return [NSString stringWithFormat: @"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",result[0], result[1], result[2], result[3],
result[4], result[5], result[6], result[7],
result[8], result[9], result[10], result[11],
result[12], result[13], result[14], result[15]
];
}
生成时间戳
NSDate *date = [NSDate date];
NSString *time = [NSString stringWithFormat:@"%ld",(long)[date timeIntervalSince1970]];
UInt32 timeStamp = [time intValue];
声明签名需要的字符串:
//appid 微信开放平台的aped
//noncestr 是后台返回回来数据里的
//package 是固定值 @"Sign=WXPay"
//partnerid 是微信商户的ID
//prepayid 是后台返回回来的预支付订单号
//timestamp 时间戳,自己生成
//最后拼接的key 是微信商户平台的key值,一定要注意是商户平台的。
NSString *stringA = [NSString stringWithFormat:@"appid=%@&noncestr=%@&package=%@&partnerid=%@&prepayid=%@×tamp=%d",wechat_appid,nonceStr,request.package,request.partnerId,prepayid,request.timeStamp];
NSString *key = wechat_key;
NSString *stringSignTemp = [stringA stringByAppendingString:[NSString stringWithFormat:@"&key=%@",key]];
request.sign = [[self createMD5:stringSignTemp] uppercaseString];