iOS 微信支付

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

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

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

什么是微信支付

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

如何申请微信支付

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


iOS 微信支付_第1张图片
申请第一步.png

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

iOS 微信支付_第2张图片
申请第二步.png

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

iOS 微信支付_第3张图片
申请第三部.png

微信支付的流程

iOS 微信支付_第4张图片
支付流程.png

app如何接入微信支付

iOS 微信支付_第5张图片
接入微信支付.png

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

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

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

注册微信支付

核心代码为:

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

设置url scheme

iOS 微信支付_第6张图片
urlscheme的设置.png

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

微信支付的业务流程:


iOS 微信支付_第7张图片
支付流程.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 微信支付)