从配置证书到在沙箱中完成第一笔成功扣款,逐步说明。
本指南使用 sandbox(https://api.sandbox.payzu.io/v1)。生产环境的基础 URL 为 https://api.payzu.io/v1。
前提条件
在发起第一次调用之前,您需要准备两项内容,均由 PayZu 团队提供:
- 客户端 mTLS 证书(
cliente.crt、cliente.key和ca.pem)。请安装证书并配置您的系统,在所有 API 调用中使用它,且始终通过 HTTPS。详见身份认证。 - 凭证
client_id和client_secret,用于获取访问 token。
获取 token
使用 client_id 和 client_secret 通过 Basic Auth 调用 POST /token,并附带 mTLS 证书,然后在后续调用中将返回的 access_token 作为 Bearer token 使用。完整的请求和响应示例见身份认证。
创建第一笔收款
通过 POST /charges 创建收款。必填字段为 amount、customer、paymentType、cart、creditCardPayment 和 externalId。完整 schema 见接口参考。
curl --request POST \
--url https://api.sandbox.payzu.io/v1/charges \
--header "Authorization: Bearer SEU_ACCESS_TOKEN" \
--header 'Content-Type: application/json' \
--cert cliente.crt \
--key cliente.key \
--cacert ca.pem \
--data '{
"amount": 10000,
"externalId": "order-2026-0001",
"paymentType": "creditcard",
"customer": {
"name": "John Smith"
},
"cart": [
{
"name": "Monthly plan",
"quantity": 1,
"sku": "PLAN-01",
"unitPrice": 10000
}
],
"creditCardPayment": {
"installments": 1,
"authenticate": false,
"card": {
"number": "4111111111111111",
"holder": "JOAO DA SILVA",
"expiration": "12/2030",
"cvv": "123"
}
}
}'在生产环境中,请将基础 URL 换成 https://api.payzu.io/v1。
金额字段(amount、unitPrice)始终以分为单位。10000 相当于 R$ 100,00。
当 authenticate: false 时,买家不会被引导至发卡行进行身份认证。如需认证流程,请参阅 3D Secure。
解读响应
响应包含收款的 id、传入的 externalId,以及带有 status、reasonCode 和 reasonMessage 的 creditCardPayment 对象。主要状态如下:
| 代码 | 状态 | 含义 |
|---|---|---|
| 1 | Authorized | 已获发卡行授权,可进行请款,但尚未完成。 |
| 2 | PaymentConfirmed | 支付已确认并完成。 |
| 3 | Denied | 支付被授权方拒绝。 |
如果 creditCardPayment.status 返回 2(PaymentConfirmed),您的第一笔收款已确认。完整的代码列表见交易状态。
测试场景并配置 webhooks
要在 sandbox 中模拟批准、拒绝和超时,请使用测试卡:卡号的末位数字决定交易结果。
要在无需轮询 API 的情况下接收收款状态通知,请在创建收款时传入 postbackUrl。payload 结构与校验方法见 Webhooks。