iOS 微信支付

作者: shineDeveloper | 来源:发表于2017-03-24 10:57 被阅读139次

    今天探讨的内容是微信支付相关的知识,首先就必须先明白微信支付sdk的接口规则和微信支付sdk的规范和业务流程。

    首先附上附上微信支付的官方网址:微信支付官网

    从他的官网的开发文档中可以知道微信支付有4种支付方式,那么今天谈论的是app支付这种方式。所以要搞清怎样在app中吊起微信支付,需要在开发文档中查看app支付的内容。

    什么是微信支付

    微信支付是集成在微信客户端的支付功能,用户可以通过手机完成支付流程。

    如何申请微信支付

    用图来说明流程:
    第一步:注册开发帐号,需要一个营业执照,公司类型


    申请第一步.png

    第二步:提交用户的基本信息(联系方式,银行卡号)

    申请第二步.png

    第三部,签署协议,开始开发

    申请第三部.png

    微信支付的流程

    支付流程.png

    app如何接入微信支付

    接入微信支付.png

    接下来就做一个吊起微信支付的demo

    首先列出吊起微信支付的步骤:

    //1.导入微信支付SDK,注册微信支付
        //2.设置微信APPID为URL Schemes
        //3.导入微信支付依赖的类库,发起支付,调起微信支付
        //4.处理支付结果
    

    注册微信支付

    核心代码为:

    [WXApi registerApp:@“app ID" withDescription:@"ios weixin pay demo”];
    

    设置url scheme

    urlscheme的设置.png

    导入微信支付依赖的类库,发起支付

    微信支付的业务流程:


    支付流程.png支付流程.png
    if (![WXApi isWXAppInstalled]) {
            NSLog(@"没有安装微信");
            return;
        }else if (![WXApi isWXAppSupportApi]){
            NSLog(@"不支持微信支付");
            return;
        }
        
        //微信支付
        NSString *urlString = @"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php?plat=ios";
        
        //加载一个NSURL对象
        NSURLRequest *request   = [NSURLRequest requestWithURL:[NSURL URLWithString:urlString]];
        NSOperationQueue *queue = [[NSOperationQueue alloc] init];
        
        [NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
            if ( data != nil) {
                //解析服务端返回json数据
                NSError *error;
                NSMutableDictionary *dict = NULL;
                //IOS5自带解析类NSJSONSerialization从response中解析出数据放到字典中
                dict = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:&error];
                
                NSLog(@"url:%@",urlString);
                if(dict != nil){
                    NSMutableString *retcode = [dict objectForKey:@"retcode"];
                    if (retcode.intValue == 0){
                        NSMutableString *stamp  = [dict objectForKey:@"timestamp"];
                        
                        //调起微信支付
                        PayReq* req             = [[PayReq alloc] init];
                        req.partnerId           = [dict objectForKey:@"partnerid"];
                        req.prepayId            = [dict objectForKey:@"prepayid"];
                        req.nonceStr            = [dict objectForKey:@"noncestr"];
                        req.timeStamp           = stamp.intValue;
                        req.package             = [dict objectForKey:@"package"];
                        req.sign                = [dict objectForKey:@"sign"];
                        [WXApi sendReq:req];
                        //日志输出
                        NSLog(@"appid=%@\npartid=%@\nprepayid=%@\nnoncestr=%@\ntimestamp=%ld\npackage=%@\nsign=%@",[dict objectForKey:@"appid"],req.partnerId,req.prepayId,req.nonceStr,(long)req.timeStamp,req.package,req.sign );
                        
                    }else{
                        NSLog(@"%@",[dict objectForKey:@"retmsg"]);
                    }
                }else{
                    NSLog(@"服务器返回错误,未获取到json对象");
                }
            }else{
                NSLog(@"服务器返回错误");
            }
        }];
    

    处理微信支付的结果

    实现微信支付的代理方法,处理支付的结果

    - (void)onResp:(BaseResp *)resp {
        if([resp isKindOfClass:[PayResp class]]){
            //支付返回结果,实际支付结果需要去微信服务器端查询
            NSString *strMsg,*strTitle = [NSString stringWithFormat:@"支付结果"];
            
            switch (resp.errCode) {
                case WXSuccess:
                    strMsg = @"支付结果:成功!";
                    NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);
                    break;
                    
                default:
                    strMsg = [NSString stringWithFormat:@"支付结果:失败!retcode = %d, retstr = %@", resp.errCode,resp.errStr];
                    NSLog(@"错误,retcode = %d, retstr = %@", resp.errCode,resp.errStr);
                    break;
            }
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:strTitle message:strMsg delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];
            [alert show];
        }
    }
    

    相关文章

      网友评论

        本文标题:iOS 微信支付

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