123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- package com.tendbird.payserver.pay.service;
- import com.tendbird.payserver.pay.domain.PayConfig;
- import com.tendbird.payserver.pay.domain.PayOrder;
- import com.tendbird.payserver.pay.domain.PayResponse;
- import com.tendbird.payserver.pay.mapper.PayConfigMapper;
- import com.tendbird.payserver.pay.mapper.PayOrderMapper;
- import com.tendpay.sdk.response.PayOrderCreateResponse;
- import com.tendpay.sdk.response.PayOrderQueryResponse;
- import com.tendpay.sdk.response.RefundOrderCreateResponse;
- import lombok.extern.slf4j.Slf4j;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.security.core.parameters.P;
- import org.springframework.stereotype.Service;
- import org.springframework.util.ObjectUtils;
- import java.util.Date;
- import java.util.Random;
- @Slf4j
- @Service
- public class PayService {
- @Autowired
- private PayOrderMapper payOrderMapper;
- @Autowired
- private PayConfigMapper payConfigMapper;
- public PayConfig getPayConfig(String appId) throws Exception {
- PayConfig payConfig = payConfigMapper.findByappId(appId);
- log.info("findPayConfig: {}", payConfig);
- if (ObjectUtils.isEmpty(payConfig)) {
- throw new Exception("获取支付参数错误!");
- }
- return payConfig;
- }
- public PayOrder getByAuthCode(String payFlag, PayOrder payOrder) {
- return payOrderMapper.findByAuthCode(payFlag, payOrder.getAuthCode());
- }
- public PayResponse doTradePay(PayOrder payOrder) throws Exception {
- PayConfig payConfig = getPayConfig(payOrder.getAppId());
- //保存单据
- if (ObjectUtils.isEmpty(payOrder.getMchOrderNo())) {
- payOrder.setMchOrderNo(getId());
- }
- payOrder.setPayTime(new Date());
- payOrder.setPayFlag("1");
- payOrder.setStatus(PayOrder.STATE_ORDER_INIT);
- switch (payOrder.getWayCode()) {
- case "CASH":
- case "WXPAY":
- case "ALIPAY":
- case "BANKPAY":
- //现金、银行卡、微信已收款、支付宝已收款直接保存
- payOrder.setStatus(PayOrder.STATE_ORDER_SUCCESS);
- payOrder.setPayTime(new Date());
- payOrder.setOrderId(payOrder.getMchOrderId());
- payOrder.setAuthCode(payOrder.getMchOrderId());
- payOrderMapper.save(payOrder);
- break;
- default:
- //移动支付先保存数据,再进行支付处理
- payOrderMapper.save(payOrder);
- try {
- PayOrderCreateResponse payOrderCreateResponse = PayUtils.doTradePay(payConfig, payOrder);
- if (!ObjectUtils.isEmpty(payOrderCreateResponse)) {
- String orderNo = payOrderCreateResponse.get().getMchOrderNo();
- String payOrderId = payOrderCreateResponse.get().getPayOrderId();
- //判断是否返回成功
- if (payOrderCreateResponse.get().getOrderState() == PayOrder.STATE_ORDER_SUCCESS) {
- payOrder.setOrderId(payOrderId);
- payOrder.setStatus(payOrderCreateResponse.get().getOrderState());
- payOrder.setPayTime(new Date());
- payOrder.setErrCode(payOrderCreateResponse.get().getErrCode());
- payOrder.setErrMsg(payOrderCreateResponse.get().getErrMsg());
- payOrderMapper.update(payOrder);
- } else {
- PayOrderQueryResponse result = PayUtils.doTradePayQuery(payConfig, orderNo, payOrderId);
- if (!ObjectUtils.isEmpty(result)) {
- payOrder.setOrderId(result.get().getPayOrderId());
- payOrder.setStatus(result.get().getState());
- payOrder.setPayTime(new Date());
- payOrder.setErrCode(payOrderCreateResponse.get().getErrCode());
- payOrder.setErrMsg(payOrderCreateResponse.get().getErrMsg());
- payOrderMapper.update(payOrder);
- }
- }
- }
- } catch (Exception e) {
- payOrder.setOrderId("");
- payOrder.setStatus(PayOrder.STATE_ORDER_FAIL);
- payOrder.setPayTime(new Date());
- payOrder.setErrCode("9999");
- payOrder.setErrMsg(e.getMessage());
- payOrderMapper.update(payOrder);
- }
- }
- PayResponse response = new PayResponse();
- response.setMchOrderId(payOrder.getMchOrderId());
- response.setMchOrderNo(payOrder.getMchOrderNo());
- response.setOrderId(payOrder.getOrderId());
- response.setState(payOrder.getStatus());
- response.setErrCode(payOrder.getErrCode());
- response.setErrMsg(payOrder.getErrMsg());
- if (response.getState() == PayOrder.STATE_ORDER_SUCCESS) {
- return response;
- } else {
- throw new Exception(response.getErrMsg());
- }
- }
- public PayResponse doTradePayRefund(PayOrder payOrder) throws Exception {
- PayConfig payConfig = getPayConfig(payOrder.getAppId());
- PayOrder refundOrder = getByAuthCode("2", payOrder);
- if (ObjectUtils.isEmpty(refundOrder)) {
- //保存单据
- if (ObjectUtils.isEmpty(payOrder.getMchOrderId()) &&
- ObjectUtils.isEmpty(payOrder.getMchOrderNo())) {
- payOrder.setMchOrderId(getId());
- payOrder.setMchOrderNo(payOrder.getMchOrderId());
- } else if (ObjectUtils.isEmpty(payOrder.getMchOrderId())) {
- payOrder.setMchOrderId(getId());
- } else if (ObjectUtils.isEmpty(payOrder.getMchOrderNo())) {
- payOrder.setMchOrderNo(getId());
- }
- switch (payOrder.getWayCode()) {
- case "CASH":
- case "WXPAY":
- case "ALIPAY":
- case "BANKPAY":
- //现金、银行卡、微信已收款、支付宝已收款直接保存
- payOrder.setPayTime(new Date());
- payOrder.setStatus(PayOrder.STATE_REFUND_SUCCESS);
- payOrder.setOrderId(payOrder.getMchOrderId());
- payOrder.setPayFlag("2");
- payOrderMapper.save(payOrder);
- break;
- default:
- //移动支付
- payOrder.setPayTime(new Date());
- payOrder.setStatus(PayOrder.STATE_REFUND_INIT);
- payOrder.setPayFlag("2");
- payOrderMapper.save(payOrder);
- try {
- RefundOrderCreateResponse response = PayUtils.doTradePayRefund(payConfig, payOrder);
- if (!ObjectUtils.isEmpty(response)) {
- payOrder.setOrderId(response.get().getRefundOrderId());
- payOrder.setStatus(response.get().getState());
- payOrder.setPayTime(new Date());
- payOrder.setErrCode(response.get().getErrCode());
- payOrder.setErrMsg(response.get().getErrMsg());
- payOrderMapper.update(payOrder);
- }
- } catch (Exception e) {
- log.info("错误信息:{}", e.getMessage());
- payOrder.setStatus(PayOrder.STATE_REFUND_FAIL);
- payOrder.setErrCode("9999");
- payOrder.setErrMsg(e.getMessage());
- payOrder.setPayTime(new Date());
- payOrderMapper.update(payOrder);
- throw new Exception(e.getMessage());
- }
- }
- } else {
- throw new Exception("已经生成退款数据,不能再次退款!");
- }
- PayResponse response = new PayResponse();
- response.setMchOrderId(payOrder.getMchOrderId());
- response.setMchOrderNo(payOrder.getMchOrderNo());
- response.setState(payOrder.getStatus());
- response.setOrderId(payOrder.getOrderId());
- response.setErrCode(payOrder.getErrCode());
- response.setErrMsg(payOrder.getErrMsg());
- //若是成功或退款中状态,表示退款成功
- if (response.getState() == PayOrder.STATE_REFUND_SUCCESS ||
- response.getState() == PayOrder.STATE_REFUND_ING) {
- response.setState(PayOrder.STATE_REFUND_SUCCESS);
- return response;
- } else {
- throw new Exception(response.getErrMsg());
- }
- }
- public String getId() {
- long simple = System.currentTimeMillis();
- int random = new Random().nextInt(900) + 100;
- return Long.toString(simple) + random;
- }
- }
|