iOS实现微信授权

微信授权。

1、集成微信API
教程有很多, 就不啰嗦了 . 额外加入:下面两个文件

屏幕快照 2016-12-20 18.30.25.png

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 *)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 ()
#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文件如下

iOS实现微信授权_第1张图片

App Transport Security Setting设置

3.2、参数说明

iOS实现微信授权_第2张图片

3.3、返回结果说明

iOS实现微信授权_第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返回说明:

iOS实现微信授权_第4张图片

4.2、刷新access_token有效期

iOS实现微信授权_第5张图片

4.2.1、返回说明

iOS实现微信授权_第6张图片

5、通过access_token获取个人信息

接口说明
此接口用于获取用户个人信息。开发者可通过OpenID来获取用户基本信息。特别需要注意的是,如果开发者拥有多个移动应用、网站应用和公众帐号,可通过获取用户基本信息中的unionid来区分用户的唯一性,因为只要是同一个微信开放平台帐号下的移动应用、网站应用和公众帐号,用户的unionid是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。请注意,在用户修改微信头像后,旧的微信头像URL将会失效,因此开发者应该自己在获取用户信息后,将头像图片保存下来,避免微信头像URL失效后的异常情况。

接口请求
接口地址:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
参数和返回数据说明

iOS实现微信授权_第7张图片

你可能感兴趣的:(iOS实现微信授权)