iT邦幫忙

2025 iThome 鐵人賽

DAY 11
0
Modern Web

Medusa.js 石化我的心系列 第 11

Day11 探查基本功能 - Payment玩玩看

  • 分享至 

  • xImage
  •  

經過昨天的粗略講解,今天我們就來實作看看我們的付款流程

首先,我們先確認一下資料有沒有填好。

  • 商品
    我們先進去要購買商品的頁面儀表板當中,確認 Shipping configuration(運送配置)有配置 Default Shipping Profile。
  • Shipping Option
    Shipping Option(運送選項) 我們在 Day8 時候有建立,就是設定 Pickup(自取) 以及 Shipping(運送)的時候。

都 Ok 的話,我們就帶著上次製作的 Cart 前往下一步。

Cart Shipping Option

這次我們就先再開始流程之前,將Cart(購物車)運送配置設定好吧~

我們攜帶以下資料 Post {{baseUrl}}/store/carts/cart_01K45NP417CSBBHN0BEW737GDB/shipping-methods?fields=string

  • x-publishable-api-key (header)
  • {"option_id": "你的shipping-option-id"}(body)

我是直接去資料庫拿我的 option-id
如果你想用 Post 方式拿 可以 Post
{{baseUrl}}/store/shipping-options?cart_id=你的cartId

成功資料回傳如下:

{
"cart": {
	"id": "cart_01K45NP417CSBBHN0BEW737GDB"
}}

如果你還是沒有成功,或者你 POST Cart 可以用的Shipping Option(運輸選項)沒有出現半個,但你明明就有設定 Pick up(自取) 或 Shipping(運送),有一個可能是你的 商店的 銷售設定(Sales Channels) 沒有選擇。

Create Payment Collection

當 Cart 要 變成訂單時候,第一步驟就是先將商品變成 Payment Collection

我們攜帶以下資料 Post {{baseUrl}}/store/payment-collections

  • x-publishable-api-key (header)
  • {cart_id:"你的cart_id"}

成功後,會回傳建立成功

{
"payment_collection": {
	"id": "pay_col_01K4AH3XTX9HWSQKCTRZ6HPKSR",
	"currency_code": "twd",
	"amount": 127.5,
	"payment_sessions": []
	}
}

其實 Payment Collection 讓我感覺就很像 去大型商場,當你要結帳時,把商品放上輸送帶上這個動作,表示確定這項產品是要購買的。

初始化 Payment Session

下一步就是選擇 Payment Provider 然後進入 Payment Session 讓他與第三方金流端溝通。就算我們還沒有串接第三方金流,我們也可以使用 Medusa.js 系統的 Payment Provider,這個不會跟外部做互動,需要完完全全手動,所以這套 Medusa.js 也可以做成現金收款的後端程式,也可以拿來做測試。

我們攜帶以下資料 Post
{{baseUrl}}/store/payment-collections/:payment-collections-id/payment-sessions

  • x-publishable-api-key (header)
  • {"provider_id": "pp_system_default","data": {}}

成功後,會回傳以下訊息:

{
"payment_collection": {
	"id": "pay_col_01K4AH3XTX9HWSQKCTRZ6HPKSR",
	"currency_code": "twd",
	"amount": 127.5,
	"payment_sessions": [
		{
		"id": "payses_01K4ANRDTT1PH2JP434GZMV0HD",
		"currency_code": "twd",
		"provider_id": "pp_system_default",
		"data": {},
		"context": {},
		"status": "pending",
		"authorized_at": null,
		"payment_collection_id": "pay_col_01K4AH3XTX9HWSQKCTRZ6HPKSR",
		"metadata": null,
		"raw_amount": {
			"value": "127.5",
			"precision": 20
			},
		"created_at": "2025-09-04T15:33:09.083Z",
		"updated_at": "2025-09-04T15:33:09.083Z",
		"deleted_at": null,
		"amount": 127.5
		}

	]
}}

授權並且完成購物車

由於 我們測試是使用 System Provider ,所以是採取收取現金後自己手動授權的部分
capture 這個動作 我們等到訂單再來看看。

我們攜帶以下資料 POST
{{baseUrl}}/store/carts/cart_01K4DCVC8A7AW1ANM73B6XW8XW/complete?fields=string

  • x-publishable-api-key (header)

成功後回傳

{
"type": "order",
"order": {
	"id": "order_01K4DCYYGQRWDVPDZACTKFXQHR"
}}

下集預告

明天要來了解我們訂單裡面有什麼東西!!
♥(´∀` )人


上一篇
Day10 探查基本功能 - 付款流程
下一篇
Day12 探查其他功能 - 訂單與履約
系列文
Medusa.js 石化我的心12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言