美文网首页
微信支付和支付宝支付遇到的坑(持续更新)

微信支付和支付宝支付遇到的坑(持续更新)

作者: Arackboss | 来源:发表于2017-07-19 12:53 被阅读0次

最近在做支付宝和微信支付的时候遇到很多坑,先说一下微信支付,前面的继承和配置我就不说了,大家看开发文档就好,按照开发文档一步步来是没有问题的

  • 坑1:首先调用自己服务器接口获取订单ID,以及下一步调用支付的一些请求参数,都是从这个接口返回。
屏幕快照 2017-07-19 上午9.27.06.png

就是这些参数,都是从你公司自己的后台服务器获取的,除了sign。这里最坑爹的就是竟然这个sign也有返回给我,搞得我窝心烦躁。所以一定要和后台沟通好。

其实这个sign还要自己进行签名生成,不然跳转到微信的时候提示签名失败
以下是我签名的代码,大家可以借鉴以下:

    /** 微信付款*/
        if (self.payWayID == 10) {
            PayReq *req = [[PayReq alloc] init];
            req.partnerId = [param objectForKey:@"partnerid"] ;
            req.prepayId = [param objectForKey:@"prepayid"];
            req.package = [param objectForKey:@"package"];
            req.nonceStr = [param objectForKey:@"noncestr"];
            req.timeStamp = (UInt32)[param objectForKey:@"timestamp"];
/**以上参数都是从后台获取的*/
            req.sign = [self createMD5SingForPay:@"wxaeaf71a68a176bf8" partnerid:req.partnerId prepayid:req.prepayId package:req.package noncestr:req.nonceStr timestamp:req.timeStamp];
            [WXApi sendReq:req];
        }


//创建发起支付时的sign签名
-(NSString *)createMD5SingForPay:(NSString *)appid_key
                       partnerid:(NSString *)partnerid_key
                        prepayid:(NSString *)prepayid_key
                         package:(NSString *)package_key
                        noncestr:(NSString *)noncestr_key
                       timestamp:(UInt32)timestamp_key
{
    NSMutableDictionary *signParams = [NSMutableDictionary dictionary];
    [signParams setObject:appid_key forKey:@"appid"];
    [signParams setObject:noncestr_key forKey:@"noncestr"];
    [signParams setObject:package_key forKey:@"package"];
    [signParams setObject:partnerid_key forKey:@"partnerid"];
    [signParams setObject:prepayid_key forKey:@"prepayid"];
    [signParams setObject:[NSString stringWithFormat:@"%u",(unsigned int)timestamp_key] forKey:@"timestamp"];
    
    NSMutableString *contentString  =[NSMutableString string];
    NSArray *keys = [signParams allKeys];
    //按字母顺序排序
    NSArray *sortedArray = [keys sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [obj1 compare:obj2 options:NSNumericSearch];
    }];
    //拼接字符串
    for (NSString *categoryId in sortedArray) {
        if (   ![[signParams objectForKey:categoryId] isEqualToString:@""]
            && ![[signParams objectForKey:categoryId] isEqualToString:@"sign"]
            && ![[signParams objectForKey:categoryId] isEqualToString:@"key"]
            )
        {
            [contentString appendFormat:@"%@=%@&", categoryId, [signParams objectForKey:categoryId]];
        }
    }
    
    //添加商户密钥key字段
    [contentString appendFormat:@"key=%@", @"QiuCoo2016618YYinfo20170705Qiuku"];
    
    NSString *result = [self md5:contentString];
    
    return result;
}


// MD5加密算法
-(NSString *) md5:(NSString *)str
{
    const char *cStr = [str UTF8String];
    //加密规则,因为逗比微信没有出微信支付demo,这里加密规则是参照安卓demo来得
    unsigned char result[16]= "0123456789abcdef";
    CC_MD5(cStr, (CC_LONG)strlen(cStr), result);
    //这里的x是小写则产生的md5也是小写,x是大写则md5是大写,这里只能用大写,逗比微信的大小写验证很逗
    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]
            ];
}

//支付结果回调
-(void)onResp:(BaseResp *)resp
{
    //errCode
    
    switch (resp.errCode) {
            
        case WXSuccess:
            
            //成功回调
            
            break;
            
        default:
            DLog(@"微信支付错误=%@",resp.errStr);
            break;
            
    }
}

注意:在官方demo里面的BaseReq实例里面有一个openID的字段,上面是这样说的“由用户微信号和AppID组成的唯一标识,发送请求时第三方程序必须填写,用于校验微信用户是否换号登录”,但是我没填,也同样能付款。如果大家弄清楚了欢迎指教。
我这里加密签名是完全按照微信官方文档上面的说明来的,试了好几遍。

下面是支付宝,做支付宝支付的时候没有遇到太大的问题,一步步按照官方文档来做,只要足够仔细,但是比较坑的是我签名是放在前端来做的,这样会有很大的安全隐患,不建议大家这样做!

总结:我现在只把基本的支付功能给做了一遍,如果在以后的完善中出现问题,我会及时更新到我的简书中,如果大家在做支付的时候遇到坑,也欢迎大家留言,另外附上我的邮箱:17673163961@163.com

相关文章

网友评论

      本文标题:微信支付和支付宝支付遇到的坑(持续更新)

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