前言
在当今数字化经济快速发展的时代,支付系统的稳定性和易用性成为各行业业务发展的重要支撑。然而,传统支付系统的复杂度高、对接成-本大,以及维护难度高等问题,使得许多开发者和企业望而却步。
为了应对这些挑战,DaxPay应运而生——一款旨在简化支付集成过程、降低开发成-本的开源支付系统。
介绍
DaxPay是一款专注于为企业和个人提供便捷支付服务的免费开源平台。它支持多种主流支付渠道,如支付宝、微-信支付、云闪付等,并提供了收单、退款、聚合支付、对账、分账等一系列完整的支付功能。
通过HTTP接口调用的方式,DaxPay确保了与现有系统的低耦合度,便于快速集成和部署。同时,它还配备了一个直观的管理界面,方便运营人员进行日常管理和操作。
特点
-
统一接口:将不同支付通道的API封装为一个标准化接口,极大地方便了业务系统的调用,减少了对接多个支付方式带来的复杂性。
-
多通道支持:不仅预集成了常见的支付方式,还允许以扩展包的形式轻松添加新的支付通道。
-
多应用配置:能够同时处理来自多个支付通道账户的请求,满足大型企业或集团内多个子系统的需求。
-
丰富的功能覆盖:涵盖支付、退款、对账、分账等所有必要的支付相关能力。
-
安-全可靠:接口请求和响应数据均支持签名机制,保障交易的安-全性。
-
易于集成:除了HTTP接口外,还提供了Java SDK,进一步简化了接入流程。
技术架构
名称 | 描述 | 版本要求 |
---|---|---|
JDK | Java运行环境 | 21+ |
Spring Boot | 开发框架 | 3.3.x |
Redis | 分布式缓存 | 5.x及以上 |
MySQL/Postgresql | 数据库 | MySQL8.x及以上/Postgresql 10及以上 |
Vue | 前端框架 | 3.x |
部署方式
DaxPay的设计理念是尽量减少对原有业务系统的干扰。因此,用户只需单独部署DaxPay服务端,然后通过HTTP接口或Java SDK将其集成到自己的业务逻辑中即可。对于非Java项目,也可以直接使用HTTP API完成对接。
Java客户端SDK
为了方便Java项目的集成,DaxPay提供了专门的SDK。只需在pom.xml
中添加以下依赖项:
<dependency>
<groupId>org.dromara.daxpay</groupId>
<artifactId>daxpay-single-sdk</artifactId>
<version>${latest.version}</version>
</dependency>
SDK调用示例
下面是一个简单的支付订单创建示例:
package org.dromara.daxpay.single.sdk.test.trade;
import org.dromara.daxpay.single.sdk.code.ChannelEnum;
import org.dromara.daxpay.single.sdk.code.PayMethodEnum;
import org.dromara.daxpay.single.sdk.code.SignTypeEnum;
import org.dromara.daxpay.single.sdk.model.trade.pay.PayResultModel;
import org.dromara.daxpay.single.sdk.net.DaxPayConfig;
import org.dromara.daxpay.single.sdk.net.DaxPayKit;
import org.dromara.daxpay.single.sdk.param.channel.AlipayParam;
import org.dromara.daxpay.single.sdk.param.channel.WechatPayParam;
import org.dromara.daxpay.single.sdk.param.trade.pay.PayParam;
import org.dromara.daxpay.single.sdk.response.DaxPayResult;
import org.dromara.daxpay.single.sdk.util.JsonUtil;
import org.dromara.daxpay.single.sdk.util.PaySignUtil;
import org.junit.Before;
import org.junit.Test;
import java.math.BigDecimal;
public class PayOrderTest {
@Before
public void init() {
// 初始化支付配置
DaxPayConfig config = DaxPayConfig.builder()
.serviceUrl("http://127.0.0.1:9999")
.signSecret("123456")
.appId("123")
.signType(SignTypeEnum.HMAC_SHA256)
.build();
DaxPayKit.initConfig(config);
}
@Test
public void wxQrPay() {
PayParam param = new PayParam();
param.setClientIp("127.0.0.1");
param.setBizOrderNo("SDK_" + System.currentTimeMillis());
param.setTitle("测试微-信扫码支付");
param.setDescription("这是支付备注");
param.setAmount(BigDecimal.valueOf(1.00));
param.setChannel(ChannelEnum.WECHAT.getCode());
param.setMethod(PayMethodEnum.QRCODE.getCode());
param.setAttach("{回调参数}");
param.setAllocation(false);
param.setReturnUrl("https://abc.com/returnurl");
param.setNotifyUrl("http://127.0.0.1:10880/test/callback/notify");
DaxPayResult<PayResultModel> execute = DaxPayKit.execute(param);
System.out.println(JsonUtil.toJsonStr(execute));
System.out.println(PaySignUtil.hmacSha256Sign(execute, "123456"));
}
}
基础环境搭建
数据库
-
启动MySQL或Postgresql实例。
-
在数据库中创建名为
dax-pay
的新库,确保字符集为utf8mb4(MySQL)或UTF8(Postgresql)。 -
将
_config/sql/dax-pay.sql
脚本导入新创建的数据库中。
Redis
启动Redis服务,并记录下连接信息以便后续配置。
项目下载
后端
仓库: git clone https://gitee.com/dromara/dax-pay
PC前端
仓库: git clone https://gitee.com/bootx/dax-pay-ui.git
H5前端
仓库: git clone https://gitee.com/bootx/dax-pay-h5.git
项目启动
后端
-
导入项目至IDEA,等待Maven自动下载依赖。
-
修改
daxpay-single-server
模块下的配置文件,更新数据库和Redis的连接信息。 -
运行
DaxpayServer
类中的main
方法启动应用。
PC前端
-
确认Node.js (v18.12.0+) 和 pnpm (v9.0.2+) 已正确安装。
-
使用Vs Code或WebStorm打开项目,依次执行以下命令:
-
安装依赖:
pnpm install
-
启动开发服务器:
pnpm run dev
-
H5前端
-
确保Node.js (v18+) 和 pnpm (v8.6.10+) 已正确安装。
-
使用Vs Code或WebStorm打开项目,依次执行以下命令:
-
安装依赖:
pnpm install
-
启动开发服务器:
pnpm run dev
-
本地调试
由于支付涉及到第三方网关交互及域名限制,建议采用如下方式进行本地调试:
-
准备内网穿透:使用工具如ngrok或frp实现本地服务对外网的访问。
-
Nginx配置:设置反向代理规则,将外部请求转-发给本地的服务端和H5前端。
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 8888;
server_name www.daxpay.cn;
location ^~/h5 {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_buffering on;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:9100/h5;
}
location /server/ {
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_buffering on;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_pass http://localhost:9999/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}
-
H5前端配置:调整
.env.development
文件中的变量,指-定正确的根路径和服务端API前缀。
VITE_PORT=9100
VITE_PUBLIC_PATH=/h5
VITE_GLOB_API_URL=
VITE_GLOB_API_URL_PREFIX=/server
VITE_V_CONSOLE=true
开源协议
DaxPay遵循Apache License 2.0协议发布。
即刻体验
DaxPay不仅提供了一套完整的支付处理方案,还特别注重用户体验和操作便捷性。下面我们将详细介绍一些核心功能,并通过图文结合的方式,帮助您快速上手并充分利用DaxPay的强大特性。
支持支付配置
支付通道:轻松添加和管理支付宝、微-信支付、云闪付等主流支付渠道,确保您的业务能够覆盖更广泛的用户群体。
支付方式:根据不同场景选择合适的支付方式,如二维码支付、H5支付、APP支付等,满足多样化的需求。
接口信息:为每个支付通道配置相应的API密钥和其他必要参数,保障交易的安-全性和稳定性。
订阅通知:设置回调URL以接收支付结果的通知,及时更新订单状态,提高客户满意度。
商户管理
应用信息:创建和管理多个应用账户,为不同的业务系统分配独立的支付权限,便于集中管理和统计分析。
订单管理
支付订单:实时查看和管理所有支付订单的状态,包括待支付、已支付、支付失败等,确保每一笔交易都得到妥善处理。
退款订单:当需要时,可以发起退款请求,支持部分或全额退款,简化售后服务流程。
转账订单:对于涉及资金转移的业务,DaxPay同样提供了便捷的转账功能。
交易记录
回调记录:记录每次支付回调的结果,方便排查问题和进行数据分析。
交易流水:详细展示每笔交易的具体信息,包括时间、金额、支付方式等,帮助您掌握资金流动情况。
关闭记录:对于未完成的交易,可以选择手动关闭,避免不必要的资源占用。
同步记录:保持与第三方支付平台的数据同步,确保本地记录与实际交易一致。
商户通知
订阅消息:根据需求订阅特定类型的支付事件通知,如支付成功、退款完成等,获取重要信息。
回调消息:自定义回调逻辑,将支付结果及时反馈给业务系统,实现自动化处理。
对账管理
对账文件下载:定期生成对账文件,包含详细的交易信息,方便与银-行或支付机构进行核对。
自动对账:集成智-能对账功能,自动比对交易记录,快速发现差异并标记异常,降低人工成-本。
结语
DaxPay凭借其简洁的设计、丰富的特性和强大的性能,已经成为众多企业和开发者的考虑的支付系统。
如果您正在寻找一种高-效且可靠的支付集成方案,不妨试试DaxPay,相信它会给您的项目带来意想不到的便利。