laravel電商學(xué)習(xí)系列-06 支付模塊

1. 前言

支付模塊不管在哪個(gè)系統(tǒng)都是重要的(跟錢有關(guān)系的能不重要嘛)。課程中使用的是yansongda/pay的支付庫,集成了支付寶纯露、微信支付,使用方便代芜。支付模塊主要是按照支付通道的支付規(guī)則編碼實(shí)現(xiàn)埠褪,其實(shí)質(zhì)就是接口請(qǐng)求。課程中側(cè)重開發(fā)實(shí)現(xiàn)挤庇,介紹了支付拓展包的使用钞速。因此,支付集成的部分嫡秕,本章節(jié)暫且跳過渴语,只記錄學(xué)習(xí)點(diǎn)。
課程傳送門-支付集成

此外昆咽,課程中還實(shí)現(xiàn)了電商行業(yè)大熱分期付款驾凶。本章節(jié)主要梳理課程中對(duì)分期付款的實(shí)現(xiàn)方案。
課程傳送門-分期付款

2. 功能分析

2.1 支付集成

2.1.1 編碼學(xué)習(xí)

支付模塊單拎出來就很抗打掷酗,涉及到加解密调违、字符編碼的處理,代碼封裝泻轰。

  • 實(shí)現(xiàn)過程
    支付模塊比較有意思的是代碼實(shí)現(xiàn)部分技肩,不同支付通道支持的支付方式不同,傳遞的參數(shù)浮声、驗(yàn)證方式不同虚婿。怎么樣把不同支付通道的代碼封裝起來旋奢,方便統(tǒng)一處理調(diào)用值得去研究。
  • 容器的使用

2.2 分期付款

分期付款可以看作是新的一種支付網(wǎng)關(guān)然痊,對(duì)于一個(gè)訂單來說至朗,它跟銀行卡支付、支付寶支付一樣玷过,都可以作為支付方式爽丹,只是它每一期分期付款還是依賴于真實(shí)的支付方式支付筑煮。


分期付款的邏輯分析

2.2.1 需求分析

分期付款的業(yè)務(wù)邏輯如下:

  • 只有當(dāng)商品訂單總金額高于某個(gè)數(shù)值時(shí)才可以使用分期付款辛蚊;
  • 用戶使用分期付款時(shí),需要選擇還款期限真仲,通常為 3 個(gè)月的倍數(shù)袋马;
  • 使用分期付款需要支付手續(xù)費(fèi),不同的還款期限手續(xù)費(fèi)費(fèi)率不同秸应,還款期限越久費(fèi)率越高虑凛;
  • 分期付款的手續(xù)費(fèi)與銀行貸款的利息不同,銀行貸款的利息會(huì)隨著還款而逐漸降低软啼,而分期付款的手續(xù)費(fèi)則是固定的桑谍;
  • 使用分期付款后,用戶需要立即支付第一期的費(fèi)用祸挪,當(dāng)?shù)谝黄谫M(fèi)用支付成功后锣披,對(duì)應(yīng)的商品訂單狀態(tài)即變?yōu)橐阎Ц叮?/li>
  • 用戶需每 30 天還款一次,如果在還款截止日期之后仍未還款贿条,需支付逾期費(fèi)雹仿,逾期費(fèi)按天計(jì)算;
  • 逾期之后產(chǎn)生的逾期費(fèi)用最多不超過當(dāng)期的本金 + 手續(xù)費(fèi)整以;
  • 每一期還款金額計(jì)算公式:(本金 + 手續(xù)費(fèi)) / 還款期數(shù) + 當(dāng)期逾期費(fèi)胧辽;
  • 使用了分期付款的商品訂單如果發(fā)生退款,則退回所有已支付的本金公黑,手續(xù)費(fèi)與逾期費(fèi)不退回邑商。

