# dax-pay-sdk-java **Repository Path**: opendaxpay/dax-pay-sdk-java ## Basic Information - **Project Name**: dax-pay-sdk-java - **Description**: java 版本对接SDK - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-09-15 - **Last Updated**: 2026-09-23 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # DaxPay Open SDK for Java DaxPay 开放支付平台 Java SDK,封装支付/退款/转账/分账/查询/同步/网关共 15 个开放接口与回调验签。 > **适配 DaxPay Open ≥ 1.0** · **Java 8+** · Apache-2.0 ## 功能 - RSA 双向签名(SHA256withRSA),自动签名请求 / 验签响应与回调 - 走 JSON 签名路径,与开源版后端 `reqTime`(北京时间字面量)契约对齐 - 开放接口全覆盖(15 个): - **支付**:`pay` / `close` / `queryPayOrder` / `syncPayOrder` - **退款**:`refund` / `queryRefundOrder` / `syncRefundOrder` - **转账**:`transfer` / `queryTransferOrder` / `syncTransferOrder` - **分账**:`alloc` / `queryAllocOrder` / `syncAllocOrder` - **网关**:`gatewayPrePay` / `gatewayQuery` - 异步回调验签 `verifyNotice(rawBody)`;部署自检探针 `ping()` ## 安装(源码引入) ```bash git clone https://github.com/opendaxpay/dax-pay-sdk-java.git cd dax-pay-sdk-java mvn clean install -Dmaven.test.skip=true ``` ```xml cn.daxpay.open daxpay-open-sdk 1.0.0-SNAPSHOT ``` ## 快速开始 ```java // 配置(商户私钥 + 平台公钥,PEM 文本) DaxPayConfig config = new DaxPayConfig() .setServiceUrl("https://sandbox.daxpay.cn") .setMchNo("M200000001") .setAppId("APP001") .setPrivateKey(privateKeyPem) .setPublicKey(platformPublicKeyPem); DaxPayClient client = new DaxPayClient(config); // 支付下单 PayParam param = new PayParam() .setBizOrderNo("PAY20250805001") .setTitle("测试商品") .setAmount(100L) // 分 .setMethod("wechat_qr") .setNotifyUrl("https://example.com/notify"); DaxResult result = client.pay(param); // 关闭 / 退款 / 查询:client.close(param) / client.refund(param) // / client.queryPayOrder(param) / client.queryRefundOrder(param) // 转账(金额单位:分;幂等维度 = 通道 + 商户转账号 + 商户号) TransferParam transfer = new TransferParam() .setChannel("wechat") .setChannelMchNo("CM001") .setBizTransferNo("TR20250805001") .setAmount(100L) .setPayeeType("openid") .setPayeeAccount("oXyz123"); DaxResult transferResult = client.transfer(transfer); // 分账(原支付单须下单时声明 allocation=true) AllocParam alloc = new AllocParam() .setBizAllocNo("AL20250805001") .setBizOrderNo("PAY20250805001") .setReceivers(Arrays.asList( new AllocParam.Receiver().setReceiverType("MERCHANT_ID") .setReceiverAccount("M300000001").setAmount(60L), new AllocParam.Receiver().setReceiverType("PERSONAL_OPENID") .setReceiverAccount("oXyz123").setAmount(40L))); DaxResult allocResult = client.alloc(alloc); // 网关支付(平台收银台承接支付项选择,商户侧拿跳转地址) GatewayPrePayParam gateway = new GatewayPrePayParam() .setBizOrderNo("GW20250805001") .setTitle("网关支付") .setAmount(100L) .setGatewayPayType("cashier"); DaxResult gwResult = client.gatewayPrePay(gateway); // gwResult.getData().getH5Url() / getMiniUrl() // 回调验签 // String rawBody = ...; // HTTP 原始请求体 // boolean ok = client.verifyNotice(rawBody); // 部署自检探针(免签名):可达即代表「通道回调」接口组已放行 // String marker = client.ping(); ``` > 完整可运行示例见 [`examples/PayExample.java`](examples/PayExample.java)(配置驱动,见下节)。 ## 联调 Demo(推荐入门方式) 仓内自带一个**单命令启动的联调 Demo**:内嵌调试页 + 全接口表单 + 回调接收, 所有交易调用都经 `DaxPayClient` 真实签名发出,同时验证 SDK 与平台接口两侧。 ### 1. 启动(无需任何配置文件) ```bash mvn compile exec:java -Dexec.mainClass=cn.daxpay.open.sdk.demo.DemoServer ``` 浏览器打开 ,页面为**三栏布局**:左侧接口导航(5 个业务域 / 15 个接口)、 中间表单与结果、右侧**随表单实时生成的 SDK 调用代码**(可直接复制到项目里用)。 点击右上角 **「连接配置」** 打开弹窗填写参数,保存即生效: | 配置项 | 说明 | |--------|------| | 平台服务地址 | 如 `http://127.0.0.1:9999` | | 商户号 / 应用号 | 应用号可空(回落平台默认应用) | | 商户私钥 | PKCS#8 PEM,粘贴后即时校验格式 | | 平台公钥 | X.509 PEM,用于响应与回调验签 | 弹窗内 **「测试连接」** 按钮会经服务端中转调用平台自检探针 `GET /unipay/callback/ping` (浏览器直连平台地址会跨域),可快速区分「地址写错」「网关未放行 /unipay/callback 前缀」「后端未启动」。 注意探针需平台版本包含该端点(`UnipayPingController`),旧版本会返回 401。 配置保存在**浏览器 localStorage**(仅本机、服务端不落盘),服务重启后打开页面自动恢复; 页面内配置**优先于**启动时的配置文件。 可选命令行参数:`--port=9799` 更换监听端口;`--config=路径` 指定初始配置文件。 也兼容配置文件方式(无人值守场景):复制 `examples/config.example.json` 为 `examples/config.local.json` 填好即可(密钥支持内嵌 PEM 或相对配置目录的文件路径)。 ### 2. 使用 - 左侧导航切换 **15 个开放接口**(支付 / 退款 / 转账 / 分账 / 网关五族), 每个接口的表单都带必填校验与类型校验,嵌套结构(商品明细 / 终端信息 / 转账报备 / 分账接收方) 用可增删的行编辑器填写 - 结果区回显「SDK 签名后的完整请求体 + 平台原始响应 + 响应验签结果 + 耗时」, 支付类接口单独透出 `payBody` / `h5Url` / `confirmUrl` 等跳转地址 - **回调通知记录** 区实时轮询展示平台异步通知(自动验签); 表单 `notifyUrl` 填 Demo 提示的回调地址(默认已填好)即可完成「支付 → 回调 → 验签」全链路闭环 ## 接口文档 - [接入准备](https://doc.open.daxpay.cn/api/getting-started) · [签名规则](https://doc.open.daxpay.cn/api/signature) - 黄金测试向量:见 [`GoldenVectorTest.java`](src/test/java/cn/daxpay/open/sdk/GoldenVectorTest.java)(与后端签名契约同源断言) ## License Apache-2.0,可自由用于商业项目与闭源集成,协议全文见 [LICENSE](LICENSE)。主仓库 [DaxPay Open](https://gitee.com/dromara/dax-pay) 核心为 LGPL-3.0-or-later,本 SDK 作为独立仓按 Apache-2.0 单独发布。