微信支付對(duì)接銀行服務(wù)商

微信支付對(duì)接銀行服務(wù)商

前言

大家好勤篮,我是許RR都毒。最近為公司的聚合支付平臺(tái)對(duì)接廣發(fā)銀行(廣東發(fā)展銀行)服務(wù)商的支付通道,遇到很多問(wèn)題碰缔,特此記錄一下

概念

估計(jì)很多17年前做微信支付的朋友會(huì)對(duì)現(xiàn)在的微信支付模式感覺到奇怪账劲,比如出現(xiàn)了各種概念,商戶平臺(tái)金抡,渠道商瀑焦,之前的代理商概念也被換成了服務(wù)商,配置支付授權(quán)目錄也從公眾號(hào)后臺(tái)遷移到了商戶平臺(tái)上梗肝,支付白名單也悄然消失榛瓮,沒有了配置的地方,微信文檔也出現(xiàn)了三種對(duì)接模式巫击,包括普通商戶禀晓、服務(wù)商和銀行服務(wù)商。經(jīng)過(guò)我這幾天的重新學(xué)習(xí)坝锰,總結(jié)了一點(diǎn)概念分享給大家粹懒。首先先介紹各種對(duì)接模式的區(qū)別。

普通商戶接入

所謂普通商戶的對(duì)接就是最樸實(shí)無(wú)華的開發(fā)模式顷级,公眾號(hào)主體開通普通商戶類型的商戶后關(guān)聯(lián)到公眾號(hào)凫乖,開發(fā)拿到公眾號(hào)appIdmch_id這些參數(shù)到微信的接口去請(qǐng)求愕把,這種模式的優(yōu)勢(shì)在于簡(jiǎn)單快速拣凹,開發(fā)起來(lái)也沒有那么多的阻礙。但是缺點(diǎn)是不容易集成管理恨豁,沒有可重復(fù)性。

服務(wù)商商戶接入

服務(wù)商商戶是種比較特殊的商戶爬迟,17年前是沒有的橘蜜,但是可能是因?yàn)檎呋蛘吣承┰虺霈F(xiàn)了,服務(wù)商是有能力開發(fā)支付軟件的第三方公司付呕。我舉一個(gè)例子计福,比如說(shuō)XX醫(yī)院現(xiàn)在需要做線上就診業(yè)務(wù),需要開發(fā)一套公眾號(hào)網(wǎng)站徽职,但是只有自己的公眾號(hào)象颖,甚至連普通商戶也沒有,怎么辦呢姆钉?醫(yī)院就將開發(fā)線上就診公眾號(hào)軟件的責(zé)任交給我司说订,我司通過(guò)在我司的公眾號(hào)服務(wù)商商戶中新建一個(gè)子商戶(或者叫特約商戶)并綁定該醫(yī)院的公眾號(hào)抄瓦,讓該醫(yī)院根據(jù)微信指引開通各種東西,包括設(shè)置一個(gè)對(duì)公賬戶陶冷,通過(guò)這些設(shè)置钙姊,該醫(yī)院成為我司服務(wù)商商戶號(hào)下的一個(gè)子商戶,服務(wù)商開發(fā)拿到一些和子商戶有關(guān)的參數(shù)去微信的接口請(qǐng)求埂伦,最終金錢也是流向子商戶的設(shè)置的銀行賬戶煞额。這種模式的優(yōu)勢(shì)在于開發(fā)的可重用性高,一套代碼多次復(fù)用沾谜,并且可管理性高膊毁,并且服務(wù)商應(yīng)該還有一些我這種開發(fā)不知道的好處。

銀行服務(wù)商接入

其實(shí)銀行服務(wù)商和普通服務(wù)商應(yīng)該區(qū)別不大(微信文檔中提到)基跑,但是具體差別在哪我也不清楚媚媒,這個(gè)只有銀行的開發(fā)才知道了。

對(duì)接流程

準(zhǔn)備參數(shù)

普通商戶模式

普通商戶需要的參數(shù):

