微信登陆

AppDelegate

#import "AppDelegate.h"

#import "WeChatSDK1.8.3_NoPay/WXApi.h"

#import "MBProgressHUD/MBProgressHUD.h"

@interface AppDelegate ()<WXApiDelegate>

@end

@implementation AppDelegate

#pragma mark --------- 显示提示框 ---------

// 显示提示框

-(void)showMBAlertWithMessage:(NSString*)msg {

    MBProgressHUD *hud = [[MBProgressHUD alloc] initWithWindow:self.window];

    hud.mode = MBProgressHUDModeText; // 设置文本样式

    hud.labelText= msg;    // 设置显示的提示文本

    hud.removeFromSuperViewOnHide = YES;

    [self.windowaddSubview:hud];

    [hudshow:YES];

    [hudhide:YES afterDelay:3.0];

}

#pragma mark --------- 获取微信信息 ----------

// 通过code获取access_token

-(void)getAccessTokenWithCode:(NSString*)code {

    // (1)网址字符串拼接

    NSString *appID = @"wx537cf8aac45b25df";


    NSString *appSecret = @"879024ead533e25662a7fa7ca1dcc940";


    NSString *urlStr = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",appID,appSecret,code];


    NSURL *url = [NSURL URLWithString:urlStr];


    [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if(error !=nil) {

            dispatch_async(dispatch_get_main_queue(), ^{

                [self showMBAlertWithMessage:@"登录失败"];

            });

            return;

        }


        id jsonData = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

        NSLog(@"json====%@",jsonData);

        // 获取access_token 和 openID

        NSString*access_token = jsonData[@"access_token"];

        NSString*openid = jsonData[@"openid"];

        // 通过token和id得到微信用户信息

        [selfgetWXUserInfoWithToken:access_tokenopenID:openid];

    }]resume];

}

// 通过token和openID获取微信用户信息

-(void)getWXUserInfoWithToken:(NSString*)accessToken openID:(NSString*)openID {


    // (1)

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

    // (2)

    NSURL *url = [NSURL URLWithString:urlStr];

    // (3)

    [[[NSURLSession sharedSession] dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

        if(error !=nil) {

            dispatch_async(dispatch_get_main_queue(), ^{

                [self showMBAlertWithMessage:@"微信登录失败"];

            });

            return;

        }

        id userInfo = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:nil];

        NSLog(@"userJson======%@",userInfo);


        // 持久化数据

        [[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:@"loginUser"];

        [[NSUserDefaults standardUserDefaults] synchronize];


        // 切换窗口的根视图控制器

        dispatch_async(dispatch_get_main_queue(), ^{

            self.window.rootViewController=self.mainVC;

        });

    }]resume];

}

#pragma mark -------- WXApiDelegate --------

// 从微信app返回当前app调用的回调

-(void)onResp:(BaseResp*)resp {

    // 如果是授权登录的回调

    if([respisKindOfClass:[SendAuthRespclass]]) {


        // 获取微信返回的code值

        SendAuthResp*authResp = (SendAuthResp*)resp;

        // 授权成功

        if(authResp.errCode==0) {

            // 得到返回的code值

            NSString*code = authResp.code;

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

            // 获取access_token

            [self getAccessTokenWithCode:code];

        }

        // 拒绝授权

        elseif(authResp.errCode== -4) {

            [self showMBAlertWithMessage:@"拒绝授权"];

        }

        // 取消授权

        elseif(authResp.errCode== -2){

            [self showMBAlertWithMessage:@"取消授权"];

        }



    }

    // 如果是分享的回调

    elseif([respisKindOfClass:[SendMessageToWXRespclass]]) {


    }


}

#pragma mark ------- 控制器实例化 --------

-(MainViewController *)mainVC {

    if(!_mainVC) {

        _mainVC = [[MainViewController alloc] init];

    }

    return _mainVC;

}

-(ViewController *)loginVC {

    if(!_loginVC) {

        _loginVC = [[UIStoryboard storyboardWithName:@"Main" bundle:[NSBundle mainBundle]] instantiateInitialViewController];

    }

    return _loginVC;

}

#pragma mark --------- UIApplicationDelegate -------

-(BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url {

    return [WXApi handleOpenURL:url delegate:self];

}

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

    // Override point for customization after application launch.

    // 向微信注册应用

    [WXApi registerApp:@"wx537cf8aac45b25df"];





    // 有持久化数据,表示登录过,将mainVC设置为窗口的根视图控制器

    if ([[NSUserDefaults standardUserDefaults] objectForKey:@"loginUser"] != nil) {

        self.window.rootViewController = self.mainVC;

    }

    // 没有持久化数据,表示未登录,将loginVC设置为窗口的根视图控制器

    else{

        self.window.rootViewController = self.loginVC;

    }

    return YES;

}





ViewController



#import "AppDelegate.h"

#import "WeChatSDK1.8.3_NoPay/WXApi.h"

- (IBAction)weChatLogin:(id)sender;


- (IBAction)weChatLogin:(id)sender {

    //构造SendAuthReq结构体

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

    req.scope = @"snsapi_userinfo";

    req.state=@"123";

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

    [WXApisendReq:req];

}

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容