iOS ——微信支付

最近項(xiàng)目要求添加一個(gè)微信支付的功能,要求是不需要服務(wù)端的配合,獨(dú)立在客戶端完成。
開始看官方demo的時(shí)候發(fā)現(xiàn)客戶端只有短短的幾行代碼便成功了,更關(guān)鍵的是文檔中那些參數(shù)都解釋的含含糊糊僵朗。結(jié)果花了我好幾天的時(shí)間才最終弄好。現(xiàn)在細(xì)數(shù)其辛酸歷程屑彻。

                    //調(diào)起微信支付
                    PayReq* req             = [[[PayReq alloc] init]autorelease];
                    req.partnerId           = [dict objectForKey:@"partnerid"];
                    req.prepayId            = [dict objectForKey:@"prepayid"];
                    req.nonceStr            = [dict objectForKey:@"noncestr"];
                    req.timeStamp           = stamp.intValue;
                    req.package             = [dict objectForKey:@"package"];
                    req.sign                = [dict objectForKey:@"sign"];
                    [WXApi sendReq:req];

這就官方文檔中最核心的調(diào)出支付的代碼验庙,我們所需要做的一切都是獲取這六個(gè)參數(shù)。

首先來一個(gè)個(gè)的解釋這些參數(shù)
partnerId :這個(gè)就是在你申請(qǐng)通過微信商戶資料后發(fā)到你郵件的中的一個(gè)商戶號(hào)


106A3038-E2CA-46D0-9AFC-B86DF979D588.png

prepayid : 這個(gè)是需要向微信服務(wù)器提交申請(qǐng)后返回的一個(gè)支付交易會(huì)話ID社牲,詳細(xì)的下面會(huì)提到粪薛。

nonceStr : 這個(gè)是你自己生成的一個(gè)隨機(jī)數(shù)。

timeStamp : 這個(gè)是你生成的一個(gè)時(shí)間戳搏恤。10位Nナ佟E冉弧!不是13位的那個(gè)藤巢!

package : 這個(gè)目前是一個(gè)定死的值 Sign=WXPay搞莺。

sign : 這個(gè)是自己根據(jù)參數(shù)生成的一個(gè)簽名!最坑的就是它了掂咒!

現(xiàn)在來一個(gè)的說如何得到這些參數(shù)值

1才沧、prepayid
這個(gè)一般來說是在服務(wù)端申請(qǐng)好的,客戶端直接獲取就行绍刮。但是萬惡的公司居然要求在客戶端弄温圆。
先看官方文檔:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=9_1
乍一看無非是向微信的一個(gè)接口提交數(shù)據(jù),然后就會(huì)返回了录淡。
但是這茫茫多的參數(shù)中其實(shí)隱藏著無數(shù)的細(xì)節(jié)捌木,稍有不慎就返回一個(gè)大大失敗油坝,然后你就愁的一頭包了嫉戚。
這些參數(shù)里面有一個(gè)是需要生成一個(gè)簽名,這個(gè)簽名也是有官方文檔專門介紹的:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=4_3
這個(gè)文檔中有舉一個(gè)例子澈圈,大概就是說把一些參數(shù)按照ASCII的順序先進(jìn)行排序然后再拼接上一個(gè)key(這個(gè)key是你在申請(qǐng)成功商戶資料后按照郵件中提示進(jìn)行設(shè)置的彬檀,32位)。拼接好后進(jìn)行MD5轉(zhuǎn)碼瞬女∏系郏看起來很輕松明了吧,但是這里面最大的一個(gè)坑就是他這個(gè)舉例了诽偷!這個(gè)例子中只有寥寥幾個(gè)參數(shù)坤学,如果你就按照他這個(gè)也只是用這幾個(gè)參數(shù)生成簽名,那就怎么也獲取不到這個(gè)prepayid了报慕!實(shí)際上深浮,這個(gè)簽名里面所包含的參數(shù)是需要包含你所要提交獲取prepayid的所有參數(shù)的!
也就是前面給的官方文檔中所有表示必須要的參數(shù)眠冈,當(dāng)然除了你現(xiàn)在要生成的這個(gè)sign飞苇。
順便提一句,這里的提交數(shù)據(jù)是以XML的形式蜗顽,解析數(shù)據(jù)也是XML的格式布卡。
這樣就可以順利的獲得prepayid了。

2雇盖、nonceStr
這個(gè)很簡(jiǎn)單

NSString * nonce_str = [self md5:[NSString stringWithFormat:@"%d", arc4random() % 10000]];
nonce_str = [nonce_str uppercaseString];

- (NSString *) md5: (NSString *) inPutText
{
    const char *cStr = [inPutText UTF8String];
    unsigned char result[CC_MD5_DIGEST_LENGTH];
    CC_MD5(cStr, strlen(cStr), result);
    
    return [[NSString stringWithFormat:@"%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X%02X",
             result[0], result[1], result[2], result[3],
             result[4], result[5], result[6], result[7],
             result[8], result[9], result[10], result[11],
             result[12], result[13], result[14], result[15]
             ] lowercaseString];
}