參數(shù) 參數(shù)名 參數(shù)說(shuō)明
appId 公眾號(hào)賬號(hào)id 微信支付分配的公眾賬號(hào)ID(企業(yè)號(hào)corpid即為此appId)
mch_id 商戶號(hào) 微信支付分配的商戶號(hào)(需要在微信的商戶平臺(tái)申請(qǐng)到普通商戶賬號(hào)涩僻,并關(guān)聯(lián)到公眾號(hào)
key 商戶平臺(tái)api安全key 微信退款時(shí)要用到缭召,在商戶平臺(tái)的api安全設(shè)置中設(shè)置

準(zhǔn)備測(cè)試環(huán)境

我司的業(yè)務(wù)是這樣的,有一個(gè)醫(yī)院想要做線上就診業(yè)務(wù)逆日,并且將開發(fā)公眾號(hào)網(wǎng)站的任務(wù)交給了我們嵌巷,我們代替醫(yī)院開發(fā)公眾號(hào)網(wǎng)站并且對(duì)接廣發(fā)銀行的服務(wù)商。第一步要做的就是準(zhǔn)備測(cè)試環(huán)境(這里我建議要對(duì)接銀行服務(wù)商的朋友開發(fā)時(shí)使用正式的公眾號(hào)參數(shù)進(jìn)行測(cè)試室抽,微信提供的測(cè)試公眾號(hào)還是與正式公眾號(hào)差別較大搪哪,部署起來(lái)問(wèn)題很多)。首先銀行有一套自己測(cè)試環(huán)境坪圾,并且銀行的測(cè)試環(huán)境對(duì)接微信的沙箱測(cè)試環(huán)境晓折,銀行服務(wù)商提供的測(cè)試環(huán)境其實(shí)相當(dāng)完備。接下來(lái)我們聊聊整個(gè)測(cè)試環(huán)境的流程與準(zhǔn)備兽泄。

進(jìn)件

將要開發(fā)的公眾號(hào)的主體名appId提供給銀行服務(wù)商在測(cè)試環(huán)境進(jìn)價(jià)漓概,銀行服務(wù)商在銀聯(lián)進(jìn)件后會(huì)搭好和微信相關(guān)的沙箱環(huán)境。一般測(cè)試環(huán)境進(jìn)件后銀行方會(huì)提供一些銀行方的參數(shù)(比如廣發(fā)銀行這里是提供了廣發(fā)銀行的商戶id病梢,廣發(fā)銀行的商戶號(hào)和廣發(fā)商戶應(yīng)用編號(hào))胃珍,他們接口的后端會(huì)自己去和微信的參數(shù)做關(guān)聯(lián),一般不會(huì)直接提供給對(duì)接方有關(guān)微信的參數(shù)(比如說(shuō)微信的商戶號(hào))蜓陌。

提供異步通知地址

微信支付完成后微信會(huì)將支付成功的結(jié)果異步通知到開發(fā)方觅彰。對(duì)接服務(wù)商的話,微信會(huì)先通知到服務(wù)商的后臺(tái)钮热,再由服務(wù)商后臺(tái)異步通知到對(duì)接服務(wù)商的后臺(tái)填抬,所以需要對(duì)接服務(wù)商的后臺(tái)開發(fā)提供異步通知地址給銀行方,讓銀行方去配置隧期,保證支付成功的結(jié)果能夠通知到開發(fā)商戶后臺(tái)飒责。

正式開發(fā)(實(shí)踐)

加密驗(yàn)簽通訊

我對(duì)接的銀行服務(wù)商有一套加密解密赘娄,加簽驗(yàn)簽的模式,我覺得可以完全避免安全問(wèn)題读拆。

  1. 請(qǐng)求方生成隨機(jī)字符串encryptKey

  2. 請(qǐng)求方使用自己的私鑰對(duì)請(qǐng)求體進(jìn)行簽名擅憔,生成sign

  3. 請(qǐng)求方使用encryptKey作為密鑰,用對(duì)稱加密方法去加密請(qǐng)求體檐晕,生成加密體

  4. 請(qǐng)求方使用響應(yīng)方的公鑰對(duì)encryptKey進(jìn)行非對(duì)稱加密暑诸,生成encryptKey1

  5. 請(qǐng)求方用加密體作為請(qǐng)求體,把encryptKey1sign附在http請(qǐng)求頭上發(fā)送給響應(yīng)方

  6. 響應(yīng)方接收請(qǐng)求

  7. 響應(yīng)方從請(qǐng)求頭上獲取encryptKey1并且用自己的私鑰解密辟灰,獲取encryptKey

  8. 響應(yīng)方用解密得到的encryptKey去解密加密體个榕,得到請(qǐng)求體

  9. 響應(yīng)方從請(qǐng)求頭上獲取sign,再用請(qǐng)求方額公鑰對(duì)請(qǐng)求體進(jìn)行驗(yàn)簽芥喇,驗(yàn)簽成功即代表成功

    這種加密加簽方式可以防止類型的任何攻擊西采,應(yīng)該說(shuō)是兩方對(duì)接接口的最佳實(shí)踐了。

接入預(yù)支付/下單接口

微信文檔提到的預(yù)支付继控,其實(shí)意思就是在微信下單械馆。調(diào)用大多數(shù)微信接口,需要保障的是微信和本身業(yè)務(wù)系統(tǒng)數(shù)據(jù)一致武通,舉個(gè)例子霹崎,我現(xiàn)在做的是一個(gè)門診的預(yù)約掛號(hào)業(yè)務(wù),患者要先掛號(hào)成功了冶忱,生成了成功的掛號(hào)單后尾菇,再去調(diào)用微信下單接口進(jìn)行下單,如果業(yè)務(wù)系統(tǒng)沒有處理下單失敗的結(jié)果囚枪,那么我們業(yè)務(wù)系統(tǒng)的數(shù)據(jù)就會(huì)亂了派诬,因?yàn)榘蠢碚f(shuō)我掛號(hào)成功了,是包括下單成功的链沼,假如我下單失敗了默赂,那么掛號(hào)業(yè)務(wù)也應(yīng)該失敗。我們系統(tǒng)內(nèi)的實(shí)踐是忆植,一但下單服務(wù)失敗放可,那么掛號(hào)也會(huì)失敗,直接返回給患者朝刊,讓患者手動(dòng)重試,同時(shí)釋放號(hào)源蜈缤。

