iOS-微信分享和支付

栏目: IOS · 发布时间: 5年前

内容简介:使用微信分享和微信支付,已经渐渐成为用户的习惯,现在的app几乎都支持微信分享和微信支付功能,所以在这里我也分享一下我实现的步骤,也是对自己学习的总结.注意:支付的话还需要到微信的商户平台:使用微信的API

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

一、准备阶段

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

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

二、开发阶段

  1. 导入最新的微信SDK
    可以到微信开放平台下载最新的SDK到工程中,也可以通过pod导入
    添加依赖。库:SystemConfiguration.framework,liz.tbd,libsqlite3.0.tbd,libc++.tbd
  2. 项目设置APPID商户在微信开放平台申请开发APP应用后,微信开放平台会生成APP的唯一标识APPID。在Xcode中打开项目,设置项目属性中的URL Schemes为您的
iOS-微信分享和支付

使用微信的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];              }

转载时请注明出处及相应链接,本文永久地址:https://blog.yayuanzi.com/25407.html

iOS-微信分享和支付

iOS-微信分享和支付 微信打赏

iOS-微信分享和支付 支付宝打赏

感谢您对作者Miya的打赏,我们会更加努力!    如果您想成为作者,请点我


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Agile Web Development with Rails 4

Agile Web Development with Rails 4

Sam Ruby、Dave Thomas、David Heinemeier Hansson / Pragmatic Bookshelf / 2013-10-11 / USD 43.95

Ruby on Rails helps you produce high-quality, beautiful-looking web applications quickly. You concentrate on creating the application, and Rails takes care of the details. Tens of thousands of deve......一起来看看 《Agile Web Development with Rails 4》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

随机密码生成器
随机密码生成器

多种字符组合密码

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具