2.2.2 實(shí)現(xiàn)邏輯

  1. 選擇分期付款下單:
  • 在用戶選擇分期付款時(shí),按照分期期數(shù)和金額計(jì)算出每一期需要還款的本金凡蚜、手續(xù)費(fèi)人断、還款時(shí)間等還款信息;
  • 再用一個(gè)定時(shí)腳本去計(jì)算當(dāng)期的逾期費(fèi)番刊;
  1. 分期還款支付:(請(qǐng)求支付和支付回調(diào)與普通商品的不一樣含鳞,需要單獨(dú)實(shí)現(xiàn))
  • 請(qǐng)求支付祭玉,使用當(dāng)期的流水號(hào)兽埃、當(dāng)期支付金額、分期的回調(diào)地址和返回地址去請(qǐng)求第三方支付;
  • 按照分期邏輯實(shí)現(xiàn)支付回調(diào)伦籍,更新當(dāng)期支付信息,若是第一期需更新訂單的狀態(tài)和支付信息姆钉,以及分期狀態(tài)愿卸;
  1. 分期退款:
    分期的每一期批量退款,修改訂單退款狀態(tài)桅狠;


    分期付款流程圖

2.2.3 表設(shè)計(jì)

分期分款可以選擇還款期數(shù)讼载,需要計(jì)算每一期還款的本金、手續(xù)費(fèi)中跌、還款時(shí)間咨堤,以及需要保存每一期還款的具體支付方式和支付單號(hào)。因此漩符,我們需要用兩張表來分別保存分期信息和每期分期的詳細(xì)信息一喘。
具體表結(jié)構(gòu)如下:

# 分期表
CREATE TABLE `installments` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
  `no` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL, # 分期單號(hào)
  `user_id` int(10) unsigned NOT NULL, # 所屬用戶ID
  `order_id` int(10) unsigned NOT NULL, # 對(duì)應(yīng)訂單ID
  `total_amount` decimal(8,2) NOT NULL, # 總本金
  `count` int(10) unsigned NOT NULL, # 還款期數(shù)
  `fee_rate` double(8,2) NOT NULL, # 手續(xù)費(fèi)率
  `fine_rate` double(8,2) NOT NULL, # 逾期費(fèi)率
  `status` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending', # 還款狀態(tài),默認(rèn)未執(zhí)行
  `created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時(shí)間
  `updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
  PRIMARY KEY (`id`),
  UNIQUE KEY `installments_no_unique` (`no`),
  KEY `installments_user_id_foreign` (`user_id`),
  KEY `installments_order_id_foreign` (`order_id`),
  CONSTRAINT `installments_order_id_foreign` FOREIGN KEY (`order_id`) REFERENCES `orders` (`id`) ON DELETE CASCADE,
  CONSTRAINT `installments_user_id_foreign` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

# 分期項(xiàng)表
CREATE TABLE `installment_items` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT, # 自增ID
  `installment_id` int(10) unsigned NOT NULL, # 分期ID
  `sequence` int(10) unsigned NOT NULL, # 期數(shù)
  `base` decimal(8,2) NOT NULL, # 當(dāng)期本金
  `fee` decimal(8,2) NOT NULL, # 當(dāng)期手續(xù)費(fèi)
  `fine` decimal(8,2) DEFAULT NULL, # 當(dāng)期逾期費(fèi)
  `due_date` datetime NOT NULL, # 還款截止日期
  `paid_at` datetime DEFAULT NULL, # 還款日期
  `payment_method` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, # 還款支付方式
  `payment_no` varchar(255) COLLATE utf8mb4_unicode_ci DEFAULT NULL, # 換的支付單號(hào)
  `refund_status` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT 'pending', # 退款狀態(tài) 默認(rèn)未退款
  `created_at` timestamp NULL DEFAULT NULL, # 創(chuàng)建時(shí)間
  `updated_at` timestamp NULL DEFAULT NULL, # 更新時(shí)間
  PRIMARY KEY (`id`),
  KEY `installment_items_installment_id_foreign` (`installment_id`),
  CONSTRAINT `installment_items_installment_id_foreign` FOREIGN KEY (`installment_id`) REFERENCES `installments` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;

