Mollie 开发者 API 集成 - REST API SDK Orders Payments 详解
两种 API:Payments vs Orders
Mollie 提供两个层级的支付 API,按复杂度从低到高:
| API | 适合场景 | 特点 |
|---|---|---|
| Payments API | 简单的"收一笔钱"场景 | 轻量,只关心金额+币种+回调地址 |
| Orders API | 有完整订单管理系统的电商 | 支持订单项、部分退款、订单状态同步、更好的对账 |
Payments API(快速上手)
Payments API 是"创建一笔支付请求"的最简路径。你只需要告诉 Mollie:多少钱、什么币种、付款完成后去哪里。
核心流程
POST /v2/payments → 返回 payment 对象 + checkout_url
客户重定向到 checkout_url
客户完成付款
Mollie 发送 payment.paid Webhook
你收到回调,更新订单状态
请求示例(Python SDK)
import mollie_api_client
from mollie_api_client.api_client import ApiClient
from mollie_api_client.api.payments_api import PaymentsApi
client = mollie_api_client.configure("Bearer test_xxxx")
payments_api = PaymentsApi()
payment = payments_api.create_payment({
"amount": {"currency": "EUR", "value": "19.99"},
"description": "Premium Plan Monthly",
"redirectUrl": "https://saas.com/account/upgrade/success",
"webhookUrl": "https://saas.com/api/mollie/webhook"
})
# payment['_links']['checkout']['href'] 是重定向 URL
checkout_url = payment['_links']['checkout']['href']
Payment 状态机
open(已创建,客户还没付款)
├── paid(已成功付款)→ Mollie 发 payment.paid Webhook
├── authorized(已授权但未结算,适用于某些卡类)
├── canceled(客户取消了)
├── expired(超时未付款)
└── failed(支付失败)
Orders API(完整电商)
Orders API 把支付和订单管理绑定在一起。每个 Order 可以包含多个 Order Line(订单项),每个订单项可以有自己的数量、单价、税率。
什么时候该用 Orders
- 你有购物车系统,一个订单包含多件商品
- 你需要部分退款(只退某个订单项而非整单)
- 你需要精确的税率管理(商品税率和服务税率不同)
- 你需要 Mollie 帮你生成发票(发票能按订单项分列)
- 你需要按订单项级别管理发货状态
创建 Order 示例
order = orders_api.create_order({
"amount": {"currency": "EUR", "value": "129.99"},
"billingAddress": {
"givenName": "John",
"familyName": "Doe",
"email": "john@example.com",
"streetAndNumber": "Main Street 123",
"postalCode": "1234AB",
"city": "Amsterdam",
"country": "NL"
},
"lines": [
{
"name": "Wireless Earbuds Pro",
"quantity": 1,
"unitPrice": {"currency": "EUR", "value": "99.99"},
"vatRate": "21.00"
},
{
"name": "Shipping",
"quantity": 1,
"unitPrice": {"currency": "EUR", "value": "30.00"},
"vatRate": "21.00"
}
],
"redirectUrl": "https://shop.com/order/success",
"webhookUrl": "https://shop.com/api/mollie/order-webhook"
})
Order 状态机
Order 的状态比 Payment 更丰富,因为它要追踪从下单到发货的完整周期:
created → paid → authorized
├── shipping → completed → refunded
└── canceled
关于退款
Payments API 的退款
refund = payments_api.create_payment_refund(payment_id, {
"amount": {"currency": "EUR", "value": "19.99"},
"description": "Customer request"
})
Payments API 只支持整笔或全额退款(某些场景下可以部分退,但比较受限)。
Orders API 的退款(推荐)
refund = orders_api.create_order_refund(order_id, {
"lines": [
{"id": "odl_xxx", "quantity": 1}, # 只退某一件商品
],
"description": "Return defective item"
})
Orders API 可以精确到订单项级别退款,这也是它更强大的地方之一。
幂等性
Mollie API 的所有写操作都是幂等的——用同一个 Idempotency-Key 头重复调用,只会执行一次实际操作:
curl -X POST https://api.mollie.com/v2/payments \
-H "Authorization: Bearer test_xxxx" \
-H "Idempotency-Key: unique-uuid-for-this-request" \
-H "Content-Type: application/json" \
-d '{...}'
这对于处理网络超时重试非常重要——如果客户端因为超时重试了请求,不会意外创建多笔 Payment。
版本与向后兼容
Mollie API 采用 URL 版本(/v2/payments)。新版本推出时旧版本会保留至少两年,给你充足的升级时间。当前最新版本是 v2。
开发者工具
- Postman Collection:Mollie 官方维护的 Postman 集合,导入即可测试所有端点
- API Explorer:Mollie 文档站内的交互式 API 测试工具
- Sandbox:测试环境与正式环境隔离,所有资源独立(API Keys 也是独立的)
继续阅读:订阅与重复扣费功能 →