日志命名

MD5工具类
This commit is contained in:
wangw 2025-02-10 14:54:54 +08:00
parent babfa6a8ca
commit e1215ca441
23 changed files with 899 additions and 3 deletions

View File

@ -2,12 +2,13 @@ package com.czg.utils;
import org.springframework.util.DigestUtils;
/**
* @author ww
*/
public class MD5Util {
/**
* MD5加密 十六进制
* @param str
* @return
*/
public static String md5AsHex(String str) {
return DigestUtils.md5DigestAsHex(str.getBytes());

21
cash-sdk/czg-pay/pom.xml Normal file
View File

@ -0,0 +1,21 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.czg</groupId>
<artifactId>cash-sdk</artifactId>
<version>1.0.0</version>
</parent>
<groupId>com.ysk</groupId>
<artifactId>czg-pay</artifactId>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
</project>

View File

@ -0,0 +1,89 @@
package com.czg.entity;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateTime;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson2.JSONObject;
import lombok.Data;
/**
* @author ww
*/
@Data
public class CzgBaseReqParams {
/**
* 应用ID tb_shop_merchant 表中的 app_id
*/
private String appId;
/**
* 签名
* MD5 appSecret 参数不做排序 直接放末尾
* 加签字符串拼接方式为字段名 = 字段值并用&符号连接需要按照既定排序方式相连并且在末端连接 appSecret=xxx
* 使用 MD5 加签时验签时使用同样的方式加签对比签名值即可
* <p>
* RSA2
* 加签字符串拼接方式为字段名=字段值并用 & 符号连接使用应用私钥对该拼接串进行签名
*/
private String sign;
/**
* 签名方式
* 可选值 MD5RSA2
*/
private String signType = "MD5";
/**
* 业务数据
* JSON 形式的字符串
*/
private String bizData;
/**
* 版本号 目前固定 1.0
*/
private String version = "1.0";
/**
* 请求时间 格式为 yyyyMMddHHmmss
*/
private String reqTime = DateUtil.format(new DateTime(), DatePattern.PURE_DATETIME_PATTERN);
/**
* 唯一请求 Id String(40)
*/
private String reqId = IdUtil.simpleUUID();
/**
* 应用密钥 tb_shop_merchant 表中的 app_secret
*/
private String appSecret;
/**
* 必填字段
*
* @param appId 应用id tb_shop_merchant 表中的 app_id
* @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
* @param bizData JSON 形式的字符串
*/
public CzgBaseReqParams(String appId, String bizData, String appSecret) {
this.appId = appId;
this.bizData = bizData;
this.appSecret = appSecret;
}
/**
* 必填字段
*
* @param appId 应用id tb_shop_merchant 表中的 app_id
* @param appSecret 应用密钥 tb_shop_merchant 表中的 app_secret
* @param bizData JSON 形式的字符串
*/
public static CzgBaseReqParams getInstance(String appId, String appSecret, Object bizData) {
return new CzgBaseReqParams(appId, ObjectUtil.isNotEmpty(bizData) ? JSONObject.toJSONString(bizData) : "", appSecret);
}
}

View File

@ -0,0 +1,44 @@
package com.czg.entity;
import lombok.Data;
/**
* @author ww
*/
@Data
public class CzgBaseRespParams {
/**
* 000000-处理成功
* 其他-处理有误详见错误码
*/
private String code;
/**
* 具体错误原因
*/
private String msg;
/**
* 对data内数据签名,如data为空则不返回
*/
private String sign;
/**
* 返回json格式数据
*/
private String bizData;
/**
* 返回时间 yyyyMMddHHmmss
*/
private String timestamp;
@Override
public String toString() {
return "{" +
"\"code\":" + code +
", \"msg\":" + msg +
", \"sign\":" + sign +
", \"bizData\":" + bizData +
", \"timestamp\":" + timestamp +
'}';
}
}

View File

@ -0,0 +1,92 @@
package com.czg.entity.req;
import lombok.Data;
/**
* @author ww
*/
@Data
public class CzgBaseReq {
//必填范围
/**
* 订单标题
*/
private String subject;
/**
* 订单描述 String(256)
*/
private String body;
/**
* 交易金额
*/
private Long amount;
/**
* 货币类型 cny
*/
private String currency = "cny";
/**
* 商户订单号 String(30)
*/
private String mchOrderNo;
/**
* 门店编号 tb_shop_merchant store_id
*/
private String storeId;
//非必填项
/**
* 订单备注 String(50)
*/
private String buyerRemark;
/**
* 异步通知地址 String(128)
* 支付结果异步回调URL,只有传了该值才会发起回调
*/
private String notifyUrl;
/**
* 失效时间 int 15
* 订单失效时间,单位分钟,默认15小时.
* 取值范围 5-1440 分钟
* 订单在(创建时间+失效时间)后失效
*/
private Integer expiredTime;
/**
* 分账模式
* 0-该笔订单不允许分账[默认],
* 1-实时分账
* 2-延时分账
*/
private Integer divisionMode;
/**
* 分账详情
*/
private String divisionDetail;
/**
* 扩展参数 String(512)
* 商户扩展参数,回调时会原样返回
*/
private String extParam;
/**
* 花呗分期数
* 支付宝交易时可传 而且金额需要大于或等于 100.00元时生效
* 3/6/12
*/
private Integer hbFqNum;
/**
* 卖家是否承担手续费
* 100卖家承担手续费
* 0买家承担手续费
*/
private Integer hbFqPercent;
/**
* 是否禁用信用卡
* -1不禁用 1禁用
* 不传默认为不限制
*/
private Integer limitPay;
}

View File

@ -0,0 +1,27 @@
package com.czg.entity.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* h5支付请求参数
* @author ww
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgH5PayReq extends CzgBaseReq{
//必填范围
/**
* 用户IP 支付的用户IP
*/
private String clientIp;
//非必填范围
/**
* 跳转通知地址
* 支付结果同步跳转通知URL
*/
private String returnUrl;
}

View File

@ -0,0 +1,55 @@
package com.czg.entity.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 公众号/生活号/银联js支付
*
* @author ww
* <p>
* 码牌台卡立牌等
* 用户通过扫描微信/支付宝/云闪付APP静态二维码输入订单金额进行付款动作
* 公众号 / 生活号商城
* 用户通过公众号下单输入密码完成付款动作适用于自有公众号主体交易
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgJsPayReq extends CzgBaseReq {
//必填范围
/**
* 用户唯一标识 String(30)
* 微信支付时传入用户的openId
* 支付宝支付和银联支付时传入用户的userId
*/
private String userId;
/**
* 用户IP
* 需要传付款用户客户端IP地址
*/
private String clientIp;
//非必填范围
/**
* 子商户appid 微信付款支付的时候 需要上送
*/
private String subAppid;
/**
* 跳转通知地址
* 支付结果同步跳转通知URL
*/
private String returnUrl;
/**
* 银联js支付成功前端跳转
*/
private String frontUrl;
/**
* 银联js支付失败前端跳转地址
*/
private String frontFailUrl;
}

View File

@ -0,0 +1,53 @@
package com.czg.entity.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 小程序支付
* @author ww
* 自有小程序拉起支付
* 自有小程序拉起服务商小程序(微信)半屏小程序支付
* 半屏小程序需要在商户自己的小程序中的半屏小程序配置里面申请 否则会拉起全屏小程序支付
*
* 半屏小程序支付适用场景是商户自己的小程序被纳入微信实物电商类型小程序导致间联商户无法绑定这类的小程序APPID
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgLtPayReq extends CzgBaseReq{
//必填范围
/**
* 用户唯一标识 String(30)
* 微信支付时传入用户的 openId
* 支付宝支付和银联支付时传入用户的 userId
*/
private String userId;
/**
* 用户 IP 支付的用户 IP
*/
private String clientIp;
//非必填范围
/**
* 跳转通知地址
* 支付结果同步跳转通知 URL
*/
private String returnUrl;
/**
* 子商户 appid 微信付款支付的时候 需要上送
* isScreen false 的情况下需要传入
*/
private String subAppid;
/**
* 是否半屏
* 是否使用半屏小程序默认为 false
* 前提小程序被纳入了实物电商类型的小程序间联商户无法绑定这类的小程序的 appid
*/
private boolean isScreen;
}

View File

@ -0,0 +1,30 @@
package com.czg.entity.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 反扫请求参数
*
* @author ww
* <p>
* 被扫免密同步返回支付结果不推送异步通知
* 被扫输密推送异步通知
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgMicroPayReq extends CzgBaseReq {
//必填范围
/**
* 付款码信息 String(30)
* 扫码设备获取微信或支付宝上付款的信息
*/
private String authCode;
//非必填范围
/**
* 子商户appid 微信付款支付的时候 需要上送
*/
private String subAppid;
}

View File

@ -0,0 +1,45 @@
package com.czg.entity.req;
import lombok.Data;
/**
* @author ww
*/
@Data
public class CzgRefundReq {
//必填范围
/**
* 退款订单号
* 商户退款订单号
*/
private String mchRefundNo;
/**
* 退款原因
*/
private String refundReason;
/**
* 退款金额
* 单位为分
*/
private Long refundAmount;
//非必填范围
/**
* 原平台订单号 (二选一)
*/
private String payOrderId;
/**
* 原商户订单号 (二选一)
*/
private String mchOrderNo;
/**
* 扩展参数
*/
private String extParam;
/**
* 回调地址
*/
private String notifyUrl;
}

View File

@ -0,0 +1,27 @@
package com.czg.entity.req;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 正扫支付请求参数
* @author ww
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgScanPayReq extends CzgBaseReq{
// 必填项
/**
* 用户IP 支付的用户IP
*/
private String clientIp;
//非必填项
/**
* 跳转通知地址
* String(128)
*/
private String returnUrl;
}

View File

@ -0,0 +1,113 @@
package com.czg.entity.resp;
import lombok.Data;
/**
* 超掌柜通用响应参数
*
* @author ww
*/
@Data
public class CzgBaseResp {
//必填范围
/**
* 交易金额
* 单位
*/
private Long amount;
/**
* String(32)
* 商户订单号
*/
private String mchOrderNo;
/**
* 平台订单号
*/
private String payOrderId;
/**
* 商户号
*/
private String mercNo;
/**
* 订单状态
* INIT - 订单初始化
* TRADE_AWAIT- 待支付
* TRADE_SUCCESS - 支付成功
* TRADE_FAIL-支付失败
* TRADE_CANCEL-交易取消
* TRADE_REFUND-已退款
* REFUND_ING - 退款中
* TRADE_CLOSE-订单关闭
*/
private String state;
/**
* 订单类型
* 微信 WECHAT
* 支付宝 ALIPAY
* 银联云闪付 UNIONPAY
*/
private String payType;
/**
* 支付通道编码
*/
private String ifCode;
//非必填范围
/**
* 发往渠道的流水号
* 微信/支付宝订单详情中的商户单号
*/
private String channelSendNo;
/**
* 渠道订单号
* 微信/支付宝订单号
*/
private String channelTradeNo;
/**
* 扩展参数
*/
private String extParam;
/**
* 描述 等待用户付款
*/
private String note;
/**
* 交易手续费
*/
private Long tradeFee;
/**
* 门店id
*/
private String storeId;
/**
* 订单标题
*/
private String subject;
/**
* 付款卡类型
*/
private String drType;
/**
* 退款金额
*/
private Long refundAmt;
/**
* 退款状态类型
* 0-未发生实际退款, 1-部分退款, 2-全额退款
*/
private Integer refundState;
/**
* 垫资手续费
*/
private String cashFee;
/**
* 结算类型 D0/D1/T1
*/
private String settlementType;
}

View File

@ -0,0 +1,9 @@
package com.czg.entity.resp;
/**
* @author ww
* @description H5支付响应参数
*/
public class CzgH5PayResp extends CzgBaseResp{
}

View File

@ -0,0 +1,17 @@
package com.czg.entity.resp;
import com.czg.entity.resp.pay.CzgPayInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* js支付响应参数
*
* @author ww
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgJsPayResp extends CzgBaseResp{
private CzgPayInfo payInfo;
}

View File

@ -0,0 +1,26 @@
package com.czg.entity.resp;
import com.czg.entity.resp.pay.CzgLitePayInfo;
import com.czg.entity.resp.pay.CzgPayInfo;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 小程序支付 响应
*
* @author ww
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgLtPayResp extends CzgBaseResp{
/**
* 支付信息
*/
private CzgPayInfo payInfo;
/**
* 小程序支付信息
*/
private CzgLitePayInfo liteInfo;
}

View File

@ -0,0 +1,16 @@
package com.czg.entity.resp;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* 反扫请求 响应
*
* @author ww
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class CzgMicroPayResp extends CzgBaseResp{
}

View File

@ -0,0 +1,80 @@
package com.czg.entity.resp;
/**
* @author ww
* @description
*/
public class CzgRefundResp {
/**
* 商户上送的退款订单号
* String(30)
*/
private String mchRefundNo;
/**
* 平台退款订单号
* String(30)
*/
private String refundOrderId;
/**
* 退款状态
* String(10)
* INIT初始化
* ING退款中
* SUCCESS退款成功
* FAIL退款失败
* CLOSE退款关闭
*/
private String state;
/**
* 备注 String(30)
*/
private String note;
/**
* 原平台交易单号
* String(32)
*/
private String oriPayOrderId;
/**
* 商户号
* String(30)
*/
private String mercNo;
/**
* 原订单交易金额
* 单位分
*/
private Long oriAmount;
/**
* 退款金额
* 单位分
*/
private Long refundAmt;
/**
* 退款原因
*/
private String refundReason;
/**
* 所属渠道
* String(10)
* sxfpay
*/
private String ifCode;
/**
* 退款完成时间
* String(20)
* 格式yyyy-MM-dd HH:mm:ss
*/
private String refundTime;
/**
* 扩展参数
*/
private String extParam;
/**
* 支付类型
* String(10)
* WECHAT微信
* ALIPAY支付宝
* UNIONPAY银联云闪付
*/
private String payType;
}

View File

@ -0,0 +1,12 @@
package com.czg.entity.resp.pay;
/**
* @author ww
* @description h5支付参数
*/
public class CzgH5PayInfo {
/**
* 支付跳转地址
*/
private String payUrl;
}

View File

@ -0,0 +1,36 @@
package com.czg.entity.resp.pay;
import lombok.Data;
/**
* 支付信息
*
* @author ww
*/
@Data
public class CzgLitePayInfo {
/**
* 微信Appid
*/
private String appId;
/**
* 支付路径
*/
private String path;
/**
* 小程序的 版本env
* release - 正式
* test - 开发
* preview - 体验
*/
private String envVersion;
/**
* 微信小程序原始ID
*/
private String ghId;
/**
* 支付宝小程序路径
*/
private String alipayPath;
}

View File

@ -0,0 +1,50 @@
package com.czg.entity.resp.pay;
import com.alibaba.fastjson2.annotation.JSONField;
import lombok.Data;
/**
* 支付信息
* @author ww
*/
@Data
public class CzgPayInfo {
/**
* 微信 Appid
*/
private String appId;
/**
* 微信 timeStamp
*/
private String timeStamp;
/**
* 微信 package
*/
@JSONField(name = "package")
private String wechatPackage;
/**
* 微信支付签名
*/
private String paySign;
/**
* 签名类型
* MD5/RSA
*/
private String signType;
/**
* 微信 nonceStr 微信支付下返回
*/
private String nonceStr;
/**
* 支付宝流水号
* 对应 trade_no
*/
private String tradeNo;
/**
* 银联重定向跳转地址 银联场景下返回
*/
private String redirectUrl;
}

View File

@ -0,0 +1,13 @@
package com.czg.entity.resp.pay;
/**
* 扫码支付参数
* @author ww
* @description
*/
public class CzgScanPayInfo {
/**
* 付款二维码地址 qrCodeUrl
*/
private String payUrl;
}

View File

@ -0,0 +1,29 @@
package com.czg.enums;
import lombok.Getter;
/**
* @author ww
*/
@Getter
public enum CzgPayEnum {
SCANPAY("/api/open/payment/scanpay", "PC扫码支付"),
MICROPAY("/api/open/payment/micropay", "聚合反扫B扫C"),
JSPAY("/api/open/payment/jspay", "公众号/生活号/银联js支付"),
LTPAY("/api/open/payment/ltpay", "小程序支付"),
H5PAY("/api/open/payment/h5pay", "手机网页支付"),
TRADE("/api/open/query/trade", "订单状态查询"),
REFUND("/api/open/order/refund", "统一退款 D0退款需要使用平台户退款"),
QUERY_REFUND("/api/open/query/refund", "退款状态查询"),
;
private final String uri;
private final String msg;
CzgPayEnum(String uri, String msg) {
this.uri = uri;
this.msg = msg;
}
}

View File

@ -8,8 +8,12 @@
<artifactId>cash</artifactId>
<version>1.0.0</version>
</parent>
<name>第三方内容</name>
<packaging>pom</packaging>
<name>third sdk</name>
<description>第三方内容</description>
<modules>
<module>czg-pay</module>
</modules>
<artifactId>cash-sdk</artifactId>
<properties>
@ -18,4 +22,11 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>com.czg</groupId>
<artifactId>cash-common-tools</artifactId>
<version>1.0.0</version>
</dependency>
</dependencies>
</project>