iOS如何接入微信支付

作者: 郑莫轩 | 来源:发表于2016-02-22 17:45 被阅读1866次

    本人最近公司打算在App中集成微信支付、支付宝支付等支付功能,我果断跟经理说这个比较容易做,几个小时就可以做完。。。但是天网恢恢啊,这件事情教会我了一个道理,做人莫装逼,装逼招雷劈!好了,废话不多说,直接上干货
    今天这个文章就只讲微信支付吧,支付宝的有空再写点自己的使用心得~!

    第一:你需要有微信开发平台的开发者账号,(网址https://open.weixin.qq.com/,或者自行百度“微信open”,支付宝支付同理,下同),并将你要集成的应用在你的开发者账号中注册,并获取支付权限(一般这步不需要程序员考虑,都是客户自己获取的,你只需要知道,没有支付权限的应用,不可以集成支付)。

    第二:注册完你的应用,通过审核之后,你会获得开放平台给你发放属于这个应用的AppID和AppSecret

    第三:在开发平台的资源中心(或者叫文档中心,SDK中心什么的),下载IOS的SDK(文档也可以下载下来方便查阅)。我这次的Demo是之前集成过ShareSDK的分享和第三方登录,所以直接用的ShareSDK中的微信SDK。

    第四:将下载好的SDK拷贝到工程文件夹中,然后再工程中AddFilesTo“你的工程”,

    第五:这是最重要的一步,就是导入SDK后可能会有编译报错,这个问题主要是因为导入时缺少了各个库文件,其中报错有几种类型的报错

    (1)"OBJC_CLASS$_CTTelephonyNetworkInfo" 报错

    这个报错你只需在图下第5步的时候添加一个『CoreTelephony.framework』的库文件就OK


    1.png
    (2)"Undefined symbols for architecture armv7:"报错

    这个报错你也只需要重复第一步的操作,添加一个『libz.tbd』跟一个『libc++.tbd』的库文件
    再加入一个『SystemConfiguration.framework』跟『libsqlite3.tbd』库文件,基本上95%是没有问题的了~!
    最后你导入微信的库文件总共为四个如图


    4.png

    第六:在配置文件中的 URL Types 将你申请到的微信 URL Schemes填入其中


    3.png

    第七:代码部分
    在AppDelegate中导入:
    (1)#import "WXApi.h"
    (2)#import "WXApiObject.h"
    (3)遵守WXApiDelegate
    (4)在application:didFinishLaunchingWithOptions方法里面写入
    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    self.viewController = [[[SendMsgToWeChatViewController alloc] initWithNibName:@"ViewController_iPhone" bundle:nil] autorelease];
    } else {
    self.viewController = [[[SendMsgToWeChatViewController alloc] initWithNibName:@"ViewController_iPad" bundle:nil] autorelease];
    }
    self.window.rootViewController = self.viewController;
    [self.window makeKeyAndVisible];

        //向微信注册
        [WXApi registerApp:@"wxd930ea5d5a258f4f" withDescription:@"demo 2.0"];
    
        return YES;
    }
    

    (5)跳转进入微信
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {
    // 跳转到URL schema中配置的地址
    return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }

    (6)微信支付
    #pragma mark - 微信支付
    - (void)WeiXinPay{

        // 判断 用户是否安装微信
        if([WXApi isWXAppInstalled])
        {
            // 调起微信支付
            PayReq* wxreq             = [[PayReq alloc] init];
            wxreq.openID              = @"WXAppId";
            wxreq.partnerId           = @"partnerId";
            wxreq.prepayId            = @"prepayId";
            wxreq.nonceStr            = @"nonceStr";
            wxreq.timeStamp           = 11; //timeStamp
            wxreq.package             = @"package";
            wxreq.sign                = @"sign";
            [WXApi sendReq:wxreq];
        }
        else
        {
            // 您未安装微信
        }
    }
    

    貌似微信从1.5版本其就支持没有安装微信用户也可以调用微信具体调用方法是:
    + (BOOL)sendAuthReq:(SendAuthReq)req viewController:(UIViewController)viewController delegate:(id<WXApiDelegate>)delegate;
    但是作者本人还未实验过,等这几天公司的事情的支付做的差不多了,我到时再补上代码给大家~!

    (7)支付后回调方法
    - (void)onResp:(BaseResp*)resp
    {
    // 判断是否是媒体消息
    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
    // 对错误码进行判断 再做相对应的操作
    }
    if([resp isKindOfClass:[PayResp class]]){
    // 支付返回结果,实际支付结果需要去微信服务器端查询
    switch (resp.errCode) {
    case WXSuccess:{
    // 支付结果:成功!
    break;
    }
    default:{
    // 支付结果:失败!
    break;
    }
    }
    }
    }

    未完待续 接下来会说说微信分享的

    相关文章

      网友评论

      • 岁月如歌的季节:你好,我微信支付做好了,就是对未支付的订单进行再次支付时报个商户订单号重复的错误,发不起微信支付. 订单号还是用以前的未支付成功的那个,其他的都和以前的一样,接口还是https://api.mch.weixin.qq.com/pay/unifiedorder就是不行,不知道怎么做了求大神指点
      • 艳晓:请大神帮忙看看,+ (BOOL)sendAuthReq:(SendAuthReq*)req viewController:(UIViewController*)viewController delegate:(id<WXApiDelegate>)delegate;怎么用,我没搞明白这个viewController,求帮助!
        艳晓:@郑莫轩 喔!明白了,谢谢:+1:
        郑莫轩:也就是说,你得写一个包含WXApiDelegate的控制器,将它本身,及本身包含的Delegate传递给微信
        郑莫轩:@艳晓 你要传一个Delete的实例给这个函数, 微信无论返回成功或者失败都会调用你这个Delegate里面的东西
      • 微光星芒:你好,请问WXApiManager 这个类在引入的SDK包中吗? 我在SDK包中并没有找到这个类
      • 郑莫轩:我猜想可否这样做:用一个全局静态BOOL变量,写在APPDelegate里面,之后只要你发起了支付,那么改变其BOOL,从后台直接进来的时候,去检查这个BOOL变量,如果该BOOL变量改变了,那么调用去服务器查询支付成功与否的代码。目前我是这样想的
      • 凛华夜子:你好,支付成功后 如果不点返回软件直接后台切换回应用程序,就无法知道支付结果了,有解决的办法么
        郑莫轩:@凛华夜子 有啊,支付成功不能依靠微信返回的值来判断,要根据你们服务器查询到的值来判断
      • 系统盘:求教怎么集成,关键如果签名那些在app中该怎么做。
        郑莫轩:@我旁边坐了一个胖子 你可以看看这篇文章 http://www.jianshu.com/p/0dc20b89330d
        郑莫轩:@我旁边坐了一个胖子 签名要在服务器弄,本地签看文档
      • 系统盘:支付有个payrequesesthandle.h这个类,操他妈,找了整个百度都没有,所有简书什么的找遍了都找不到这个文件,我也跟领导说这个很简单,谁知道微信官方文档不跟支付宝一样清楚,装逼招雷劈啊!
      • 买了否冷_:这个好!图文并茂 :kissing_heart:

      本文标题:iOS如何接入微信支付

      本文链接:https://www.haomeiwen.com/subject/esdbkttx.html