1.向微信注冊你的應(yīng)用程序id,并記錄在你的工程中
#define kWxAppID @"appid"
#define kWxAppSecret @"appSecret"
2.下載微信終端SDK文件
3.搭建開發(fā)環(huán)境
[1] 在XCode中建立你的工程
[2] 將SDK文件添加到你所建的工程中
[3]微信開放平臺新增了微信模塊用戶統(tǒng)計功能床三,便于開發(fā)者統(tǒng)計微信功能模塊的用戶使用和活躍情況撇簿。需要添加庫文件
[4] 在你的工程文件中選擇Build Setting四瘫,在Search Paths中添加 libWeChatSDK.a 莲组,WXApi.h锹杈,WXApiObject.h 三個文件所在位置:
building setting->search paths ->library search path
[5] 在Xcode中竭望,選擇你的工程設(shè)置項裕菠,選中“TARGETS”一欄奴潘,在“info”標(biāo)簽欄的“URL type“添加“URL scheme”為你所注冊的應(yīng)用程序id
[6] 在你需要使 用微信終端API的文件中import WXApi.h 頭文件画髓,并增加 WXApiDelegate 協(xié)議
4.在代碼中使用開發(fā)工具包
[1] 要使你的程序啟動后微信終端能響應(yīng)你的程序夺谁,必須在代碼中向微信終端注冊你的id
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[WXApi registerApp:kWxAppID];
return YES;
}
[2] 重寫AppDelegate的handleOpenURL和openURL方法
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [WXApi handleOpenURL:url delegate:self];
}
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [WXApi handleOpenURL:url delegate:self];
}
[3] 現(xiàn)在,你的程序要實現(xiàn)和微信終端交互的具體請求與回應(yīng)蜡塌,因此需要實現(xiàn)WXApiDelegate協(xié)議的兩個方法
-(void) onReq:(BaseReq*)reqonReq
這是微信終端向第三方程序發(fā)起請求馏艾,要求第三方程序響應(yīng)攒至。第三方程序響應(yīng)完后必須調(diào)用sendRsp返回躁劣。在調(diào)用sendRsp返回時账忘,會切回到微信終端程序界面
-(void) onResp:(BaseResp*)resp
如果第三方程序向微信發(fā)送了sendReq的請求熙宇,那么onResp會被回調(diào)烫止。sendReq請求調(diào)用后,會切到微信終端程序界面
5.請求微信登錄
- (IBAction)weChatLogin:(id)sender {
//構(gòu)造SendAuthReq結(jié)構(gòu)體
SendAuthReq* req =[[SendAuthReq alloc ] init ];
req.scope = @"snsapi_userinfo" ;
req.state = @"123" ;
//第三方向微信終端發(fā)送一個SendAuthReq消息結(jié)構(gòu)
[WXApi sendReq:req];
}
6.在wechat回調(diào)方法中
-(void) onResp:(BaseResp*)resp{
switch (resp.errCode) {
case 0://用戶同意
{
SendAuthResp *aresp = (SendAuthResp *)resp;
[self weChatCallBackWithCode:aresp.code];
}
break;
case -4://用戶拒絕授權(quán)
//do ...
break;
case -2://用戶取消
//do ...
break;
default:
break;
}
}
7.請求accessToken & openId
- (void)weChatCallBackWithCode:(NSString *)code{
NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",WECHAT_APPID,WECHAT_APPSECRET,code];
__block LoginViewController *loginVC = self;
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
[loginVC getUserInfoWithAccessToken:[dic objectForKey:@"access_token"] andOpenId:[dic objectForKey:@"openid"]];
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
}];
}
8.獲取用戶信息
//wx獲取用戶信息
- (void)getUserInfoWithAccessToken:(NSString *)accessToken andOpenId:(NSString *)openId{
NSString *urlString =[NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",accessToken,openId];
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];
[manager GET:urlString parameters:nil success:^(AFHTTPRequestOperation * _Nonnull operation, id _Nonnull responseObject) {
NSDictionary *dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
//保存數(shù)據(jù)
} failure:^(AFHTTPRequestOperation * _Nullable operation, NSError * _Nonnull error) {
}];
}