应用中接入微信登录

原创 2016年08月30日 14:22:26

微信OAuth协议文档

微信iOS SDK文档

一.到微信开发平台注册自己的APP,审核成功后获取到对应的appKey和appSecret;获取成功后需要单独申请对应的功能接口,如图

这里写图片描述

二.在项目中接入SDK,这个都很熟悉了,接入地址

三.重头戏:

AppDelegate.h

#import "WXApi.h"
@interface AppDelegate : UIResponder <UIApplicationDelegate,WXApiDelegate> //遵守协议

AppDelegate.m


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

    [WXApi registerApp:@"wx*******appid*********" withDescription:@"weChatDescription"];
}

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

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

#pragma mark - WXApiDelegate
- (void)onReq:(BaseReq*)req {
    //onReq是微信终端向第三方程序发起请求,要求第三方程序响应。第三方程序响应完后必须调用sendRsp返回。在调用sendRsp返回时,会切回到微信终端程序界面。
}

- (void)onResp:(BaseResp*)resp {
    //如果第三方程序向微信发送了sendReq的请求,那么onResp会被回调。sendReq请求调用后,会切到微信终端程序界面。
    在这里去指定一个控制器
    LogonViewController *leadVC = [[LogonViewController alloc]init];
    [leadVC getWeiXinCodeFinishedWithResp:resp];
}

LogonViewController.h

#import "WXApi.h"
- (void)getWeiXinCodeFinishedWithResp:(BaseResp *)resp;

LogonViewController.m

-(void)weChatTap:(UIGestureRecognizer *)gesture {
     SendAuthReq* req =[[SendAuthReq alloc ] init];
     req.scope = @"snsapi_userinfo";
     req.state = @"weChatDescription";
     [WXApi sendReq:req];
}

- (void)getWeiXinCodeFinishedWithResp:(BaseResp *)resp {
    if (resp.errCode == 0) {
        //用户同意
        SendAuthResp *aresp = (SendAuthResp *)resp;
        [self getAccessTokenWithCode:aresp.code];
    } else if (resp.errCode == -4){
        //用户拒绝
    } else if (resp.errCode == -2){
        //用户取消
    }
}

- (void)getAccessTokenWithCode:(NSString *)code {
    NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",@"wx*****appid********",@"**************secret**************",code];
    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"]) {
                    //获取token错误
                } else {
                    //存储AccessToken OpenId RefreshToken以便下次直接登陆
                    //AccessToken有效期两小时,RefreshToken有效期三十天
                    [self getUserInfoWithAccessToken:[dict objectForKey:@"access_token"] andOpenId:[dict objectForKey:@"openid"]];
                }
            }
        });
    });
}

- (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失效
                    [self getAccessTokenWithRefreshToken:[[NSUserDefaults standardUserDefaults]objectForKey:@"WeiXinRefreshToken"]];
                } else {

                    //已经授权成功,在微信界面点击了确认登录
                }
            }
        });
    });
}

- (void)getAccessTokenWithRefreshToken:(NSString *)refreshToken {
    NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/refresh_token?appid=%@&grant_type=refresh_token&refresh_token=%@",@"wx******appid*********",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获取信息
                    NSLog(@"%@",dict);
                }
            }
        });
    });
}
版权声明:欢迎访问个人独立博客:www.stevin3t3y.site

相关文章推荐

app分享功能申请社交平台appkey详细教程

大部分app都需要实现分享到微信、微博等社交平台的功能,但是在各个平台上申请appkey是一件很繁琐的事情。友推君现在来分享一个申请社交平台appkey详细教程,在开发过程中,可以让其他人按照教程去申...

微信授权登陆接入第三方App(步骤总结)Android

微信授权登陆接入第三方App(步骤总结) 这几天开发要用到微信授权的功能,所以就研究了一下。可是微信开放平台接入指南里有几个地方写的不清不楚。在此总结一下,以便需要的人。 很多微信公众平台的应用如...
  • jolin678
  • jolin678
  • 2016年01月15日 15:34
  • 35764

第三方App接入微信登录 解读

第三方App接入微信登录功能 腾讯开放平台微信接入API解读

Android之微信接入分享,登录功能。

最近在做一个APP项目,需要用到微信分享啊,登录这些。

网站使用微信登录接口,所踩的坑...

一、如何开通微信公众号、微信开发平台、授权认证、接口权限申请等等,这些不在本文描述,请参考官方资料。 二、假设已顺利完成第一步的工作,现在需要在自己开发的网站(PC端、移动端,注意两者略有不同,下文...
  • cdblh
  • cdblh
  • 2016年12月30日 10:35
  • 5636

微信第三方登录(Android 实现)

1.开发准备工作1.参考Android 接入指南1.申请你的AppID 2.下载微信终端开发工具包 根据app包名生成ap2.代码实践1.判定客户端是否装有微信,没有则提醒需要安装微信 pri...

应用接入微信登录-步步为赢

接入微信登录:1、准备工作1.在微信开放平台https://open.weixin.qq.com/注册成为开发者。2.在“管理中心”中创建一个移动应用,需“应用名称、简介、及28*28和108*108...

微信企业应用接入平台

  • 2015年09月28日 11:16
  • 853KB
  • 下载

Android 第三方应用接入微信平台(1)

关键字:微信开放平台   Android第三方应用接入微信 微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台, 毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的...
  • dengbodb
  • dengbodb
  • 2012年08月07日 17:41
  • 36728

Android 第三方应用接入微信平台研究情况分享(一) 详细出处参考:http://www.jb51.net/article/33048.htm

微信平台开放后倒是挺火的,许多第三方应用都想试下接入微信这个平台,毕竟可以利用微信建立起来的关系链来拓展自己的应用还是挺不错的,可以节约很多在社交方面的开销,我最近由于实习需要也在研究这个东西,不过发...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用中接入微信登录
举报原因:
原因补充:

(最多只允许输入30个字)