iOS 微信支付

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 ? @"成功" : @"失败");

剩下的支付操作就需要根据返回的状态进行相应的处理啦.

好了.分享完了.有什么不足之处还请指出.

你可能感兴趣的:(iOS 微信支付)