接入退款接口

退款是業(yè)務(wù)中的重中之重拾氓,假如業(yè)務(wù)單是成功狀態(tài),但是退款接口卻給退款了底哥,那么無(wú)疑是生產(chǎn)事故咙鞍。最好的方法是先到微信查單房官,獲取支付訂單的最新狀態(tài),先判斷支付單是否已經(jīng)支付過(guò)续滋,可否退款翰守,再到業(yè)務(wù)系統(tǒng)中確認(rèn)業(yè)務(wù)單是否可退款,如果業(yè)務(wù)系統(tǒng)是不可退款疲酌,那么自然不能允許這次請(qǐng)求蜡峰。我們系統(tǒng)內(nèi)的實(shí)踐是,先進(jìn)行微信接口查單對(duì)系統(tǒng)內(nèi)的支付訂單進(jìn)行狀態(tài)更新朗恳,先查詢支付訂單是否處于已支付狀態(tài)湿颅,如果支付訂單不是已支付狀態(tài)那么不允許,如果支付訂單是已支付狀態(tài)粥诫,再去業(yè)務(wù)系統(tǒng)查詢業(yè)務(wù)訂單是否是可退款狀態(tài)油航,如果不是可退款狀態(tài),那么自然不可以給他退款怀浆。

接入查單接口

查單接口需要進(jìn)行系統(tǒng)內(nèi)的支付訂單和微信訂單進(jìn)行核對(duì)校驗(yàn)谊囚,保證系統(tǒng)內(nèi)的支付訂單是最新的狀態(tài),我們系統(tǒng)內(nèi)的實(shí)踐是执赡,每次查單接口被調(diào)用镰踏,就發(fā)起一次微信查單請(qǐng)求,對(duì)比系統(tǒng)內(nèi)的支付訂單與微信訂單的狀態(tài)搀玖,如果不相同則更新數(shù)據(jù)庫(kù)的支付訂單狀態(tài)余境。

接入支付

