iOS关于微信支付调起转跳到微信应用后出现确定按钮的参数问题

我遇到这个问题,找了很多资料看。。。最后还是自己领悟的哈哈哈。。。

这个问题出现主要还是因为sign的问题,要重新做一个sign

下面对每个调起参数的详解:

partnerID:商户号,申请商户号的时候,微信发的邮件里面有。

prepayId:统一下单成功后返回的唯一标识

nonceStr:是统一下单的时候做出来的随机数,下单后返回的参数里面有它

timeStamp:文档有说明有,自1970年1月1日 0点0分0秒以来的秒数。注意:部分系统取到的值为毫秒级,需要转换成秒(10位数字)。

pagekage: 固定值Sign=WXPay

sign: 再次生成的签名,主要出现问题的地方。

下面详细说说签名:key分别是:appid,partnerid,noncestr,timestamp,package,prepayid

代码如下:

+ (NSString *)jumpToBizPayWith:(TYWechatPay *)pay {//TYWechatPay是我做的一个数据模型,按照统一下单返回的数据做的。

NSDictionary *dict = @{

@"appid":pay.appid,//NSString

@"partnerid":pay.mch_id,//NSString

@"noncestr":pay.nonce_str,//NSString

@"timestamp":@(pay.timestamp),//格式是:@(Uint32)

@"package":pay.package,//NSString

@"prepayid":pay.prepay_id//NSString

};

//调起微信支付

PayReq* req             = [[PayReq alloc] init];

req.partnerId           = pay.mch_id;

req.prepayId            = pay.prepay_id;

req.nonceStr            = pay.nonce_str;

req.timeStamp           = pay.timestamp;

req.package             = pay.package;

req.sign                = [self getWechatSignWithDict:dict key:signKey];

[WXApi sendReq:req];

return pay.return_msg;

}

//生成签名

+ (NSString *)getWechatSignWithDict:(NSDictionary *)dict key:(NSString *)signKey{

NSArray *keyArr = [self SortWithArr:[dict allKeys]] ;

NSMutableString *desc = [NSMutableString string];

for (NSString *key in keyArr) {

if ([desc length] == 0) {

[desc appendString:key];

[desc appendString:@"="];

}else{

[desc appendString:@"&"];

[desc appendString:key];

[desc appendString:@"="];

}

if (![dict[key] isKindOfClass:[NSString class]]) {

int a = [dict[key] intValue];

[desc appendString:[NSString stringWithFormat:@"%d",a]];

}else{

[desc appendString:dict[key]];

}

}

NSString *stringSignTemp = [NSString stringWithFormat:@"%@&key=%@",desc,signKey];

return [MD5 md532BitUpper:stringSignTemp];

}

//排列key

+ (NSArray *)SortWithArr:(NSArray *)arr{

NSMutableArray *p = [NSMutableArray arrayWithArray:arr];

for (int i = 0; i<[arr count]; i++)

{

for (int j=i+1; j<[arr count]; j++)

{

NSString *a = p[i];

NSString *b = p[j];

if ([a compare:b] > 0)

{

[p replaceObjectAtIndex:i withObject:[NSString stringWithFormat:@"%@",b]];

[p replaceObjectAtIndex:j withObject:[NSString stringWithFormat:@"%@",a]];

}

}

}

return p;

}

你可能感兴趣的:(iOS关于微信支付调起转跳到微信应用后出现确定按钮的参数问题)