今天探讨的内容是微信支付相关的知识,首先就必须先明白微信支付sdk的接口规则和微信支付sdk的规范和业务流程。
首先附上附上微信支付的官方网址:微信支付官网
从他的官网的开发文档中可以知道微信支付有4种支付方式,那么今天谈论的是app支付这种方式。所以要搞清怎样在app中吊起微信支付,需要在开发文档中查看app支付的内容。
什么是微信支付
微信支付是集成在微信客户端的支付功能,用户可以通过手机完成支付流程。
如何申请微信支付
用图来说明流程:
第一步:注册开发帐号,需要一个营业执照,公司类型
第二步:提交用户的基本信息(联系方式,银行卡号)
第三部,签署协议,开始开发
微信支付的流程
app如何接入微信支付
接下来就做一个吊起微信支付的demo
首先列出吊起微信支付的步骤:
//1.导入微信支付SDK,注册微信支付
//2.设置微信APPID为URL Schemes
//3.导入微信支付依赖的类库,发起支付,调起微信支付
//4.处理支付结果
注册微信支付
核心代码为:
[WXApi registerApp:@“app ID" withDescription:@"ios weixin pay demo”];
设置url scheme
导入微信支付依赖的类库,发起支付
微信支付的业务流程:
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];
}
}