1 需要到微信開(kāi)發(fā)者網(wǎng)站,注冊(cè)應(yīng)用程序id
2 到資源下載頁(yè)下載SDK文件
3 搭建開(kāi)發(fā)環(huán)境
1 將SDK導(dǎo)入到工程中
2 添加庫(kù)SystemConfiguration.framework,libz.tbd,libsqlite3.0.tbd,libc++.tbd
3 在build setting,searchpaths中添加微信SDK的所在路徑
4 在Targets,info中URL type添加URLScheme為所注冊(cè)應(yīng)用的ID,key為weixin
5 在需要使用的地方引入WXApi.h,并實(shí)現(xiàn)WXApiDelegate協(xié)議
4 向微信終端注冊(cè)應(yīng)用程序的id,只有已經(jīng)注冊(cè)過(guò)id的程序,微信終端才能響應(yīng)

5 重寫(xiě)AppDelegate的handleOpenURL和OpenURL

6 再用微信登錄和微信分享時(shí)需要判定是否安裝微信
[WXApi isWXAppInstalled] ?判定微信是否安裝
[WXApiisWXAppSupportApi]判定微信的openapi版本,其實(shí)就是看微信版本是否需要升級(jí)
7 判定完以后向微信發(fā)送請(qǐng)求
構(gòu)建SendAuthResp需要傳入兩個(gè)參數(shù):
具體可見(jiàn)微信登錄授權(quán)接口
scope:向微信請(qǐng)求那些權(quán)限
state:第三方程序本身用來(lái)標(biāo)識(shí)其請(qǐng)求的唯一性,最后跳轉(zhuǎn)回第三方程序時(shí),由微信終端回傳
SendAuthReq* req =[[SendAuthReq alloc]init];
req.scope="snsapi_userinfo"; //請(qǐng)求全部權(quán)限
req.state="wx_auth";
//第三方向微信終端發(fā)送一個(gè)SendAuthReq消息結(jié)構(gòu)
[WXApi sendReq:req];
對(duì)微信支付需要有server端先生成預(yù)付單,然后再由客戶端發(fā)起支付請(qǐng)求[WXApisendReq:request];
8 程序要實(shí)現(xiàn)和微信交互的請(qǐng)求和回應(yīng),需要實(shí)現(xiàn)協(xié)議
WXApiDelegate
-(void) onReq:(BaseReq*)reqonReq
是微信終端向第三方程序發(fā)起請(qǐng)求,要求第三方程序響應(yīng)。第三方程序響應(yīng)完后必須調(diào)用sendRsp返回。在調(diào)用sendRsp返回時(shí),會(huì)切回到微信終端程序界面。
如果僅僅用到微信的分享和登錄授權(quán)通常可以不實(shí)現(xiàn)或?qū)崿F(xiàn)為空
-(void) onResp:(BaseResp*)resp
如果第三方程序向微信發(fā)送了sendReq的請(qǐng)求,那么onResp會(huì)被回調(diào)。sendReq請(qǐng)求調(diào)用后,會(huì)切到微信終端程序界面。
這個(gè)方法是向微信發(fā)起授權(quán)登錄的請(qǐng)求,微信結(jié)果回調(diào)的方法
Resp可能的值有:SendAuthResp,PayResp,SendMessageToWXReq
SendAuthResp:
微信授權(quán)登錄成功,需要判定其state == " wx_auth" && resp.erroCode == WXSuccess ,判定為真,說(shuō)明微信用戶允許授權(quán)第三方應(yīng)用,微信會(huì)拉起應(yīng)用或重定向到第三方網(wǎng)站,并且?guī)鲜跈?quán)臨時(shí)票據(jù)code參數(shù);
在被用戶授權(quán)成功之后,通過(guò)code參數(shù)加上AppID和AppSecret
調(diào)用API向微信發(fā)起請(qǐng)求用戶的接口調(diào)用憑證access_token,如下
參數(shù):APPID:所申請(qǐng)應(yīng)用程序的appID
Secret :通過(guò)審核后獲得的密碼
code:(SendAuthResp*)resp).code
type:"authorization_code"

如果請(qǐng)求成功,微信會(huì)返回json數(shù)據(jù),解析出"openid","access_token","expires_in"等參數(shù)以備后用
拿到access_token等參數(shù)之后,通常做法是把這些參數(shù)傳給server端,向server端發(fā)起用戶登錄的請(qǐng)求,根據(jù)server端返回的結(jié)果來(lái)判定用戶是否登錄成功
PayResp:
這個(gè)是微信終端返回給第三方關(guān)于支付結(jié)果的結(jié)構(gòu)體,根據(jù)錯(cuò)誤碼來(lái)判定支付是否成功(resp.errorCode == WXSUCCESS)支付成功(為了安全起見(jiàn)此時(shí)需要向server端驗(yàn)證支付是否成功,通常需要傳入?yún)?shù)訂單id,支付類型等,由server端驗(yàn)證支付結(jié)果,然后返回客戶端在做相應(yīng)的處理)
SendMessageToWXReq
這個(gè)是向微信分享圖片,視頻,鏈接和文本信息,其中文本信息的分享不能和其他三個(gè)同時(shí)存在
同樣用resp.errorCode == WXSUCCESS來(lái)判定是否分享成功,然后在客戶端做相應(yīng)的提示