前言:下面為各位看客介紹微信支付的開發(fā)流程細(xì)節(jié),圖文全方位解析,解決下我遇見的種種坑.......
老規(guī)矩嘛,動(dòng)手之前最好看一下微信支付官方文檔吧!雖然這貨文檔意義并沒有幫助到多大的卵用口糕。
第一步
申請(qǐng)開通微信開放平臺(tái)帳號(hào)(這個(gè)是做微信分享,登陸等等都需要開通的就不BB了,鏈接:微信開放平臺(tái))磕蛇,獲取AppID和AppSecret景描。
如圖:如果微信支付這個(gè)能力獲得十办,紅色圈部分就會(huì)變成已獲得,這屬性名取得也是萌萌噠超棺。
第二步
到了這里你應(yīng)該進(jìn)入到這個(gè)地方:微信支付|商戶平臺(tái)件相,沒錯(cuò),進(jìn)入了另外一個(gè)網(wǎng)站氧苍,就是這么坑B夜矗,樓主在這里被坑過一次.......這里面其實(shí)也沒啥東西,注意一個(gè)地方就好让虐。
第三步
下載官方demo,把下圖這幾個(gè)貨導(dǎo)入到自己的工程,怎么導(dǎo)入不用說明了吧....
最好看看read_me.txt文檔總歸沒有壞處的嘛
第四步
在AppDelegate里的didFinishLaunchingWithOptions方法里添加
1 [WXApi registerApp:AppID withDescription:@"一只帥B程序員"];
2 在Info->URL Types里面添加AppID
3好麸俘,到了我們的重要步驟,重要步驟惧笛,重要步驟找到官方demo調(diào)支付的方法,如下圖:
各位看客可以進(jìn)入到j(luò)umpToBizPay類方法看看从媚。一看就知道其實(shí)核心代碼就這部份:
//調(diào)起微信支付
NSMutableString *stamp? = [dict objectForKey:@"timestamp"];
PayReq* req? ? ? ? ? ? = [[PayReq alloc] init];
req.partnerId? ? ? ? ? = [dict objectForKey:@"partnerid"]; //商家向財(cái)付通申請(qǐng)的商家id
req.prepayId? ? ? ? ? ? = [dict objectForKey:@"prepayid"]; //預(yù)支付訂單
req.nonceStr? ? ? ? ? ? = [dict objectForKey:@"noncestr"]; //隨機(jī)串,防重發(fā)
req.timeStamp? ? ? ? ? = stamp.intValue; //時(shí)間戳患整,防重發(fā)
req.package? ? ? ? ? ? = [dict objectForKey:@"package"]; //商家根據(jù)財(cái)付通文檔填寫的數(shù)據(jù)和簽
req.sign? ? ? ? ? ? ? ? = [dict objectForKey:@"sign"]; //商家根據(jù)微信開放平臺(tái)文檔對(duì)數(shù)據(jù)做的簽
[WXApi sendReq:req];
注意拜效,樓主是這樣做的:
讓服務(wù)器把上面幾個(gè)參數(shù)打包發(fā)給你,把相應(yīng)數(shù)據(jù)轉(zhuǎn)成模型或者字典啥的,怎么方便怎么搞,通過這個(gè)類方法傳過去各谚,這樣做的好處:
1.安全性高
2.數(shù)據(jù)出錯(cuò)方便查找
3.移動(dòng)端基本原則紧憾,盡量將少移動(dòng)端的壓力和處理量
好了,微信支付也就搞定了昌渤,下面來看看這過程中會(huì)有哪些坑赴穗。
常見坑
1 自己看看AppID是不是和數(shù)據(jù)庫(kù)返回回來的AppID一樣般眉,有次樓主就SB的少copy了一位。潜支。甸赃。。
2 nonceStr這個(gè)隨機(jī)串其實(shí)就是服務(wù)器給你,你不能控制,所以沒啥注意的冗酿。
3 package = @"Sign=WXPay" 看看服務(wù)器傳回來的是不是這樣的,有可能被編譯成了各種奇特的符號(hào)埠对,sign的確需要大寫络断,不像之前有些帖子說的要小寫。
4 timeStamp這個(gè)時(shí)間戳项玛,求注意
這個(gè)不是NSString類型啊妓羊,服務(wù)器傳回來的時(shí)間戳可以拿到去時(shí)間戳轉(zhuǎn)換工具里面去轉(zhuǎn)換來看看,和當(dāng)前時(shí)間是否一樣,如果不一樣那么很有可能就是你寫成NSString類型了。
5 如果你app同時(shí)使用了友盟分享(含微信分享)和微信支付稍计。如果你沒有處理好這個(gè)兩個(gè)SDK register的順序躁绸,那就很不幸,也會(huì)出現(xiàn)這種情況臣嚣。 (如何出現(xiàn)這種情況净刮,請(qǐng)看我的測(cè)試步驟:1、殺掉微信進(jìn)程硅则、2淹父、刪除自己開發(fā)的app、3怎虫、重新同步自己的app到設(shè)備暑认,點(diǎn)擊微信支付) 兩者register的順序:如果是先調(diào)用微信registerApp、然后調(diào)用友盟的 [UMSocialWechatHandler setWXAppId:WXAppID appSecret:[NSString stringWithBundleNameForKey:@"WXAppSecret"] url:url] 大审,然后按照我測(cè)試的步驟蘸际,應(yīng)該就會(huì)出現(xiàn)。 解決辦法:改變兩者的register步驟徒扶。先調(diào)用友盟粮彤,然后調(diào)用微信。
6 如果上面的都驗(yàn)證過了沒錯(cuò)誤姜骡,那么我遇見的最坑的地方了,就是sing驗(yàn)簽导坟,這廝需要傳幾個(gè)字段進(jìn)去,是要有順序的圈澈,是要注意順序的惫周,必須要注意順序
總結(jié):
我在整個(gè)做支付過程中,沒遇見大的問題康栈,如果連微信支付界面都沒調(diào)起來递递,肯定是iOS開發(fā)這本的問題,如果能調(diào)起來界面谅将,出現(xiàn)一個(gè)確定界面漾狼,百分之80都是那幾個(gè)字段出了問題....希望這篇問題對(duì)大家開發(fā)微信支付有一定的幫助吧!<⒈邸Q吩辍!隅熙!