微信授权。
1、集成微信API
教程有很多, 就不啰嗦了 . 额外加入:下面两个文件
2、appdelegate.m中的设置
// 导入下面两个头文件
#import "WXApi.h"
#import "WXApiManager.h"
//
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// 初始化友盟分享
[self setUpUMengShare];
// 初始化微信支付
[WXApi registerApp:@"appid"];
// 其他配置项
return YES;
}
#pragma mark UIApplication代理方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
// weChat授权回调
if ([url.scheme isEqualToString:@"APPid"]) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
// weChat授权回调
if ([url.scheme isEqualToString:@"APPID"]) {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}
3、需要获取授权的ViewController中
// 导入下面两个头文件
#import "WXApi.h"
#import "WXApiManager.h"
@interface 获取授权的ViewController ()<WXApiManagerDelegate>
#pragma mark -
- (IBAction)weChatAuth:(UIButton *)sender {
// 绑定微信
SendAuthReq* req = [[SendAuthReq alloc] init];
req.scope = @"snsapi_message,snsapi_userinfo,snsapi_friend,snsapi_contact";
req.state = @"例如工程名";
req.openID = @"APPID";
[WXApi sendAuthReq:req
viewController:self
delegate:[WXApiManager sharedManager]];
}
#pragma mark - WXApiManagerDelegate
- (void)managerDidRecvAuthResponse:(SendAuthResp *)response {
// 请求微信token
if (response.errCode == 0 && [response.state isEqualToString:@"你设置的state"]) {
[self getWeChatTokenThenGetUserInfoWithCode:response.code];
}
}
// 获取用户微信token
- (void)getWeChatTokenThenGetUserInfoWithCode:(NSString *)code {
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",@"APPID",@"APPsecret",code];
//
[WLHttpTool post:url params:nil success:^(id responseObj) {
//
[self getWeChatUserInfoWithToken:responseObj[@"access_token"] andOpenID:responseObj[@"openid"]];
} failure:^(NSError *error) {
}];
}
// 获取微信用户信息
- (void)getWeChatUserInfoWithToken:(NSString *)token andOpenID:(NSString *)openid {
//
NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openid];
//
[WLHttpTool post:url params:nil success:^(id responseObj) {
NSLog(@"responseObj == %@",responseObj);
} failure:^(NSError *error) {
}];
}
注意点:
网络请求方法, 需要添加@"text/plain"类型
到这里代码部分就结束了
3.1、更改plist文件如下
App Transport Security Setting设置
3.2、参数说明
3.3、返回结果说明
4、通过code获取access_token,openid,unionid
获取第一步的code后,请求以下链接获取access_token,openid,unionid:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
通过上一步拉起微信授权页面,用户点击确认登录,成功之后,就会调用微信代理中的回调函数OnResp函数,我们可以在该函数里面获取access_token,openid,unionid
4.1返回说明:
4.2、刷新access_token有效期
4.2.1、返回说明
5、通过access_token获取个人信息
接口说明
此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。
接口请求
接口地址:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数和返回数据说明