您的位置:首页 > 移动开发 > 微信开发

iOS开发:集成微信支付和微信授权登陆

2015-07-06 14:28 671 查看
微信无孔不入的插入到我们生活中,简直是烦得受不了;嘻嘻,同样是不是也方便的杠杠的,省去了我们好多繁琐的手机验证注册的事情。

因此, 在你的微信中接入微信授权登陆和微信支付,是一件让各位同学爽爽的事情;

首先,我们谈谈微信授权登陆:

1. 到微信开发平台注册相关APP(地址:https://open.weixin.qq.com),现在是等待审核成功后才能获取到对应的key和secret;获取成功后需要单独申请开通登录和支付接口,如图



2.下载SDK,导入工程中,如果出现以下错误,只需要用切换到Demo中的SDK即可


3.配置项目文件 (详见:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=1417694084&token=&lang=zh_CN)

4. 接下来,就是填写我们最擅长的代码了:

4.1:向微信注册:在AppDelegate.m 中引入#import "WXApi.h",并接受WXApiDelegate代理,

然后注册:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

[WXApi registerApp:@"wx9f6ca5429bd6c702" withDescription:@"Test"];

return YES;

}

4.2:实现代理和回调语句

//第三方程序,向微信发送请求,sendReq请求调用后,会切到微信终端程序界面

- (void)onResp:(BaseResp *)resp

{

/*


SendAuthResp *aresp = (SendAuthResp *)resp;


}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url

{

return [WXApi handleOpenURL:url delegate:self];

}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation

{

return [WXApi handleOpenURL:url delegate:self];

}

5.完成准备工作,我们开始 实现授权登录功能

5.1 发送登录信息

- (IBAction)pushMessage:(id)sender {

//对于iOS应用,考虑到iOS应用商店审核指南中的相关规定,建议开发者接入微信登录时,先检测用户手机是否已安装微信客户端(使用sdk中isWXAppInstalled函数 ),对未安装的用户隐藏微信登录按钮,只提供其他登录方式(比如手机号注册登录、游客登录等)。

//判断是否安装微信

[WXApi isWXAppInstalled];

//第一步,请求Code; 第二步,根据Code获取token;第三步,根据token和API获取用户相关数据

//获取token

SendAuthReq *req = [[SendAuthReq alloc] init];

//应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且,即使在未关注的情况下,只要用户授权,也能获取其信息)

//微信如何识别发起请求者,通过注册获得到得Key

req.scope = @"snsapi_userinfo";

req.state = @"345678";

[WXApi sendReq:req];

}

5.2 当在微信界面点击取消或授权以后,会调用AppDelegate.m中的- (void)onResp:(BaseResp *)resp方法

在resp中会带有code信息,
SendAuthResp *aresp = (SendAuthResp *)resp;


5.3 通过Code获得token

-(void)getAccess_token:(NSString *)code

{

//利用GCD来获取对应的token和openID.

//https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

NSString *appid = @""; //注册应用时获得的key

NSString *sercet = @"";//注册应用时获得的sercet

NSString *url = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code", appid, sercet, code];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSURL *zoneUrl = [NSURL URLWithString:url];

NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];

NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];

dispatch_async(dispatch_get_main_queue(), ^{

if (data) {

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

/*{

"access_token" = "OezXcEiiBSKSxW0eoylIeJDUKD6z6dmr42JANLPjNN7Kaf3e4GZ2OncrCfiKnGWiusJMZwzQU8kXcnT1hNs_ykAFDfDEuNp6waj-bDdepEzooL_k1vb7EQzhP8plTbD0AgR8zCRi1It3eNS7yRyd5A";

"expires_in" = 7200;

openid = oyAaTjsDx7pl4Q42O3sDzDtA7gZs;

"refresh_token" = "OezXcEiiBSKSxW0eoylIeJDUKD6z6dmr42JANLPjNN7Kaf3e4GZ2OncrCfiKnGWi2ZzH_XfVVxZbmha9oSFnKAhFsS0iyARkXCa7zPu4MqVRdwyb8J16V8cWw7oNIff0l-5F-4-GJwD8MopmjHXKiA";

scope = "snsapi_userinfo,snsapi_base";

}

*/

[self getUserInfo:[dic objectForKey:@"access_token"] openid:[dic objectForKey:@"openid"]];

}

});

});

}

5.4 根据token 和openid 获得用户跟人信息

-(void)getUserInfo:(NSString *)token openid:(NSString *)openid

{

NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openid];

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

NSURL *zoneUrl = [NSURL URLWithString:url];

NSString *zoneStr = [NSString stringWithContentsOfURL:zoneUrl encoding:NSUTF8StringEncoding error:nil];

NSData *data = [zoneStr dataUsingEncoding:NSUTF8StringEncoding];

dispatch_async(dispatch_get_main_queue(), ^{

if (data) {

NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];

NSLog(@"%@",dic);

/*{

city = Haidian;

country = CN;

headimgurl = "http://wx.qlogo.cn/mmopen/FrdAUicrPIibcpGzxuD0kjfnvc2klwzQ62a1brlWq1sjNfWREia6W8Cf8kNCbErowsSUcGSIltXTqrhQgPEibYakpl5EokGMibMPU/0";

language = "zh_CN";

nickname = "xxx";

openid = oyAaTjsDx7pl4xxxxxxx;

privilege = (

);

province = Beijing;

sex = 1;

unionid = oyAaTjsxxxxxxQ42O3xxxxxxs;

}

*/

}

});

});

}

6.到此,微信授权登录,然后获得个人相关信息,介绍完毕。

———********************************************************************************************————

下边开始介绍微信支付功能

微信支付的配置方法和微信授权登陆的配置方法一样。

微信支付分为三个阶段,1.通过统一下单API生成预付订单;2.通过预付订单获得到得数据发起微信支付请求;3.处理支付回调结果,判断是否支付成功;

1.通过统一下单API生成预付订单,

在这时候分两种两种情况,一种是有后台生成,一种时候前端生成;

2。具体使用方法,详情可以在Demo中看到。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: