应用中接入微信登录

原创 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

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

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

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

最近在做一个APP项目,需要用到微信分享啊,登录这些。
  • u013066292
  • u013066292
  • 2015年11月07日 15:36
  • 9140

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

第三方App接入微信登录功能 腾讯开放平台微信接入API解读
  • luoyan973387349
  • luoyan973387349
  • 2015年11月13日 14:26
  • 42599

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

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

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

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

微信第三方登录接口

随着手机微信的崛起,腾讯发布的微信联登确实很诱惑pc端的伙伴们,现在就说说在pc端用微信扫一扫实现微信第三方登陆的方式。   第一步:获取AppID AppSecret(不做解释,自己去...
  • hxker
  • hxker
  • 2015年12月11日 10:43
  • 16571

Android微信第三方登录接入

微信开放平台地址:https://open.weixin.qq.com/ 一、首先注册微信开放平台账户,并创建应用,目前支持三种:Android、IOS、WP8        创建完应用后需要审核...
  • duliqiang1987
  • duliqiang1987
  • 2015年03月30日 20:07
  • 1531

关于微信分享申请应用APPkey时该注意的地方

关于微信分享申请应用APPkey时该注意的地方,导致跳转到微信页面直接闪退。...
  • qq_38040973
  • qq_38040973
  • 2017年09月02日 22:44
  • 454

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

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

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

一、如何开通微信公众号、微信开发平台、授权认证、接口权限申请等等,这些不在本文描述,请参考官方资料。 二、假设已顺利完成第一步的工作,现在需要在自己开发的网站(PC端、移动端,注意两者略有不同,下文...
  • cdblh
  • cdblh
  • 2016年12月30日 10:35
  • 8057
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:应用中接入微信登录
举报原因:
原因补充:

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