iOS 第三方登陆 —— 微信

一、准备工作

1、到微信开放平台注册成开发者,获取appid

2、导入WeChatConnection.framework

3、配置URL Schemes  输入appid  例如wx29ce0f21ea982cb8

二、配置AppDelegate.m

1、 注册微信

    //微信登陆
    [WXApi registerApp:WeiXin_AppId withDescription:@"weixin"];

2、设置函数

//把代理设置到登陆视图中

- (BOOL)application:(UIApplication *)application
      handleOpenURL:(NSURL *)url
{
    return [WXApi handleOpenURL:url delegate:[LoginViewController shareLogin]];
}

- (BOOL)application:(UIApplication *)application
            openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
         annotation:(id)annotation
{
    return [WXApi handleOpenURL:url delegate:[LoginViewController shareLogin]];
}


三、登陆页代码

1、微信登录授权比较复杂,相比QQ,新浪多了几步,简单说就是需要三步,第一步,获取code,这个用来获取token,第二步,就是带上code获取token,第三步,根据第二步获取的token和openid来获取用户的相关信息

2、第一步:获取code

-(void)weiXinLogin
{
    SendAuthReq* req =[[SendAuthReq alloc] init];
    req.scope = @"snsapi_userinfo,snsapi_base";
    req.state = @"0744" ;
    [WXApi sendReq:req];
}

-(void)onReq:(BaseReq *)req
{
    NSLog(@"呵呵");
    [self msgHint:@"登陆失败"];
}

-(void)onResp:(BaseResp *)resp
{
    SendAuthResp* sender = (SendAuthResp*)resp;
    NSString* code = sender.code;
    NSLog(@"啦啦 code = %@",code);
    
    MBProgressHUD * hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
    hud.labelText = @"收取用户信息..";
    [self getAccess_tokenWithCode:code];
}


第二步 获取token

-(void)getAccess_tokenWithCode:(NSString*)myCode
{
    //https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code
    
    NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",kWXAPP_ID,kWXAPP_SECRET,myCode];
    
    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];
                NSString* token = [dic objectForKey:@"access_token"];
                NSString* openid = [dic objectForKey:@"openid"];
                [self getUserInfoWithToken:token openId:openid];
                NSLog(@"token = %@",token);
                NSLog(@"openid = %@",openid);
                
                
            }
        });
    });
}


第三步:获取用户信息

-(void)getUserInfoWithToken:(NSString*)myToken openId:(NSString*)myOpenId
{
    // https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
    
    NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",myToken,myOpenId];
    NSLog(@"infoUrl = %@",url);
    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];
                NSString* nickName = [dic objectForKey:@"nickname"];
                NSString* wxHeadImgUrl = [dic objectForKey:@"headimgurl"];
                
                NSLog(@"nickName = %@",nickName);
                NSLog(@"headImg = %@",wxHeadImgUrl);
                
                NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
                [userDefaults setObject:ON forKey:LogState];
                [userDefaults setObject:ThirdFoudationLogin forKey:LogType];
                [userDefaults setObject:nickName forKey:LoginName];
                [userDefaults setObject:wxHeadImgUrl forKey:UserHeaderPath];
                [userDefaults synchronize];
                
                [MBProgressHUD hideAllHUDsForView:self.view animated:YES];
                [self msgHint:@"微信登陆成功"];
                [self popView];
            }
        });
        
    });
}




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值