mirror of
https://gitee.com/likeadmin/likeadmin_java.git
synced 2026-09-11 09:07:31 +08:00
优化支付代码
This commit is contained in:
@@ -1,17 +1,27 @@
|
||||
package com.mdd.common.plugin.wechat;
|
||||
|
||||
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
||||
import com.github.binarywang.wxpay.bean.request.WxPayRefundV3Request;
|
||||
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderV3Request;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayRefundV3Result;
|
||||
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderV3Result;
|
||||
import com.github.binarywang.wxpay.bean.result.enums.TradeTypeEnum;
|
||||
import com.github.binarywang.wxpay.config.WxPayConfig;
|
||||
import com.github.binarywang.wxpay.exception.WxPayException;
|
||||
import com.github.binarywang.wxpay.service.WxPayService;
|
||||
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
|
||||
import com.mdd.common.entity.setting.DevPayConfig;
|
||||
import com.mdd.common.entity.user.UserAuth;
|
||||
import com.mdd.common.enums.ClientEnum;
|
||||
import com.mdd.common.mapper.setting.DevPayConfigMapper;
|
||||
import com.mdd.common.util.ConfigUtils;
|
||||
import com.mdd.common.util.MapUtils;
|
||||
import com.mdd.common.plugin.wechat.request.PaymentRequestV3;
|
||||
import com.mdd.common.plugin.wechat.request.RefundRequestV3;
|
||||
import com.mdd.common.util.*;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@@ -40,6 +50,87 @@ public class WxPayDriver {
|
||||
WxPayDriver.wxPayService = wxPayService;
|
||||
}
|
||||
|
||||
/**
|
||||
* 微信支付
|
||||
*
|
||||
* @param requestV3 请求参数
|
||||
* @return WxPayUnifiedOrderV3Result.JsapiResult
|
||||
* @throws Exception 异常
|
||||
*/
|
||||
public static WxPayUnifiedOrderV3Result.JsapiResult unifiedOrder(PaymentRequestV3 requestV3) throws Exception {
|
||||
// 订单参数
|
||||
Integer terminal = requestV3.getTerminal();
|
||||
String openId = requestV3.getOpenId();
|
||||
String attach = requestV3.getAttach();
|
||||
String outTradeNo = requestV3.getOutTradeNo();
|
||||
BigDecimal orderAmount = requestV3.getOrderAmount();
|
||||
String description = requestV3.getDescription();
|
||||
|
||||
// 失效时间
|
||||
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
|
||||
Long expireTime = System.currentTimeMillis() + (30 * 60 * 1000);
|
||||
String timeExpire = format.format(expireTime) + "+08:00";
|
||||
|
||||
// 订单信息
|
||||
WxPayUnifiedOrderV3Request wxPayUnifiedOrderV3Request = new WxPayUnifiedOrderV3Request();
|
||||
wxPayUnifiedOrderV3Request.setOutTradeNo(outTradeNo);
|
||||
wxPayUnifiedOrderV3Request.setDescription(description);
|
||||
wxPayUnifiedOrderV3Request.setTimeExpire(timeExpire);
|
||||
wxPayUnifiedOrderV3Request.setAttach(attach);
|
||||
wxPayUnifiedOrderV3Request.setNotifyUrl(RequestUtils.uri() + "/api/pay/notifyMnp");
|
||||
|
||||
// 订单金额
|
||||
WxPayUnifiedOrderV3Request.Amount amount = new WxPayUnifiedOrderV3Request.Amount();
|
||||
amount.setTotal(AmountUtil.yuan2Fen(orderAmount.toPlainString()));
|
||||
amount.setCurrency("CNY");
|
||||
wxPayUnifiedOrderV3Request.setAmount(amount);
|
||||
|
||||
// 付款人员
|
||||
WxPayUnifiedOrderV3Request.Payer payer = new WxPayUnifiedOrderV3Request.Payer();
|
||||
payer.setOpenid(openId);
|
||||
|
||||
// H5平台
|
||||
if (terminal == ClientEnum.H5.getCode()) {
|
||||
WxPayUnifiedOrderV3Request.SceneInfo sceneInfo = new WxPayUnifiedOrderV3Request.SceneInfo();
|
||||
WxPayUnifiedOrderV3Request.H5Info h5Info = new WxPayUnifiedOrderV3Request.H5Info();
|
||||
h5Info.setType("android");
|
||||
sceneInfo.setH5Info(h5Info);
|
||||
sceneInfo.setPayerClientIp(IpUtils.getHostIp());
|
||||
sceneInfo.setDeviceId("1");
|
||||
wxPayUnifiedOrderV3Request.setSceneInfo(sceneInfo);
|
||||
}
|
||||
|
||||
// 发起订单
|
||||
WxPayService wxPayService = WxPayDriver.handler(terminal);
|
||||
wxPayUnifiedOrderV3Request.setPayer(payer);
|
||||
return wxPayService.createOrderV3(TradeTypeEnum.JSAPI, wxPayUnifiedOrderV3Request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 发起退款
|
||||
*
|
||||
* @param request 请求参数
|
||||
* @return WxPayRefundV3Result 退款结果
|
||||
* @throws WxPayException 退款异常
|
||||
*/
|
||||
public static WxPayRefundV3Result refund(RefundRequestV3 request) throws WxPayException {
|
||||
WxPayRefundV3Request requestObj = new WxPayRefundV3Request();
|
||||
request.setTransactionId(request.getTransactionId());
|
||||
request.setOutTradeNo(request.getOutRefundNo());
|
||||
request.setOutRefundNo(request.getOutRefundNo());
|
||||
request.setReason(request.getReason());
|
||||
request.setNotifyUrl(request.getNotifyUrl());
|
||||
request.setSubMchid(request.getSubMchid());
|
||||
request.setGoodsDetails(request.getGoodsDetails());
|
||||
|
||||
WxPayRefundV3Request.Amount amount = new WxPayRefundV3Request.Amount();
|
||||
amount.setRefund(request.getRefundAmount());
|
||||
amount.setTotal(request.getTotalAmount());
|
||||
amount.setCurrency(StringUtils.isEmpty(request.getCurrency()) ? "CNY" : request.getCurrency());
|
||||
|
||||
return wxPayService.refundV3(requestObj);
|
||||
}
|
||||
|
||||
/**
|
||||
* 对象句柄
|
||||
*
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
package com.mdd.common.plugin.wechat.request;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Data
|
||||
public class PaymentRequestV3 implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/** 支付终端 */
|
||||
private Integer terminal;
|
||||
|
||||
/** 用户身份 */
|
||||
private String openId;
|
||||
|
||||
/** 扩展字段 */
|
||||
private String attach;
|
||||
|
||||
/** 订单编号 */
|
||||
private String outTradeNo;
|
||||
|
||||
/** 订单金额 */
|
||||
private BigDecimal orderAmount;
|
||||
|
||||
/** 订单描述 */
|
||||
private String description;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,46 @@
|
||||
package com.mdd.common.plugin.wechat.request;
|
||||
|
||||
import com.github.binarywang.wxpay.bean.request.WxPayRefundV3Request;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serializable;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
public class RefundRequestV3 implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = -1L;
|
||||
|
||||
/** 订单流水号 */
|
||||
private String transactionId;
|
||||
|
||||
/** 订单单号 */
|
||||
private String outTradeNo;
|
||||
|
||||
/** 退款单号 */
|
||||
@SerializedName("out_refund_no")
|
||||
private String outRefundNo;
|
||||
|
||||
/** 退款原因 */
|
||||
private String reason;
|
||||
|
||||
/** 通知接口 */
|
||||
private String notifyUrl;
|
||||
|
||||
/** 退款金额 */
|
||||
private Integer refundAmount;
|
||||
|
||||
/** 订单总额 */
|
||||
private Integer totalAmount;
|
||||
|
||||
/** 退款币种 */
|
||||
private String currency;
|
||||
|
||||
/** 商品信息 */
|
||||
private List<WxPayRefundV3Request.GoodsDetail> goodsDetails;
|
||||
|
||||
/** 子商户号 */
|
||||
private String subMchid;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user