国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統(tǒng) > iOS > 正文

iOS - 微信支付流程

2019-11-09 18:13:55
字體:
供稿:網(wǎng)友

親們, 首先讓我們來看一下微信支付的流程吧.

1. 注冊(cè)微信開放平臺(tái),創(chuàng)建應(yīng)用獲取appid,appSecret,申請(qǐng)支付功能,申請(qǐng)成功之后會(huì)返回一些參數(shù).

2. 下載微信支付sdk

3. 客戶端請(qǐng)求訂單,后臺(tái)與微信后臺(tái)交互,返回給客戶端支付參數(shù)

4. 調(diào)用微信客戶端,由微信客戶端和微信服務(wù)器打交道;

5. 客戶端和服務(wù)端都會(huì)收到支付結(jié)果;(前臺(tái)消息不可靠,我們需要去后臺(tái)驗(yàn)證,如果后臺(tái)沒有收到支付通知,后臺(tái)去微信服務(wù)器驗(yàn)證然后將結(jié)果返回給客戶端)

那么我們現(xiàn)在就開始寫微信支付的demo了

開發(fā)步驟

1.  https://open.weixin.QQ.com/cgi-bin/index?t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011

創(chuàng)建移動(dòng)應(yīng)用并成功之后會(huì)收到騰訊發(fā)來的郵件

通過郵件我們能獲得重要的參數(shù):

(1):AppID

(2):微信支付商戶號(hào)

(4):前往商戶平臺(tái)完成入駐

(4):API秘鑰(自己設(shè)置即可,注意一定要32位字母加數(shù)字的組合)記得保存好秘鑰,以后要使用

 

有了這些參數(shù)后,我們就可以開發(fā)自己的項(xiàng)目了.

接下來, 我們就新建一個(gè)微信工程吧.

創(chuàng)建好工程以后呢, 我們?nèi)ノ⑿牌脚_(tái)下載sdk

鏈接: https://pay.weixin.qq.com/wiki/doc/api/app/app.php?chapter=8_5#

 

下載好以后呢, 我們就開始集成SDK了

把左邊的SDK拉到工程里面哦.

大家會(huì)看到文件夾里面有集成SDK的步驟.

導(dǎo)入框架和庫

接著,按照read_me.txt的提示,我們把那段plist代碼拷貝到info.plist文件中:

?
123456789<key>LSapplicationQueriesSchemes</key><array><string>weixin</string></array><key>NSAPPTransportSecurity</key><dict><key>NSAllowsArbitraryLoads</key><true/></dict>

  然后將info.plist文件切換為PRoperty list顯示視圖,你就會(huì)看到多了兩項(xiàng):

  App Transport Security Settings是XCode7以后就需要開發(fā)中手動(dòng)添加設(shè)置的,因?yàn)閕OS9默認(rèn)限制了http協(xié)議的訪問。

  LSApplicationQueriesSchemes是可以將要使用的URL Schemes列為白名單,這樣當(dāng)前應(yīng)用可以使用微信的相關(guān)能力(分享、收藏、支付、登錄等)。

最后還有一個(gè)操作哦,將微信支付要用到的APPID設(shè)置為URL Schemes [英 ski?m]。

1、項(xiàng)目設(shè)置APPID

商戶在微信開放平臺(tái)申請(qǐng)開發(fā)APP應(yīng)用后,微信開放平臺(tái)會(huì)生成APP的唯一標(biāo)識(shí)APPID。在Xcode中打開項(xiàng)目,設(shè)置項(xiàng)目屬性中的URL Schemes為您的APPID。

這個(gè)我們按照文檔做一下就可以了.

2、注冊(cè)APPID

商戶APP工程中引入微信lib庫和頭文件,調(diào)用API前,需要先向微信注冊(cè)您的APPID,代碼如下:

