IOS開發(fā)入門之微信支付流程

本文將帶你了解IOS開發(fā)入門iOS - 微信支付流程,希望本文對(duì)大家學(xué)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é)果返回給客戶端)

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

開發(fā)步驟

創(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文件中:


???LSApplicationQueriesSchemes??weixin??NSAppTransportSecurity??NSAllowsArbitraryLoads??????



  然后將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];

}</nsstring>




接下來我們需要遵守下協(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中看看它是如何使用的:

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

  回到我的簡易工程中,直接粘貼在里面用:

  那么這里面的返回信息中主要就有兩個(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è)試。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蔚舀,一起剝皮案震驚了整個(gè)濱河市饵沧,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌赌躺,老刑警劉巖狼牺,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異礼患,居然都是意外死亡是钥,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門缅叠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來悄泥,“玉大人,你說我怎么就攤上這事肤粱〉簦” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵领曼,是天一觀的道長鸥鹉。 經(jīng)常有香客問我蛮穿,道長,這世上最難降的妖魔是什么毁渗? 我笑而不...
    開封第一講書人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任绪撵,我火速辦了婚禮,結(jié)果婚禮上祝蝠,老公的妹妹穿的比我還像新娘音诈。我一直安慰自己,他們只是感情好绎狭,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開白布细溅。 她就那樣靜靜地躺著,像睡著了一般儡嘶。 火紅的嫁衣襯著肌膚如雪喇聊。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,292評(píng)論 1 301
  • 那天蹦狂,我揣著相機(jī)與錄音誓篱,去河邊找鬼。 笑死凯楔,一個(gè)胖子當(dāng)著我的面吹牛窜骄,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播摆屯,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼邻遏,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了虐骑?” 一聲冷哼從身側(cè)響起准验,我...
    開封第一講書人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎廷没,沒想到半個(gè)月后糊饱,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡颠黎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年另锋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盏缤。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡砰蠢,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出唉铜,到底是詐尸還是另有隱情台舱,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布,位于F島的核電站竞惋,受9級(jí)特大地震影響柜去,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜拆宛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一嗓奢、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浑厚,春花似錦股耽、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至敢艰,卻和暖如春诬乞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背钠导。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來泰國打工震嫉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人牡属。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓票堵,卻偏偏與公主長得像,于是被迫代替她去往敵國和親湃望。 傳聞我的和親對(duì)象是個(gè)殘疾皇子换衬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354

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

  • 微信支付的流程 注冊(cè)微信開放平臺(tái),創(chuàng)建應(yīng)用獲取appid证芭,appSecret,申請(qǐng)支付功能担映,申請(qǐng)成功之后會(huì)返回一些...
    管家頗閱讀 1,531評(píng)論 2 5
  • 在被支付寶废士、銀聯(lián)坑過之后,發(fā)現(xiàn)其實(shí)微信支付的集成并沒有想象中的那么困難蝇完,像支付寶那樣簡單地調(diào)用個(gè)方法就行官硝,重要的難...
    petry閱讀 703評(píng)論 2 2
  • iOS支付 iOS支付分為兩類,第三方支付和應(yīng)用內(nèi)支付(內(nèi)購)短蜕。 第三方支付包括:支付寶支付氢架、微信支付、銀聯(lián)支付朋魔、...
    請(qǐng)輸入賬號(hào)名閱讀 6,203評(píng)論 3 22
  • 首先需要理清楚流程: 1岖研、用戶使用APP客戶端,選擇商品下單。 2孙援、商戶客戶端(就是你做的APP)將用戶的商品數(shù)據(jù)...
    _____七年砍柴閱讀 1,444評(píng)論 1 7
  • 過去拓售;我總跟朋友說: 這人呢窥摄!一定要有夢(mèng)想;如果沒有夢(mèng)想础淤,那跟咸魚有什么區(qū)別呢崭放? 現(xiàn)在;我會(huì)跟他們說: 這夢(mèng)想案胄住莹菱!...
    陸家三少閱讀 517評(píng)論 0 2