记得上下班打卡 | git大法好,push需谨慎

Commit 1650f26c authored by wangyifan's avatar wangyifan

离线支付-斗拱接口下单

parent ad80cb1e
...@@ -359,6 +359,9 @@ public class GoblinRedisConst { ...@@ -359,6 +359,9 @@ public class GoblinRedisConst {
public static final String GOBLIN_RECHARGE_WRISTBAND = PREFIX.concat("recharge:wristband"); public static final String GOBLIN_RECHARGE_WRISTBAND = PREFIX.concat("recharge:wristband");
public static final String GOBLIN_RECHARGE_MAIZHI_TOKEN = PREFIX.concat("recharge:maizhitoken"); public static final String GOBLIN_RECHARGE_MAIZHI_TOKEN = PREFIX.concat("recharge:maizhitoken");
// 手环订单
public static final String GOBLIN_BRACELET_USER = PREFIX.concat("bracelet:userId:");
/* ----------------------------------------------------------------- */ /* ----------------------------------------------------------------- */
public static final String GOBLIN_ORDER_LOG = PREFIX.concat("order:log:");//无用 public static final String GOBLIN_ORDER_LOG = PREFIX.concat("order:log:");//无用
public static final String GOBLIN_EXPRESS_PRICE = PREFIX.concat("express:price");//快递费 public static final String GOBLIN_EXPRESS_PRICE = PREFIX.concat("express:price");//快递费
......
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 手环-子订单VO
*/
@Data
public class GoblinBraceletOrderEntitiesVo {
/**
* 订单详情ID
*/
private String orderEntitiesId;
/**
* 订单详情关联ID
*/
private String orderId;
/**
* 商品类型:1:手环 2:充值面值
*/
private Integer goodsType;
/**
* 商品ID wristband_id:手环ID amount_id:充值金额ID
*/
private String goodsId;
/**
* 商品名称
*/
private String goodsName;
/**
* 商品金额
*/
private BigDecimal goodsPrice;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
*/
private Integer status;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
private Integer payStatus;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
}
package com.liquidnet.service.goblin.dto.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;
/**
* 手环-订单VO
*/
@Data
public class GoblinBraceletOrderVo {
/**
* 订单ID
*/
private String orderId;
/**
* 用户ID
*/
private String userId;
/**
* 绑定用户姓名
*/
private String bindName;
/**
* 绑定用户手机号
*/
private String bindMobile;
/**
* 绑定用户身份证号码
*/
private String bindIdcard;
/**
* 请求日期
*/
private String reqDate;
/**
* 商品描述
*/
private String goodsDesc;
/**
* 请求流水号
*/
private String reqSeqId;
/**
* 全局流水号
*/
private String hfSeqId;
/**
* 交易类型:
* T_JSAPI: 微信公众号支付
* T_MINIAPP: 微信小程序支付
* A_JSAPI: 支付宝JS
* A_NATIVE: 支付宝正扫
* U_NATIVE: 银联正扫
* U_JSAPI: 银联 JS
* D_NATIVE: 数字人民币正扫
* T_H5:微信直连H5支付
* T_APP:微信APP支付
* T_NATIVE:微信正扫
*/
private String tradeType;
/**
* ATU真实商户号
*/
private String atuSubMerId;
/**
* 用户账单上的交易订单号
*/
private String outTransId;
/**
* 用户账单上的商户订单号
*/
private String partyOrderId;
/**
* 支付完成时间 格式yyyyMMddHHmmss
*/
private String endTime;
/**
* 入账时间 格式为yyyyMMdd
*/
private String acctDate;
/**
* 单价
*/
private BigDecimal price;
/**
* 应付价格
*/
private BigDecimal priceTotal;
/**
* 实付价格
*/
private BigDecimal priceActual;
/**
* 退款价格
*/
private BigDecimal priceRefund;
/**
* 退款扣除的手续费金额
*/
private BigDecimal refundPriceCharges;
/**
* 退款数
*/
private Integer refundNumber;
/**
* 支付时间
*/
private String timePay;
/**
* 订单状态:
* 0 待付款
* 1 已付款
* 2 已关闭
* 3 正在退款
* 4 已退款
* 5 待关闭
* 6 部分退款
*/
private Integer status;
/**
* 支付状态:
* 0 未支付
* 1 已支付
* 2 支付失败
*/
private Integer payStatus;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 更新时间
*/
private LocalDateTime updatedAt;
/**
* 订单详细列表VO
*/
private List<GoblinBraceletOrderEntitiesVo> orderEntitiesDetailVoList;
}
package com.liquidnet.service.goblin.dto.vo; package com.liquidnet.service.goblin.dto.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data; import lombok.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
import java.io.Serializable; import java.io.Serializable;
import java.math.BigDecimal;
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
@ApiModel(value = "手环下单结果vo")
public class GoblinBraceletPayResultVo implements Serializable, Cloneable { public class GoblinBraceletPayResultVo implements Serializable, Cloneable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ApiModelProperty(position = 1, value = "订单ID")
private String orderId;
@ApiModelProperty(position = 3, value = "价格")
private BigDecimal price;
@ApiModelProperty(position = 5, value = "三方支付信息")
private Object payInfo;
private static final GoblinBraceletPayResultVo obj = new GoblinBraceletPayResultVo(); private static final GoblinBraceletPayResultVo obj = new GoblinBraceletPayResultVo();
......
package com.liquidnet.service.goblin.enums;
/**
* 订单状态枚举
*/
public enum OrderStatus {
PENDING_PAYMENT(0, "待付款"),
PAID(1, "已付款"),
CLOSED(2, "已关闭"),
REFUNDING(3, "正在退款"),
REFUNDED(4, "已退款"),
PENDING_CLOSE(5, "待关闭"),
PARTIAL_REFUND(6, "部分退款");
private final int code;
private final String description;
OrderStatus(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
// 通过code获取对应的枚举值
public static OrderStatus fromCode(int code) {
for (OrderStatus status : values()) {
if (status.getCode() == code) {
return status;
}
}
throw new IllegalArgumentException("无效的状态码: " + code);
}
}
package com.liquidnet.service.goblin.enums;
/**
* 支付状态枚举
*/
public enum PayStatus {
NOT_PAID(0, "未支付"),
PAID(1, "已支付"),
PAYMENT_FAILED(2, "支付失败");
private final int code;
private final String description;
PayStatus(int code, String description) {
this.code = code;
this.description = description;
}
public int getCode() {
return code;
}
public String getDescription() {
return description;
}
// 根据 code 获取枚举实例
public static PayStatus fromCode(int code) {
for (PayStatus status : values()) {
if (status.getCode() == code) {
return status;
}
}
throw new IllegalArgumentException("无效的支付状态码: " + code);
}
@Override
public String toString() {
return description;
}
}
...@@ -23,15 +23,15 @@ public class GoblinBraceletOrderPayParam implements Serializable { ...@@ -23,15 +23,15 @@ public class GoblinBraceletOrderPayParam implements Serializable {
private String amountId; private String amountId;
@ApiModelProperty(value = "姓名") @ApiModelProperty(value = "姓名")
@NotBlank(message = "姓名不能为空") @NotBlank(message = "绑定姓名不能为空")
private String name; private String name;
@ApiModelProperty(value = "手机号") @ApiModelProperty(value = "手机号")
@NotBlank(message = "手机号不能为空") @NotBlank(message = "绑定手机号不能为空")
private String mobile; private String mobile;
@ApiModelProperty(value = "身份证号码") @ApiModelProperty(value = "身份证号码")
@NotBlank(message = "身份证号码不能为空") @NotBlank(message = "绑定身份证号码不能为空")
private String idCard; private String idCard;
@ApiModelProperty(value = "子商户用户标识") @ApiModelProperty(value = "子商户用户标识")
......
package com.liquidnet.service.goblin.param.dougong;
import lombok.Data;
@Data
public class BaseDougongRequest<T> {
/**
* 系统号
* 渠道商/商户的huifu_id
* (1)当主体为渠道商时,此字段填写渠道商huifu_id;
* (2)当主体为直连商户时,此字段填写商户huifu_id;
*/
private String sysId;
/**
* 产品号
* 汇付分配的产品号,示例值:MCS
*/
private String productId;
/**
* 加签结果
*/
private String sign;
/**
* 数据
*/
private T data;
}
package com.liquidnet.service.goblin.param.dougong;
import lombok.Data;
/**
* 同步返回参数
* @param <T>
*/
@Data
public class BaseDougongResponse<T> {
/**
* 签名
*/
private String sign;
/**
* 响应内容体
*/
private T data;
}
...@@ -5,7 +5,7 @@ import lombok.Data; ...@@ -5,7 +5,7 @@ import lombok.Data;
import java.util.List; import java.util.List;
@Data @Data
public class DougongPayParam { public class DougongJsPayData {
// 请求日期 // 请求日期
private String reqDate; private String reqDate;
......
...@@ -5,6 +5,10 @@ import lombok.Data; ...@@ -5,6 +5,10 @@ import lombok.Data;
import java.util.List; import java.util.List;
/**
* 斗拱-请求jspay-参数
*/
@Data @Data
public class DougongRequestParam { public class DougongRequestParam {
...@@ -46,7 +50,7 @@ public class DougongRequestParam { ...@@ -46,7 +50,7 @@ public class DougongRequestParam {
@JsonProperty("time_expire") @JsonProperty("time_expire")
private String timeExpire; private String timeExpire;
// 微信参数集合 // 微信参数集合 WxData
@JsonProperty("wx_data") @JsonProperty("wx_data")
private String wxData; private String wxData;
......
package com.liquidnet.service.goblin.param.dougong;
import lombok.Data;
/**
* 异步返回参数
* 公共返回
*/
@Data
public class DougongSyncCallbackparam {
private String respCode;
private String respDesc;
private String sign;
private String respData;
}
...@@ -8,10 +8,10 @@ public interface IGoblinBraceLetOrderService { ...@@ -8,10 +8,10 @@ public interface IGoblinBraceLetOrderService {
/** /**
* 下单 * 下单
* @param data * @param payParam
* @return * @return
*/ */
ResponseDto<GoblinBraceletPayResultVo> checkOrder(GoblinBraceletOrderPayParam data); ResponseDto<GoblinBraceletPayResultVo> checkOrder(GoblinBraceletOrderPayParam payParam);
/** /**
* 校验订单状态 * 校验订单状态
......
package com.liquidnet.service.goblin.service; package com.liquidnet.service.goblin.service;
import com.liquidnet.service.goblin.param.dougong.DougongRequestParam; import com.liquidnet.service.goblin.param.dougong.DougongJsPayData;
import java.util.Map;
public interface IGoblinDougongPayService { public interface IGoblinDougongPayService {
/** /**
*
* @return * @return
*/ */
Object jsPay(DougongRequestParam requestParam); Map<String, Object> jsPay(DougongJsPayData data);
} }
...@@ -49,4 +49,6 @@ public class RedisKeyExpireConst { ...@@ -49,4 +49,6 @@ public class RedisKeyExpireConst {
// sweet:doudou:scope:mobile 过期时间3天 // sweet:doudou:scope:mobile 过期时间3天
public static final long SWEET_DOUDOU_SCOPE_MOBILE_EXPIRE = 3 * 24 * 60 * 60; public static final long SWEET_DOUDOU_SCOPE_MOBILE_EXPIRE = 3 * 24 * 60 * 60;
// GOBLIN_BRACELET_USER 过期时间3天
public static final long GOBLIN_BRACELET_USER_EXPIRE = 30 * 24 * 60 * 60;
} }
...@@ -16,3 +16,13 @@ liquidnet: ...@@ -16,3 +16,13 @@ liquidnet:
mongodb: mongodb:
sslEnabled: false sslEnabled: false
database: dev_ln_scene database: dev_ln_scene
lxpay:
apps:
dougong:
huifu-id: '6666000109133323'
sys-id: '6666000108840829'
product-id: 'YYZY'
sub-app-id: 'wxdfe9a5d141f96685'
public-key: "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkmP0eyQVeGHVxk/4+Zq9R6tm8vmQZaMAvtvy5D/Ki3lvhfRn8T3R3vP5xTpp2zAtmZzFnc1k4DswYBsv7lsxwseoJ3sIM6of6NYnf+39CK+NhKSsdDNDET2KCxD5Gip3WJVtgP3P4w3P/U2jCi8Xzm9sxy3XZ3TSZuokvX77UnfBZTFMuGjCmZFcuM6VjDOxoaEtnYhAVLOQItb3Jr1vvIg4vrhCWBus9YVgl3Ua5qtTccmpspnFbY3ix0UFrmHczTaPWrxKMrnEIDurgmMPXPiyR67Z/AcvcJ8vgvaVHnINmDb0hlRUkI623P9dO/fPswaNIEj0ZeoZHcdLya07swIDAQAB"
private-key: "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDFOYOjLTndQiYAiFQf4ZZ6UA1T5fg2PH16XboAORgLBz/SjeiIMmIdExP1NFDH6SNqcQk6ginqk+gW0CBojEE5Loj3ROqtBRnBehVavO89xnvezsj1NZDqw416GYPCU0n6198A73c3Kn0OWoiivF5BJDra88z/zcApNzAeiVw6loZEEvzNRpfuKzs6uH6NeFQnY2wtePQwTAW5d89gUyewJSzwPPVU8r/hiPVKSB0AEkGT85UOBzaEKyAEqPfLAS/uY49Qdq+/j6lszNpjWcb6vkIeoHD3wmZdoHR7uLc+VxSk7kvJyLUv6SBtH3/jTy4ghFLQWJHagLB2QCPy9ompAgMBAAECggEAcG4JDMyLYAaFg2g0DLic/70C3AENLl3tagRkNBxYCHFpgK5FEN8n70sg5XedVVkiR1uI10G8g20tsVOUJgVOaTqN+effoCJ4PENMSR3LhHvRwYJALQkMQ8iWrjQ9WFoComzNQ8s/OsON5tDVc2/Oi3QL2SWCh5DTKqu7Uq0bVonYUX2IT8x7zWbE+tgphjI76JRDp4gkjh5ebebNBhqsOjYelNNWF3g7rVAr4zB2TMRM6N/66z/qLRk+mQQEhShojS2c2pyAtNC+7C6VZiX+XxH4ArSbf6AQyaMmPj4d3rMAYG916WNfb9GkqFyZhRNbMwRsAIfErS46PDKpKhInwQKBgQDnu4vV2U7Sqc/ab3hXh8H6d1HvxvTb7634XNyT/qtJ4nMT9CCxZE88iesqJyXNxzEElpLJRlwNPgDaJfs8qEjJ9zF6N/7ip9VPxITd5/6jBuILiugJSa7epvdZAtyVo1xOf2BN7cX/4Ul/SE11YjgyjLr1b3U4SY/Bc8w01Pmb+wKBgQDZ4Nq8u+k4GQh6G9pFSwgDxMnPUGX4vnWew7zsyy6z45tXuzFZrvpuzWTUUtnGalzXYGaUqm5ivmmP9+CCZBWaxZkSTF8ONRm1OXTRCJlF57AzXZVVc4+inhM8WnX6KIN/FDu4nlTf7wN6J42BcqOkz8KS9N7twpYartJnTPG7qwKBgQDhqVUHLtL/erYadSqvslhH3CJCaXDRLJoxndx/kiSjko2WBMpBdPlkbro/FlhOB4fIfAj9UDMcAiE6TnpWG1qmsr3P0u+3MNEdGLZ6kgz6HR3LN722LbbIw7djStIcNjURjCDwQnfqMi0scfBcOwWW1EzL7XotEhWXwXg+ipd4OQKBgQCotysK7UQ6sX/T9s99yw1IxdE0nWBpTysLpy0b/HaMzFqVhBpCBXJd7OUAWavTrrd3/GlTA+r4wdRCrMMIlXH5aLwQ5FzTRqFCqVxhJhRygmf6TqR+CD+YwGnK2Y30Cf1RoZxhaRH2WkJKDGjSbbB0xoE4hTA/0uejf+7kGTwzgwKBgBgcuEy5fxR5O+HkV/Lay/rrHznbJxOEJ/EiV2WDKDi1Acp1QZAKb1aguqx15j7t9exGUr6Y5eCfAFOQfzlePJuLthe5APEsuzv9nslnVusamWKkxoWl6h36OYQjTf1FCgOD7QCjhaiKKQQLsZGigmMKy2D5utIWQdNoLnlhayan"
notify-url: 'https://baidu.com'
...@@ -14,7 +14,7 @@ import java.time.LocalDateTime; ...@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class GoblinRechargeOrder implements Serializable { public class GoblinBraceletOrder implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
...@@ -34,16 +34,6 @@ public class GoblinRechargeOrder implements Serializable { ...@@ -34,16 +34,6 @@ public class GoblinRechargeOrder implements Serializable {
*/ */
private String userId; private String userId;
/**
* 用户昵称
*/
private String userName;
/**
* 用户手机号
*/
private String userMobile;
/** /**
* 绑定用户姓名 * 绑定用户姓名
*/ */
...@@ -99,22 +89,6 @@ public class GoblinRechargeOrder implements Serializable { ...@@ -99,22 +89,6 @@ public class GoblinRechargeOrder implements Serializable {
*/ */
private String atuSubMerId; private String atuSubMerId;
/**
* 终端类型:
* 01-智能POS
* 02-扫码POS
* 03-云音箱
* 04-台牌
* 05-云打印
* 06-扫脸设备
* 07-收银机
* 08-收银助手
* 09-传统POS
* 10-一体音箱
* 11-虚拟终端
*/
private String deviceType;
/** /**
* 用户账单上的交易订单号 * 用户账单上的交易订单号
*/ */
...@@ -180,7 +154,7 @@ public class GoblinRechargeOrder implements Serializable { ...@@ -180,7 +154,7 @@ public class GoblinRechargeOrder implements Serializable {
* 5 待关闭 * 5 待关闭
* 6 部分退款 * 6 部分退款
*/ */
private Byte status; private Integer status;
/** /**
* 支付状态: * 支付状态:
...@@ -188,7 +162,7 @@ public class GoblinRechargeOrder implements Serializable { ...@@ -188,7 +162,7 @@ public class GoblinRechargeOrder implements Serializable {
* 1 已支付 * 1 已支付
* 2 支付失败 * 2 支付失败
*/ */
private Byte payStatus; private Integer payStatus;
/** /**
* 创建时间 * 创建时间
......
...@@ -14,7 +14,7 @@ import java.time.LocalDateTime; ...@@ -14,7 +14,7 @@ import java.time.LocalDateTime;
*/ */
@Data @Data
@EqualsAndHashCode(callSuper = false) @EqualsAndHashCode(callSuper = false)
public class GoblinRechargeOrderEntities implements Serializable { public class GoblinBraceletOrderEntities implements Serializable {
/** /**
* 主键ID * 主键ID
...@@ -37,7 +37,7 @@ public class GoblinRechargeOrderEntities implements Serializable { ...@@ -37,7 +37,7 @@ public class GoblinRechargeOrderEntities implements Serializable {
/** /**
* 商品类型:1:手环 2:充值面值 * 商品类型:1:手环 2:充值面值
*/ */
private Byte goodsType; private Integer goodsType;
/** /**
* 商品ID wristband_id:手环ID amount_id:充值金额ID * 商品ID wristband_id:手环ID amount_id:充值金额ID
...@@ -64,7 +64,7 @@ public class GoblinRechargeOrderEntities implements Serializable { ...@@ -64,7 +64,7 @@ public class GoblinRechargeOrderEntities implements Serializable {
* 5 待关闭 * 5 待关闭
* 6 部分退款 * 6 部分退款
*/ */
private Byte status; private Integer status;
/** /**
* 支付状态: * 支付状态:
...@@ -72,7 +72,7 @@ public class GoblinRechargeOrderEntities implements Serializable { ...@@ -72,7 +72,7 @@ public class GoblinRechargeOrderEntities implements Serializable {
* 1 已支付 * 1 已支付
* 2 支付失败 * 2 支付失败
*/ */
private Byte payStatus; private Integer payStatus;
/** /**
* 创建时间 * 创建时间
......
...@@ -24,12 +24,10 @@ CREATE TABLE IF NOT EXISTS goblin_recharge_amount ...@@ -24,12 +24,10 @@ CREATE TABLE IF NOT EXISTS goblin_recharge_amount
-- 手环订单表 -- 手环订单表
CREATE TABLE `goblin_recharge_order` ( CREATE TABLE goblin_bracelet_order (
`mid` int(10) unsigned NOT NULL AUTO_INCREMENT, `mid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'order_id', `order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'order_id',
`user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户id', `user_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户id',
`user_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户昵称',
`user_mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户手机号',
`bind_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户姓名', `bind_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户姓名',
`bind_mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户手机号', `bind_mobile` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户手机号',
`bind_idcard` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户身份证号码', `bind_idcard` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '绑定用户身份证号码',
...@@ -39,7 +37,6 @@ CREATE TABLE `goblin_recharge_order` ( ...@@ -39,7 +37,6 @@ CREATE TABLE `goblin_recharge_order` (
`hf_seq_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '全局流水号', `hf_seq_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '全局流水号',
`trade_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '交易类型 T_JSAPI: 微信公众号支付 T_MINIAPP: 微信小程序支付 A_JSAPI: 支付宝JS A_NATIVE: 支付宝正扫 U_NATIVE: 银联正扫 U_JSAPI: 银联 JS D_NATIVE: 数字人民币正扫 T_H5:微信直连H5支付 T_APP:微信APP支付 T_NATIVE:微信正扫', `trade_type` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '交易类型 T_JSAPI: 微信公众号支付 T_MINIAPP: 微信小程序支付 A_JSAPI: 支付宝JS A_NATIVE: 支付宝正扫 U_NATIVE: 银联正扫 U_JSAPI: 银联 JS D_NATIVE: 数字人民币正扫 T_H5:微信直连H5支付 T_APP:微信APP支付 T_NATIVE:微信正扫',
`atu_sub_mer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'ATU真实商户号', `atu_sub_mer_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'ATU真实商户号',
`device_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '终端类型 01-智能POS 02-扫码POS 03-云音箱 04-台牌 05-云打印 06-扫脸设备 07-收银机 08-收银助手 09-传统POS 10-一体音箱 11-虚拟终端',
`out_trans_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账单上的交易订单号', `out_trans_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账单上的交易订单号',
`party_order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账单上的商户订单号', `party_order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '用户账单上的商户订单号',
`end_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '支付完成时间 格式yyyyMMddHHmmss', `end_time` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '支付完成时间 格式yyyyMMddHHmmss',
...@@ -60,7 +57,7 @@ CREATE TABLE `goblin_recharge_order` ( ...@@ -60,7 +57,7 @@ CREATE TABLE `goblin_recharge_order` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='手环订单表'; ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='手环订单表';
-- 手环订单详情表 -- 手环订单详情表
CREATE TABLE `goblin_recharge_order_entities` ( CREATE TABLE `goblin_bracelet_order_entities` (
`mid` int(10) unsigned NOT NULL AUTO_INCREMENT, `mid` int(10) unsigned NOT NULL AUTO_INCREMENT,
`order_entities_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'order_entities_id', `order_entities_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT 'order_entities_id',
`order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '订单详情关联id', `order_id` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '订单详情关联id',
......
package com.liquidnet.service.goblin.config.properties;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
import java.util.Map;
@ConfigurationProperties(prefix = "liquidnet.lxpay")
@Component
@Setter
@Getter
public class AppProperties {
private Map<String, AppInfo> apps;
@Data
public static class AppInfo {
private String productId;
private String sysId;
private String huifuId;
private String subAppId;
private String publicKey;
private String privateKey;
private String notifyUrl;
}
}
...@@ -4,6 +4,7 @@ import com.liquidnet.service.base.ResponseDto; ...@@ -4,6 +4,7 @@ import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.codec.vo.EncryptedReq; import com.liquidnet.service.base.codec.vo.EncryptedReq;
import com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo; import com.liquidnet.service.goblin.dto.vo.GoblinBraceletPayResultVo;
import com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam; import com.liquidnet.service.goblin.param.GoblinBraceletOrderPayParam;
import com.liquidnet.service.goblin.param.dougong.DougongSyncCallbackparam;
import com.liquidnet.service.goblin.service.IGoblinBraceLetOrderService; import com.liquidnet.service.goblin.service.IGoblinBraceLetOrderService;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParam;
...@@ -19,7 +20,7 @@ import javax.validation.constraints.NotBlank; ...@@ -19,7 +20,7 @@ import javax.validation.constraints.NotBlank;
@Slf4j @Slf4j
@Api(tags = "商城-手环相关") @Api(tags = "商城-手环相关")
@RestController @RestController
@RequestMapping("/goblin/bracelet") @RequestMapping("/bracelet")
public class GoblinBraceletOrderController { public class GoblinBraceletOrderController {
@Autowired @Autowired
...@@ -50,7 +51,7 @@ public class GoblinBraceletOrderController { ...@@ -50,7 +51,7 @@ public class GoblinBraceletOrderController {
@PostMapping("/callback") @PostMapping("/callback")
@ApiOperation("斗拱支付回调") @ApiOperation("斗拱支付回调")
public ResponseDto<Boolean> dougongCallBack() { public ResponseDto<Boolean> dougongCallBack(@RequestBody DougongSyncCallbackparam dougongSyncCallbackparam) {
return braceLetOrderService.dougongCallBack(); return braceLetOrderService.dougongCallBack();
} }
......
...@@ -4,53 +4,98 @@ import com.huifu.bspay.sdk.opps.core.BasePay; ...@@ -4,53 +4,98 @@ import com.huifu.bspay.sdk.opps.core.BasePay;
import com.huifu.bspay.sdk.opps.core.config.MerConfig; import com.huifu.bspay.sdk.opps.core.config.MerConfig;
import com.huifu.bspay.sdk.opps.core.net.BasePayRequest; import com.huifu.bspay.sdk.opps.core.net.BasePayRequest;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.goblin.config.properties.AppProperties;
import com.liquidnet.service.goblin.param.dougong.DougongJsPayData;
import com.liquidnet.service.goblin.param.dougong.DougongRequestParam; import com.liquidnet.service.goblin.param.dougong.DougongRequestParam;
import com.liquidnet.service.goblin.service.IGoblinDougongPayService; import com.liquidnet.service.goblin.service.IGoblinDougongPayService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Map; import java.util.Map;
@Slf4j @Slf4j
@Service @Service
public class GoblinDougongPayServiceImpl implements IGoblinDougongPayService { public class GoblinDougongPayServiceImpl implements IGoblinDougongPayService {
// 汇付分配的产品号 private final AppProperties.AppInfo appInfo;
public static final String DEMO_PRODUCT_ID = "YYZY";
// 汇付分配的系统号 public GoblinDougongPayServiceImpl(AppProperties appProperties) {
public static final String DEMO_SYS_ID = "6666000108840829"; this.appInfo = appProperties.getApps().get("dougong");
if (this.appInfo == null) {
// 服务商私钥,用于调用接口时进行签名 throw new IllegalArgumentException("找不到应用配置");
public static final String DEMO_RSA_PRIVATE_KEY = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDFOYOjLTndQiYAiFQf4ZZ6UA1T5fg2PH16XboAORgLBz/SjeiIMmIdExP1NFDH6SNqcQk6ginqk+gW0CBojEE5Loj3ROqtBRnBehVavO89xnvezsj1NZDqw416GYPCU0n6198A73c3Kn0OWoiivF5BJDra88z/zcApNzAeiVw6loZEEvzNRpfuKzs6uH6NeFQnY2wtePQwTAW5d89gUyewJSzwPPVU8r/hiPVKSB0AEkGT85UOBzaEKyAEqPfLAS/uY49Qdq+/j6lszNpjWcb6vkIeoHD3wmZdoHR7uLc+VxSk7kvJyLUv6SBtH3/jTy4ghFLQWJHagLB2QCPy9ompAgMBAAECggEAcG4JDMyLYAaFg2g0DLic/70C3AENLl3tagRkNBxYCHFpgK5FEN8n70sg5XedVVkiR1uI10G8g20tsVOUJgVOaTqN+effoCJ4PENMSR3LhHvRwYJALQkMQ8iWrjQ9WFoComzNQ8s/OsON5tDVc2/Oi3QL2SWCh5DTKqu7Uq0bVonYUX2IT8x7zWbE+tgphjI76JRDp4gkjh5ebebNBhqsOjYelNNWF3g7rVAr4zB2TMRM6N/66z/qLRk+mQQEhShojS2c2pyAtNC+7C6VZiX+XxH4ArSbf6AQyaMmPj4d3rMAYG916WNfb9GkqFyZhRNbMwRsAIfErS46PDKpKhInwQKBgQDnu4vV2U7Sqc/ab3hXh8H6d1HvxvTb7634XNyT/qtJ4nMT9CCxZE88iesqJyXNxzEElpLJRlwNPgDaJfs8qEjJ9zF6N/7ip9VPxITd5/6jBuILiugJSa7epvdZAtyVo1xOf2BN7cX/4Ul/SE11YjgyjLr1b3U4SY/Bc8w01Pmb+wKBgQDZ4Nq8u+k4GQh6G9pFSwgDxMnPUGX4vnWew7zsyy6z45tXuzFZrvpuzWTUUtnGalzXYGaUqm5ivmmP9+CCZBWaxZkSTF8ONRm1OXTRCJlF57AzXZVVc4+inhM8WnX6KIN/FDu4nlTf7wN6J42BcqOkz8KS9N7twpYartJnTPG7qwKBgQDhqVUHLtL/erYadSqvslhH3CJCaXDRLJoxndx/kiSjko2WBMpBdPlkbro/FlhOB4fIfAj9UDMcAiE6TnpWG1qmsr3P0u+3MNEdGLZ6kgz6HR3LN722LbbIw7djStIcNjURjCDwQnfqMi0scfBcOwWW1EzL7XotEhWXwXg+ipd4OQKBgQCotysK7UQ6sX/T9s99yw1IxdE0nWBpTysLpy0b/HaMzFqVhBpCBXJd7OUAWavTrrd3/GlTA+r4wdRCrMMIlXH5aLwQ5FzTRqFCqVxhJhRygmf6TqR+CD+YwGnK2Y30Cf1RoZxhaRH2WkJKDGjSbbB0xoE4hTA/0uejf+7kGTwzgwKBgBgcuEy5fxR5O+HkV/Lay/rrHznbJxOEJ/EiV2WDKDi1Acp1QZAKb1aguqx15j7t9exGUr6Y5eCfAFOQfzlePJuLthe5APEsuzv9nslnVusamWKkxoWl6h36OYQjTf1FCgOD7QCjhaiKKQQLsZGigmMKy2D5utIWQdNoLnlhayan"; }
}
// 汇付公钥,用于对汇付返回报文进行签名验证
public static final String DEMO_RSA_PUBLIC_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkmP0eyQVeGHVxk/4+Zq9R6tm8vmQZaMAvtvy5D/Ki3lvhfRn8T3R3vP5xTpp2zAtmZzFnc1k4DswYBsv7lsxwseoJ3sIM6of6NYnf+39CK+NhKSsdDNDET2KCxD5Gip3WJVtgP3P4w3P/U2jCi8Xzm9sxy3XZ3TSZuokvX77UnfBZTFMuGjCmZFcuM6VjDOxoaEtnYhAVLOQItb3Jr1vvIg4vrhCWBus9YVgl3Ua5qtTccmpspnFbY3ix0UFrmHczTaPWrxKMrnEIDurgmMPXPiyR67Z/AcvcJ8vgvaVHnINmDb0hlRUkI623P9dO/fPswaNIEj0ZeoZHcdLya07swIDAQAB";
static { @PostConstruct
public void init() {
MerConfig merConfig = new MerConfig(); MerConfig merConfig = new MerConfig();
merConfig.setProcutId(DEMO_PRODUCT_ID); merConfig.setProcutId(appInfo.getProductId());
merConfig.setSysId(DEMO_SYS_ID); merConfig.setSysId(appInfo.getSysId());
merConfig.setRsaPrivateKey(DEMO_RSA_PRIVATE_KEY); merConfig.setRsaPrivateKey(appInfo.getPrivateKey());
merConfig.setRsaPublicKey(DEMO_RSA_PUBLIC_KEY); merConfig.setRsaPublicKey(appInfo.getPublicKey());
try { try {
BasePay.initWithMerConfig(merConfig); BasePay.initWithMerConfig(merConfig);
} catch (Exception e) { } catch (Exception e) {
throw new RuntimeException(e); log.error("初始化支付配置失败", e);
throw new RuntimeException("初始化支付配置失败", e);
} }
} }
@Override @Override
public Object jsPay(DougongRequestParam requestParam) { public Map<String, Object> jsPay(DougongJsPayData data) {
DougongRequestParam requestParam = buildDougongRequestParam(data);
log.info("request param: {}.", JsonUtils.toJson(requestParam));
if (requestParam == null) {
log.error("构建下单参数失败");
return null;
}
try { try {
Map<String, Object> map = JsonUtils.fromJson(JsonUtils.toJson(requestParam), Map.class); Map<String, Object> map = JsonUtils.fromJson(JsonUtils.toJson(requestParam), Map.class);
//3. 发起API调用 //3. 发起API调用
Map<String, Object> response = BasePayRequest.requestBasePay("v3/trade/payment/jspay", map, null, false); Map<String, Object> response = BasePayRequest.requestBasePay("v3/trade/payment/jspay", map, null, false);
log.info("response: {}.", JsonUtils.toJson(response));
if (response != null && "00000100".equals(response.get("resp_code"))
&& "P".equals(response.get("trans_stat"))){
return response; return response;
}
} catch (Exception e) { } catch (Exception e) {
log.error("error", e); log.error("error", e);
} }
return new Object(); return null;
}
private DougongRequestParam buildDougongRequestParam(DougongJsPayData data){
if (data == null) {
return null;
}
DougongRequestParam requestParam = new DougongRequestParam();
requestParam.setReqDate(data.getReqDate());
requestParam.setReqSeqId(data.getReqSeqId());
requestParam.setHuifuId(appInfo.getHuifuId());
requestParam.setGoodsDesc(data.getGoodsDesc());
requestParam.setTradeType(data.getTradeType());
requestParam.setTransAmt(data.getTransAmt());
requestParam.setTimeExpire(data.getTimeExpire());
requestParam.setWxData(buildWxData(data));
requestParam.setNotifyUrl(appInfo.getNotifyUrl());
return requestParam;
}
private String buildWxData(DougongJsPayData data) {
DougongRequestParam.WxData wxData = new DougongRequestParam.WxData();
wxData.setSubAppid(appInfo.getSubAppId());
wxData.setSubOpenid(data.getSubOpenid());
wxData.setBody(data.getGoodsDesc());
wxData.setDetail(buildWxDataDetail(data));
return JsonUtils.toJson(wxData);
}
private DougongRequestParam.WxDataDetail buildWxDataDetail(DougongJsPayData data) {
DougongRequestParam.WxDataDetail wxDataDetail = new DougongRequestParam.WxDataDetail();
wxDataDetail.setCostPrice(data.getTransAmt());
wxDataDetail.setGoodsDetail(data.getGoodsDetailList());
return wxDataDetail;
} }
} }
...@@ -8,6 +8,7 @@ import com.liquidnet.commons.lang.util.JsonUtils; ...@@ -8,6 +8,7 @@ import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.commons.lang.util.RandomUtil; import com.liquidnet.commons.lang.util.RandomUtil;
import com.liquidnet.service.base.ErrorMapping; import com.liquidnet.service.base.ErrorMapping;
import com.liquidnet.service.base.ResponseDto; import com.liquidnet.service.base.ResponseDto;
import com.liquidnet.service.base.constant.RedisKeyExpireConst;
import com.liquidnet.service.galaxy.constant.GalaxyEnum; import com.liquidnet.service.galaxy.constant.GalaxyEnum;
import com.liquidnet.service.goblin.constant.GoblinRedisConst; import com.liquidnet.service.goblin.constant.GoblinRedisConst;
import com.liquidnet.service.goblin.constant.GoblinStatusConst; import com.liquidnet.service.goblin.constant.GoblinStatusConst;
...@@ -2951,6 +2952,23 @@ public class GoblinRedisUtils { ...@@ -2951,6 +2952,23 @@ public class GoblinRedisUtils {
} }
} }
public void setBraceletOrderVo(GoblinBraceletOrderVo orderVo) {
String key = GoblinRedisConst.GOBLIN_BRACELET_USER.concat(orderVo.getUserId()).concat("orderId:").concat(orderVo.getOrderId());
redisUtil.set(key, orderVo, RedisKeyExpireConst.GOBLIN_BRACELET_USER_EXPIRE);
}
public GoblinBraceletOrderVo getBraceletOrderVo(String uid, String orderId){
String key = GoblinRedisConst.GOBLIN_BRACELET_USER.concat(uid).concat("orderId:").concat(orderId);
Object obj = redisUtil.get(key);
if (obj == null) {
// TODO 从数据库查询
return null;
}else {
return (GoblinBraceletOrderVo)obj;
}
}
/* ---------------------------------------- ---------------------------------------- */ /* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */ /* ---------------------------------------- ---------------------------------------- */
/* ---------------------------------------- ---------------------------------------- */ /* ---------------------------------------- ---------------------------------------- */
......
...@@ -195,3 +195,6 @@ goblin_sku.stock=UPDATE goblin_goods_sku SET sku_stock = ? , stock = ?, updated_ ...@@ -195,3 +195,6 @@ goblin_sku.stock=UPDATE goblin_goods_sku SET sku_stock = ? , stock = ?, updated_
candy_user_coupon.update_apply_refund=UPDATE candy_user_coupon SET state=?,operator=?,updated_at=? WHERE ucoupon_id=? candy_user_coupon.update_apply_refund=UPDATE candy_user_coupon SET state=?,operator=?,updated_at=? WHERE ucoupon_id=?
#---- #----
#---- #----
# ---- \u624B\u73AF\u8BA2\u5355 ----
goblin_bracelet_order_insert = INSERT INTO `goblin_bracelet_order`(`order_id`, `user_id`, `bind_name`, `bind_mobile`, `bind_idcard`, `req_date`, `goods_desc`, `req_seq_id`, `hf_seq_id`, `trade_type`, `atu_sub_mer_id`, `party_order_id`, `price`, `price_total`, `price_refund`, `refund_price_charges`, `refund_number`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)
goblin_bracelet_order_entities_insert = INSERT INTO `goblin_bracelet_order_entities`(`order_entities_id`, `order_id`, `goods_type`, `goods_id`, `goods_name`, `goods_price`, `status`, `pay_status`, `created_at`, `updated_at`) VALUES (?,?,?,?,?,?,?,?,?,?)
\ No newline at end of file
package com.liquidnet.service.goblin.test; package com.liquidnet.service.goblin.test;
import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils; import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.goblin.param.dougong.DougongJsPayData;
import com.liquidnet.service.goblin.param.dougong.DougongRequestParam; import com.liquidnet.service.goblin.param.dougong.DougongRequestParam;
import com.liquidnet.service.goblin.service.IGoblinDougongPayService; import com.liquidnet.service.goblin.service.IGoblinDougongPayService;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
...@@ -47,20 +49,13 @@ public class GoblinDougongPayServiceImplTest { ...@@ -47,20 +49,13 @@ public class GoblinDougongPayServiceImplTest {
String goodsDesc = "手环充值"; String goodsDesc = "手环充值";
// 商品金额 // 商品金额
BigDecimal totalAmt = new BigDecimal("51.00"); BigDecimal totalAmt = new BigDecimal("51.00");
// 商品请求流水号
String setReqSeqId = "rQ20250704120340912341";
// 请求日期 // 请求日期
String reqDate = "20250704"; String reqDate = "20250707";
// 交易类型 // 交易类型
String tradeType = "T_MINIAPP"; String tradeType = "T_MINIAPP";
DougongRequestParam requestParam = new DougongRequestParam(); DougongRequestParam requestParam = new DougongRequestParam();
requestParam.setReqDate(reqDate);
requestParam.setReqSeqId(setReqSeqId);
requestParam.setHuifuId("6666000109133323");//TODO 配置 requestParam.setHuifuId("6666000109133323");//TODO 配置
requestParam.setGoodsDesc(goodsDesc);
requestParam.setTradeType(tradeType);
requestParam.setTransAmt(totalAmt.toString());
requestParam.setTimeExpire("20250718235959"); //TODO 在计算 requestParam.setTimeExpire("20250718235959"); //TODO 在计算
requestParam.setNotifyUrl("http://www.baidu.com");//TODO 配置 requestParam.setNotifyUrl("http://www.baidu.com");//TODO 配置
...@@ -75,19 +70,17 @@ public class GoblinDougongPayServiceImplTest { ...@@ -75,19 +70,17 @@ public class GoblinDougongPayServiceImplTest {
wxDataGoodsDetails.add(wxDataGoodsDetail); wxDataGoodsDetails.add(wxDataGoodsDetail);
} }
DougongRequestParam.WxDataDetail wxDataDetail = new DougongRequestParam.WxDataDetail(); DougongJsPayData dougongJsPayData = new DougongJsPayData();
wxDataDetail.setCostPrice(totalAmt.toString()); dougongJsPayData.setReqDate(reqDate);
wxDataDetail.setGoodsDetail(wxDataGoodsDetails); dougongJsPayData.setReqSeqId(IDGenerator.nextSnowId());
dougongJsPayData.setGoodsDesc(goodsDesc);
DougongRequestParam.WxData wxData = new DougongRequestParam.WxData(); dougongJsPayData.setTradeType(tradeType);
wxData.setSubAppid("wxdfe9a5d141f96685");//TODO 配置 dougongJsPayData.setTransAmt(totalAmt.toString());
wxData.setSubOpenid("o8jhotzittQSetZ-N0Yj4Hz91Rqc"); //TODO 前端带过来 dougongJsPayData.setTimeExpire("20250718235959"); //TODO 在计算
wxData.setBody(goodsDesc); dougongJsPayData.setSubOpenid("o8jhotzittQSetZ-N0Yj4Hz91Rqc"); //TODO 前端带过来
wxData.setDetail(wxDataDetail); dougongJsPayData.setGoodsDetailList(wxDataGoodsDetails);
requestParam.setWxData(JsonUtils.toJson(wxData)); System.out.println(goblinDougongPayService.jsPay(dougongJsPayData));
System.out.println(goblinDougongPayService.jsPay(requestParam));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment