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

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

作者: Q_Easy | 来源:发表于2016-07-15 10:31 被阅读0次

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

    这个问题出现主要还是因为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关于微信支付调起转跳到微信应用后出现确定按钮的参数问题

          本文链接:https://www.haomeiwen.com/subject/avryjttx.html