1 需要到微信開發者網站,注冊應用程序id
2 到資源下載頁下載SDK文件
3 搭建開發環境
1 將SDK導入到工程中
2 添加庫SystemConfiguration.framework,libz.tbd,libsqlite3.0.tbd,libc++.tbd
3 在build setting,searchpaths中添加微信SDK的所在路徑
4 在Targets,info中URL type添加URLScheme為所注冊應用的ID,key為weixin
5 在需要使用的地方引入WXApi.h,并實現WXApiDelegate協議
4 向微信終端注冊應用程序的id,只有已經注冊過id的程序,微信終端才能響應
5 重寫AppDelegate的handleOpenURL和OpenURL
6 再用微信登錄和微信分享時需要判定是否安裝微信
[WXApi isWXAppInstalled] ?判定微信是否安裝
[WXApiisWXAppSupportApi]判定微信的openapi版本,其實就是看微信版本是否需要升級
7 判定完以后向微信發送請求
構建SendAuthResp需要傳入兩個參數:
具體可見微信登錄授權接口
scope:向微信請求那些權限
state:第三方程序本身用來標識其請求的唯一性,最后跳轉回第三方程序時,由微信終端回傳
SendAuthReq* req =[[SendAuthReq alloc]init];
req.scope="snsapi_userinfo"; //請求全部權限
req.state="wx_auth";
//第三方向微信終端發送一個SendAuthReq消息結構
[WXApi sendReq:req];
對微信支付需要有server端先生成預付單,然后再由客戶端發起支付請求[WXApisendReq:request];
8 程序要實現和微信交互的請求和回應,需要實現協議
WXApiDelegate
-(void) onReq:(BaseReq*)reqonReq
是微信終端向第三方程序發起請求,要求第三方程序響應。第三方程序響應完后必須調用sendRsp返回。在調用sendRsp返回時,會切回到微信終端程序界面。
如果僅僅用到微信的分享和登錄授權通常可以不實現或實現為空
-(void) onResp:(BaseResp*)resp
如果第三方程序向微信發送了sendReq的請求,那么onResp會被回調。sendReq請求調用后,會切到微信終端程序界面。
這個方法是向微信發起授權登錄的請求,微信結果回調的方法
Resp可能的值有:SendAuthResp,PayResp,SendMessageToWXReq
SendAuthResp:
微信授權登錄成功,需要判定其state == " wx_auth" && resp.erroCode == WXSuccess ,判定為真,說明微信用戶允許授權第三方應用,微信會拉起應用或重定向到第三方網站,并且帶上授權臨時票據code參數;
在被用戶授權成功之后,通過code參數加上AppID和AppSecret
調用API向微信發起請求用戶的接口調用憑證access_token,如下
參數:APPID:所申請應用程序的appID
Secret :通過審核后獲得的密碼
code:(SendAuthResp*)resp).code
type:"authorization_code"
如果請求成功,微信會返回json數據,解析出"openid","access_token","expires_in"等參數以備后用
拿到access_token等參數之后,通常做法是把這些參數傳給server端,向server端發起用戶登錄的請求,根據server端返回的結果來判定用戶是否登錄成功
PayResp:
這個是微信終端返回給第三方關于支付結果的結構體,根據錯誤碼來判定支付是否成功(resp.errorCode == WXSUCCESS)支付成功(為了安全起見此時需要向server端驗證支付是否成功,通常需要傳入參數訂單id,支付類型等,由server端驗證支付結果,然后返回客戶端在做相應的處理)
SendMessageToWXReq
這個是向微信分享圖片,視頻,鏈接和文本信息,其中文本信息的分享不能和其他三個同時存在
同樣用resp.errorCode == WXSUCCESS來判定是否分享成功,然后在客戶端做相應的提示