iOS 微信支付

微信支付的流程

  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é)果返回給客戶端)

微信支付流程圖

支付流程圖@2x.png

開發(fā)步驟

  1. 去微信開放平臺(tái)注冊(cè)應(yīng)用
    (https://open.weixin.qq.com/cgi-bin/index?t=home/index&lang=zh_CN&token=2c0fee9c43e1eb8f9febcc7cb73abf598e2d4011)
    創(chuàng)建移動(dòng)應(yīng)用并成功之后會(huì)收到騰訊發(fā)來的郵件
    審核通過信息@2x.png
  2. 通過郵件我們能獲得重要的參數(shù)
    (1):AppID
    (2):微信支付商戶號(hào)
    (3):前往商戶平臺(tái)完成入駐
    (4):API秘鑰(自己設(shè)置即可,注意一定要32位字母加
    數(shù)字的組合)記得保存好秘鑰顾腊,以后要使用


    入駐@2x.png

    下載證書.png
  3. 有了這些參數(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@2x.png
  4. 下載好以后呢, 我們就開始集成SDK


    集成SDK@2x.png
  5. 把左邊的SDK拉到工程里面粤铭,大家會(huì)看到文件夾里面有集成SDK的步驟


    readMe@2x.png

    (1)在info.plist添加如下代碼


    1@2x.png

    (2)添加需要的框架和依賴庫(kù) (ps: 官方文檔沒讓添加libc++.tbd, 這點(diǎn)也是工程報(bào)錯(cuò)的時(shí)候發(fā)現(xiàn)的...)
    2@2x.png
  6. 剩下的事情, 我們只需要按照官方文檔來做就行了


    APP端開發(fā)步驟@2x.png
  7. 項(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(微信:APPID:wx.........69)


    添加URL Schemes@2x.png
  8. 注冊(cè)APPID,商戶APP工程中引入微信lib庫(kù)和頭文件吗垮,調(diào)用API前垛吗,需要先向微信注冊(cè)您的APPID


    注冊(cè)APPID
  9. 調(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 = @"122****201";
    /** 預(yù)支付訂單 */
    request.prepayId= @"8201038****be9c4c063c30";
    /** 商家根據(jù)財(cái)付通文檔填寫的數(shù)據(jù)和簽名 */
    request.package = @"Sign=WXPay";
    /** 隨機(jī)串,防重發(fā) */
    request.nonceStr= @"lUu5qloVJV7rrJlr";
    /** 時(shí)間戳饵沧,防重發(fā) */
    request.timeStamp= 145****985;
    /** 商家根據(jù)微信開放平臺(tái)文檔對(duì)數(shù)據(jù)做的簽名 */
    request.sign= @"b640c1a4565b4****4b8a9e71960b0123";
    /*! @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];
}
  1. 支付結(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];
}
  1. 接下來我們需要遵守下協(xié)議


    遵守協(xié)議@2x.png
  2. 最后一步, 就等支付結(jié)果出來以后回調(diào)一個(gè)函數(shù)了
/*發(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;
    }
}

這樣, 我們就完成了微信支付iOS客戶端的代碼

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末党远,一起剝皮案震驚了整個(gè)濱河市削解,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沟娱,老刑警劉巖氛驮,帶你破解...
    沈念sama閱讀 218,858評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異济似,居然都是意外死亡矫废,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門砰蠢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蓖扑,“玉大人,你說我怎么就攤上這事台舱÷筛埽” “怎么了?”我有些...
    開封第一講書人閱讀 165,282評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)柜去。 經(jīng)常有香客問我灰嫉,道長(zhǎng),這世上最難降的妖魔是什么嗓奢? 我笑而不...
    開封第一講書人閱讀 58,842評(píng)論 1 295
  • 正文 為了忘掉前任讼撒,我火速辦了婚禮,結(jié)果婚禮上股耽,老公的妹妹穿的比我還像新娘椿肩。我一直安慰自己,他們只是感情好豺谈,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著贡这,像睡著了一般茬末。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上盖矫,一...
    開封第一講書人閱讀 51,679評(píng)論 1 305
  • 那天丽惭,我揣著相機(jī)與錄音,去河邊找鬼辈双。 笑死责掏,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的湃望。 我是一名探鬼主播换衬,決...
    沈念sama閱讀 40,406評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼证芭!你這毒婦竟也來了瞳浦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,311評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤废士,失蹤者是張志新(化名)和其女友劉穎叫潦,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體官硝,經(jīng)...
    沈念sama閱讀 45,767評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡矗蕊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了氢架。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片傻咖。...
    茶點(diǎn)故事閱讀 40,090評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖达箍,靈堂內(nèi)的尸體忽然破棺而出没龙,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 35,785評(píng)論 5 346
  • 正文 年R本政府宣布硬纤,位于F島的核電站解滓,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏筝家。R本人自食惡果不足惜洼裤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望溪王。 院中可真熱鬧腮鞍,春花似錦、人聲如沸莹菱。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)道伟。三九已至迹缀,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜜徽,已是汗流浹背祝懂。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評(píng)論 1 271
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留拘鞋,地道東北人砚蓬。 一個(gè)月前我還...
    沈念sama閱讀 48,298評(píng)論 3 372
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像盆色,于是被迫代替她去往敵國(guó)和親灰蛙。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 前言:本篇文章目的在于梳理知識(shí)傅事,鞏固思想缕允,學(xué)習(xí)總結(jié)。有什么好的建議蹭越,都可以留言障本。互相促進(jìn)响鹃!總觀驾霜,微信支付,也沒心思...
    麥穗0615閱讀 10,050評(píng)論 8 70
  • 看到個(gè)不錯(cuò)的微信集成帖子买置,分享給大家7嗖凇(因?yàn)槲⑿胖Ц兑舱媸菈驉盒牡模琓M要配置什么環(huán)境都沒說忿项,肯定很多新手會(huì)被惡心...
    白屏閱讀 1,170評(píng)論 0 48
  • 抽個(gè)時(shí)間總結(jié)一下微信支付蓉冈; 需要和微信申請(qǐng)APPID然后審核 (300塊大洋) 首先從官網(wǎng)上下載一個(gè)demo[網(wǎng)址...
    芝麻綠豆閱讀 1,956評(píng)論 11 46
  • 前言:之前聽說過微信支付有很多坑城舞,其實(shí)沒有想象的那么坑,整體感覺很容易上手寞酿,按照它的流程來不會(huì)有錯(cuò)家夺!PS:官方的流...
    li大鵬閱讀 4,796評(píng)論 5 41
  • 最近公司需要開發(fā)支付功能,經(jīng)過這兩天的工作成功集成了app微信支付伐弹、支付寶支付拉馋。本文主要講述微信支付的流程和在集成...
    予獨(dú)愛秋天的梅花閱讀 2,073評(píng)論 0 5