iOS實(shí)現(xiàn)微信授權(quán)

微信授權(quán)。

1、集成微信API
教程有很多, 就不啰嗦了 . 額外加入:下面兩個(gè)文件

屏幕快照 2016-12-20 18.30.25.png

2、appdelegate.m中的設(shè)置

// 導(dǎo)入下面兩個(gè)頭文件
#import "WXApi.h"
#import "WXApiManager.h"
//
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // 初始化友盟分享
    [self setUpUMengShare];
    // 初始化微信支付
    [WXApi registerApp:@"appid"];
   // 其他配置項(xiàng)
    return YES;
}
#pragma mark UIApplication代理方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    // weChat授權(quán)回調(diào)
    if ([url.scheme isEqualToString:@"APPid"]) {
        return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options {
    // weChat授權(quán)回調(diào)
    if ([url.scheme isEqualToString:@"APPID"]) {
        return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
    }
    return YES;
}
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {
    
    return [WXApi handleOpenURL:url delegate:[WXApiManager sharedManager]];
}

3、需要獲取授權(quán)的ViewController中

// 導(dǎo)入下面兩個(gè)頭文件
#import "WXApi.h"
#import "WXApiManager.h"
@interface 獲取授權(quán)的ViewController ()<WXApiManagerDelegate>
#pragma mark -
- (IBAction)weChatAuth:(UIButton *)sender {
    // 綁定微信
    SendAuthReq* req = [[SendAuthReq alloc] init];
    req.scope = @"snsapi_message,snsapi_userinfo,snsapi_friend,snsapi_contact"; 
    req.state = @"例如工程名";
    req.openID = @"APPID";
    
    [WXApi sendAuthReq:req
        viewController:self
              delegate:[WXApiManager sharedManager]];
}
#pragma mark - WXApiManagerDelegate
- (void)managerDidRecvAuthResponse:(SendAuthResp *)response {
    // 請(qǐng)求微信token
    if (response.errCode == 0 && [response.state isEqualToString:@"你設(shè)置的state"]) {
         [self getWeChatTokenThenGetUserInfoWithCode:response.code];
    }
}
// 獲取用戶微信token
- (void)getWeChatTokenThenGetUserInfoWithCode:(NSString *)code {
    NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",@"APPID",@"APPsecret",code];
    //
    [WLHttpTool post:url params:nil success:^(id responseObj) {
        //
        [self getWeChatUserInfoWithToken:responseObj[@"access_token"] andOpenID:responseObj[@"openid"]];
    } failure:^(NSError *error) {
     
    }];
}
// 獲取微信用戶信息
- (void)getWeChatUserInfoWithToken:(NSString *)token andOpenID:(NSString *)openid {
    //
    NSString *url =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",token,openid];
    //
    [WLHttpTool post:url params:nil success:^(id responseObj) {
        NSLog(@"responseObj == %@",responseObj);
    } failure:^(NSError *error) {
        
    }];
}

注意點(diǎn):
網(wǎng)絡(luò)請(qǐng)求方法, 需要添加@"text/plain"類型
到這里代碼部分就結(jié)束了

3.1、更改plist文件如下


App Transport Security Setting設(shè)置

3.2、參數(shù)說(shuō)明

3.3、返回結(jié)果說(shuō)明

4、通過(guò)code獲取access_token,openid,unionid
獲取第一步的code后,請(qǐng)求以下鏈接獲取access_token,openid,unionid:
https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

通過(guò)上一步拉起微信授權(quán)頁(yè)面,用戶點(diǎn)擊確認(rèn)登錄,成功之后,就會(huì)調(diào)用微信代理中的回調(diào)函數(shù)OnResp函數(shù),我們可以在該函數(shù)里面獲取access_token,openid,unionid

4.1返回說(shuō)明:

4.2、刷新access_token有效期

4.2.1、返回說(shuō)明

5、通過(guò)access_token獲取個(gè)人信息

接口說(shuō)明
此接口用于獲取用戶個(gè)人信息。開(kāi)發(fā)者可通過(guò)OpenID來(lái)獲取用戶基本信息。特別需要注意的是,如果開(kāi)發(fā)者擁有多個(gè)移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),可通過(guò)獲取用戶基本信息中的unionid來(lái)區(qū)分用戶的唯一性,因?yàn)橹灰峭粋€(gè)微信開(kāi)放平臺(tái)帳號(hào)下的移動(dòng)應(yīng)用、網(wǎng)站應(yīng)用和公眾帳號(hào),用戶的unionid是唯一的。換句話說(shuō),同一用戶,對(duì)同一個(gè)微信開(kāi)放平臺(tái)下的不同應(yīng)用,unionid是相同的。請(qǐng)注意,在用戶修改微信頭像后,舊的微信頭像URL將會(huì)失效,因此開(kāi)發(fā)者應(yīng)該自己在獲取用戶信息后,將頭像圖片保存下來(lái),避免微信頭像URL失效后的異常情況。

接口請(qǐng)求
接口地址:
https://api.weixin.qq.com/sns/userinfo?access_token=ACCESS_TOKEN&openid=OPENID
參數(shù)和返回?cái)?shù)據(jù)說(shuō)明

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容