Merge branch 'main' of http://47.109.71.130:3000/attiya/ebike-share
This commit is contained in:
commit
deded23732
@ -2,7 +2,6 @@ package com.cdzy.payment.controller;
|
|||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.cdzy.common.model.JsonResult;
|
import com.cdzy.common.model.JsonResult;
|
||||||
import com.cdzy.payment.model.dto.EbikePaymentDto;
|
|
||||||
import com.cdzy.payment.model.dto.EbikeRefundDto;
|
import com.cdzy.payment.model.dto.EbikeRefundDto;
|
||||||
import com.cdzy.payment.model.dto.HandleNotifyResult;
|
import com.cdzy.payment.model.dto.HandleNotifyResult;
|
||||||
import com.cdzy.payment.service.WxPayService;
|
import com.cdzy.payment.service.WxPayService;
|
||||||
@ -10,12 +9,7 @@ import com.wechat.pay.java.service.payments.model.Transaction;
|
|||||||
import com.wechat.pay.java.service.refund.model.Refund;
|
import com.wechat.pay.java.service.refund.model.Refund;
|
||||||
import jakarta.annotation.Resource;
|
import jakarta.annotation.Resource;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.*;
|
||||||
import org.springframework.web.bind.annotation.PathVariable;
|
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestBody;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 用户订单微信支付 控制层。
|
* 用户订单微信支付 控制层。
|
||||||
@ -34,48 +28,36 @@ public class EbikeWxPaymentController {
|
|||||||
/**
|
/**
|
||||||
* 微信支付下单
|
* 微信支付下单
|
||||||
*
|
*
|
||||||
* @param paymentDto 支付信息
|
* @param orderId 骑行订单id
|
||||||
* @return 下单成功返回true,否则返回false
|
* @return 下单成功返回true,否则返回false
|
||||||
*/
|
*/
|
||||||
@PostMapping("/prepay")
|
@PostMapping("/prepay")
|
||||||
public JsonResult<?> prepay(@RequestBody EbikePaymentDto paymentDto) {
|
public JsonResult<?> prepay(@RequestParam(name = "orderId") String orderId) {
|
||||||
JSONObject r = wxPayService.prepay(paymentDto.getOrderId(), paymentDto.getDescription(), paymentDto.getGoodsTag(), paymentDto.getOpenId(), paymentDto.getAmount(), paymentDto.getDetail(), paymentDto.getClientIp());
|
JSONObject r = wxPayService.prepay(orderId);
|
||||||
return r == null?JsonResult.failed("下单失败"):JsonResult.success(r);
|
return r == null?JsonResult.failed("下单失败"):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* 通过交易订单号查询支付订单
|
|
||||||
*
|
|
||||||
* @param transactionId 微信支付订单号
|
|
||||||
* @return 支付订单信息
|
|
||||||
*/
|
|
||||||
@GetMapping("/queryOrderById/{transactionId}")
|
|
||||||
public JsonResult<?> queryOrderById(@PathVariable String transactionId) {
|
|
||||||
Transaction r = wxPayService.queryOrderById(transactionId);
|
|
||||||
return r == null?JsonResult.failed(String.format("交易订单号{%s}查询支付订单失败", transactionId)):JsonResult.success(r);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过商户(骑行)订单号查询支付订单
|
* 通过商户(骑行)订单号查询支付订单
|
||||||
*
|
*
|
||||||
* @param outTradeNo 商户(骑行)订单号
|
* @param orderId 商户(骑行)订单号
|
||||||
* @return 支付订单信息
|
* @return 支付订单信息
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryOrderByOutTradeNo/{outTradeNo}")
|
@GetMapping("/queryOrder/{orderId}")
|
||||||
public JsonResult<?> queryOrderByOutTradeNo(@PathVariable String outTradeNo) {
|
public JsonResult<?> queryOrderByOutTradeNo(@PathVariable String orderId) {
|
||||||
Transaction r = wxPayService.queryOrderByOutTradeNo(outTradeNo);
|
Transaction r = wxPayService.queryOrderByOutTradeNo(orderId);
|
||||||
return r == null?JsonResult.failed(String.format("骑行订单号{%s}查询支付订单失败", outTradeNo)):JsonResult.success(r);
|
return r == null?JsonResult.failed(String.format("骑行订单号{%s}查询支付订单失败", orderId)):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过交易订单号查询支付订单状态
|
* 通过商户(骑行)订单订单号查询支付订单状态
|
||||||
*
|
*
|
||||||
* @param transactionId 微信支付订单号
|
* @param orderId 微信支付订单号
|
||||||
* @return 支付订单信息
|
* @return 订单信息支付状态
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryOrderStatusById/{transactionId}")
|
@GetMapping("/queryOrderStatus/{orderId}")
|
||||||
public JsonResult<?> queryOrderStatusById(@PathVariable String transactionId) {
|
public JsonResult<?> queryOrderStatusById(@PathVariable String orderId) {
|
||||||
HandleNotifyResult r = wxPayService.queryOrderStatusById(transactionId);
|
HandleNotifyResult r = wxPayService.queryOrderStatusByOutTradeNo(orderId);
|
||||||
return JsonResult.success(r);
|
return JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -87,20 +69,20 @@ public class EbikeWxPaymentController {
|
|||||||
*/
|
*/
|
||||||
@PostMapping("/refund")
|
@PostMapping("/refund")
|
||||||
public JsonResult<?> refund(@RequestBody EbikeRefundDto refundDto) {
|
public JsonResult<?> refund(@RequestBody EbikeRefundDto refundDto) {
|
||||||
String r = wxPayService.refund(refundDto.getPaymentId(), refundDto.getOrderId(), refundDto.getReason(), refundDto.getAmount());
|
String r = wxPayService.refund(refundDto.getOrderId(), refundDto.getReason());
|
||||||
return r == null?JsonResult.failed("退款失败"):JsonResult.success(r);
|
return r == null?JsonResult.failed("退款失败"):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过退款单号查询退款信息
|
* 通过退款单号查询退款信息
|
||||||
*
|
*
|
||||||
* @param outRefundNo 商户(骑行)退款单号
|
* @param refundId 商户(骑行)退款单号
|
||||||
* @return 退款信息
|
* @return 退款信息
|
||||||
*/
|
*/
|
||||||
@GetMapping("/queryRefund/{outRefundNo}")
|
@GetMapping("/queryRefund/{refundId}")
|
||||||
public JsonResult<?> refundQuery(@PathVariable String outRefundNo) {
|
public JsonResult<?> refundQuery(@PathVariable String refundId) {
|
||||||
Refund r = wxPayService.queryRefundByOutNo(outRefundNo);
|
Refund r = wxPayService.queryRefundByOutNo(refundId);
|
||||||
return r == null?JsonResult.failed(String.format("退款单号{%s}查询退款失败", outRefundNo)):JsonResult.success(r);
|
return r == null?JsonResult.failed(String.format("退款单号{%s}查询退款失败", refundId)):JsonResult.success(r);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,8 +1,6 @@
|
|||||||
package com.cdzy.payment.model.dto;
|
package com.cdzy.payment.model.dto;
|
||||||
|
|
||||||
import com.wechat.pay.java.service.payments.jsapi.model.Amount;
|
import jakarta.validation.constraints.NotBlank;
|
||||||
import com.wechat.pay.java.service.payments.jsapi.model.Detail;
|
|
||||||
import com.wechat.pay.java.service.refund.model.AmountReq;
|
|
||||||
import lombok.AllArgsConstructor;
|
import lombok.AllArgsConstructor;
|
||||||
import lombok.Data;
|
import lombok.Data;
|
||||||
import lombok.NoArgsConstructor;
|
import lombok.NoArgsConstructor;
|
||||||
@ -21,18 +19,12 @@ public class EbikeRefundDto {
|
|||||||
/**
|
/**
|
||||||
* 商户(骑行)订单号
|
* 商户(骑行)订单号
|
||||||
*/
|
*/
|
||||||
|
@NotBlank(message = "订单id不能为空")
|
||||||
private String orderId;
|
private String orderId;
|
||||||
/**
|
|
||||||
* 支付交易会话标识
|
|
||||||
*/
|
|
||||||
private String paymentId;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 退款原因
|
* 退款原因
|
||||||
*/;
|
|
||||||
private String reason;
|
|
||||||
/**
|
|
||||||
* 金额
|
|
||||||
*/
|
*/
|
||||||
private AmountRefundDto amount;
|
@NotBlank(message = "退款原因不能为空")
|
||||||
|
private String reason;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -40,10 +40,15 @@ public class EbikePayment implements Serializable {
|
|||||||
private String orderId;
|
private String orderId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付交易会话标识;有效期为2小时
|
* 预支付交易会话标识;有效期为2小时
|
||||||
*/
|
*/
|
||||||
private String paymentId;
|
private String paymentId;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 微信支付订单号
|
||||||
|
*/
|
||||||
|
private String transactionId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交时间
|
* 提交时间
|
||||||
*/
|
*/
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package com.cdzy.payment.model.entity;
|
|||||||
import com.mybatisflex.annotation.Id;
|
import com.mybatisflex.annotation.Id;
|
||||||
import com.mybatisflex.annotation.Table;
|
import com.mybatisflex.annotation.Table;
|
||||||
import java.io.Serializable;
|
import java.io.Serializable;
|
||||||
import java.math.BigDecimal;
|
|
||||||
|
|
||||||
import java.io.Serial;
|
import java.io.Serial;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
@ -46,9 +45,9 @@ public class EbikeRefund implements Serializable {
|
|||||||
private String recordId;
|
private String recordId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 支付交易会话标识;有效期为2小时
|
* 微信支付订单号
|
||||||
*/
|
*/
|
||||||
private String paymentId;
|
private String transactionId;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 提交时间
|
* 提交时间
|
||||||
|
|||||||
@ -38,10 +38,10 @@ public interface EbikePaymentService extends IService<EbikePayment> {
|
|||||||
Boolean updatePaymentStatus(Transaction transaction);
|
Boolean updatePaymentStatus(Transaction transaction);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据支付订单id查询支付记录
|
* 根据订单id查询支付记录
|
||||||
*
|
*
|
||||||
* @param paymentId 支付订单id
|
* @param orderId 订单id
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
EbikePayment getByPaymentId(String paymentId);
|
EbikePayment getByOrderId(String orderId);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -2,9 +2,7 @@ package com.cdzy.payment.service;
|
|||||||
|
|
||||||
|
|
||||||
import com.alibaba.fastjson2.JSONObject;
|
import com.alibaba.fastjson2.JSONObject;
|
||||||
import com.cdzy.payment.model.dto.AmountDto;
|
|
||||||
import com.cdzy.payment.model.dto.AmountRefundDto;
|
import com.cdzy.payment.model.dto.AmountRefundDto;
|
||||||
import com.cdzy.payment.model.dto.DetailDto;
|
|
||||||
import com.cdzy.payment.model.dto.HandleNotifyResult;
|
import com.cdzy.payment.model.dto.HandleNotifyResult;
|
||||||
import com.wechat.pay.java.service.payments.model.Transaction;
|
import com.wechat.pay.java.service.payments.model.Transaction;
|
||||||
import com.wechat.pay.java.service.refund.model.Refund;
|
import com.wechat.pay.java.service.refund.model.Refund;
|
||||||
@ -30,23 +28,11 @@ public interface WxPayService {
|
|||||||
/**
|
/**
|
||||||
* JSAPI支付下单
|
* JSAPI支付下单
|
||||||
*
|
*
|
||||||
* @param outTradeNo 商户(骑行)订单号
|
* @param outTradeNo 订单id
|
||||||
* @param description 商品描述
|
|
||||||
* @param goodsTag 商品标记
|
|
||||||
* @param openId 用户标识
|
|
||||||
* @param amount 金额
|
|
||||||
* @param detail 商品详情
|
|
||||||
* @param clientIp 客户端IP
|
|
||||||
* @return 下单成功返回true,否则返回false
|
* @return 下单成功返回true,否则返回false
|
||||||
*/
|
*/
|
||||||
JSONObject prepay(String outTradeNo, String description, String goodsTag, String openId, AmountDto amount, DetailDto detail, String clientIp);
|
JSONObject prepay(String outTradeNo);
|
||||||
/**
|
|
||||||
* 通过交易订单号查询支付订单
|
|
||||||
*
|
|
||||||
* @param transactionId 微信支付订单号
|
|
||||||
* @return 支付订单信息
|
|
||||||
*/
|
|
||||||
Transaction queryOrderById(String transactionId);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过商户(骑行)订单号查询支付订单
|
* 通过商户(骑行)订单号查询支付订单
|
||||||
@ -57,12 +43,12 @@ public interface WxPayService {
|
|||||||
Transaction queryOrderByOutTradeNo(String outTradeNo);
|
Transaction queryOrderByOutTradeNo(String outTradeNo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 通过交易订单号查询支付订单状态
|
* 通过订单号查询支付订单状态
|
||||||
*
|
*
|
||||||
* @param transactionId 微信支付订单号
|
* @param outTradeNo 商户(骑行)订单号
|
||||||
* @return 支付订单信息
|
* @return 支付订单信息
|
||||||
*/
|
*/
|
||||||
HandleNotifyResult queryOrderStatusById(String transactionId);
|
HandleNotifyResult queryOrderStatusByOutTradeNo(String outTradeNo);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 处理支付回调
|
* 处理支付回调
|
||||||
@ -75,13 +61,11 @@ public interface WxPayService {
|
|||||||
/**
|
/**
|
||||||
* 退款申请
|
* 退款申请
|
||||||
*
|
*
|
||||||
* @param transactionId 微信支付订单号
|
|
||||||
* @param outTradeNo 商户(骑行)订单号
|
* @param outTradeNo 商户(骑行)订单号
|
||||||
* @param reason 退款原因
|
* @param reason 退款原因
|
||||||
* @param amount 退款金额
|
|
||||||
* @return 退款信息id
|
* @return 退款信息id
|
||||||
*/
|
*/
|
||||||
String refund(String transactionId, String outTradeNo, String reason, AmountRefundDto amount);
|
String refund(String outTradeNo, String reason);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@ -34,9 +34,9 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
@Override
|
@Override
|
||||||
public List<EbikePayment> getNoPayOrderByDuration(int duration) {
|
public List<EbikePayment> getNoPayOrderByDuration(int duration) {
|
||||||
QueryColumn time = QueryMethods.secToTime(String.valueOf(duration * 60));
|
QueryColumn time = QueryMethods.secToTime(String.valueOf(duration * 60));
|
||||||
// trade_state 等于 NOTPAY未支付的, 并且创建时间未超过duration分钟的订单
|
// trade_state 等于 NOTPAY未支付的 USERPAYING正在支持的, 并且创建时间未超过duration分钟的订单
|
||||||
QueryWrapper query = QueryWrapper.create()
|
QueryWrapper query = QueryWrapper.create()
|
||||||
.where(EBIKE_PAYMENT.TRADE_STATE.eq(Transaction.TradeStateEnum.USERPAYING.ordinal()))
|
.where(EBIKE_PAYMENT.TRADE_STATE.eq(Transaction.TradeStateEnum.NOTPAY.ordinal()))
|
||||||
.and(QueryMethods.addTime(EBIKE_PAYMENT.CREATE_TIME, time).lt(QueryMethods.now()));
|
.and(QueryMethods.addTime(EBIKE_PAYMENT.CREATE_TIME, time).lt(QueryMethods.now()));
|
||||||
return list(query);
|
return list(query);
|
||||||
}
|
}
|
||||||
@ -44,9 +44,9 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
@Override
|
@Override
|
||||||
public List<EbikePayment> getExpireOrderByDuration(int duration) {
|
public List<EbikePayment> getExpireOrderByDuration(int duration) {
|
||||||
QueryColumn time = QueryMethods.secToTime(String.valueOf(duration * 60));
|
QueryColumn time = QueryMethods.secToTime(String.valueOf(duration * 60));
|
||||||
// trade_state 等于 NOTPAY未支付的, 并且创建时间超过duration分钟的订单
|
// trade_state 等于 NOTPAY未支付的 USERPAYING正在支持的, 并且创建时间超过duration分钟的订单
|
||||||
QueryWrapper query = QueryWrapper.create()
|
QueryWrapper query = QueryWrapper.create()
|
||||||
.where(EBIKE_PAYMENT.TRADE_STATE.eq(Transaction.TradeStateEnum.USERPAYING.ordinal()))
|
.where(EBIKE_PAYMENT.TRADE_STATE.eq(Transaction.TradeStateEnum.NOTPAY.ordinal()))
|
||||||
.and(QueryMethods.addTime(EBIKE_PAYMENT.CREATE_TIME, time).ge(QueryMethods.now()));
|
.and(QueryMethods.addTime(EBIKE_PAYMENT.CREATE_TIME, time).ge(QueryMethods.now()));
|
||||||
return list(query);
|
return list(query);
|
||||||
}
|
}
|
||||||
@ -62,6 +62,7 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
ebikePayment.setTotal(v);
|
ebikePayment.setTotal(v);
|
||||||
String paymentTime = transaction.getSuccessTime();
|
String paymentTime = transaction.getSuccessTime();
|
||||||
ebikePayment.setPaymentTime(StringUtils.toLocalDatetime(paymentTime));
|
ebikePayment.setPaymentTime(StringUtils.toLocalDatetime(paymentTime));
|
||||||
|
ebikePayment.setTransactionId(transaction.getTransactionId());
|
||||||
// 同步支付状态
|
// 同步支付状态
|
||||||
ResFeignOrderPaymentDto paymentParam = new ResFeignOrderPaymentDto();
|
ResFeignOrderPaymentDto paymentParam = new ResFeignOrderPaymentDto();
|
||||||
paymentParam.setOrderId(Long.valueOf(transaction.getOutTradeNo()));
|
paymentParam.setOrderId(Long.valueOf(transaction.getOutTradeNo()));
|
||||||
@ -70,14 +71,14 @@ public class EbikePaymentServiceImpl extends ServiceImpl<EbikePaymentMapper, Ebi
|
|||||||
ordersFeignClient.payment(paymentParam);
|
ordersFeignClient.payment(paymentParam);
|
||||||
}
|
}
|
||||||
QueryWrapper query = QueryWrapper.create()
|
QueryWrapper query = QueryWrapper.create()
|
||||||
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(transaction.getTransactionId()));
|
.where(EBIKE_PAYMENT.ORDER_ID.eq(transaction.getOutTradeNo()));
|
||||||
return update(ebikePayment, query);
|
return update(ebikePayment, query);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EbikePayment getByPaymentId(String paymentId) {
|
public EbikePayment getByOrderId(String orderId) {
|
||||||
QueryWrapper query = QueryWrapper.create()
|
QueryWrapper query = QueryWrapper.create()
|
||||||
.where(EBIKE_PAYMENT.PAYMENT_ID.eq(paymentId));
|
.where(EBIKE_PAYMENT.ORDER_ID.eq(orderId));
|
||||||
return this.getOne(query);
|
return this.getOne(query);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -81,8 +81,43 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public JSONObject prepay(String outTradeNo, String description, String goodsTag, String openId, AmountDto amount, DetailDto detail, String clientIp) {
|
public JSONObject prepay(String outTradeNo){
|
||||||
|
// 首先检查订单是否正在付中、或者已经支付成功
|
||||||
|
EbikePayment ebikePayment = ebikePaymentService.getByOrderId(outTradeNo);
|
||||||
|
if (ebikePayment != null) {
|
||||||
|
if (String.valueOf(Transaction.TradeStateEnum.SUCCESS.ordinal()).equals(ebikePayment.getTradeState())) {
|
||||||
|
log.info("订单已经支付成功,订单号:{}", outTradeNo);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
if (String.valueOf(Transaction.TradeStateEnum.NOTPAY.ordinal()).equals(ebikePayment.getTradeState())
|
||||||
|
||String.valueOf(Transaction.TradeStateEnum.USERPAYING.ordinal()).equals(ebikePayment.getTradeState())) {
|
||||||
|
log.info("订单正在支付中,订单号:{}", outTradeNo);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//查询订单, orderFeingClient.getOrderById(orderId)
|
||||||
|
|
||||||
|
//获取当前用户openId
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSAPI支付下单
|
||||||
|
*
|
||||||
|
* @param outTradeNo 商户(骑行)订单号
|
||||||
|
* @param description 商品描述
|
||||||
|
* @param goodsTag 商品标记
|
||||||
|
* @param openId 用户标识
|
||||||
|
* @param amount 金额
|
||||||
|
* @param detail 商品详情
|
||||||
|
* @param ebikePayment 原始支付记录
|
||||||
|
* @return 下单成功返回true,否则返回false
|
||||||
|
*/
|
||||||
|
private JSONObject prepay(String outTradeNo, String description, String goodsTag, String openId, AmountDto amount, DetailDto detail, EbikePayment ebikePayment) {
|
||||||
try {
|
try {
|
||||||
PrepayRequest request = new PrepayRequest();
|
PrepayRequest request = new PrepayRequest();
|
||||||
request.setAppid(wxPayConfig.getAppId());
|
request.setAppid(wxPayConfig.getAppId());
|
||||||
@ -112,23 +147,28 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
detailReq.setCostPrice(BigDecimal.valueOf(detail.getCostPrice()*100.0).intValue());
|
detailReq.setCostPrice(BigDecimal.valueOf(detail.getCostPrice()*100.0).intValue());
|
||||||
detailReq.setInvoiceId(detail.getInvoiceId());
|
detailReq.setInvoiceId(detail.getInvoiceId());
|
||||||
request.setDetail(detailReq);
|
request.setDetail(detailReq);
|
||||||
SceneInfo sceneInfo = new SceneInfo();
|
|
||||||
sceneInfo.setPayerClientIp(clientIp);
|
|
||||||
request.setSceneInfo(sceneInfo);
|
|
||||||
|
|
||||||
PrepayResponse response = wxJsapiService.prepay(request);
|
PrepayResponse response = wxJsapiService.prepay(request);
|
||||||
String payId = response.getPrepayId();
|
String payId = response.getPrepayId();
|
||||||
//入库
|
//入库, 重新发起支付更新记录(订单号<-->记录号一一对应)
|
||||||
if (payId != null) {
|
if (payId != null) {
|
||||||
EbikePayment ebikePayment = new EbikePayment();
|
if (ebikePayment == null) {
|
||||||
ebikePayment.setOrderId(outTradeNo);
|
ebikePayment = new EbikePayment();
|
||||||
ebikePayment.setPaymentId(payId);
|
ebikePayment.setOrderId(outTradeNo);
|
||||||
ebikePayment.setCreateTime(LocalDateTime.now());
|
ebikePayment.setPaymentId(payId);
|
||||||
ebikePayment.setPaymentMethod(PayMethod.wechat.name());
|
ebikePayment.setCreateTime(LocalDateTime.now());
|
||||||
ebikePayment.setCostPrice(amount.getTotal());
|
ebikePayment.setPaymentMethod(PayMethod.wechat.name());
|
||||||
int state = Transaction.TradeStateEnum.USERPAYING.ordinal();
|
ebikePayment.setCostPrice(amount.getTotal());
|
||||||
ebikePayment.setTradeState(String.valueOf(state));
|
ebikePayment.setTradeState(String.valueOf(Transaction.TradeStateEnum.NOTPAY.ordinal()));
|
||||||
ebikePaymentService.save(ebikePayment);
|
ebikePaymentService.save(ebikePayment);
|
||||||
|
}else{
|
||||||
|
ebikePayment.setPaymentId(payId);
|
||||||
|
ebikePayment.setCreateTime(LocalDateTime.now());
|
||||||
|
ebikePayment.setPaymentMethod(PayMethod.wechat.name());
|
||||||
|
ebikePayment.setCostPrice(amount.getTotal());
|
||||||
|
ebikePayment.setTradeState(String.valueOf(Transaction.TradeStateEnum.NOTPAY.ordinal()));
|
||||||
|
ebikePaymentService.updateById(ebikePayment);
|
||||||
|
}
|
||||||
// 返回给小程序的参数(调起微信支付)
|
// 返回给小程序的参数(调起微信支付)
|
||||||
WxJsapiPromptDto wxJsapiPromptDto = new WxJsapiPromptDto();
|
WxJsapiPromptDto wxJsapiPromptDto = new WxJsapiPromptDto();
|
||||||
wxJsapiPromptDto.setAppId(wxPayConfig.getAppId());
|
wxJsapiPromptDto.setAppId(wxPayConfig.getAppId());
|
||||||
@ -145,28 +185,22 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Transaction queryOrderById(String transactionId) {
|
|
||||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
|
||||||
request.setTransactionId(transactionId);
|
|
||||||
return wxJsapiService.queryOrderById(request);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
|
public Transaction queryOrderByOutTradeNo(String outTradeNo) {
|
||||||
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
||||||
request.setOutTradeNo(outTradeNo);
|
request.setOutTradeNo(outTradeNo);
|
||||||
|
request.setMchid(wxPayConfig.getMerchantId());
|
||||||
return wxJsapiService.queryOrderByOutTradeNo(request);
|
return wxJsapiService.queryOrderByOutTradeNo(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public HandleNotifyResult queryOrderStatusById(String transactionId) {
|
public HandleNotifyResult queryOrderStatusByOutTradeNo(String outTradeNo) {
|
||||||
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
// 先查本地数据库,如果退款状态不为SUCCESS,需要查询微信支付
|
||||||
HandleNotifyResult result = new HandleNotifyResult();
|
HandleNotifyResult result = new HandleNotifyResult();
|
||||||
EbikePayment ebikePayment = ebikePaymentService.getByPaymentId(transactionId);
|
EbikePayment ebikePayment = ebikePaymentService.getByOrderId(outTradeNo);
|
||||||
if (ebikePayment==null){
|
if (ebikePayment==null){
|
||||||
log.error("{}支付订单不存在", transactionId);
|
log.error("{}支付订单不存在", outTradeNo);
|
||||||
result.setMessage(String.format("{%s}支付订单不存在", transactionId));
|
result.setMessage(String.format("{%s}支付订单不存在", outTradeNo));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
result.setSuccess(String.valueOf(Transaction.TradeStateEnum.SUCCESS.ordinal()).equals(ebikePayment.getTradeState()));
|
result.setSuccess(String.valueOf(Transaction.TradeStateEnum.SUCCESS.ordinal()).equals(ebikePayment.getTradeState()));
|
||||||
@ -174,9 +208,10 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
QueryOrderByIdRequest request = new QueryOrderByIdRequest();
|
QueryOrderByOutTradeNoRequest request = new QueryOrderByOutTradeNoRequest();
|
||||||
request.setTransactionId(transactionId);
|
request.setOutTradeNo(outTradeNo);
|
||||||
Transaction r = wxJsapiService.queryOrderById(request);
|
request.setMchid(wxPayConfig.getMerchantId());
|
||||||
|
Transaction r = wxJsapiService.queryOrderByOutTradeNo(request);
|
||||||
if(r!=null&& r.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)) {
|
if(r!=null&& r.getTradeState().equals(Transaction.TradeStateEnum.SUCCESS)) {
|
||||||
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
result.setMessage(String.format("订单%s支付成功", ebikePayment.getOrderId()));
|
||||||
result.setSuccess(true);
|
result.setSuccess(true);
|
||||||
@ -223,11 +258,14 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String refund(String transactionId, String outTradeNo, String reason, AmountRefundDto amount) {
|
public String refund(String outTradeNo, String reason) {
|
||||||
// 雪花算法生成退款单号
|
// 雪花算法生成退款单号
|
||||||
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
String outRefundNo = StringUtils.generateSnowflakeId("refundId");
|
||||||
EbikeRefund ebikeRefund = new EbikeRefund();
|
EbikeRefund ebikeRefund = new EbikeRefund();
|
||||||
ebikeRefund.setCreateTime(LocalDateTime.now());
|
ebikeRefund.setCreateTime(LocalDateTime.now());
|
||||||
|
// 查询支付订单
|
||||||
|
String transactionId = "";
|
||||||
|
AmountRefundDto amount = new AmountRefundDto();
|
||||||
// 发起退款
|
// 发起退款
|
||||||
CreateRequest request = new CreateRequest();
|
CreateRequest request = new CreateRequest();
|
||||||
request.setTransactionId(transactionId);
|
request.setTransactionId(transactionId);
|
||||||
@ -245,7 +283,7 @@ public class WxPayServiceImpl implements WxPayService {
|
|||||||
if (result != null) {
|
if (result != null) {
|
||||||
ebikeRefund.setRefundId(outRefundNo);
|
ebikeRefund.setRefundId(outRefundNo);
|
||||||
ebikeRefund.setOrderId(outTradeNo);
|
ebikeRefund.setOrderId(outTradeNo);
|
||||||
ebikeRefund.setPaymentId(transactionId);
|
ebikeRefund.setTransactionId(transactionId);
|
||||||
ebikeRefund.setTotal(amount.getTotal());
|
ebikeRefund.setTotal(amount.getTotal());
|
||||||
ebikeRefund.setReason(reason);
|
ebikeRefund.setReason(reason);
|
||||||
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
ebikeRefund.setStatus(String.valueOf(result.getStatus().ordinal()));
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user