iOS 微信支付开发,需要以下的步骤.
1.首先需要到微信开放平台申请一个App.获取AppKey.
2.下载微信SDK并且集成.然后把SDK拷贝到项目就行了.
设置URL_Schemes.(Targets->Info->URL Types).值为你的AppKey.
3.导入头文件.#impoet "WXApi.h"
4.初始化微信API.
在AppDelegate的- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
方法中设置.
注意:如果项目设置过友盟分享,需要在友盟分享之后.
#pragma mark - 微信API
- (void)setWXApi {
BOOL isWx = [WXApi registerApp:WX_APP_KEY];
DLog(@"注册微信%@", isWx ? @"成功" : @"失败");
}
5.设置回调(在AppDelegate)
//这两个方法iOS 9被弃用.如果兼容老版本,请将下方方法内容写在这两个方法中.
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url NS_DEPRECATED_IOS(2_0, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(nullable NSString *)sourceApplication annotation:(id)annotation NS_DEPRECATED_IOS(4_2, 9_0, "Please use application:openURL:options:") __TVOS_PROHIBITED;
//使用
- (BOOL)application:(UIApplication *)app openURL:(nonnull NSURL *)url options:(nonnull NSDictionary *)options {
NSString *rangeStr = [NSString stringWithFormat:@"%@://pay", WX_APP_KEY];
//判断是微信支付回调
if([[url absoluteString] rangeOfString:rangeStr].location == 0) {
return [WXApi handleOpenURL:url delegate:self];
}
//友盟回调
return [[UMSocialManager defaultManager] handleOpenURL:url];
}
设置微信支付的回调方法.接受状态以通知方式发出去,然后在指定的界面接受.
#pragma mark - WXApiDelegate
- (void)onResp:(BaseResp *)resp {
//支付返回结果,实际支付结果需要去微信服务器端查询
//发送通知
//创建一个消息对象
NSNotification *notice = [NSNotification notificationWithName:@"WXPay" object:nil userInfo:@{@"resp":resp}];
//发送消息
[[NSNotificationCenter defaultCenter] postNotification:notice];
}
在需要回调状态的页面判断以下状态进行操作.
//支付状态
switch (resp.errCode) {
case WXSuccess:
{
self.isPaySuccess = YES;
[self layoutPaySuccessView];
}
break;
case WXErrCodeCommon:
{
MyHUD(@"支付失败!", 1.0f);
}
break;
case WXErrCodeUserCancel:
{
MyHUD(@"您取消了取消支付!", 1.0f);
}
break;
case WXErrCodeSentFail:
{
MyHUD(@"发送失败!", 1.0f);
}
break;
case WXErrCodeAuthDeny:
{
MyHUD(@"微信授权失败!", 1.0f);
}
break;
case WXErrCodeUnsupport:
{
MyHUD(@"您的微信不支持!", 1.0f);
}
break;
default:
break;
}
注意:最后记得在接收方销毁通知对象.
- (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; }
6.支付需要调用微信API.(需要后端开发合作)
这里要说明的是,调取统一下单的接口,最好不要在App内调取.以防被修改金额.需要你们的后端开发小伙伴,去调取统一下单.详情查看API.你只需要告诉后端哪款商品需要下单,就让他们帮你去下单.下单成功后将下单的数据返回给你们.
NSDictionary *data = jsonDic[@"data"];
PayReq *req = [[PayReq alloc] init];
req.partnerId = data[@"partnerid"];
req.prepayId = data[@"prepayid"];
req.nonceStr = data[@"noncestr"];
req.timeStamp = [data[@"timestamp"] doubleValue];
req.package = data[@"package"];
req.sign = data[@"sign"];
这里还需要后端开发那里设置微信支付回调.虽然支付成功你会收到微信的支付回调,但是,他们还需要将支付的信息纳入你们的数据库.这样两边同步就好.
7.调起支付.拿着后端给的数据就可以调起微信支付了.
BOOL success = [WXApi sendReq:req];
DLog(@"发起支付:%@", success ? @"成功" : @"失败");
剩下的支付操作就需要根据返回的状态进行相应的处理啦.
好了.分享完了.有什么不足之处还请指出.