这次是一个新项目,集成支付宝和微信支付,在上一篇中,记录了一下集成支付宝支付时的一些坑,不过集成微信时要顺利得多。微信支付客户端的代码量稍微多一些,不过也是非常简单的。
首先我碰到了一个问题,不知道大家有没有碰到过,就是使用cocopods导入的时候,友盟的微信分享库与微信官方库冲突的问题。最开始友盟微信分享我是集成了完整版的,再通过pod 'WechatOpenSDK'导入的时候,就发现库文件冲突了,然而不导入这个的时候呢,微信支付的PayReq好像这个类又找不到。最后我试着把微信友盟分享完整版,改成了友盟微信分享精简版,没想到,这个冲突问题就解决了。
集成步骤
1、使用cocopods导入微信的sdk库
pod 'WechatOpenSDK'
安装好之后运行一下,看有没有冲突。
2、在需要使用的地方导入头文件
#import <WXApi.h>
3、在AppDelegate.m中注册微信服务
//向微信注册
[WXApi registerApp:WeChatKey];
//WeChatKey 您在申请微信支付时的appkey
4、在info.plist中的“URL Types”选项中,点击“+”,在“URL Schemes”中输入“您申请的微信appkey”,方便回调。
5、在向服务端创建好支付订单之后,服务端会返回客户端调起微信支付时所需的参数,然后创建请求参数,向微信发起支付请求即可。
//dict的内容为服务端返回给客户端
PayReq* req = [[PayReq alloc] init];
req.partnerId = dict[@"partnerid"];
req.prepayId = dict[@"prepayid"];
req.nonceStr = dict[@"noncestr"];
req.timeStamp = [dict[@"timestamp"] doubleValue];
req.package = dict[@"package"];
req.sign = dict[@"sign"];
[WXApi sendReq:req];
6、处理支付结果回调
// NOTE: 9.0以后使用新API接口
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
if ([url.host isEqualToString:@"pay"]){ //微信支付的回调
NSString *result = [url absoluteString];
NSLog(@"微信------%@",result);
NSArray *array = [result componentsSeparatedByString:@"="];
NSString *resultNumber = [array lastObject];
NSLog(@"微信------%@",resultNumber);
if ([resultNumber integerValue] == 0){ //成功
//发送支付成功的通知
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePaySuccess object:nil];
}else if ([resultNumber integerValue] == -1) { //错误
//发送支付失败的通知
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePayFailure object:nil];
}else if ([resultNumber integerValue] == -2){ //用户取消
//发送支付取消的通知
[[NSNotificationCenter defaultCenter] postNotificationName:NoticePayCancel object:nil];
}
}
return YES;
}
结束。
网友评论