[WXApi registerApp:@"wxd930ea5d5a258f4f];

3、調(diào)起支付

商戶服務(wù)器生成支付訂單,先調(diào)用【統(tǒng)一下單API】生成預(yù)付單,獲取到prepay_id后將參數(shù)再次簽名傳輸給APP發(fā)起支付。以下是調(diào)起微信支付的關(guān)鍵代碼:

現(xiàn)在我們只需要在控制器上添加一個(gè)button, 名字改成微信支付就可以了

button事件:

 

- (IBAction)weChatPayButtonAction:(id)sender{    PayReq *request = [[PayReq alloc] init];    /** 商家向財(cái)付通申請(qǐng)的商家id */    request.partnerId = @"1220277201";    /** 預(yù)支付訂單 */    request.prepayId= @"82010380001603250865be9c4c063c30";    /** 商家根據(jù)財(cái)付通文檔填寫的數(shù)據(jù)和簽名 */    request.package = @"Sign=WXPay";    /** 隨機(jī)串,防重發(fā) */    request.nonceStr= @"lUu5qloVJV7rrJlr";    /** 時(shí)間戳,防重發(fā) */    request.timeStamp= 1458893985;    /** 商家根據(jù)微信開放平臺(tái)文檔對(duì)數(shù)據(jù)做的簽名 */    request.sign= @"b640c1a4565b476db096f4d34b8a9e71960b0123";    /*! @brief 發(fā)送請(qǐng)求到微信,等待微信返回onResp     *     * 函數(shù)調(diào)用后,會(huì)切換到微信的界面。第三方應(yīng)用程序等待微信返回onResp。微信在異步處理完成后一定會(huì)調(diào)用onResp。支持以下類型     * SendAuthReq、SendMessageToWXReq、PayReq等。     * @param req 具體的發(fā)送請(qǐng)求,在調(diào)用函數(shù)后,請(qǐng)自己釋放。     * @return 成功返回YES,失敗返回NO。     */    [WXApi sendReq: request];}

 

4、支付結(jié)果回調(diào)

按照微信SDKSample,在類實(shí)現(xiàn)onResp函數(shù),支付完成后,微信APP會(huì)返回到商戶APP并回調(diào)onResp函數(shù),開發(fā)者需要在該函數(shù)中接收通知,判斷返回錯(cuò)

誤碼,如果支付成功則去后臺(tái)查詢支付結(jié)果再展示用戶實(shí)際支付結(jié)果。注意

一定不能以客戶端返回作為用戶支付的結(jié)果,應(yīng)以服務(wù)器端的接收的支付通知或查詢API返回的結(jié)果為準(zhǔn)。

這是最后一步了, 我們?cè)谥Ц俄撁嬷Ц锻瓿梢院竽匾乐Ц督Y(jié)果, 怎么做呢?

首先, 在AppDelegate.m里面實(shí)現(xiàn)該方法

 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options{    /*! @brief 處理微信通過URL啟動(dòng)App時(shí)傳遞的數(shù)據(jù)     *     * 需要在 application:openURL:sourceApplication:annotation:或者application:handleOpenURL中調(diào)用。     * @param url 微信啟動(dòng)第三方應(yīng)用時(shí)傳遞過來的URL     * @param delegate  WXApiDelegate對(duì)象,用來接收微信觸發(fā)的消息。     * @return 成功返回YES,失敗返回NO。     */    return [WXApi handleOpenURL:url delegate:self];}

 

 

接下來我們需要遵守下協(xié)議

 

最后一步, 就等支付結(jié)果出來以后回調(diào)一個(gè)函數(shù)了

