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

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ō)明
