美文网首页
iOS-微信分享和支付

iOS-微信分享和支付

作者: ShIwEn9 | 来源:发表于2019-06-14 20:32 被阅读0次

    使用微信分享和微信支付,已经渐渐成为用户的习惯,现在的app几乎都支持微信分享和微信支付功能,所以在这里我也分享一下我实现的步骤,也是对自己学习的总结.

    一、准备阶段
    1. 首先得到微信的开放平台注册账号:https://open.weixin.qq.com;
    2. 然后申请app的相关信息,到“创建移动应用”页面完善应用的资料,然后就是等待审核。。。。


      微信官方

    注意:支付的话还需要到微信的商户平台:https://pay.weixin.qq.com,填写相关资料。。。

    二、开发阶段
    1. 导入最新的微信SDK
      可以到微信开放平台下载最新的SDK到工程中,也可以通过pod导入
      添加依赖。库:SystemConfiguration.framework,liz.tbd,libsqlite3.0.tbd,libc++.tbd


      image
    2. 项目设置APPID

      商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的 项目设置APPID
    3. 使用微信的API
      在需要使用微信支付的地方导入:
      #import "WXApi.h"

    在AppDelegate中的didFinishLaunchingWithOptions方法中添加以下代码向微信注册APP:

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {  
        // Override point for customization after application launch.  
          
        //注册APP,  
        [WXApi registerApp:@"你注册的APPID"];  
        return YES;  
    }  
    

    跳转URL scheme

    // 这个方法是用于从微信返回第三方App
    - (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options {
            // 授权跳转支付宝钱包进行支付,处理支付结果
            [[AlipaySDK defaultService] processAuth_V2Result:url standbyCallback:^(NSDictionary *resultDic) {
                NSLog(@"result = %@",resultDic);
                // 解析 auth code
                NSString *result = resultDic[@"result"];
                NSString *authCode = nil;
                if (result.length>0) {
                    NSArray *resultArr = [result componentsSeparatedByString:@"&"];
                    for (NSString *subResult in resultArr) {
                        if (subResult.length > 10 && [subResult hasPrefix:@"auth_code="]) {
                            authCode = [subResult substringFromIndex:10];
                            break;
                        }
                    }
                }
                NSLog(@"授权结果 authCode = %@", authCode?:@"");
            }];
            return YES;
        }
        [WXApi handleOpenURL:url delegate:self];
        return YES;
    }
    

    添加微信的支付结果的回调

    - (void)onResp:(BaseResp *)resp {
       
        //微信支付 PayResp
        if ([resp isKindOfClass:[PayResp class]]) {
            NSString *resultCode;
            
            switch (resp.errCode) {
                case WXSuccess:
                    //支付成功
                    resultCode = @"9000";
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"paysuccess" object:nil];
                   
                    break;
                default:
                    //支付失败
                    resultCode = @"6001";
                    [[NSNotificationCenter defaultCenter] postNotificationName:@"paydefeat" object:nil];
                    break;
            }
            //返回支付结果 支付成功9000 支付失败 6001
            //  [[NSNotificationCenter defaultCenter] postNotificationName:@"payResult" object:resultCode];
        }
    }
    

    吊起微信所需的参数配置可参考官方提供的一个连接:
    http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php,用于调试支付接口的参数设置;
    这里所获取到的参数可以全部由服务器提供,即在服务器返回prepayId的时候,一并将吊起微信所需的参数返回:

    [Networking getWithUrl:@"http://wxpay.weixin.qq.com/pub_v2/app/app_pay.php" params:nil success:^(id response) {  
            NSLog(@"%@",response);  
              
            //配置调起微信支付所需要的参数  
              
            PayReq *req  = [[PayReq alloc] init];  
              
            req.partnerId = [response objectForKey:@"partnerid"];  
            req.prepayId = [response objectForKey:@"prepayid"];  
            req.package = [response objectForKey:@"package"];  
            req.nonceStr = [response objectForKey:@"noncestr"];  
            req.timeStamp = [[response objectForKey:@"timestamp"]intValue];  
            req.sign = [response objectForKey:@"sign"];  
              
            //调起微信支付  
            if ([WXApi sendReq:req]) {  
                NSLog(@"吊起成功");  
            }  
      
              
        } fail:^(NSError *error) {  
            NSLog(@"%@",error);  
        }];  
    

    注册通知
    在吊起微信的地方注册通知(用于接收支付结果)的时候,最好先判断一下用户是否安装了微信:

    //判断是否安装微信   
    if([WXApi isWXAppInstalled]) {  
            // 监听一个通知  
            [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(getOrderPayResult:) name:@"ORDER_PAY_NOTIFICATION" object:nil];  
      }  
    

    然后实现通知方法,在这里获取支付结果,处理相关逻辑:

    #pragma mark - 收到支付成功的消息后作相应的处理  
    - (void)getOrderPayResult:(NSNotification *)notification  
    {  
        if ([notification.object isEqualToString:@"success"]) {  
            NSLog(@"支付成功");  
        } else {  
            NSLog(@"支付失败");  
        }  
    }  
    
    三、微信分享

    调用方法

    if ([WXApi isWXAppInstalled] && [WXApi isWXAppSupportApi]) {
            SendMessageToWXReq *req = [[SendMessageToWXReq alloc] init];
            req.scene = WXSceneSession;
            WXMediaMessage *message = [WXMediaMessage message];
            message.title = shareDic[@"title"];
            message.description = shareDic[@"content"];
            [message setThumbData:[NSData dataWithContentsOfURL:[NSURL URLWithString:shareDic[@"image"]]]];
            
            WXWebpageObject *webObj = [WXWebpageObject object];
            webObj.webpageUrl = shareDic[@"url"];
            message.mediaObject = webObj;
            req.message = message;
            [WXApi sendReq:req];
            
        }
    

    相关文章

      网友评论

          本文标题:iOS-微信分享和支付

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