Skip to content

SDK 与示例

平台提供 Java / PHP / Go 三语言 SDK 与示例:签名/验签、下单/查询/余额、回调验签服务,零第三方依赖,与平台签名实现做过逐字节一致性校验。沙箱开通时由平台交付,在线下载稍后提供。

下单示例

go
client := &sunpay.Client{BaseURL: base, MerchantNo: "M100001", AppID: "app_10001",
    KeyVersion: 1, PrivateKeyPEM: pem}
resp, err := client.PayCreate(map[string]any{
    "mch_order_no": "T20260601001", "product_code": "QRPH",
    "amount": int64(10000), "currency": "PHP",
})
php
$client = new SunPayClient($base, 'M100001', 'app_10001', 1, $privatePem);
$resp = $client->payCreate([
    'mch_order_no' => 'T20260601001', 'product_code' => 'QRPH',
    'amount' => 10000, 'currency' => 'PHP',
]);
java
SunPayClient client = new SunPayClient(base, "M100001", "app_10001", 1, privatePem);
SunPayClient.Response resp = client.payCreate(Map.of(
    "mch_order_no", "T20260601001", "product_code", "QRPH",
    "amount", 10000L, "currency", "PHP"));
  • Go:go test 一致性自测;demo 含回调验签服务。
  • PHP:单文件接入,仅需 openssl + curl 扩展(PHP 8.0+)。
  • Java:Java 11+,零第三方依赖(含回调验签与内置回调服务示例)。

回调验签要点

  1. 读取原始请求体(JSON);
  2. 取出 signkey_version,用对应版本的平台公钥验签(canonical 规则同 签名算法);
  3. 验签通过 → 按「platform_order_no + 通知类型」幂等处理(代付另有 payout.reversed 冲正通知,与终态通知是两类,见 代付文档)→ 返回 HTTP 200 + 纯文本 success;
  4. 验签失败 → 不处理、不返回 success

三语言 SDK 都内置了 verifyCallback,并附可直接运行的回调服务示例。

生产密钥生成

bash
openssl genpkey -algorithm RSA -pkeyopt rsa_keygen_bits:2048 -out merchant_private.pem
openssl pkey -in merchant_private.pem -pubout -out merchant_public.pem

WARNING

私钥只能在服务端使用:不进前端/JS、不进日志、不进代码仓库;公钥(PEM)注册给平台。沙箱联调用的测试密钥严禁用于生产。