笔者最近的项目中使用到了支付的功能,也遇到了一些坑。在这里跟大家分享一下。首先附上微信的官方教程。
相关配置
1.首先要申请开通微信支付,获取到AppKey和AppSecret,一般来说,这一步一般是不需要我们去申请的。
2.下载官方Demo,导入需要的一些头文件(DataMd5.h不需要导入,这是笔者其他地方用到的头文件)
3.在Appdelegate里面注册微信
[WxApi registerApp:"你申请的appid"];```
并且添加回调的方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
BOOL result = [UMSocialSnsService handleOpenURL:url];
NSLog(@"%@",url.host);
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
}];
}
if (result == FALSE) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return result;
}```
#pragma mark ios9的回调
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
{ BOOL result = [UMSocialSnsService handleOpenURL:url];
if ([url.host isEqualToString:@"safepay"]) {
//跳转支付宝钱包进行支付,处理支付结果
[[AlipaySDK defaultService] processOrderWithPaymentResult:url standbyCallback:^(NSDictionary *resultDic) {
NSLog(@"%@",resultDic);
}];
}
if (result == FALSE) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return result;
}```
到了这里,一些基本的配置就已经完成了。
# 调起支付
在点击支付的按钮中,添加事件,可以参考微信官方的demo,用客户端进行签名,不过一般都是服务器返回数据的。这边给大家参考一下
![支付事件](https://ooo.0o0.ooo/2016/04/24/571d9312c8fae.png)
上边的是笔者从服务器获取到的数据,然后发给微信客户端,如果是我们iOS端自己签名的话,参考下面注释的代码就可以。
# 笔者遇到的坑
- 不能掉起微信支付
如果不能掉起微信支付,那么肯定是你的urlScheme没有配置好
具体配置如下。
选择你的项目中的 **TARGETS->INFO-> URL Types**,将其中的URL Schemes改成自己注册的商户APPID。
![设置url schemes](https://ooo.0o0.ooo/2016/04/24/571d95bec463b.png)
- iOS 9.0以上的系统如果要正常调起微信,还需要添加白名单
- 基本这样就可以支付了,如果调起微信后只显示一个白色的确定按钮,那么一定是你的参数有问题,如果是后台返回的数据,那么极有可能是签名的顺序搞错了。如果大家还有什么问题,可以添加我的 QQ:2774278740.