參考文章
問題:在Appdelegate中調用微信的協(xié)議方法,但是如何在登錄控制器中獲取到code值
解決:用通知傳值
-(void) onResp:(BaseResp*)resp{
/*
enum WXErrCode {
WXSuccess = 0, 成功
WXErrCodeCommon = -1, 普通錯誤類型
WXErrCodeUserCancel = -2, 用戶點擊取消并返回
WXErrCodeSentFail = -3, 發(fā)送失敗
WXErrCodeAuthDeny = -4, 授權失敗
WXErrCodeUnsupport = -5, 微信不支持
};
*/
if ([resp isKindOfClass:[SendAuthResp class]]) { //授權登錄的類。
if (resp.errCode == 0) { //成功。
SendAuthResp *resp2 = (SendAuthResp *)resp;
//發(fā)通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"wxLogin" object:resp2.code];
}else{ //失敗
NSLog(@"授權失敗");
}
}
}
在登錄的控制器里面?zhèn)鬟f參數(shù)即可
- (void)getWX:(NSNotification *)sender {
NSString *code = [sender object];
//用戶同意授權
NSString *URL = @"https://api.weixin.qq.com/sns/oauth2/access_token?";
NSDictionary *dict = @{
@"appid":WX_APPID,
@"secret":WXAPPKEYSECRET,
@"code":code,
@"grant_type":@"authorization_code"
};
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer.acceptableContentTypes = [NSSet setWithObject:@"text/plain"];
NSURLSessionDataTask *dataTask = [manager GET:URL parameters:dict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
[TTUserManager sharedInstance].currentUser.accessToken = responseObject[@"access_token"];
[TTUserManager sharedInstance].currentUser.refreshToken = responseObject[@"refresh_token"];
[TTUserManager sharedInstance].currentUser.expires_in = responseObject[@"expires_in"];
[TTUserManager sharedInstance].currentUser.scope = responseObject[@"scope"];
[TTUserManager sharedInstance].currentUser.unionid = responseObject[@"unionid"];
[TTUserManager sharedInstance].currentUser.openid = responseObject[@"openid"];
[TTUserManager sharedInstance].currentUser.openId = responseObject[@"openid"];
[self getUserInfoFromWechat];
} failure:nil];
[dataTask resume];
}