微信開(kāi)發(fā):發(fā)消息到朋友圈,微信第三方登錄,微信支付

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)的提示

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 注意:代碼自己動(dòng)手寫(xiě),不要復(fù)制! GitHub 一、接入微信第三方登錄準(zhǔn)備工作。 移動(dòng)應(yīng)用微信登錄是基于OAuth...
    大沖哥閱讀 15,412評(píng)論 0 7
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,365評(píng)論 25 708
  • 別告訴我世界不美好,請(qǐng)給我你的一顆善良的心,我?guī)泐I(lǐng)略世界的風(fēng)光。 有人說(shuō),你是一個(gè)怎樣的人,你眼里的世界就是什么...
    木下雨點(diǎn)閱讀 586評(píng)論 0 1
  • 杏兒黃了 麥子黃了 沉掂掂的希望 大哥笑了 兒媳婦快生了 二哥高興地收拾屋子 準(zhǔn)備收藏麥子 三弟也笑了 外面的欠賬...
    胡長(zhǎng)溪閱讀 305評(píng)論 0 0
  • 王小五和我 我不知道此刻在看這篇文章的朋友,你們有沒(méi)有一個(gè)交心的知己?她真心為你,在她心里,你是她的親人。你開(kāi)心時(shí)...
    九蹬閱讀 490評(píng)論 2 1

友情鏈接更多精彩內(nèi)容