經過昨天的粗略講解,今天我們就來實作看看我們的付款流程
首先,我們先確認一下資料有沒有填好。
都 Ok 的話,我們就帶著上次製作的 Cart 前往下一步。
這次我們就先再開始流程之前,將Cart(購物車)運送配置設定好吧~
我們攜帶以下資料 Post {{baseUrl}}/store/carts/cart_01K45NP417CSBBHN0BEW737GDB/shipping-methods?fields=string
{"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) 沒有選擇。
當 Cart 要 變成訂單時候,第一步驟就是先將商品變成 Payment Collection
我們攜帶以下資料 Post {{baseUrl}}/store/payment-collections
成功後,會回傳建立成功
{
"payment_collection": {
"id": "pay_col_01K4AH3XTX9HWSQKCTRZ6HPKSR",
"currency_code": "twd",
"amount": 127.5,
"payment_sessions": []
}
}
其實 Payment Collection 讓我感覺就很像 去大型商場,當你要結帳時,把商品放上輸送帶上這個動作,表示確定這項產品是要購買的。
下一步就是選擇 Payment Provider 然後進入 Payment Session 讓他與第三方金流端溝通。就算我們還沒有串接第三方金流,我們也可以使用 Medusa.js 系統的 Payment Provider,這個不會跟外部做互動,需要完完全全手動,所以這套 Medusa.js 也可以做成現金收款的後端程式,也可以拿來做測試。
我們攜帶以下資料 Post{{baseUrl}}/store/payment-collections/:payment-collections-id/payment-sessions
成功後,會回傳以下訊息:
{
"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
成功後回傳
{
"type": "order",
"order": {
"id": "order_01K4DCYYGQRWDVPDZACTKFXQHR"
}}
明天要來了解我們訂單裡面有什麼東西!!
♥(´∀` )人