/*! @brief 發(fā)送一個(gè)sendReq后,收到微信的回應(yīng) * * 收到一個(gè)來自微信的處理結(jié)果。調(diào)用一次sendReq后會(huì)收到onResp。 * 可能收到的處理結(jié)果有SendMessageToWXResp、SendAuthResp等。 * @param resp具體的回應(yīng)內(nèi)容,是自動(dòng)釋放的 */- (void)onResp:(BaseResp *)resp{    //支付返回結(jié)果,實(shí)際支付結(jié)果需要去微信服務(wù)器端查詢    NSString *strMsg = [NSString stringWithFormat:@"支付結(jié)果"];    switch (resp.errCode) {        case WXSuccess:            strMsg = @"支付結(jié)果:成功!";            NSLog(@"支付成功-PaySuccess,retcode = %d", resp.errCode);            break;        default:            strMsg = [NSString stringWithFormat:@"支付結(jié)果:失敗!retcode = %d, retstr = %@", resp.errCode,resp.errStr];            NSLog(@"錯(cuò)誤,retcode = %d, retstr = %@", resp.errCode,resp.errStr);            break;    }}進(jìn)一步,我們?cè)谖⑿诺腟DK源碼頭文件中,可以找到兩個(gè)很有用的方法,你也可以在微信支付平臺(tái)打開開發(fā)者文檔找到這兩個(gè)方法的介紹:

  然后我將其運(yùn)用在我的工程中

  好,就這樣,步驟:3、發(fā)起微信支付,調(diào)起微信 到這里就完成了。

  最后還需要做的就是,處理返回微信支付返回信息,使用了微信知否功能,不管是支付成功和失敗,甚至還是用戶自己取消支付,都會(huì)需要返回當(dāng)前應(yīng)用,并返回相關(guān)的信息。

  這里就需要用到微信SDK的處理返回信息的代理協(xié)議和代理方法了:

  在微信SDK的頭文件中,我們可以找到protocol協(xié)議:

  好,我們也官方Demo中看看它是如何使用的:

  而我們只需要使用下面紅色框框起來的部分代碼,直接拷貝拿來使用:

  回到我的簡(jiǎn)易工程中,直接粘貼在里面用:

  那么這里面的返回信息中主要就有兩個(gè)東西:resp.errCode錯(cuò)誤碼 和 resp.errStr錯(cuò)誤原因,這兩個(gè)東西在實(shí)際開發(fā)中經(jīng)常遇到,所以也是面試會(huì)問到的一個(gè)細(xì)節(jié)。

  接著你可以通過點(diǎn)進(jìn)連接:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=8_5 可以在官方開發(fā)文檔中找到:

  然后,根據(jù)實(shí)際開發(fā)需求,我們可能還需要回傳微信app的相關(guān)信息:

  在當(dāng)前AppDelegate.m文件添加一個(gè)代理方法:

5、到這里,就完成了整個(gè)微信支付的使用流程,下面可以用你的真機(jī)進(jìn)行測(cè)試了,因?yàn)槟M器不好安裝微信。

最后補(bǔ)充無意發(fā)現(xiàn)的大神github上也有微信講解和源碼,大家也可以學(xué)習(xí)學(xué)習(xí):

https://github.com/renzifeng/WXPay

只不過,對(duì)于沒有花99美刀買了開發(fā)者賬戶,該github上下載的源碼估計(jì)不能直接用真機(jī)測(cè)試,原因是上面的項(xiàng)目實(shí)例創(chuàng)建的時(shí)間比較早,那時(shí)候XCode在沒有開發(fā)者賬戶的時(shí)候,不支持真機(jī)測(cè)試。

還有一個(gè)大牛寫的微信支付的博文,而且就是2016年1月20號(hào)寫的呢:

http://www.cnblogs.com/jys509/p/5130990.html

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富宁县| 项城市| 天柱县| 伊通| 抚宁县| 宁阳县| 宝鸡市| 丹寨县| 襄垣县| 股票| 霍州市| 潮安县| 昔阳县| 大安市| 余干县| 靖远县| 墨玉县| 嵊州市| 郴州市| 呼玛县| 伽师县| 江山市| 犍为县| 平湖市| 那曲县| 桓台县| 仪陇县| 德江县| 循化| 贞丰县| 仪陇县| 通城县| 遂宁市| 富顺县| 承德市| 隆安县| 德惠市| 平利县| 县级市| 扎鲁特旗| 新化县|