跳到主要内容

配置

客户端用六项值构造一次,进程生命周期内复用。可以在线程或请求之间共享。

必填项​

项来源说明
Base URLhttps://panama.deepayment.com/api/v1只要协议和域名,必须 https。带 path、query 或 fragment 会被拒绝;/api/v1/... 由 SDK 自己拼。
Access Key商户后台公开标识。放在 Merchant-Access-Key 里,平台用它找你登记的公钥。
商户私钥你自己生成Ed25519,base64。libsodium 和 OpenSSL 产出的 32 字节 seed,以及 64 字节 seed 加公钥的形式都接受。永远不离开你的服务器。生成方法见密钥配置。
平台 body key id商户后台指明加密你 POST body 的平台 X25519 密钥。它随 envelope 传输,网关据此知道用哪把私钥解。
平台 body 公钥商户后台X25519,base64,32 字节。必须是 key id 所指的那把。
平台 webhook 公钥商户后台keyId 到 Ed25519 公钥的映射,base64,每把 32 字节。即使不消费 webhook 也必填。

密钥按环境隔离,生产密钥不要在测试环境使用。

webhook 密钥轮换​

webhook 带着签名所用的 keyid,SDK 在你配置的映射里按它查公钥。轮换期间平台会先公布新密钥再用它签名;把新密钥加进映射让两把都在,等平台停用旧密钥后再移除。用映射里没有的密钥签的 webhook 验签失败。

构造客户端​

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

c, err := deepayment.NewClient(deepayment.Config{
BaseURL: "https://panama.deepayment.com",
AccessKey: "mak_live_xxx",
MerchantPrivateKeyBase64: merchantPrivateKey,
PlatformBodyKeyID: "body_20260827_01",
PlatformBodyPublicKeyBase64: platformBodyPublicKey,
PlatformWebhookPublicKeys: map[string]string{
"pwhk_20260827_01": platformWebhookPublicKey,
},
// 可选
Timeout: 30 * time.Second, // 设置了 HTTPClient 时忽略
HTTPClient: nil, // 自定义 *http.Client,如走代理
UserAgent: "", // 默认 merchant-sdk-go
AcceptLanguage: "", // 默认 en-US;错误文案的语言
MaxResponseBytes: 0, // 默认 8 MiB
})

任一项缺失或格式不对时 NewClient 返回错误而不是客户端,错误里写明是哪一项。

可选设置​

设置默认作用
超时30 秒整个请求,从连接到读完最后一个字节。超时时 SDK 返回传输错误,结果未知,见错误。
User-Agentmerchant-sdk-<lang>每个请求都带。可以追加你的产品名,便于在平台日志里识别。
Accept-Languageen-US错误响应里人类可读 message 的语言。
最大响应字节数8 MiB超过的响应被丢弃并报响应过大错误。
HTTP client / transport / fetch内置需要代理、自定义 TLS 或连接池时注入自己的实现。Go 设置了 HTTPClient 时忽略 Timeout,请在自己的 client 上配超时。

时钟​

签名带 created 和 expires 时间戳,相差不超过 300 秒,平台拒绝窗口外的签名。用 NTP 保持服务器时间准确;偏差超过几分钟,每个请求都会报 UNAUTHORIZED。