微信三方登录

由于需要接入微信三方登录,顺便给大家分享下接入的经验;获取参数,下载SDK就不在此啰嗦了,直接上代码。

1.首先应该初始化SDK

//程序启动后初始化微信SDK

[WXApi registerApp:@“appkey”];

2.发起授权请求

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

req.scope = @"snsapi_userinfo" ;

req.state = @"demo" ;

//第三方向微信终端发送一个SendAuthReq消息结构

[WXApi sendReq:req];

3.在AppDelegate中实现跳转应用的方法

//iOS9使用

-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url options:(NSDictionary*)options

{

        return [WXApi handleOpenURL:url delegate:self];;

}

4.实现代理方法

-(void) onReq:(BaseReq*)req

{

         NSLog(@"req = %@",req);

}

/*! @brief 发送一个sendReq后,收到微信的回应

*

* 收到一个来自微信的处理结果。调用一次sendReq后会收到onResp。

* 可能收到的处理结果有SendMessageToWXResp、SendAuthResp等。

* @param resp具体的回应内容,是自动释放的

*/

-(void) onResp:(BaseResp*)resp

{

      NSLog(@"resp = %@",resp);

      SendAuthResp *authResp = resp;

      if ([authResp.state isEqualToString:@"demo"]) {

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

              LMHttpRequest *noticeRequest = [[LMHttpRequest alloc] initWithUrl:url];

            //通过authResp.code获取access_token

            __weak typeof(self) weakSelf = self;

            [noticeRequest asynGetRequest:url finish:^(LMHttpRequest *request) {

            [weakSelf wechatAuthoFinish:request];

            } failed:^{

                    NSLog(@"网络失败");

         }];

     }

}

-(void)wechatAuthoFinish:(LMHttpRequest *)wechatRequest

{

      NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:wechatRequest.downloadData options:NSJSONReadingAllowFragments error:nil];

      NSLog(@"dict = %@",dict);

    if ([dict objectForKey:@"errcode"])

    {
                //获取失败
    }else{

            NSString *openid = [dict objectForKey:@"openid"];

            NSString *expires_in = [dict objectForKey:@"expires_in"];

            NSString *access_token = [dict objectForKey:@"access_token"];

            NSString *refresh_token = [dict objectForKey:@"refresh_token"];

          //用户唯一标识

          NSString *unionid = [dict objectForKey:@"unionid"];

          //此处可以对获取的信息进行进一步处理
      }

}

5.获取用户信息

- (void)getUserInfoWithAccessToken:(NSString *)accessToken andOpenId:(NSString *)openId

{

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

        NSURL *url = [NSURL URLWithString:urlString];

        dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

        NSString *dataStr = [NSString stringWithContentsOfURL:url   encoding:NSUTF8StringEncoding error:nil];

        NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];

        dispatch_async(dispatch_get_main_queue(), ^{

        if (data)
        {

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

             if ([dict objectForKey:@"errcode"])
              {
                //AccessToken失效
               }else{
            //获取需要的数据
               }
        }
    });

}

6.刷新access_token

- (void)getAccessTokenWithRefreshToken:(NSString *)refreshToken

{

      NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%@&grant_type=refresh_token&refresh_token=%@",@"appkey",refreshToken];

      NSURL *url = [NSURL URLWithString:urlString];

      dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{

      NSString *dataStr = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:nil];

      NSData *data = [dataStr dataUsingEncoding:NSUTF8StringEncoding];

      dispatch_async(dispatch_get_main_queue(), ^{

      if (data)
      {

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

        if ([dict objectForKey:@"errcode"])
        {
              //授权过期
        }else{
                //重新使用AccessToken获取信息
         }
      }
    });
  });
}
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容