其實(shí)就是一個(gè)隨機(jī)數(shù)忿等,怎么生成隨你。有個(gè)不得不提的地方崔挖,這里的noncestr就是你在第一次生成簽名時(shí)的那個(gè)隨機(jī)數(shù)这弧,不用再次生成了娃闲!

3、timeStamp

NSString * timeString = [NSString stringWithFormat:@"%.0f", [[NSDate date] timeIntervalSince1970]];

這個(gè)地方需要提示一下

@property (nonatomic, assign) UInt32 timeStamp;

他的類型是這個(gè)樣的匾浪,而你生成的是一個(gè)字符串類型的皇帮,最后提交的時(shí)候需要進(jìn)行轉(zhuǎn)化的!

4蛋辈、sign
這里的簽名不同于你第一次申請(qǐng)prepayid的簽名属拾,這里的生成簽名的參數(shù)是appid,prepayid,partnerid,timestamp,noncestr,package,這幾個(gè)排序后再拼接key,最后生成一個(gè)sign冷溶。

這樣一看渐白,其實(shí)還是很簡(jiǎn)答的嘛!果然還是我太蠢了.......好了逞频,如果還是不行纯衍,請(qǐng)?jiān)倏匆槐椋屑?xì)的看一遍苗胀。實(shí)在不行襟诸,請(qǐng)聯(lián)系我!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末基协,一起剝皮案震驚了整個(gè)濱河市歌亲,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌澜驮,老刑警劉巖陷揪,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異杂穷,居然都是意外死亡悍缠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門耐量,熙熙樓的掌柜王于貴愁眉苦臉地迎上來飞蚓,“玉大人,你說我怎么就攤上這事拴鸵$枳梗” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵劲藐,是天一觀的道長(zhǎng)八堡。 經(jīng)常有香客問我,道長(zhǎng)聘芜,這世上最難降的妖魔是什么兄渺? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮汰现,結(jié)果婚禮上挂谍,老公的妹妹穿的比我還像新娘叔壤。我一直安慰自己,他們只是感情好口叙,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布炼绘。 她就那樣靜靜地躺著,像睡著了一般妄田。 火紅的嫁衣襯著肌膚如雪俺亮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天疟呐,我揣著相機(jī)與錄音脚曾,去河邊找鬼。 笑死启具,一個(gè)胖子當(dāng)著我的面吹牛本讥,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播鲁冯,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼拷沸,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了晓褪?” 一聲冷哼從身側(cè)響起堵漱,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤综慎,失蹤者是張志新(化名)和其女友劉穎涣仿,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體示惊,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡好港,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了米罚。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片钧汹。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖录择,靈堂內(nèi)的尸體忽然破棺而出拔莱,到底是詐尸還是另有隱情,我是刑警寧澤隘竭,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布塘秦,位于F島的核電站,受9級(jí)特大地震影響动看,放射性物質(zhì)發(fā)生泄漏尊剔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一菱皆、第九天 我趴在偏房一處隱蔽的房頂上張望须误。 院中可真熱鬧挨稿,春花似錦、人聲如沸京痢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽祭椰。三九已至甩十,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吭产,已是汗流浹背侣监。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留臣淤,地道東北人橄霉。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像邑蒋,于是被迫代替她去往敵國(guó)和親姓蜂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

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

  • 前言:本篇文章目的在于梳理知識(shí)医吊,鞏固思想钱慢,學(xué)習(xí)總結(jié)。有什么好的建議卿堂,都可以留言束莫。互相促進(jìn)草描!總觀览绿,微信支付,也沒心思...
    麥穗0615閱讀 10,014評(píng)論 8 70
  • 前提是已經(jīng)創(chuàng)建完應(yīng)用了在微信的官網(wǎng)上穗慕。根據(jù)上一篇的微信獲得支付能力的步驟饿敲,這一篇主要制作微信支付的demo」涿啵回顧上...
    陽光的大男孩兒閱讀 24,254評(píng)論 25 50
  • 看到個(gè)不錯(cuò)的微信集成帖子怀各,分享給大家!(因?yàn)槲⑿胖Ц兑舱媸菈驉盒牡氖趵耍琓M要配置什么環(huán)境都沒說瓢对,肯定很多新手會(huì)被惡心...
    白屏閱讀 1,163評(píng)論 0 48
  • 一:介紹 項(xiàng)目中要用到支付功能,需要支付寶支付添吗、支付寶網(wǎng)頁支付沥曹、微信支付、銀聯(lián)支付、Apple_pay妓美,所以打算總...
    Swift社區(qū)閱讀 10,507評(píng)論 5 25
  • 前言:之前聽說過微信支付有很多坑僵腺,其實(shí)沒有想象的那么坑,整體感覺很容易上手壶栋,按照它的流程來不會(huì)有錯(cuò)辰如!PS:官方的流...
    li大鵬閱讀 4,756評(píng)論 5 41