2.3.4 代碼借鑒

本章節(jié)業(yè)務(wù)邏輯有點(diǎn)復(fù)雜嗜暴,實(shí)現(xiàn)方案不算復(fù)雜凸克,學(xué)習(xí)到了以下幾點(diǎn):

  • 浮點(diǎn)數(shù)的計(jì)算方式(使用 bcmath)
  • 在處理大數(shù)據(jù)量的數(shù)據(jù)庫操作時(shí),使用chunkById減少內(nèi)存占用闷沥;

上一節(jié):05 購物車&訂單模塊
下一節(jié):07 優(yōu)惠券模塊

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末萎战,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子舆逃,更是在濱河造成了極大的恐慌蚂维,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,454評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件颖侄,死亡現(xiàn)場離奇詭異鸟雏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)览祖,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,553評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門孝鹊,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人展蒂,你說我怎么就攤上這事又活。” “怎么了锰悼?”我有些...
    開封第一講書人閱讀 157,921評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵柳骄,是天一觀的道長。 經(jīng)常有香客問我箕般,道長耐薯,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,648評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮曲初,結(jié)果婚禮上体谒,老公的妹妹穿的比我還像新娘。我一直安慰自己臼婆,他們只是感情好抒痒,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,770評(píng)論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著颁褂,像睡著了一般故响。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上颁独,一...
    開封第一講書人閱讀 49,950評(píng)論 1 291
  • 那天彩届,我揣著相機(jī)與錄音,去河邊找鬼奖唯。 笑死惨缆,一個(gè)胖子當(dāng)著我的面吹牛糜值,可吹牛的內(nèi)容都是我干的丰捷。 我是一名探鬼主播,決...
    沈念sama閱讀 39,090評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼寂汇,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼病往!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起骄瓣,我...
    開封第一講書人閱讀 37,817評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤停巷,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后榕栏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體畔勤,經(jīng)...
    沈念sama閱讀 44,275評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,592評(píng)論 2 327
  • 正文 我和宋清朗相戀三年扒磁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了庆揪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,724評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妨托,死狀恐怖缸榛,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情兰伤,我是刑警寧澤内颗,帶...
    沈念sama閱讀 34,409評(píng)論 4 333
  • 正文 年R本政府宣布,位于F島的核電站敦腔,受9級(jí)特大地震影響均澳,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,052評(píng)論 3 316
  • 文/蒙蒙 一找前、第九天 我趴在偏房一處隱蔽的房頂上張望筒捺。 院中可真熱鬧,春花似錦纸厉、人聲如沸系吭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,815評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽肯尺。三九已至,卻和暖如春躯枢,著一層夾襖步出監(jiān)牢的瞬間则吟,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,043評(píng)論 1 266
  • 我被黑心中介騙來泰國打工锄蹂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留氓仲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,503評(píng)論 2 361
  • 正文 我出身青樓得糜,卻偏偏與公主長得像敬扛,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子朝抖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,627評(píng)論 2 350

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

  • 隨著布拉格第一場雪的到來啥箭,這里即將進(jìn)入圣誕季的節(jié)奏,盡管冬季的布拉格氣候寒冷治宣,但還是阻擋不了游客們的腳步急侥! 布拉格...
    華007閱讀 535評(píng)論 0 1
  • 今日體驗(yàn) 今天開數(shù)據(jù)分析會(huì),有很多項(xiàng)目的是空的侮邀,檢查一定要仔細(xì)坏怪,逢車必檢不能落下,保證質(zhì)量把車修好
    王松奇閱讀 147評(píng)論 0 0
  • 文/陳康慧 剛上班的那幾天每天如履薄冰步步驚心绊茧,生怕自己哪里做錯(cuò)了不夠好這份工作就沒了铝宵。 因?yàn)槿耍加袀€(gè)天性按傅,就想...
    陳康慧閱讀 849評(píng)論 0 13