mirror of
https://gitee.com/dromara/dax-pay.git
synced 2025-09-07 13:10:44 +00:00
fix 退款修复时完成时间为空, 通道退款订单可退余额不正确问题修复
This commit is contained in:
@@ -9,9 +9,40 @@
|
||||
<version>2.0.0</version>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<!-- 项目信息 -->
|
||||
<name>bootx-platform</name>
|
||||
<description>bootx-platform 基于Spring Boot框架打造,针对单体式应用进行专门设计,提供整套服务模块,努力为打造全方位企业级开发解决方案</description>
|
||||
<url>https://gitee.com/bootx/bootx-platform</url>
|
||||
|
||||
<!-- 许可证 -->
|
||||
<licenses>
|
||||
<license>
|
||||
<name>The Apache Software License, Version 2.0</name>
|
||||
<url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
|
||||
<distribution>repo</distribution>
|
||||
</license>
|
||||
</licenses>
|
||||
|
||||
<!-- 开发者信息 -->
|
||||
<developers>
|
||||
<developer>
|
||||
<name>bootx</name>
|
||||
<email>xxm1995@outlook.com</email>
|
||||
<organization>bootx</organization>
|
||||
<url>https://gitee.com/bootx/bootx-platform</url>
|
||||
</developer>
|
||||
</developers>
|
||||
|
||||
<scm>
|
||||
<connection>scm:git:git@gitee.com:bootx/bootx-platform.git</connection>
|
||||
<developerConnection>scm:git:git@gitee.com:bootx/bootx-platform.git</developerConnection>
|
||||
<url>https://gitee.com/bootx/bootx-platform</url>
|
||||
</scm>
|
||||
|
||||
<properties>
|
||||
<maven.compiler.source>8</maven.compiler.source>
|
||||
<maven.compiler.target>8</maven.compiler.target>
|
||||
<java.version>1.8</java.version>
|
||||
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
|
||||
<logback-classic.version>1.2.7</logback-classic.version>
|
||||
<hutool.version>5.8.25</hutool.version>
|
||||
@@ -29,6 +60,7 @@
|
||||
<groupId>ch.qos.logback</groupId>
|
||||
<artifactId>logback-classic</artifactId>
|
||||
<version>${logback-classic.version}</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.projectlombok</groupId>
|
||||
@@ -44,4 +76,111 @@
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
<build>
|
||||
<plugins>
|
||||
<!-- 编译插件,设置源码以及编译的jdk版本 -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-compiler-plugin</artifactId>
|
||||
<version>3.1</version>
|
||||
<configuration>
|
||||
<source>${java.version}</source>
|
||||
<target>${java.version}</target>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<!--打包源码的插件-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-source-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-sources</id>
|
||||
<goals>
|
||||
<goal>jar-no-fork</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!-- Javadoc 文档生成插件-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-javadoc-plugin</artifactId>
|
||||
<version>3.6.0</version>
|
||||
<configuration>
|
||||
<failOnError>false</failOnError>
|
||||
<doclint>none</doclint>
|
||||
</configuration>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>attach-javadocs</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
<phase>package</phase>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!--公钥私钥插件,也就是上传需要进行验证用户名和密码过程中需要用到的插件-->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-gpg-plugin</artifactId>
|
||||
<version>1.6</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>sign-artifacts</id>
|
||||
<phase>verify</phase>
|
||||
<goals>
|
||||
<goal>sign</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
<!--部署插件-->
|
||||
<plugin>
|
||||
<groupId>org.sonatype.plugins</groupId>
|
||||
<artifactId>nexus-staging-maven-plugin</artifactId>
|
||||
<version>1.6.7</version>
|
||||
<extensions>true</extensions>
|
||||
<configuration>
|
||||
<!-- setting.xml中配置仓库平台id -->
|
||||
<serverId>sonatype</serverId>
|
||||
<!-- 仓库平台地址 -->
|
||||
<nexusUrl>https://s01.oss.sonatype.org/</nexusUrl>
|
||||
<!-- 自动完成在平台上close后的release的操作 -->
|
||||
<!-- <autoReleaseAfterClose>false</autoReleaseAfterClose>-->
|
||||
</configuration>
|
||||
</plugin>
|
||||
</plugins>
|
||||
|
||||
<resources>
|
||||
<!-- 指定打包资源路径 -->
|
||||
<resource>
|
||||
<directory>src/main/resources</directory>
|
||||
<includes>
|
||||
<include>**/*</include>
|
||||
</includes>
|
||||
<filtering>true</filtering>
|
||||
</resource>
|
||||
<!-- java类路径中会被打包的软件 -->
|
||||
<resource>
|
||||
<directory>src/main/java</directory>
|
||||
</resource>
|
||||
</resources>
|
||||
</build>
|
||||
|
||||
|
||||
<distributionManagement>
|
||||
<snapshotRepository>
|
||||
<id>sonatype</id>
|
||||
<name>OSS Snapshots Repository</name>
|
||||
<url>https://s01.oss.sonatype.org/content/repositories/snapshots/</url>
|
||||
</snapshotRepository>
|
||||
<repository>
|
||||
<id>sonatype</id>
|
||||
<name>OSS Staging Repository</name>
|
||||
<url>https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/</url>
|
||||
</repository>
|
||||
</distributionManagement>
|
||||
|
||||
</project>
|
||||
|
@@ -0,0 +1,22 @@
|
||||
package cn.bootx.platform.daxpay.sdk.code;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
|
||||
/**
|
||||
* 退款同步状态枚举
|
||||
* @author xxm
|
||||
* @since 2024/1/29
|
||||
*/
|
||||
@Getter
|
||||
@AllArgsConstructor
|
||||
public enum RefundSyncStatusEnum {
|
||||
SUCCESS("refund_success","退款成功"),
|
||||
FAIL("refund_fail","退款失败"),
|
||||
PROGRESS("refund_progress","退款中");
|
||||
|
||||
/** 编码 */
|
||||
private final String code;
|
||||
/** 名称 */
|
||||
private final String name;
|
||||
}
|
@@ -0,0 +1,20 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.divide;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayResponseModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* 分账结果(目前未支持)
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class DivideOrderModel extends DaxPayResponseModel {
|
||||
|
||||
/** 分账状态 */
|
||||
private String status;
|
||||
}
|
@@ -0,0 +1,43 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.pay;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayStatusEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* 支付订单通道响应参数
|
||||
* @author xxm
|
||||
* @since 2024/1/16
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class QueryPayChannelOrder {
|
||||
|
||||
/** 是否为异步支付通道 */
|
||||
private boolean async;
|
||||
|
||||
/** 支付通道 */
|
||||
private String channel;
|
||||
|
||||
/** 支付方式 */
|
||||
private String payWay;
|
||||
|
||||
/**
|
||||
* 网关订单号, 用与将记录关联起来
|
||||
*/
|
||||
private String gatewayOrderNo;
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
* @see PayStatusEnum
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/** 金额 */
|
||||
private Integer amount;
|
||||
|
||||
/** 可退款金额 */
|
||||
private Integer refundableBalance;
|
||||
}
|
@@ -0,0 +1,66 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.pay;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayStatusEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayResponseModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 支付订单查询响应参数
|
||||
* @author xxm
|
||||
* @since 2024/1/16
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class QueryPayOrderModel extends DaxPayResponseModel {
|
||||
|
||||
/** 支付ID */
|
||||
private Long paymentId;
|
||||
|
||||
/** 业务号 */
|
||||
private String businessNo;
|
||||
|
||||
/** 标题 */
|
||||
private String title;
|
||||
|
||||
/** 描述 */
|
||||
private String description;
|
||||
|
||||
/** 是否是异步支付 */
|
||||
private boolean asyncPay;
|
||||
|
||||
/** 是否是组合支付 */
|
||||
private boolean combinationPay;
|
||||
|
||||
/**
|
||||
* 异步支付通道
|
||||
* @see PayChannelEnum
|
||||
*/
|
||||
private String asyncChannel;
|
||||
|
||||
/** 金额 */
|
||||
private Integer amount;
|
||||
|
||||
/** 可退款余额 */
|
||||
private Integer refundableBalance;
|
||||
|
||||
/**
|
||||
* 支付状态
|
||||
* @see PayStatusEnum
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/** 支付时间(秒级时间戳) */
|
||||
private Integer payTime;
|
||||
|
||||
/** 过期时间(秒级时间戳) */
|
||||
private Integer expiredTime;
|
||||
|
||||
/** 支付通道列表 */
|
||||
private List<QueryPayChannelOrder> channels;
|
||||
}
|
@@ -1,6 +1,6 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.refund;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayResponseModel;
|
||||
import cn.bootx.platform.daxpay.sdk.code.RefundStatusEnum;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
@@ -13,7 +13,7 @@ import lombok.ToString;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class RefundChannelOrderModel extends DaxPayResponseModel {
|
||||
public class QueryRefundChannelOrderModel {
|
||||
|
||||
/** 通道 */
|
||||
private String channel;
|
||||
@@ -24,9 +24,21 @@ public class RefundChannelOrderModel extends DaxPayResponseModel {
|
||||
/** 异步支付方式 */
|
||||
private boolean async;
|
||||
|
||||
/** 订单金额" */
|
||||
/** 订单金额 */
|
||||
private Integer orderAmount;
|
||||
|
||||
/** 退款金额 */
|
||||
private Integer amount;
|
||||
|
||||
/** 剩余可退余额 */
|
||||
private Integer refundableAmount;
|
||||
|
||||
/**
|
||||
* 退款状态
|
||||
* @see RefundStatusEnum
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/** 退款完成时间(秒级时间戳) */
|
||||
private Long refundTime;
|
||||
}
|
@@ -18,17 +18,20 @@ import java.util.List;
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class RefundOrderResult extends DaxPayResponseModel {
|
||||
public class QueryRefundOrderModel extends DaxPayResponseModel {
|
||||
|
||||
/** 支付号 */
|
||||
private Long paymentId;
|
||||
|
||||
/** 关联的业务id */
|
||||
private String businessNo;
|
||||
/** 退款id */
|
||||
private Long refundId;
|
||||
|
||||
/** 退款号 */
|
||||
private String refundNo;
|
||||
|
||||
/** 关联支付号 */
|
||||
private Long paymentId;
|
||||
|
||||
/** 关联业务号 */
|
||||
private String businessNo;
|
||||
|
||||
/** 标题 */
|
||||
private String title;
|
||||
|
||||
@@ -43,12 +46,6 @@ public class RefundOrderResult extends DaxPayResponseModel {
|
||||
*/
|
||||
private String gatewayOrderNo;
|
||||
|
||||
/** 通道退款订单 */
|
||||
private List<RefundChannelOrderModel> channels;
|
||||
|
||||
/** 退款终端ip */
|
||||
private String clientIp;
|
||||
|
||||
/** 退款时间 */
|
||||
private LocalDateTime refundTime;
|
||||
|
||||
@@ -57,4 +54,7 @@ public class RefundOrderResult extends DaxPayResponseModel {
|
||||
* @see RefundStatusEnum
|
||||
*/
|
||||
private String status;
|
||||
|
||||
/** 通道退款订单 */
|
||||
private List<QueryRefundChannelOrderModel> channels;
|
||||
}
|
@@ -1,5 +1,6 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.sync;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PaySyncStatusEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayResponseModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
@@ -16,21 +17,15 @@ import lombok.ToString;
|
||||
public class PaySyncModel extends DaxPayResponseModel {
|
||||
|
||||
/**
|
||||
* 支付网关同步状态
|
||||
* 支付网关同步结果
|
||||
* @see PaySyncStatusEnum
|
||||
*/
|
||||
private String gatewayStatus;
|
||||
|
||||
/** 是否同步成功 */
|
||||
private boolean success;
|
||||
|
||||
/** 是否进行了修复 */
|
||||
private boolean repair;
|
||||
|
||||
/** 修复号 */
|
||||
private String repairOrderNo;
|
||||
|
||||
/** 失败原因 */
|
||||
private String errorMsg;
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,31 @@
|
||||
package cn.bootx.platform.daxpay.sdk.model.sync;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.RefundSyncStatusEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayResponseModel;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.ToString;
|
||||
|
||||
/**
|
||||
* 退款信息同步结果
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@ToString
|
||||
public class RefundSyncModel extends DaxPayResponseModel {
|
||||
|
||||
/**
|
||||
* 支付网关同步结果
|
||||
* @see RefundSyncStatusEnum
|
||||
*/
|
||||
private String gatewayStatus;
|
||||
|
||||
/** 是否进行了修复 */
|
||||
private boolean repair;
|
||||
|
||||
/** 修复号 */
|
||||
private String repairOrderNo;
|
||||
|
||||
}
|
@@ -1,6 +1,7 @@
|
||||
package cn.bootx.platform.daxpay.sdk.net;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
@@ -47,6 +48,6 @@ public abstract class DaxPayRequest<T extends DaxPayResponseModel> {
|
||||
private String version = "1.0";
|
||||
|
||||
/** 请求时间,传输时间戳 */
|
||||
private Long reqTime;
|
||||
private Long reqTime = DateUtil.currentSeconds();
|
||||
|
||||
}
|
||||
|
@@ -0,0 +1,41 @@
|
||||
package cn.bootx.platform.daxpay.sdk.param.divide;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.divide.DivideOrderModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayRequest;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 分账请求接口(目前未支持)
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class DivideOrderParam extends DaxPayRequest<DivideOrderModel> {
|
||||
|
||||
/** 支付ID */
|
||||
private Long paymentId;
|
||||
|
||||
/** 业务号 */
|
||||
private String businessNo;
|
||||
|
||||
/**
|
||||
* 方法请求路径
|
||||
*/
|
||||
@Override
|
||||
public String path() {
|
||||
return "/unipay/divide";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求返回结果反序列化为实体类
|
||||
*/
|
||||
@Override
|
||||
public DaxPayResult<DivideOrderModel> toModel(String json) {
|
||||
return JSONUtil.toBean(json, new TypeReference<DaxPayResult<DivideOrderModel>>() {}, false);
|
||||
}
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package cn.bootx.platform.daxpay.sdk.param.pay;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.pay.QueryPayOrderModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayRequest;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 支付单查询参数
|
||||
* @author xxm
|
||||
* @since 2024/1/16
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class QueryPayParam extends DaxPayRequest<QueryPayOrderModel> {
|
||||
|
||||
/** 支付ID */
|
||||
private Long paymentId;
|
||||
|
||||
/** 业务号 */
|
||||
private String businessNo;
|
||||
|
||||
/**
|
||||
* 方法请求路径
|
||||
*/
|
||||
@Override
|
||||
public String path() {
|
||||
return "/uni/query/payOrder";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求返回结果反序列化为实体类
|
||||
*/
|
||||
@Override
|
||||
public DaxPayResult<QueryPayOrderModel> toModel(String json) {
|
||||
return JSONUtil.toBean(json, new TypeReference<DaxPayResult<QueryPayOrderModel>>() {}, false);
|
||||
}
|
||||
}
|
@@ -0,0 +1,41 @@
|
||||
package cn.bootx.platform.daxpay.sdk.param.refund;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.refund.QueryRefundOrderModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayRequest;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
|
||||
/**
|
||||
* 查询退款订单参数类
|
||||
* @author xxm
|
||||
* @since 2024/1/16
|
||||
*/
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@Data
|
||||
public class QueryRefundParam extends DaxPayRequest<QueryRefundOrderModel> {
|
||||
|
||||
/** 退款ID */
|
||||
private Long refundId;
|
||||
|
||||
/** 退款号 */
|
||||
private String refundNo;
|
||||
|
||||
/**
|
||||
* 方法请求路径
|
||||
*/
|
||||
@Override
|
||||
public String path() {
|
||||
return "/uni/query/refundOrder";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求返回结果反序列化为实体类
|
||||
*/
|
||||
@Override
|
||||
public DaxPayResult<QueryRefundOrderModel> toModel(String json) {
|
||||
return JSONUtil.toBean(json, new TypeReference<DaxPayResult<QueryRefundOrderModel>>() {}, false);
|
||||
}
|
||||
}
|
@@ -0,0 +1,44 @@
|
||||
package cn.bootx.platform.daxpay.sdk.param.sync;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.sync.RefundSyncModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayRequest;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import cn.hutool.core.lang.TypeReference;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* 退款同步参数
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class RefundSyncParam extends DaxPayRequest<RefundSyncModel> {
|
||||
/**
|
||||
* 退款ID,refundId和refundNo 必传一个, 同时传输时,以 refundId 为准
|
||||
*/
|
||||
private Long refundId;
|
||||
|
||||
/**
|
||||
* 退款号,refundId和refundNo 必传一个,同时传输时,以 refundId 为准
|
||||
*/
|
||||
private String refundNo;
|
||||
|
||||
/**
|
||||
* 方法请求路径
|
||||
*/
|
||||
@Override
|
||||
public String path() {
|
||||
return "/unipay/syncRefund";
|
||||
}
|
||||
|
||||
/**
|
||||
* 将请求返回结果反序列化为实体类
|
||||
*/
|
||||
@Override
|
||||
public DaxPayResult<RefundSyncModel> toModel(String json) {
|
||||
return JSONUtil.toBean(json, new TypeReference<DaxPayResult<RefundSyncModel>>() {}, false);
|
||||
}
|
||||
}
|
@@ -15,10 +15,10 @@ import java.util.stream.Collectors;
|
||||
/**
|
||||
* 如果需要进行签名,
|
||||
* 1. 参数名ASCII码从小到大排序(字典序)
|
||||
* 2. 如果参数的值为空不参与签名
|
||||
* 3. 参数名不区分大小写
|
||||
* 4. 嵌套对象转换成先转换成MAP再序列化为字符串
|
||||
* 5. 支持两层嵌套, 更多层级嵌套未测试, 可能会导致不可预知的问题
|
||||
* * 2. 如果参数的值为空不参与签名
|
||||
* * 3. 参数名不区分大小写
|
||||
* * 4. 嵌套对象转换成先转换成MAP再序列化为字符串
|
||||
* * 5. 支持两层嵌套, 更多层级嵌套未测试, 可能会导致不可预知的问题
|
||||
*/
|
||||
@UtilityClass
|
||||
public class PaySignUtil {
|
||||
|
@@ -1,4 +1,4 @@
|
||||
package cn.bootx.platform.daxpay.sdk;
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.pay.PayCloseModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
@@ -1,4 +1,4 @@
|
||||
package cn.bootx.platform.daxpay.sdk;
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.sync.PaySyncModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
@@ -1,4 +1,4 @@
|
||||
package cn.bootx.platform.daxpay.sdk;
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayWayEnum;
|
@@ -0,0 +1,40 @@
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.sync.RefundSyncModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayKit;
|
||||
import cn.bootx.platform.daxpay.sdk.param.sync.RefundSyncParam;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 退款同步接口
|
||||
* @author xxm
|
||||
* @since 2024/2/5
|
||||
*/
|
||||
public class RefundOrderSyncTest {
|
||||
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
// 初始化支付配置
|
||||
DaxPayConfig config = DaxPayConfig.builder()
|
||||
.serviceUrl("http://127.0.0.1:9000")
|
||||
.signSecret("123456")
|
||||
.build();
|
||||
DaxPayKit.initConfig(config);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPay() {
|
||||
RefundSyncParam param = new RefundSyncParam();
|
||||
|
||||
param.setRefundNo("R0001");
|
||||
|
||||
DaxPayResult<RefundSyncModel> execute = DaxPayKit.execute(param);
|
||||
System.out.println(execute);
|
||||
System.out.println(execute.getData());
|
||||
}
|
||||
|
||||
}
|
@@ -1,4 +1,4 @@
|
||||
package cn.bootx.platform.daxpay.sdk;
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.refund.RefundModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
@@ -1,4 +1,4 @@
|
||||
package cn.bootx.platform.daxpay.sdk;
|
||||
package cn.bootx.platform.daxpay.sdk.payment;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayWayEnum;
|
||||
@@ -17,8 +17,6 @@ import org.junit.Test;
|
||||
*/
|
||||
public class SimplePayOrderTest {
|
||||
|
||||
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
// 初始化支付配置
|
@@ -0,0 +1,38 @@
|
||||
package cn.bootx.platform.daxpay.sdk.query;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.pay.QueryPayOrderModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayKit;
|
||||
import cn.bootx.platform.daxpay.sdk.param.pay.QueryPayParam;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 查询支付订单测试类
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
public class QueryPayOrderTest {
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
// 初始化支付配置
|
||||
DaxPayConfig config = DaxPayConfig.builder()
|
||||
.serviceUrl("http://127.0.0.1:9000")
|
||||
.signSecret("123456")
|
||||
.build();
|
||||
DaxPayKit.initConfig(config);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPay() {
|
||||
QueryPayParam param = new QueryPayParam();
|
||||
|
||||
param.setBusinessNo("2");
|
||||
|
||||
DaxPayResult<QueryPayOrderModel> execute = DaxPayKit.execute(param);
|
||||
System.out.println(execute);
|
||||
System.out.println(execute.getData());
|
||||
}
|
||||
}
|
@@ -0,0 +1,38 @@
|
||||
package cn.bootx.platform.daxpay.sdk.query;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.model.refund.QueryRefundOrderModel;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayConfig;
|
||||
import cn.bootx.platform.daxpay.sdk.net.DaxPayKit;
|
||||
import cn.bootx.platform.daxpay.sdk.param.refund.QueryRefundParam;
|
||||
import cn.bootx.platform.daxpay.sdk.response.DaxPayResult;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* 退款订单查询接口
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
public class QueryRefundOrderTest {
|
||||
|
||||
@Before
|
||||
public void init() {
|
||||
// 初始化支付配置
|
||||
DaxPayConfig config = DaxPayConfig.builder()
|
||||
.serviceUrl("http://127.0.0.1:9000")
|
||||
.signSecret("123456")
|
||||
.build();
|
||||
DaxPayKit.initConfig(config);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPay() {
|
||||
QueryRefundParam param = new QueryRefundParam();
|
||||
|
||||
param.setRefundId(1755263825769361408L);
|
||||
|
||||
DaxPayResult<QueryRefundOrderModel> execute = DaxPayKit.execute(param);
|
||||
System.out.println(execute);
|
||||
System.out.println(execute.getData());
|
||||
}
|
||||
}
|
@@ -0,0 +1,55 @@
|
||||
package cn.bootx.platform.daxpay.sdk.util;
|
||||
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayChannelEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.code.PayWayEnum;
|
||||
import cn.bootx.platform.daxpay.sdk.param.pay.PayChannelParam;
|
||||
import cn.bootx.platform.daxpay.sdk.param.pay.PayParam;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* 参数签名测试类
|
||||
* @author xxm
|
||||
* @since 2024/2/7
|
||||
*/
|
||||
@Slf4j
|
||||
public class PayParamSignTest {
|
||||
|
||||
/**
|
||||
* 签名测试
|
||||
*/
|
||||
@Test
|
||||
public void sign(){
|
||||
|
||||
PayParam param = new PayParam();
|
||||
param.setClientIp("127.0.0.1");
|
||||
param.setNotNotify(true);
|
||||
param.setNotReturn(true);
|
||||
|
||||
param.setBusinessNo("P0001");
|
||||
param.setTitle("测试接口支付");
|
||||
PayChannelParam payChannelParam = new PayChannelParam();
|
||||
payChannelParam.setChannel(PayChannelEnum.WECHAT.getCode());
|
||||
payChannelParam.setWay(PayWayEnum.QRCODE.getCode());
|
||||
payChannelParam.setAmount(1);
|
||||
|
||||
List<PayChannelParam> payChannels = Collections.singletonList(payChannelParam);
|
||||
param.setPayChannels(payChannels);
|
||||
|
||||
Map<String, String> map = PaySignUtil.toMap(param);
|
||||
log.info("转换为有序MAP后的内容: {}",map);
|
||||
String data = PaySignUtil.createLinkString(map);
|
||||
log.info("将MAP拼接字符串: {}",data);
|
||||
String sign = "123456";
|
||||
data += "&sign="+sign;
|
||||
data = data.toUpperCase();
|
||||
log.info("添加秘钥并转换为大写的字符串: {}",data);
|
||||
log.info("MD5: {}",PaySignUtil.md5(data));
|
||||
log.info("HmacSHA256: {}",PaySignUtil.hmacSha256(data,sign));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user