支付回調(diào)是用戶成功對(duì)微信訂單支付后,微信主動(dòng)異步請(qǐng)求業(yè)務(wù)系統(tǒng)服務(wù)端接口的一種消息通知灌诅,有使用過(guò)消息隊(duì)列的小伙伴可以把當(dāng)成微信發(fā)的一條消息隊(duì)列的消息芳来,業(yè)務(wù)系統(tǒng)主動(dòng)去消費(fèi)。這個(gè)異步通知猜拾,因?yàn)槭钱惒降募瓷啵椅⑿艜?huì)多次通知,所以需要業(yè)務(wù)系統(tǒng)提供的接口實(shí)現(xiàn)冪等性挎袜,并且因?yàn)槎啻萎惒降耐ㄖ缒簦枰偃绶植际芥i。我們系統(tǒng)內(nèi)的實(shí)踐是盯仪,在接口被調(diào)用第一行上加上基于redis setnx的分布式鎖紊搪,并設(shè)置過(guò)期時(shí)間為3秒,搶不到鎖的請(qǐng)求一律返回失敗全景,搶到鎖后耀石,先去數(shù)據(jù)庫(kù)查詢訂單,核對(duì)訂單狀態(tài)爸黄,如果訂單狀態(tài)不是未支付的滞伟,也返回失敗揭鳞,如果訂單狀態(tài)是已支付,那么說(shuō)明已經(jīng)被通知過(guò)了梆奈,直接返回成功野崇,保證冪等性。如果訂單狀態(tài)是未支付狀態(tài)亩钟,那么核對(duì)金額乓梨,金額對(duì)不上也返回失敗,直到經(jīng)過(guò)了所以的校驗(yàn)径荔,才對(duì)數(shù)據(jù)庫(kù)的訂單狀態(tài)進(jìn)行一個(gè)更新督禽。

未完待續(xù)。总处。狈惫。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市鹦马,隨后出現(xiàn)的幾起案子胧谈,更是在濱河造成了極大的恐慌,老刑警劉巖荸频,帶你破解...
    沈念sama閱讀 218,451評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件菱肖,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旭从,警方通過(guò)查閱死者的電腦和手機(jī)稳强,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)和悦,“玉大人退疫,你說(shuō)我怎么就攤上這事「胨兀” “怎么了褒繁?”我有些...
    開封第一講書人閱讀 164,782評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)馍忽。 經(jīng)常有香客問(wèn)我棒坏,道長(zhǎng),這世上最難降的妖魔是什么遭笋? 我笑而不...
    開封第一講書人閱讀 58,709評(píng)論 1 294
  • 正文 為了忘掉前任坝冕,我火速辦了婚禮,結(jié)果婚禮上瓦呼,老公的妹妹穿的比我還像新娘徽诲。我一直安慰自己,他們只是感情好吵血,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評(píng)論 6 392
  • 文/花漫 我一把揭開白布谎替。 她就那樣靜靜地躺著,像睡著了一般蹋辅。 火紅的嫁衣襯著肌膚如雪钱贯。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評(píng)論 1 305
  • 那天侦另,我揣著相機(jī)與錄音秩命,去河邊找鬼。 笑死褒傅,一個(gè)胖子當(dāng)著我的面吹牛弃锐,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殿托,決...
    沈念sama閱讀 40,320評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼霹菊,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了支竹?” 一聲冷哼從身側(cè)響起旋廷,我...
    開封第一講書人閱讀 39,241評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎礼搁,沒想到半個(gè)月后饶碘,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡馒吴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評(píng)論 3 336
  • 正文 我和宋清朗相戀三年扎运,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片饮戳。...
    茶點(diǎn)故事閱讀 39,992評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡豪治,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出莹捡,到底是詐尸還是另有隱情鬼吵,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評(píng)論 5 346
  • 正文 年R本政府宣布篮赢,位于F島的核電站齿椅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏启泣。R本人自食惡果不足惜涣脚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望寥茫。 院中可真熱鬧遣蚀,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至玖喘,卻和暖如春甩牺,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背累奈。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工贬派, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人澎媒。 一個(gè)月前我還...
    沈念sama閱讀 48,173評(píng)論 3 370
  • 正文 我出身青樓搞乏,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親戒努。 傳聞我的和親對(duì)象是個(gè)殘疾皇子请敦,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評(píng)論 2 355