Step:1 (调用微信的SDK)
SendAuthReq* req =[[SendAuthReq alloc ] init ];
req.scope = @"snsapi_userinfo" ;
req.state = @"wechat_sdk_demo" ;
[WXApi sendReq:req];
Step:2 (接收微信回调的通知, 拿着回来的code(类型标识符
), 请求微信服务器 , 获取
access_token和
openid
)
#pragma mark -
微信支付成功或者失败回调
//在Appdelegate中写
-(void) onResp:(BaseResp*)resp {
NSString *strMsg = [NSString stringWithFormat:@"errcode:%d", resp.errCode];
NSString *strTitle;
if ([resp isKindOfClass:[SendAuthResp class]]) {
SendAuthResp *authResp = (SendAuthResp *)resp;
NSLog(@"微信回调 %@",authResp.code);
// 发送通知
[[NSNotificationCenter defaultCenter] postNotificationName:@"YJHAR" object:authResp.code];
}
}
#pragma mark -
获取微信
access_token
// 自己写的通知
( 请求微信服务器
- (void)clickYAR:(NSNotification *)fiction
{
self.codeStr = fiction.object;
NSDictionary *parameter = @{@"appid":@"wx3bd806653ef0a678",@"secret":@"5704f4aecf5654464c94842179cca381",@"code":self.codeStr,@"grant_type":@"authorization_code"};
[[NetWorkUtil shareInstace] getResultWithParameter:parameter urlStr:@"https://api.weixin.qq.com/sns/oauth2/access_token?" successBlock:^(id resDict) {
NSNumber *code = CODE(resDict);
if ([code integerValue] == CODE_SUCCESS) {
[self access_token:[resDict objectForKey:@"access_token"] openid:[resDict objectForKey:@"openid"]];
} else {
NSString *errMsg = MESSAGE(resDict);
[CommonMethod showAlterMessage:errMsg];
}
} failureBlock:^(NSString *error) {
[CommonMethod showAlterMessage:kConnectFailAlertMessage];
}];
}
Step:3 ( 请求微信服务器,通过微信access_token获取微信个人信息(微信昵称 头像等))
#pragma mark - 通过微信access_token获取个人信息
- (void)access_token:(NSString *)access_token openid:(NSString *)openid
{
NSDictionary *parameter = @{@"access_token":access_token,@"openid":openid};
[[NetWorkUtil shareInstace] getResultWithParameter:parameter urlStr:@"https://api.weixin.qq.com/sns/userinfo?" successBlock:^(id resDict) {
NSNumber *code = CODE(resDict);
if ([code integerValue] == CODE_SUCCESS) {
[self name:[resDict objectForKey:@"nickname"] head_url:[resDict objectForKey:@"headimgurl"]];
} else {
NSString *errMsg = MESSAGE(resDict);
[CommonMethod showAlterMessage:errMsg];
}
} failureBlock:^(NSString *error) {
[CommonMethod showAlterMessage:kConnectFailAlertMessage];
}];
}
Step:4 (请求服务端, 把获取到的微信信息发送到自己的服务器)
#pragma mark - 拿到的个人信息 绑定微信
- (void)name:(NSString *)name head_url:(NSString *)head_url
{
NSString *token = TOKEN(kTokenKey);
NSString *objId = OBJID(OBJkey);
NSDictionary *parameter = @{@"code":self.codeStr,@"token":token,@"user_id":objId,@"source_equ":@"ios",@"name":name,@"head_url":head_url};
[[NetWorkUtil shareInstace] postResultWithParameter:parameter urlStr:kNSStringFormat(ServerAddress, kUrlStrupdateDoctorThird) successBlock:^(id resDict) {
NSNumber *code = CODE(resDict);
if ([code integerValue] == CODE_SUCCESS) {
self.nickName = name;
[self.tableView reloadData];
//绑定成功 或者是登录成功
} else {
NSString *errMsg = MESSAGE(resDict);
[CommonMethod showAlterMessage:errMsg];
}
} failureBlock:^(NSString *error) {
[CommonMethod showAlterMessage:kConnectFailAlertMessage];
}];
}