跳到主要内容

快速开始

本页用 DEEPayment SDK 跑通第一笔代收或代付订单。字段全集请到 API Reference 中按代收/代付、国家和支付方式查看。

最小接入闭环:生成密钥对,配置 SDK,创建订单,接收并验签 webhook,异常时用查询接口确认订单状态。Ed25519 签名、Content-Digest 和 X25519 body 加密都由 SDK 完成,不需要手工拼 Header。

接入前准备​

API host

生产请求发送至 https://panama.deepayment.com/api/v1。SDK 只需要域名,不带 /api/v1。

Access Key

开户时分配的公开商户标识。

商户 Ed25519 密钥对

商户自己生成。公钥上传到商户后台,私钥只保存在自己的服务端。

平台公钥

从商户后台获取:X25519 body 公钥及其 keyId,以及 webhook Ed25519 公钥。

webhookUrl

接收 payment 或 payout 最终状态的公网 HTTPS 地址。

method 信息

根据国家、币种选择 paymentMethod 或 payoutMethod。

SDK 已开源,每个语言一个仓库。本页是跑通第一笔订单的最短路径;每个方法、配置项和错误的完整说明见 SDK 使用手册。SDK 实现的线路协议见 鉴权机制。

安装 SDK​

go get github.com/deepayment/[email protected]
import deepayment "github.com/deepayment/sdk-go"

需要 Go 1.24 及以上。包页面:pkg.go.dev · 源码:github.com/deepayment/sdk-go

安装 Agent Skill​

用 AI 编码助手写对接代码时,先装上这个 skill。它带着各币种的方式码、条件必填字段, 以及请求失败后如何判断订单是否已经生成的规则。

npx skills add deepayment/skill

支持 Claude Code、Cursor、Codex 等 skills CLI 覆盖的 agent。助手先读入口文件, 需要方式码表时再按需拉取。 源码与手动安装说明:github.com/deepayment/skill。skill 与 SDK 出自同一源码树,随 SDK 一起更新。

通信规则​

  • 仅支持 HTTPS
  • 最低 TLS 1.2
  • 编码为 UTF-8
  • 请求与响应主体使用 JSON;POST body 由 SDK 加密

生产环境 Base URL​

https://panama.deepayment.com/api/v1

接入流程​

  1. 生成密钥

    生成 Ed25519 密钥对,在商户后台上传公钥,并复制 Access Key 和平台公钥。不同环境的密钥不要混用。

  2. 配置 SDK

    传入 Base URL、Access Key、商户私钥、平台 body 公钥和平台 webhook 公钥。

  3. 创建订单

    创建订单时传入 merchantOrderNo、currency、amount、paymentMethod 或 payoutMethod、webhookUrl。

  4. 处理结果

    通过 SDK 解析 webhook,SDK 会先校验平台签名。回调延迟、重复或请求超时时,用查询接口确认状态。

配置 SDK​

把占位值替换为商户后台中的实际配置。

import deepayment "github.com/deepayment/sdk-go"

c, err := deepayment.NewClient(deepayment.Config{
BaseURL: "https://panama.deepayment.com",
AccessKey: "mak_live_xxx",
MerchantPrivateKeyBase64: merchantPrivateKey, // 商户 Ed25519 私钥,base64
PlatformBodyKeyID: "body_20260827_01",
PlatformBodyPublicKeyBase64: platformBodyPublicKey, // 平台 X25519 公钥,base64
PlatformWebhookPublicKeys: map[string]string{ // keyId -> 平台 Ed25519 公钥,base64
"pwhk_20260827_01": platformWebhookPublicKey,
},
})
if err != nil {
return err
}

选择接口​

创建代收​

业务字段和 API Reference 中的请求体一致,加密和签名由 SDK 完成。

order, err := c.CreatePayment(ctx, &deepayment.CreatePaymentReq{
MerchantOrderNo: "M202605060001",
Currency: "BRL",
Amount: "250.00",
Country: "BR",
PaymentMethod: deepayment.PaymentMethod{
Code: "PIX",
Pix: &deepayment.PaymentPixExtra{
PayerCPF: "12345678901",
PayerName: "Joao Silva",
},
},
ReturnUrl: "https://merchant.example/return",
WebhookUrl: "https://merchant.example/webhook/payment",
Attach: "user_123",
})

创建代付使用 createPayout 和 payoutMethod 对象,方式相同。出款方式字段见 API Reference 代付目录。

查询订单​

order, err := c.QueryPaymentByMerchantOrderNo(ctx, "M202605060001")

接收 webhook​

把原始 HTTP 请求交给 SDK。SDK 会校验 Content-Digest、Webhook-Event-Id 和平台 Ed25519 签名,通过后返回事件。事件落库后返回 HTTP 2xx。

func handlePaymentWebhook(w http.ResponseWriter, r *http.Request) {
wh, err := c.ParsePaymentWebhook(r)
if err != nil {
w.WriteHeader(http.StatusUnauthorized)
return
}
// 按 wh.EventID 去重,再按 wh.Status 更新订单 wh.MerchantOrderNo
w.WriteHeader(http.StatusOK)
}

成功响应​

所有接口使用统一响应 envelope。SDK 返回其中的 data 对象,其余情况抛出错误。traceId 建议写入日志,便于排查。

HTTP/1.1 200 OK
Content-Type: application/json

{
"code": 200,
"msg": "OK",
"traceId": "7f3d2f0c9b4d4a1a",
"data": {}
}

失败响应​

失败响应使用对应 HTTP status,body 仍是同一 envelope。SDK 把它转换为业务错误,包含 code、msg、traceId 和 data.message。排查时同时记录这几项。

HTTP/1.1 400 Bad Request
Content-Type: application/json

{
"code": 12100007,
"msg": "INVALID_FIELD",
"traceId": "7f3d2f0c9b4d4a1a",
"data": {
"message": "paymentMethod.pse.bankCode is required"
}
}

幂等和恢复​

  • 代收和代付创建都以 merchantOrderNo 作为商户侧幂等键。
  • 同一商户下,payments 和 payouts 各自独立唯一。
  • 同一 merchantOrderNo 重复提交同一请求,返回原订单。
  • 同一 merchantOrderNo 改了字段再提交,返回的仍是原订单。平台不比对字段,改了金额或收款账号都不会生效。另一笔订单要用新单号。
  • SDK 不自动重试写请求。创建超时、5xx 或连接断开时,先查单再决定是否重试。重试之所以是同一笔创建,靠的是复用同一个 merchantOrderNo,与幂等键无关。

:::tip 对账建议 webhook 是事件通知,查询接口是状态确认入口。回调重复、延迟或乱序时,先按 eventId 幂等落库,再用查询接口确认最终状态。 :::