Commit deee24e5 authored by jmdhappy's avatar jmdhappy
Browse files

提交转账,退款接口;重构商户通知;修复已知Bug

parent d5333a0d
......@@ -11,4 +11,12 @@ public interface IPayChannel4WxService {
Map doWxPayReq(String jsonParam);
Map doWxTransReq(String jsonParam);
Map getWxTransReq(String jsonParam);
Map doWxRefundReq(String jsonParam);
Map getWxRefundReq(String jsonParam);
}
......@@ -9,13 +9,13 @@ import java.util.Map;
*/
public interface IPayOrderService {
Map createPayOrder(String jsonParam);
Map create(String jsonParam);
Map selectPayOrder(String jsonParam);
Map select(String jsonParam);
Map selectPayOrderByMchIdAndPayOrderId(String jsonParam);
Map selectByMchIdAndPayOrderId(String jsonParam);
Map selectPayOrderByMchIdAndMchOrderNo(String jsonParam);
Map selectByMchIdAndMchOrderNo(String jsonParam);
Map updateStatus4Ing(String jsonParam);
......
package org.xxpay.dubbo.api.service;
import java.util.Map;
/**
* @author: dingzhiwei
* @date: 17/10/26
* @description: 退款业务
*/
public interface IRefundOrderService {
Map create(String jsonParam);
Map select(String jsonParam);
Map selectByMchIdAndRefundOrderId(String jsonParam);
Map selectByMchIdAndMchRefundNo(String jsonParam);
Map updateStatus4Ing(String jsonParam);
Map updateStatus4Success(String jsonParam);
Map updateStatus4Complete(String jsonParam);
Map sendRefundNotify(String jsonParam);
}
package org.xxpay.dubbo.api.service;
import java.util.Map;
/**
* @author: dingzhiwei
* @date: 17/10/26
* @description: 转账业务
*/
public interface ITransOrderService {
Map create(String jsonParam);
Map select(String jsonParam);
Map selectByMchIdAndTransOrderId(String jsonParam);
Map selectByMchIdAndMchTransNo(String jsonParam);
Map updateStatus4Ing(String jsonParam);
Map updateStatus4Success(String jsonParam);
Map updateStatus4Complete(String jsonParam);
Map sendTransNotify(String jsonParam);
}
......@@ -48,6 +48,11 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!--wx_pay-->
<dependency>
<groupId>com.github.binarywang</groupId>
......
package org.xxpay.dubbo.service;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.xxpay.common.constant.PayConstant;
......@@ -8,8 +9,9 @@ import org.xxpay.common.util.MyLog;
import org.xxpay.common.util.PayDigestUtil;
import org.xxpay.common.util.XXPayUtil;
import org.xxpay.dal.dao.model.MchInfo;
import org.xxpay.dal.dao.model.MchNotify;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dubbo.service.mq.Mq4PayNotify;
import org.xxpay.dubbo.service.mq.Mq4MchPayNotify;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
......@@ -17,19 +19,19 @@ import java.util.HashMap;
import java.util.Map;
/**
* @Description: 支付通知处理基类
* @Description: 商户支付通知处理基类
* @author dingzhiwei jmdhappy@126.com
* @date 2017-07-05
* @date 2017-11-01
* @version V1.0
* @Copyright: www.xxpay.org
*/
@Component
public class Notify4BasePay extends BaseService {
public class BaseNotify4MchPay extends BaseService4PayOrder {
private static final MyLog _log = MyLog.getLog(Notify4BasePay.class);
private static final MyLog _log = MyLog.getLog(BaseNotify4MchPay.class);
@Autowired
private Mq4PayNotify mq4PayNotify;
private Mq4MchPayNotify mq4MchPayNotify;
/**
* 创建响应URL
......@@ -42,30 +44,30 @@ public class Notify4BasePay extends BaseService {
MchInfo mchInfo = super.baseSelectMchInfo(mchId);
String resKey = mchInfo.getResKey();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("payOrderId", payOrder.getPayOrderId() == null ? "" : payOrder.getPayOrderId()); // 支付订单号
paramMap.put("mchId", payOrder.getMchId() == null ? "" : payOrder.getMchId()); // 商户ID
paramMap.put("mchOrderNo", payOrder.getMchOrderNo() == null ? "" : payOrder.getMchOrderNo()); // 商户订单号
paramMap.put("channelId", payOrder.getChannelId() == null ? "" : payOrder.getChannelId()); // 渠道ID
paramMap.put("amount", payOrder.getAmount() == null ? "" : payOrder.getAmount()); // 支付金额
paramMap.put("currency", payOrder.getCurrency() == null ? "" : payOrder.getCurrency()); // 货币类型
paramMap.put("status", payOrder.getStatus() == null ? "" : payOrder.getStatus()); // 支付状态
paramMap.put("clientIp", payOrder.getClientIp()==null ? "" : payOrder.getClientIp()); // 客户端IP
paramMap.put("device", payOrder.getDevice()==null ? "" : payOrder.getDevice()); // 设备
paramMap.put("subject", payOrder.getSubject()==null ? "" : payOrder.getSubject()); // 商品标题
paramMap.put("channelOrderNo", payOrder.getChannelOrderNo()==null ? "" : payOrder.getChannelOrderNo()); // 渠道订单号
paramMap.put("param1", payOrder.getParam1()==null ? "" : payOrder.getParam1()); // 扩展参数1
paramMap.put("param2", payOrder.getParam2()==null ? "" : payOrder.getParam2()); // 扩展参数2
paramMap.put("paySuccTime", payOrder.getPaySuccTime()==null ? "" : payOrder.getPaySuccTime()); // 支付成功时间
paramMap.put("backType", backType==null ? "" : backType);
paramMap.put("payOrderId", ObjectUtils.defaultIfNull(payOrder.getPayOrderId(), "")); // 支付订单号
paramMap.put("mchId", ObjectUtils.defaultIfNull(payOrder.getMchId(), "")); // 商户ID
paramMap.put("mchOrderNo", ObjectUtils.defaultIfNull(payOrder.getMchOrderNo(), "")); // 商户订单号
paramMap.put("channelId", ObjectUtils.defaultIfNull(payOrder.getChannelId(), "")); // 渠道ID
paramMap.put("amount", ObjectUtils.defaultIfNull(payOrder.getAmount(), "")); // 支付金额
paramMap.put("currency", ObjectUtils.defaultIfNull(payOrder.getCurrency(), "")); // 货币类型
paramMap.put("status", ObjectUtils.defaultIfNull(payOrder.getStatus(), "")); // 支付状态
paramMap.put("clientIp", ObjectUtils.defaultIfNull(payOrder.getClientIp(), "")); // 客户端IP
paramMap.put("device", ObjectUtils.defaultIfNull(payOrder.getDevice(), "")); // 设备
paramMap.put("subject", ObjectUtils.defaultIfNull(payOrder.getSubject(), "")); // 商品标题
paramMap.put("channelOrderNo", ObjectUtils.defaultIfNull(payOrder.getChannelOrderNo(), "")); // 渠道订单号
paramMap.put("param1", ObjectUtils.defaultIfNull(payOrder.getParam1(), "")); // 扩展参数1
paramMap.put("param2", ObjectUtils.defaultIfNull(payOrder.getParam2(), "")); // 扩展参数2
paramMap.put("paySuccTime", ObjectUtils.defaultIfNull(payOrder.getPaySuccTime(), "")); // 支付成功时间
paramMap.put("backType", ObjectUtils.defaultIfNull(backType, ""));
// 先对原文签名
String reqSign = PayDigestUtil.getSign(paramMap, resKey);
paramMap.put("sign", reqSign); // 签名
// 签名后再对有中文参数编码
try {
paramMap.put("device", URLEncoder.encode(payOrder.getDevice()==null ? "" : payOrder.getDevice(), PayConstant.RESP_UTF8));
paramMap.put("subject", URLEncoder.encode(payOrder.getSubject()==null ? "" : payOrder.getSubject(), PayConstant.RESP_UTF8));
paramMap.put("param1", URLEncoder.encode(payOrder.getParam1()==null ? "" : payOrder.getParam1(), PayConstant.RESP_UTF8));
paramMap.put("param2", URLEncoder.encode(payOrder.getParam2()==null ? "" : payOrder.getParam2(), PayConstant.RESP_UTF8));
paramMap.put("device", URLEncoder.encode(ObjectUtils.defaultIfNull(payOrder.getDevice(), ""), PayConstant.RESP_UTF8));
paramMap.put("subject", URLEncoder.encode(ObjectUtils.defaultIfNull(payOrder.getSubject(), ""), PayConstant.RESP_UTF8));
paramMap.put("param1", URLEncoder.encode(ObjectUtils.defaultIfNull(payOrder.getParam1(), ""), PayConstant.RESP_UTF8));
paramMap.put("param2", URLEncoder.encode(ObjectUtils.defaultIfNull(payOrder.getParam2(), ""), PayConstant.RESP_UTF8));
}catch (UnsupportedEncodingException e) {
_log.error("URL Encode exception.", e);
return null;
......@@ -76,43 +78,37 @@ public class Notify4BasePay extends BaseService {
return sb.toString();
}
/**
* 处理支付结果前台页面跳转
*/
public boolean doPage(PayOrder payOrder) {
String redirectUrl = createNotifyUrl(payOrder, "1");
_log.info("redirect to respUrl:"+redirectUrl);
// 前台跳转业务系统
/*try {
response.sendRedirect(redirectUrl);
} catch (IOException e) {
_log.error("XxPay sendRedirect exception. respUrl="+redirectUrl, e);
return false;
}*/
return true;
}
/**
* 处理支付结果后台服务器通知
*/
public void doNotify(PayOrder payOrder) {
public void doNotify(PayOrder payOrder, boolean isFirst) {
_log.info(">>>>>> PAY开始回调通知业务系统 <<<<<<");
// 发起后台通知业务系统
JSONObject object = createNotifyInfo(payOrder);
JSONObject object = createNotifyInfo(payOrder, isFirst);
try {
mq4PayNotify.send(object.toJSONString());
mq4MchPayNotify.send(object.toJSONString());
} catch (Exception e) {
_log.error("payOrderId={},sendMessage error.", payOrder != null ? payOrder.getPayOrderId() : "", e);
_log.error(e, "payOrderId=%s,sendMessage error.", ObjectUtils.defaultIfNull(payOrder.getPayOrderId(), ""));
}
_log.info(">>>>>> PAY回调通知业务系统完成 <<<<<<");
}
public JSONObject createNotifyInfo(PayOrder payOrder) {
public JSONObject createNotifyInfo(PayOrder payOrder, boolean isFirst) {
String url = createNotifyUrl(payOrder, "2");
if(isFirst) {
int result = baseInsertMchNotify(payOrder.getPayOrderId(), payOrder.getMchId(), payOrder.getMchOrderNo(), PayConstant.MCH_NOTIFY_TYPE_PAY, url);
_log.info("增加商户通知记录,orderId={},result:{}", payOrder.getPayOrderId(), result);
}
int count = 0;
if(!isFirst) {
MchNotify mchNotify = baseSelectMchNotify(payOrder.getPayOrderId());
if(mchNotify != null) count = mchNotify.getNotifyCount();
}
JSONObject object = new JSONObject();
object.put("method", "GET");
object.put("url", createNotifyUrl(payOrder, "2"));
object.put("url", url);
object.put("orderId", payOrder.getPayOrderId());
object.put("count", payOrder.getNotifyCount());
object.put("count", count);
object.put("createTime", System.currentTimeMillis());
return object;
}
......
package org.xxpay.dubbo.service;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.common.util.MyLog;
import org.xxpay.common.util.PayDigestUtil;
import org.xxpay.common.util.XXPayUtil;
import org.xxpay.dal.dao.model.MchInfo;
import org.xxpay.dal.dao.model.MchNotify;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dubbo.service.mq.Mq4MchRefundNotify;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: 商户转账通知处理基类
* @author dingzhiwei jmdhappy@126.com
* @date 2017-11-01
* @version V1.0
* @Copyright: www.xxpay.org
*/
@Component
public class BaseNotify4MchRefund extends BaseService4RefundOrder {
private static final MyLog _log = MyLog.getLog(BaseNotify4MchRefund.class);
@Autowired
private Mq4MchRefundNotify mq4MchRefundNotify;
/**
* 创建响应URL
* @param refundOrder
* @param backType 1:前台页面;2:后台接口
* @return
*/
public String createNotifyUrl(RefundOrder refundOrder, String backType) {
String mchId = refundOrder.getMchId();
MchInfo mchInfo = super.baseSelectMchInfo(mchId);
String resKey = mchInfo.getResKey();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("refundOrderId", ObjectUtils.defaultIfNull(refundOrder.getRefundOrderId(), "")); // 退款订单号
paramMap.put("mchId", ObjectUtils.defaultIfNull(refundOrder.getMchId(), "")); // 商户ID
paramMap.put("mchOrderNo", ObjectUtils.defaultIfNull(refundOrder.getMchRefundNo(), "")); // 商户订单号
paramMap.put("channelId", ObjectUtils.defaultIfNull(refundOrder.getChannelId(), "")); // 渠道ID
paramMap.put("refundAmount", ObjectUtils.defaultIfNull(refundOrder.getRefundAmount(), "")); // 退款金额
paramMap.put("currency", ObjectUtils.defaultIfNull(refundOrder.getCurrency(), "")); // 货币类型
paramMap.put("status", ObjectUtils.defaultIfNull(refundOrder.getStatus(), "")); // 退款状态
paramMap.put("result", ObjectUtils.defaultIfNull(refundOrder.getResult(), "")); // 退款结果
paramMap.put("clientIp", ObjectUtils.defaultIfNull(refundOrder.getClientIp(), "")); // 客户端IP
paramMap.put("device", ObjectUtils.defaultIfNull(refundOrder.getDevice(), "")); // 设备
paramMap.put("channelOrderNo", ObjectUtils.defaultIfNull(refundOrder.getChannelOrderNo(), "")); // 渠道订单号
paramMap.put("param1", ObjectUtils.defaultIfNull(refundOrder.getParam1(), "")); // 扩展参数1
paramMap.put("param2", ObjectUtils.defaultIfNull(refundOrder.getParam2(), "")); // 扩展参数2
paramMap.put("refundSuccTime", ObjectUtils.defaultIfNull(refundOrder.getRefundSuccTime(), "")); // 退款成功时间
paramMap.put("backType", backType==null ? "" : backType);
// 先对原文签名
String reqSign = PayDigestUtil.getSign(paramMap, resKey);
paramMap.put("sign", reqSign); // 签名
// 签名后再对有中文参数编码
try {
paramMap.put("device", URLEncoder.encode(ObjectUtils.defaultIfNull(refundOrder.getDevice(), ""), PayConstant.RESP_UTF8));
paramMap.put("param1", URLEncoder.encode(ObjectUtils.defaultIfNull(refundOrder.getParam1(), ""), PayConstant.RESP_UTF8));
paramMap.put("param2", URLEncoder.encode(ObjectUtils.defaultIfNull(refundOrder.getParam2(), ""), PayConstant.RESP_UTF8));
}catch (UnsupportedEncodingException e) {
_log.error("URL Encode exception.", e);
return null;
}
String param = XXPayUtil.genUrlParams(paramMap);
StringBuffer sb = new StringBuffer();
sb.append(refundOrder.getNotifyUrl()).append("?").append(param);
return sb.toString();
}
/**
* 处理商户转账后台服务器通知
*/
public void doNotify(RefundOrder refundOrder, boolean isFirst) {
_log.info(">>>>>> REFUND开始回调通知业务系统 <<<<<<");
// 发起后台通知业务系统
JSONObject object = createNotifyInfo(refundOrder, isFirst);
try {
mq4MchRefundNotify.send(object.toJSONString());
} catch (Exception e) {
_log.error(e, "refundOrderId=%s,sendMessage error.", ObjectUtils.defaultIfNull(refundOrder.getRefundOrderId(), ""));
}
_log.info(">>>>>> REFUND回调通知业务系统完成 <<<<<<");
}
public JSONObject createNotifyInfo(RefundOrder refundOrder, boolean isFirst) {
String url = createNotifyUrl(refundOrder, "2");
if(isFirst) {
int result = baseInsertMchNotify(refundOrder.getRefundOrderId(), refundOrder.getMchId(), refundOrder.getMchRefundNo(), PayConstant.MCH_NOTIFY_TYPE_REFUND, url);
_log.info("增加商户通知记录,orderId={},result:{}", refundOrder.getRefundOrderId(), result);
}
int count = 0;
if(!isFirst) {
MchNotify mchNotify = baseSelectMchNotify(refundOrder.getRefundOrderId());
if(mchNotify != null) count = mchNotify.getNotifyCount();
}
JSONObject object = new JSONObject();
object.put("method", "GET");
object.put("url", url);
object.put("orderId", refundOrder.getRefundOrderId());
object.put("count", count);
object.put("createTime", System.currentTimeMillis());
return object;
}
}
package org.xxpay.dubbo.service;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.common.util.MyLog;
import org.xxpay.common.util.PayDigestUtil;
import org.xxpay.common.util.XXPayUtil;
import org.xxpay.dal.dao.model.MchInfo;
import org.xxpay.dal.dao.model.MchNotify;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dubbo.service.mq.Mq4MchTransNotify;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.util.HashMap;
import java.util.Map;
/**
* @Description: 商户转账通知处理基类
* @author dingzhiwei jmdhappy@126.com
* @date 2017-11-01
* @version V1.0
* @Copyright: www.xxpay.org
*/
@Component
public class BaseNotify4MchTrans extends BaseService4TransOrder {
private static final MyLog _log = MyLog.getLog(BaseNotify4MchTrans.class);
@Autowired
private Mq4MchTransNotify mq4MchTransNotify;
/**
* 创建响应URL
* @param transOrder
* @param backType 1:前台页面;2:后台接口
* @return
*/
public String createNotifyUrl(TransOrder transOrder, String backType) {
String mchId = transOrder.getMchId();
MchInfo mchInfo = super.baseSelectMchInfo(mchId);
String resKey = mchInfo.getResKey();
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("transOrderId", ObjectUtils.defaultIfNull(transOrder.getTransOrderId(), "")); // 转账订单号
paramMap.put("mchId", ObjectUtils.defaultIfNull(transOrder.getMchId(), "")); // 商户ID
paramMap.put("mchOrderNo", ObjectUtils.defaultIfNull(transOrder.getMchTransNo(), "")); // 商户订单号
paramMap.put("channelId", ObjectUtils.defaultIfNull(transOrder.getChannelId(), "")); // 渠道ID
paramMap.put("amount", ObjectUtils.defaultIfNull(transOrder.getAmount(), "")); // 支付金额
paramMap.put("currency", ObjectUtils.defaultIfNull(transOrder.getCurrency(), "")); // 货币类型
paramMap.put("status", ObjectUtils.defaultIfNull(transOrder.getStatus(), "")); // 转账状态
paramMap.put("result", ObjectUtils.defaultIfNull(transOrder.getResult(), "")); // 转账结果
paramMap.put("clientIp", ObjectUtils.defaultIfNull(transOrder.getClientIp(), "")); // 客户端IP
paramMap.put("device", ObjectUtils.defaultIfNull(transOrder.getDevice(), "")); // 设备
paramMap.put("channelOrderNo", ObjectUtils.defaultIfNull(transOrder.getChannelOrderNo(), "")); // 渠道订单号
paramMap.put("param1", ObjectUtils.defaultIfNull(transOrder.getParam1(), "")); // 扩展参数1
paramMap.put("param2", ObjectUtils.defaultIfNull(transOrder.getParam2(), "")); // 扩展参数2
paramMap.put("transSuccTime", ObjectUtils.defaultIfNull(transOrder.getTransSuccTime(), "")); // 转账成功时间
paramMap.put("backType", backType==null ? "" : backType);
// 先对原文签名
String reqSign = PayDigestUtil.getSign(paramMap, resKey);
paramMap.put("sign", reqSign); // 签名
// 签名后再对有中文参数编码
try {
paramMap.put("device", URLEncoder.encode(ObjectUtils.defaultIfNull(transOrder.getDevice(), ""), PayConstant.RESP_UTF8));
paramMap.put("param1", URLEncoder.encode(ObjectUtils.defaultIfNull(transOrder.getParam1(), ""), PayConstant.RESP_UTF8));
paramMap.put("param2", URLEncoder.encode(ObjectUtils.defaultIfNull(transOrder.getParam2(), ""), PayConstant.RESP_UTF8));
}catch (UnsupportedEncodingException e) {
_log.error("URL Encode exception.", e);
return null;
}
String param = XXPayUtil.genUrlParams(paramMap);
StringBuffer sb = new StringBuffer();
sb.append(transOrder.getNotifyUrl()).append("?").append(param);
return sb.toString();
}
/**
* 处理商户转账后台服务器通知
*/
public void doNotify(TransOrder transOrder, boolean isFirst) {
_log.info(">>>>>> TRANS开始回调通知业务系统 <<<<<<");
// 发起后台通知业务系统
JSONObject object = createNotifyInfo(transOrder, isFirst);
try {
mq4MchTransNotify.send(object.toJSONString());
} catch (Exception e) {
_log.error(e, "transOrderId=%s,sendMessage error.", ObjectUtils.defaultIfNull(transOrder.getTransOrderId(), ""));
}
_log.info(">>>>>> TRANS回调通知业务系统完成 <<<<<<");
}
public JSONObject createNotifyInfo(TransOrder transOrder, boolean isFirst) {
String url = createNotifyUrl(transOrder, "2");
if(isFirst) {
int result = baseInsertMchNotify(transOrder.getTransOrderId(), transOrder.getMchId(), transOrder.getMchTransNo(), PayConstant.MCH_NOTIFY_TYPE_TRANS, url);
_log.info("增加商户通知记录,orderId={},result:{}", transOrder.getTransOrderId(), result);
}
int count = 0;
if(!isFirst) {
MchNotify mchNotify = baseSelectMchNotify(transOrder.getTransOrderId());
if(mchNotify != null) count = mchNotify.getNotifyCount();
}
JSONObject object = new JSONObject();
object.put("method", "GET");
object.put("url", url);
object.put("orderId", transOrder.getTransOrderId());
object.put("count", count);
object.put("createTime", System.currentTimeMillis());
return object;
}
}
package org.xxpay.dubbo.service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.dal.dao.mapper.MchInfoMapper;
import org.xxpay.dal.dao.mapper.MchNotifyMapper;
import org.xxpay.dal.dao.mapper.PayChannelMapper;
import org.xxpay.dal.dao.mapper.PayOrderMapper;
import org.xxpay.dal.dao.model.*;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
/**
......@@ -19,15 +22,14 @@ import java.util.List;
@Service
public class BaseService {
@Autowired
private PayOrderMapper payOrderMapper;
@Autowired
private MchInfoMapper mchInfoMapper;
@Autowired
private PayChannelMapper payChannelMapper;
@Autowired
private MchNotifyMapper mchNotifyMapper;
public MchInfo baseSelectMchInfo(String mchId) {
return mchInfoMapper.selectByPrimaryKey(mchId);
......@@ -43,77 +45,50 @@ public class BaseService {
return payChannelList.get(0);
}
public int baseCreatePayOrder(PayOrder payOrder) {
return payOrderMapper.insertSelective(payOrder);
}
public PayOrder baseSelectPayOrder(String payOrderId) {
return payOrderMapper.selectByPrimaryKey(payOrderId);
}
public PayOrder baseSelectPayOrderByMchIdAndPayOrderId(String mchId, String payOrderId) {
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andPayOrderIdEqualTo(payOrderId);
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0);
}
public PayOrder baseSelectPayOrderByMchIdAndMchOrderNo(String mchId, String mchOrderNo) {
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andMchOrderNoEqualTo(mchOrderNo);
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0);
public MchNotify baseSelectMchNotify(String orderId) {
return mchNotifyMapper.selectByPrimaryKey(orderId);
}
public int baseUpdateStatus4Ing(String payOrderId, String channelOrderNo) {
PayOrder payOrder = new PayOrder();
payOrder.setStatus(PayConstant.PAY_STATUS_PAYING);
if(channelOrderNo != null) payOrder.setChannelOrderNo(channelOrderNo);
payOrder.setPaySuccTime(System.currentTimeMillis());
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_INIT);
return payOrderMapper.updateByExampleSelective(payOrder, example);
public int baseInsertMchNotify(String orderId, String mchId, String mchOrderNo, String orderType, String notifyUrl) {
MchNotify mchNotify = new MchNotify();
mchNotify.setOrderId(orderId);
mchNotify.setMchId(mchId);
mchNotify.setMchOrderNo(mchOrderNo);
mchNotify.setOrderType(orderType);
mchNotify.setNotifyUrl(notifyUrl);
return mchNotifyMapper.insertSelectiveOnDuplicateKeyUpdate(mchNotify);
}
public int baseUpdateStatus4Success(String payOrderId) {
PayOrder payOrder = new PayOrder();
payOrder.setPayOrderId(payOrderId);
payOrder.setStatus(PayConstant.PAY_STATUS_SUCCESS);
payOrder.setPaySuccTime(System.currentTimeMillis());
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_PAYING);
return payOrderMapper.updateByExampleSelective(payOrder, example);
public int baseUpdateMchNotifySuccess(String orderId, String result, byte notifyCount) {
MchNotify mchNotify = new MchNotify();
mchNotify.setStatus(PayConstant.MCH_NOTIFY_STATUS_SUCCESS);
mchNotify.setResult(result);
mchNotify.setNotifyCount(notifyCount);
mchNotify.setLastNotifyTime(new Date());
MchNotifyExample example = new MchNotifyExample();
MchNotifyExample.Criteria criteria = example.createCriteria();
criteria.andOrderIdEqualTo(orderId);
List values = new LinkedList<>();
values.add(PayConstant.MCH_NOTIFY_STATUS_NOTIFYING);
values.add(PayConstant.MCH_NOTIFY_STATUS_FAIL);
criteria.andStatusIn(values);
return mchNotifyMapper.updateByExampleSelective(mchNotify, example);
}
public int baseUpdateStatus4Complete(String payOrderId) {
PayOrder payOrder = new PayOrder();
payOrder.setPayOrderId(payOrderId);
payOrder.setStatus(PayConstant.PAY_STATUS_COMPLETE);
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_SUCCESS);
return payOrderMapper.updateByExampleSelective(payOrder, example);
public int baseUpdateMchNotifyFail(String orderId, String result, byte notifyCount) {
MchNotify mchNotify = new MchNotify();
mchNotify.setStatus(PayConstant.MCH_NOTIFY_STATUS_FAIL);
mchNotify.setResult(result);
mchNotify.setNotifyCount(notifyCount);
mchNotify.setLastNotifyTime(new Date());
MchNotifyExample example = new MchNotifyExample();
MchNotifyExample.Criteria criteria = example.createCriteria();
criteria.andOrderIdEqualTo(orderId);
List values = new LinkedList<>();
values.add(PayConstant.MCH_NOTIFY_STATUS_NOTIFYING);
values.add(PayConstant.MCH_NOTIFY_STATUS_FAIL);
return mchNotifyMapper.updateByExampleSelective(mchNotify, example);
}
public int baseUpdateNotify(String payOrderId, byte count) {
PayOrder newPayOrder = new PayOrder();
newPayOrder.setNotifyCount(count);
newPayOrder.setLastNotifyTime(System.currentTimeMillis());
newPayOrder.setPayOrderId(payOrderId);
return payOrderMapper.updateByPrimaryKeySelective(newPayOrder);
}
public int baseUpdateNotify(PayOrder payOrder) {
return payOrderMapper.updateByPrimaryKeySelective(payOrder);
}
}
package org.xxpay.dubbo.service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.dal.dao.mapper.PayOrderMapper;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dal.dao.model.PayOrderExample;
import java.util.List;
/**
* @author: dingzhiwei
* @date: 17/10/30
* @description:
*/
@Service
public class BaseService4PayOrder extends BaseService{
@Autowired
private PayOrderMapper payOrderMapper;
public int baseCreatePayOrder(PayOrder payOrder) {
return payOrderMapper.insertSelective(payOrder);
}
public PayOrder baseSelectPayOrder(String payOrderId) {
return payOrderMapper.selectByPrimaryKey(payOrderId);
}
public PayOrder baseSelectByMchIdAndPayOrderId(String mchId, String payOrderId) {
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andPayOrderIdEqualTo(payOrderId);
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0);
}
public PayOrder baseSelectByMchIdAndMchOrderNo(String mchId, String mchOrderNo) {
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andMchOrderNoEqualTo(mchOrderNo);
List<PayOrder> payOrderList = payOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(payOrderList) ? null : payOrderList.get(0);
}
public int baseUpdateStatus4Ing(String payOrderId, String channelOrderNo) {
PayOrder payOrder = new PayOrder();
payOrder.setStatus(PayConstant.PAY_STATUS_PAYING);
if(channelOrderNo != null) payOrder.setChannelOrderNo(channelOrderNo);
payOrder.setPaySuccTime(System.currentTimeMillis());
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_INIT);
return payOrderMapper.updateByExampleSelective(payOrder, example);
}
public int baseUpdateStatus4Success(String payOrderId) {
return baseUpdateStatus4Success(payOrderId, null);
}
public int baseUpdateStatus4Success(String payOrderId, String channelOrderNo) {
PayOrder payOrder = new PayOrder();
payOrder.setPayOrderId(payOrderId);
payOrder.setStatus(PayConstant.PAY_STATUS_SUCCESS);
payOrder.setPaySuccTime(System.currentTimeMillis());
if(StringUtils.isNotBlank(channelOrderNo)) payOrder.setChannelOrderNo(channelOrderNo);
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_PAYING);
return payOrderMapper.updateByExampleSelective(payOrder, example);
}
public int baseUpdateStatus4Complete(String payOrderId) {
PayOrder payOrder = new PayOrder();
payOrder.setPayOrderId(payOrderId);
payOrder.setStatus(PayConstant.PAY_STATUS_COMPLETE);
PayOrderExample example = new PayOrderExample();
PayOrderExample.Criteria criteria = example.createCriteria();
criteria.andPayOrderIdEqualTo(payOrderId);
criteria.andStatusEqualTo(PayConstant.PAY_STATUS_SUCCESS);
return payOrderMapper.updateByExampleSelective(payOrder, example);
}
public int baseUpdateNotify(String payOrderId, byte count) {
PayOrder newPayOrder = new PayOrder();
newPayOrder.setNotifyCount(count);
newPayOrder.setLastNotifyTime(System.currentTimeMillis());
newPayOrder.setPayOrderId(payOrderId);
return payOrderMapper.updateByPrimaryKeySelective(newPayOrder);
}
}
package org.xxpay.dubbo.service;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.dal.dao.mapper.RefundOrderMapper;
import org.xxpay.dal.dao.mapper.TransOrderMapper;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dal.dao.model.RefundOrderExample;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dal.dao.model.TransOrderExample;
import java.util.Date;
import java.util.List;
/**
* @author: dingzhiwei
* @date: 17/10/30
* @description:
*/
@Service
public class BaseService4RefundOrder extends BaseService{
@Autowired
private RefundOrderMapper refundOrderMapper;
public int baseCreateRefundOrder(RefundOrder refundOrder) {
return refundOrderMapper.insertSelective(refundOrder);
}
public RefundOrder baseSelectRefundOrder(String refundOrderId) {
return refundOrderMapper.selectByPrimaryKey(refundOrderId);
}
public RefundOrder baseSelectByMchIdAndRefundOrderId(String mchId, String refundOrderId) {
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andRefundOrderIdEqualTo(refundOrderId);
List<RefundOrder> refundOrderList = refundOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(refundOrderList) ? null : refundOrderList.get(0);
}
public RefundOrder baseSelectByMchIdAndMchRefundNo(String mchId, String mchRefundNo) {
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andMchRefundNoEqualTo(mchRefundNo);
List<RefundOrder> refundOrderList = refundOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(refundOrderList) ? null : refundOrderList.get(0);
}
public int baseUpdateStatus4Ing(String refundOrderId, String channelOrderNo) {
RefundOrder refundOrder = new RefundOrder();
refundOrder.setStatus(PayConstant.REFUND_STATUS_REFUNDING);
if(channelOrderNo != null) refundOrder.setChannelOrderNo(channelOrderNo);
refundOrder.setRefundSuccTime(new Date());
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andRefundOrderIdEqualTo(refundOrderId);
criteria.andStatusEqualTo(PayConstant.REFUND_STATUS_INIT);
return refundOrderMapper.updateByExampleSelective(refundOrder, example);
}
public int baseUpdateStatus4Success(String refundOrderId) {
return baseUpdateStatus4Success(refundOrderId, null);
}
public int baseUpdateStatus4Success(String refundOrderId, String channelOrderNo) {
RefundOrder refundOrder = new RefundOrder();
refundOrder.setRefundOrderId(refundOrderId);
refundOrder.setStatus(PayConstant.REFUND_STATUS_SUCCESS);
refundOrder.setResult(PayConstant.REFUND_RESULT_SUCCESS);
refundOrder.setRefundSuccTime(new Date());
if(StringUtils.isNotBlank(channelOrderNo)) refundOrder.setChannelOrderNo(channelOrderNo);
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andRefundOrderIdEqualTo(refundOrderId);
criteria.andStatusEqualTo(PayConstant.REFUND_STATUS_REFUNDING);
return refundOrderMapper.updateByExampleSelective(refundOrder, example);
}
public int baseUpdateStatus4Complete(String refundOrderId) {
RefundOrder refundOrder = new RefundOrder();
refundOrder.setRefundOrderId(refundOrderId);
refundOrder.setStatus(PayConstant.REFUND_STATUS_COMPLETE);
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andRefundOrderIdEqualTo(refundOrderId);
List values = CollectionUtils.arrayToList(new Byte[] {
PayConstant.REFUND_STATUS_SUCCESS, PayConstant.REFUND_STATUS_FAIL
});
criteria.andStatusIn(values);
return refundOrderMapper.updateByExampleSelective(refundOrder, example);
}
public int baseUpdateStatus4Fail(String refundOrderId, String channelErrCode, String channelErrMsg) {
RefundOrder refundOrder = new RefundOrder();
refundOrder.setStatus(PayConstant.REFUND_STATUS_FAIL);
refundOrder.setResult(PayConstant.REFUND_RESULT_FAIL);
if(channelErrCode != null) refundOrder.setChannelErrCode(channelErrCode);
if(channelErrMsg != null) refundOrder.setChannelErrMsg(channelErrMsg);
RefundOrderExample example = new RefundOrderExample();
RefundOrderExample.Criteria criteria = example.createCriteria();
criteria.andRefundOrderIdEqualTo(refundOrderId);
criteria.andStatusEqualTo(PayConstant.REFUND_STATUS_REFUNDING);
return refundOrderMapper.updateByExampleSelective(refundOrder, example);
}
}
package org.xxpay.dubbo.service;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.dal.dao.mapper.TransOrderMapper;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dal.dao.model.TransOrderExample;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
/**
* @author: dingzhiwei
* @date: 17/10/30
* @description:
*/
@Service
public class BaseService4TransOrder extends BaseService{
@Autowired
private TransOrderMapper transOrderMapper;
public int baseCreateTransOrder(TransOrder transOrder) {
return transOrderMapper.insertSelective(transOrder);
}
public TransOrder baseSelectTransOrder(String transOrderId) {
return transOrderMapper.selectByPrimaryKey(transOrderId);
}
public TransOrder baseSelectByMchIdAndTransOrderId(String mchId, String transOrderId) {
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andTransOrderIdEqualTo(transOrderId);
List<TransOrder> transOrderList = transOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(transOrderList) ? null : transOrderList.get(0);
}
public TransOrder baseSelectByMchIdAndMchTransNo(String mchId, String mchTransNo) {
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andMchIdEqualTo(mchId);
criteria.andMchTransNoEqualTo(mchTransNo);
List<TransOrder> transOrderList = transOrderMapper.selectByExample(example);
return CollectionUtils.isEmpty(transOrderList) ? null : transOrderList.get(0);
}
public int baseUpdateStatus4Ing(String transOrderId, String channelOrderNo) {
TransOrder transOrder = new TransOrder();
transOrder.setStatus(PayConstant.TRANS_STATUS_TRANING);
if(channelOrderNo != null) transOrder.setChannelOrderNo(channelOrderNo);
transOrder.setTransSuccTime(new Date());
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andTransOrderIdEqualTo(transOrderId);
List<Byte> list = new LinkedList<>();
list.add(PayConstant.TRANS_STATUS_INIT);
list.add(PayConstant.TRANS_STATUS_FAIL);
criteria.andStatusIn(list);
return transOrderMapper.updateByExampleSelective(transOrder, example);
}
public int baseUpdateStatus4Success(String transOrderId) {
return baseUpdateStatus4Success(transOrderId, null);
}
public int baseUpdateStatus4Success(String transOrderId, String channelOrderNo) {
TransOrder transOrder = new TransOrder();
transOrder.setTransOrderId(transOrderId);
transOrder.setStatus(PayConstant.TRANS_STATUS_SUCCESS);
transOrder.setResult(PayConstant.TRANS_RESULT_SUCCESS);
transOrder.setTransSuccTime(new Date());
if(StringUtils.isNotBlank(channelOrderNo)) transOrder.setChannelOrderNo(channelOrderNo);
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andTransOrderIdEqualTo(transOrderId);
criteria.andStatusEqualTo(PayConstant.TRANS_STATUS_TRANING);
return transOrderMapper.updateByExampleSelective(transOrder, example);
}
public int baseUpdateStatus4Complete(String transOrderId) {
TransOrder transOrder = new TransOrder();
transOrder.setTransOrderId(transOrderId);
transOrder.setStatus(PayConstant.TRANS_STATUS_COMPLETE);
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andTransOrderIdEqualTo(transOrderId);
List values = CollectionUtils.arrayToList(new Byte[] {
PayConstant.TRANS_STATUS_SUCCESS, PayConstant.TRANS_STATUS_FAIL
});
criteria.andStatusIn(values);
return transOrderMapper.updateByExampleSelective(transOrder, example);
}
public int baseUpdateStatus4Fail(String transOrderId, String channelErrCode, String channelErrMsg) {
TransOrder transOrder = new TransOrder();
transOrder.setStatus(PayConstant.TRANS_STATUS_FAIL);
transOrder.setResult(PayConstant.TRANS_RESULT_FAIL);
if(channelErrCode != null) transOrder.setChannelErrCode(channelErrCode);
if(channelErrMsg != null) transOrder.setChannelErrMsg(channelErrMsg);
TransOrderExample example = new TransOrderExample();
TransOrderExample.Criteria criteria = example.createCriteria();
criteria.andTransOrderIdEqualTo(transOrderId);
criteria.andStatusEqualTo(PayConstant.TRANS_STATUS_TRANING);
return transOrderMapper.updateByExampleSelective(transOrder, example);
}
}
......@@ -9,19 +9,17 @@ 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 org.apache.commons.lang3.ObjectUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.StringUtils;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.common.domain.BaseParam;
import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.JsonUtil;
import org.xxpay.common.util.MyLog;
import org.xxpay.common.util.ObjectValidUtil;
import org.xxpay.common.util.RpcUtil;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.PayChannel;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dubbo.api.service.INotifyPayService;
import org.xxpay.dubbo.service.Notify4BasePay;
import org.xxpay.dubbo.service.BaseNotify4MchPay;
import org.xxpay.dubbo.service.channel.alipay.AlipayConfig;
import org.xxpay.dubbo.service.channel.wechat.WxPayUtil;
......@@ -35,7 +33,7 @@ import java.util.Map;
* @description:
*/
@Service(version = "1.0.0")
public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPayService {
public class NotifyPayServiceImpl extends BaseNotify4MchPay implements INotifyPayService {
private static final MyLog _log = MyLog.getLog(NotifyPayServiceImpl.class);
......@@ -72,7 +70,7 @@ public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPaySe
payOrder = (PayOrder)payContext.get("payOrder");
byte payStatus = payOrder.getStatus(); // 0:订单生成,1:支付中,-1:支付失败,2:支付成功,3:业务处理完成,-2:订单过期
if (payStatus != PayConstant.PAY_STATUS_SUCCESS && payStatus != PayConstant.PAY_STATUS_COMPLETE) {
updatePayOrderRows = super.baseUpdateStatus4Success(payOrder.getPayOrderId());
updatePayOrderRows = super.baseUpdateStatus4Success(payOrder.getPayOrderId(), StrUtil.toString(params.get("trade_no"), null));
if (updatePayOrderRows != 1) {
_log.error("{}更新支付状态失败,将payOrderId={},更新payStatus={}失败", logPrefix, payOrder.getPayOrderId(), PayConstant.PAY_STATUS_SUCCESS);
_log.info("{}响应给支付宝结果:{}", logPrefix, PayConstant.RETURN_ALIPAY_VALUE_FAIL);
......@@ -87,7 +85,7 @@ public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPaySe
_log.info("{}响应给支付宝结果:{}", logPrefix, PayConstant.RETURN_ALIPAY_VALUE_SUCCESS);
return RpcUtil.createBizResult(baseParam, PayConstant.RETURN_ALIPAY_VALUE_SUCCESS);
}
doNotify(payOrder);
doNotify(payOrder, true);
_log.info("====== 完成处理支付宝支付回调通知 ======");
return RpcUtil.createBizResult(baseParam, PayConstant.RETURN_ALIPAY_VALUE_SUCCESS);
}
......@@ -126,7 +124,7 @@ public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPaySe
// 处理订单
byte payStatus = payOrder.getStatus(); // 0:订单生成,1:支付中,-1:支付失败,2:支付成功,3:业务处理完成,-2:订单过期
if (payStatus != PayConstant.PAY_STATUS_SUCCESS && payStatus != PayConstant.PAY_STATUS_COMPLETE) {
int updatePayOrderRows = super.baseUpdateStatus4Success(payOrder.getPayOrderId());
int updatePayOrderRows = super.baseUpdateStatus4Success(payOrder.getPayOrderId(), result.getTransactionId());
if (updatePayOrderRows != 1) {
_log.error("{}更新支付状态失败,将payOrderId={},更新payStatus={}失败", logPrefix, payOrder.getPayOrderId(), PayConstant.PAY_STATUS_SUCCESS);
return RpcUtil.createBizResult(baseParam, WxPayNotifyResponse.fail("处理订单失败"));
......@@ -135,7 +133,7 @@ public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPaySe
payOrder.setStatus(PayConstant.PAY_STATUS_SUCCESS);
}
// 业务系统后端通知
doNotify(payOrder);
doNotify(payOrder, true);
_log.info("====== 完成处理微信支付回调通知 ======");
return RpcUtil.createBizResult(baseParam, WxPayNotifyResponse.success("OK"));
} catch (WxPayException e) {
......@@ -168,7 +166,7 @@ public class NotifyPayServiceImpl extends Notify4BasePay implements INotifyPaySe
if(payOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
try {
// 发送业务支付通知
super.doNotify(payOrder);
super.doNotify(payOrder, false);
}catch (Exception e) {
return RpcUtil.createBizResult(baseParam, 0);
}
......
......@@ -6,14 +6,12 @@ import com.alibaba.fastjson.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.domain.AlipayTradeAppPayModel;
import com.alipay.api.domain.AlipayTradePagePayModel;
import com.alipay.api.domain.AlipayTradePrecreateModel;
import com.alipay.api.domain.AlipayTradeWapPayModel;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.api.request.AlipayTradePrecreateRequest;
import com.alipay.api.request.AlipayTradeWapPayRequest;
import com.alipay.api.domain.*;
import com.alipay.api.request.*;
import com.alipay.api.response.AlipayFundTransOrderQueryResponse;
import com.alipay.api.response.AlipayFundTransToaccountTransferResponse;
import com.alipay.api.response.AlipayTradeFastpayRefundQueryResponse;
import com.alipay.api.response.AlipayTradeRefundResponse;
import org.apache.commons.lang3.ObjectUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -23,10 +21,16 @@ import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.PayChannel;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dubbo.api.service.IPayChannel4AliService;
import org.xxpay.dubbo.service.BaseService;
import org.xxpay.dubbo.service.BaseService4PayOrder;
import org.xxpay.dubbo.service.BaseService4RefundOrder;
import org.xxpay.dubbo.service.BaseService4TransOrder;
import org.xxpay.dubbo.service.channel.alipay.AlipayConfig;
import java.util.HashMap;
import java.util.Map;
/**
......@@ -35,13 +39,22 @@ import java.util.Map;
* @description:
*/
@Service(version = "1.0.0")
public class PayChannel4AliServiceImpl extends BaseService implements IPayChannel4AliService {
public class PayChannel4AliServiceImpl implements IPayChannel4AliService {
private static final MyLog _log = MyLog.getLog(PayChannel4AliServiceImpl.class);
@Autowired
private AlipayConfig alipayConfig;
@Autowired
private BaseService4PayOrder baseService4PayOrder;
@Autowired
private BaseService4TransOrder baseService4TransOrder;
@Autowired
private BaseService4RefundOrder baseService4RefundOrder;
@Override
public Map doAliPayWapReq(String jsonParam) {
String logPrefix = "【支付宝WAP支付下单】";
......@@ -52,7 +65,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject payOrderObj = baseParam.isNullValue("payOrder") ? null : JSONObject.parseObject(bizParamMap.get("payOrder").toString());
PayOrder payOrder = BeanConvertUtils.map2Bean(payOrderObj, PayOrder.class);
PayOrder payOrder = JSON.toJavaObject(payOrderObj, PayOrder.class);
if (ObjectValidUtil.isInvalid(payOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
......@@ -60,7 +73,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
String payOrderId = payOrder.getPayOrderId();
String mchId = payOrder.getMchId();
String channelId = payOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradeWapPayRequest alipay_request = new AlipayTradeWapPayRequest();
......@@ -95,7 +108,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
e.printStackTrace();
}
_log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
super.baseUpdateStatus4Ing(payOrderId, null);
baseService4PayOrder.baseUpdateStatus4Ing(payOrderId, null);
_log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
_log.info("###### 商户统一下单处理完成 ######");
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
......@@ -114,7 +127,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject payOrderObj = baseParam.isNullValue("payOrder") ? null : JSONObject.parseObject(bizParamMap.get("payOrder").toString());
PayOrder payOrder = BeanConvertUtils.map2Bean(payOrderObj, PayOrder.class);
PayOrder payOrder = JSON.toJavaObject(payOrderObj, PayOrder.class);
if (ObjectValidUtil.isInvalid(payOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
......@@ -122,7 +135,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
String payOrderId = payOrder.getPayOrderId();
String mchId = payOrder.getMchId();
String channelId = payOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradePagePayRequest alipay_request = new AlipayTradePagePayRequest();
......@@ -160,7 +173,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
e.printStackTrace();
}
_log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
super.baseUpdateStatus4Ing(payOrderId, null);
baseService4PayOrder.baseUpdateStatus4Ing(payOrderId, null);
_log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
_log.info("###### 商户统一下单处理完成 ######");
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
......@@ -179,7 +192,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject payOrderObj = baseParam.isNullValue("payOrder") ? null : JSONObject.parseObject(bizParamMap.get("payOrder").toString());
PayOrder payOrder = BeanConvertUtils.map2Bean(payOrderObj, PayOrder.class);
PayOrder payOrder = JSON.toJavaObject(payOrderObj, PayOrder.class);
if (ObjectValidUtil.isInvalid(payOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
......@@ -187,7 +200,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
String payOrderId = payOrder.getPayOrderId();
String mchId = payOrder.getMchId();
String channelId = payOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradeAppPayRequest alipay_request = new AlipayTradeAppPayRequest();
......@@ -209,7 +222,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
} catch (AlipayApiException e) {
e.printStackTrace();
}
super.baseUpdateStatus4Ing(payOrderId, null);
baseService4PayOrder.baseUpdateStatus4Ing(payOrderId, null);
_log.info("{}生成请求支付宝数据,payParams={}", logPrefix, payParams);
_log.info("###### 商户统一下单处理完成 ######");
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
......@@ -228,7 +241,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject payOrderObj = baseParam.isNullValue("payOrder") ? null : JSONObject.parseObject(bizParamMap.get("payOrder").toString());
PayOrder payOrder = BeanConvertUtils.map2Bean(payOrderObj, PayOrder.class);
PayOrder payOrder = JSON.toJavaObject(payOrderObj, PayOrder.class);
if (ObjectValidUtil.isInvalid(payOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
......@@ -236,7 +249,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
String payOrderId = payOrder.getPayOrderId();
String mchId = payOrder.getMchId();
String channelId = payOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradePrecreateRequest alipay_request = new AlipayTradePrecreateRequest();
......@@ -275,7 +288,7 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
e.printStackTrace();
}
_log.info("{}生成跳转路径:payUrl={}", logPrefix, payUrl);
super.baseUpdateStatus4Ing(payOrderId, null);
baseService4PayOrder.baseUpdateStatus4Ing(payOrderId, null);
_log.info("{}生成请求支付宝数据,req={}", logPrefix, alipay_request.getBizModel());
_log.info("###### 商户统一下单处理完成 ######");
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
......@@ -284,4 +297,201 @@ public class PayChannel4AliServiceImpl extends BaseService implements IPayChanne
return RpcUtil.createBizResult(baseParam, map);
}
/**
* 支付宝转账,文档:https://docs.open.alipay.com/api_28/alipay.fund.trans.toaccount.transfer
* @param jsonParam
* @return
*/
@Override
public Map doAliTransReq(String jsonParam) {
String logPrefix = "【支付宝转账】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject transOrderObj = baseParam.isNullValue("transOrder") ? null : JSONObject.parseObject(bizParamMap.get("transOrder").toString());
TransOrder transOrder = JSON.toJavaObject(transOrderObj, TransOrder.class);
if (ObjectValidUtil.isInvalid(transOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String transOrderId = transOrder.getTransOrderId();
String mchId = transOrder.getMchId();
String channelId = transOrder.getChannelId();
PayChannel payChannel = baseService4TransOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayFundTransToaccountTransferRequest request = new AlipayFundTransToaccountTransferRequest();
AlipayFundTransToaccountTransferModel model = new AlipayFundTransToaccountTransferModel();
model.setOutBizNo(transOrderId);
model.setPayeeType("ALIPAY_LOGONID"); // 收款方账户类型
model.setPayeeAccount(transOrder.getChannelUser()); // 收款方账户
model.setAmount(AmountUtil.convertCent2Dollar(transOrder.getAmount().toString()));
model.setPayerShowName("支付转账");
model.setPayeeRealName(transOrder.getUserName());
model.setRemark(transOrder.getRemarkInfo());
request.setBizModel(model);
Map<String, Object> map = new HashMap<>();
map.put("transOrderId", transOrderId);
map.put("isSuccess", false);
try {
AlipayFundTransToaccountTransferResponse response = client.execute(request);
if(response.isSuccess()) {
map.put("isSuccess", true);
map.put("channelOrderNo", response.getOrderId());
}else {
//出现业务错误
_log.info("{}返回失败", logPrefix);
_log.info("sub_code:{},sub_msg:{}", response.getSubCode(), response.getSubMsg());
map.put("channelErrCode", response.getSubCode());
map.put("channelErrMsg", response.getSubMsg());
}
} catch (AlipayApiException e) {
_log.error(e, "");
}
return RpcUtil.createBizResult(baseParam, map);
}
@Override
public Map getAliTransReq(String jsonParam) {
String logPrefix = "【支付宝转账查询】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject transOrderObj = baseParam.isNullValue("transOrder") ? null : JSONObject.parseObject(bizParamMap.get("transOrder").toString());
TransOrder transOrder = JSON.toJavaObject(transOrderObj, TransOrder.class);
if (ObjectValidUtil.isInvalid(transOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String transOrderId = transOrder.getTransOrderId();
String mchId = transOrder.getMchId();
String channelId = transOrder.getChannelId();
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayFundTransOrderQueryRequest request = new AlipayFundTransOrderQueryRequest();
AlipayFundTransOrderQueryModel model = new AlipayFundTransOrderQueryModel();
model.setOutBizNo(transOrderId);
model.setOrderId(transOrder.getChannelOrderNo());
request.setBizModel(model);
Map<String, Object> map = XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_SUCCESS, null);
map.put("transOrderId", transOrderId);
try {
AlipayFundTransOrderQueryResponse response = client.execute(request);
if(response.isSuccess()){
map.putAll((Map) JSON.toJSON(response));
map.put("isSuccess", true);
}else {
_log.info("{}返回失败", logPrefix);
_log.info("sub_code:{},sub_msg:{}", response.getSubCode(), response.getSubMsg());
map.put("channelErrCode", response.getSubCode());
map.put("channelErrMsg", response.getSubMsg());
}
} catch (AlipayApiException e) {
_log.error(e, "");
}
return RpcUtil.createBizResult(baseParam, map);
}
@Override
public Map doAliRefundReq(String jsonParam) {
String logPrefix = "【支付宝退款】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
RefundOrder refundOrder = JSON.toJavaObject(refundOrderObj, RefundOrder.class);
if (ObjectValidUtil.isInvalid(refundOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String refundOrderId = refundOrder.getRefundOrderId();
String mchId = refundOrder.getMchId();
String channelId = refundOrder.getChannelId();
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradeRefundRequest request = new AlipayTradeRefundRequest();
AlipayTradeRefundModel model = new AlipayTradeRefundModel();
model.setOutTradeNo(refundOrder.getPayOrderId());
model.setTradeNo(refundOrder.getChannelPayOrderNo());
model.setOutRequestNo(refundOrderId);
model.setRefundAmount(AmountUtil.convertCent2Dollar(refundOrder.getRefundAmount().toString()));
model.setRefundReason("正常退款");
request.setBizModel(model);
Map<String, Object> map = new HashMap<>();
map.put("refundOrderId", refundOrderId);
map.put("isSuccess", false);
try {
AlipayTradeRefundResponse response = client.execute(request);
if(response.isSuccess()){
map.put("isSuccess", true);
map.put("channelOrderNo", response.getTradeNo());
}else {
_log.info("{}返回失败", logPrefix);
_log.info("sub_code:{},sub_msg:{}", response.getSubCode(), response.getSubMsg());
map.put("channelErrCode", response.getSubCode());
map.put("channelErrMsg", response.getSubMsg());
}
} catch (AlipayApiException e) {
_log.error(e, "");
}
return RpcUtil.createBizResult(baseParam, map);
}
@Override
public Map getAliRefundReq(String jsonParam) {
String logPrefix = "【支付宝退款查询】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
RefundOrder refundOrder = JSON.toJavaObject(refundOrderObj, RefundOrder.class);
if (ObjectValidUtil.isInvalid(refundOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String refundOrderId = refundOrder.getRefundOrderId();
String mchId = refundOrder.getMchId();
String channelId = refundOrder.getChannelId();
PayChannel payChannel = baseService4PayOrder.baseSelectPayChannel(mchId, channelId);
alipayConfig.init(payChannel.getParam());
AlipayClient client = new DefaultAlipayClient(alipayConfig.getUrl(), alipayConfig.getApp_id(), alipayConfig.getRsa_private_key(), AlipayConfig.FORMAT, AlipayConfig.CHARSET, alipayConfig.getAlipay_public_key(), AlipayConfig.SIGNTYPE);
AlipayTradeFastpayRefundQueryRequest request = new AlipayTradeFastpayRefundQueryRequest();
AlipayTradeFastpayRefundQueryModel model = new AlipayTradeFastpayRefundQueryModel();
model.setOutTradeNo(refundOrder.getPayOrderId());
model.setTradeNo(refundOrder.getChannelPayOrderNo());
model.setOutRequestNo(refundOrderId);
request.setBizModel(model);
Map<String, Object> map = new HashMap<>();
map.put("refundOrderId", refundOrderId);
try {
AlipayTradeFastpayRefundQueryResponse response = client.execute(request);
if(response.isSuccess()){
map.putAll((Map) JSON.toJSON(response));
map.put("isSuccess", true);
}else {
_log.info("{}返回失败", logPrefix);
_log.info("sub_code:{},sub_msg:{}", response.getSubCode(), response.getSubMsg());
map.put("channelErrCode", response.getSubCode());
map.put("channelErrMsg", response.getSubMsg());
}
} catch (AlipayApiException e) {
_log.error(e, "");
}
return RpcUtil.createBizResult(baseParam, map);
}
}
......@@ -3,22 +3,26 @@ package org.xxpay.dubbo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.github.binarywang.wxpay.bean.request.WxPayUnifiedOrderRequest;
import com.github.binarywang.wxpay.bean.result.WxPayUnifiedOrderResult;
import com.github.binarywang.wxpay.bean.request.*;
import com.github.binarywang.wxpay.bean.result.*;
import com.github.binarywang.wxpay.config.WxPayConfig;
import com.github.binarywang.wxpay.constant.WxPayConstants;
import com.github.binarywang.wxpay.exception.WxPayException;
import com.github.binarywang.wxpay.service.WxPayService;
import com.github.binarywang.wxpay.service.impl.WxPayServiceImpl;
import com.github.binarywang.wxpay.util.SignUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.xxpay.common.constant.PayConstant;
import org.xxpay.common.domain.BaseParam;
import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.PayChannel;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dubbo.api.service.IPayChannel4WxService;
import org.xxpay.dubbo.service.BaseService;
import org.xxpay.dubbo.service.BaseService4PayOrder;
import org.xxpay.dubbo.service.channel.wechat.WxPayProperties;
import org.xxpay.dubbo.service.channel.wechat.WxPayUtil;
......@@ -41,6 +45,9 @@ public class PayChannel4WxServiceImpl extends BaseService implements IPayChannel
@Resource
private WxPayProperties wxPayProperties;
@Autowired
private BaseService4PayOrder baseService4PayOrder;
public Map doWxPayReq(String jsonParam) {
String logPrefix = "【微信支付统一下单】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
......@@ -52,7 +59,7 @@ public class PayChannel4WxServiceImpl extends BaseService implements IPayChannel
}
JSONObject payOrderObj = baseParam.isNullValue("payOrder") ? null : JSONObject.parseObject(bizParamMap.get("payOrder").toString());
String tradeType = baseParam.isNullValue("tradeType") ? null : bizParamMap.get("tradeType").toString();
PayOrder payOrder = BeanConvertUtils.map2Bean(payOrderObj, PayOrder.class);
PayOrder payOrder = JSON.toJavaObject(payOrderObj, PayOrder.class);
if (ObjectValidUtil.isInvalid(payOrder, tradeType)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
......@@ -72,7 +79,7 @@ public class PayChannel4WxServiceImpl extends BaseService implements IPayChannel
Map<String, Object> map = new HashMap<>();
map.put("payOrderId", payOrderId);
map.put("prepayId", wxPayUnifiedOrderResult.getPrepayId());
int result = super.baseUpdateStatus4Ing(payOrderId, wxPayUnifiedOrderResult.getPrepayId());
int result = baseService4PayOrder.baseUpdateStatus4Ing(payOrderId, null);
_log.info("更新第三方支付订单号:payOrderId={},prepayId={},result={}", payOrderId, wxPayUnifiedOrderResult.getPrepayId(), result);
switch (tradeType) {
case PayConstant.WxConstant.TRADE_TYPE_NATIVE : {
......@@ -132,16 +139,206 @@ public class PayChannel4WxServiceImpl extends BaseService implements IPayChannel
_log.info("{}下单返回失败", logPrefix);
_log.info("err_code:{}", e.getErrCode());
_log.info("err_code_des:{}", e.getErrCodeDes());
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}catch (Exception e) {
_log.error(e, "微信支付统一下单异常");
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}
@Override
public Map doWxTransReq(String jsonParam) {
String logPrefix = "【微信企业付款】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
try{
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject transOrderObj = baseParam.isNullValue("transOrder") ? null : JSONObject.parseObject(bizParamMap.get("transOrder").toString());
TransOrder transOrder = JSON.toJavaObject(transOrderObj, TransOrder.class);
if (ObjectValidUtil.isInvalid(transOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String mchId = transOrder.getMchId();
String channelId = transOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
WxPayConfig wxPayConfig = WxPayUtil.getWxPayConfig(payChannel.getParam(), "", wxPayProperties.getCertRootPath(), wxPayProperties.getNotifyUrl());
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
WxEntPayRequest wxEntPayRequest = buildWxEntPayRequest(transOrder, wxPayConfig);
String transOrderId = transOrder.getTransOrderId();
Map<String, Object> map = new HashMap<>();
WxEntPayResult result;
try {
result = wxPayService.entPay(wxEntPayRequest);
_log.info("{} >>> 转账成功", logPrefix);
map.put("transOrderId", transOrderId);
map.put("isSuccess", true);
map.put("channelOrderNo", result.getPaymentNo());
} catch (WxPayException e) {
_log.error(e, "转账失败");
//出现业务错误
_log.info("{}转账返回失败", logPrefix);
_log.info("err_code:{}", e.getErrCode());
_log.info("err_code_des:{}", e.getErrCodeDes());
map.put("transOrderId", transOrderId);
map.put("isSuccess", false);
map.put("channelErrCode", e.getErrCode());
map.put("channelErrMsg", e.getErrCodeDes());
}
return RpcUtil.createBizResult(baseParam, map);
}catch (Exception e) {
_log.error(e, "微信转账异常");
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}
// return XXPayUtil.makeRetData(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_SUCCESS, "", PayConstant.RETURN_VALUE_FAIL, "0111", "调用微信支付失败," + e.getErrCode() + ":" + e.getErrCodeDes()), resKey);
@Override
public Map getWxTransReq(String jsonParam) {
String logPrefix = "【微信企业付款查询】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
try{
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject transOrderObj = baseParam.isNullValue("transOrder") ? null : JSONObject.parseObject(bizParamMap.get("transOrder").toString());
TransOrder transOrder = JSON.toJavaObject(transOrderObj, TransOrder.class);
if (ObjectValidUtil.isInvalid(transOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String mchId = transOrder.getMchId();
String channelId = transOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
WxPayConfig wxPayConfig = WxPayUtil.getWxPayConfig(payChannel.getParam(), "", wxPayProperties.getCertRootPath(), wxPayProperties.getNotifyUrl());
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
String transOrderId = transOrder.getTransOrderId();
Map<String, Object> map = new HashMap<>();
WxEntPayQueryResult result;
try {
result = wxPayService.queryEntPay(transOrderId);
_log.info("{} >>> 成功", logPrefix);
map.putAll((Map) JSON.toJSON(result));
map.put("isSuccess", true);
map.put("transOrderId", transOrderId);
} catch (WxPayException e) {
_log.error(e, "失败");
//出现业务错误
_log.info("{}返回失败", logPrefix);
_log.info("err_code:{}", e.getErrCode());
_log.info("err_code_des:{}", e.getErrCodeDes());
map.put("channelErrCode", e.getErrCode());
map.put("channelErrMsg", e.getErrCodeDes());
map.put("isSuccess", false);
}
return RpcUtil.createBizResult(baseParam, map);
}catch (Exception e) {
_log.error(e, "微信支付统一下单异常");
_log.error(e, "微信企业付款查询异常");
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}
//return XXPayUtil.makeRetFail(XXPayUtil.makeRetMap(PayConstant.RETURN_VALUE_FAIL, "", PayConstant.RETURN_VALUE_FAIL, PayEnum.ERR_0001));
@Override
public Map doWxRefundReq(String jsonParam) {
String logPrefix = "【微信退款】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
try{
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
RefundOrder refundOrder = JSON.toJavaObject(refundOrderObj, RefundOrder.class);
if (ObjectValidUtil.isInvalid(refundOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String mchId = refundOrder.getMchId();
String channelId = refundOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
WxPayConfig wxPayConfig = WxPayUtil.getWxPayConfig(payChannel.getParam(), "", wxPayProperties.getCertRootPath(), wxPayProperties.getNotifyUrl());
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
WxPayRefundRequest wxPayRefundRequest = buildWxPayRefundRequest(refundOrder, wxPayConfig);
String refundOrderId = refundOrder.getRefundOrderId();
Map<String, Object> map = new HashMap<>();
WxPayRefundResult result;
try {
result = wxPayService.refund(wxPayRefundRequest);
_log.info("{} >>> 下单成功", logPrefix);
map.put("isSuccess", true);
map.put("refundOrderId", refundOrderId);
map.put("channelOrderNo", result.getRefundId());
} catch (WxPayException e) {
_log.error(e, "下单失败");
//出现业务错误
_log.info("{}下单返回失败", logPrefix);
_log.info("err_code:{}", e.getErrCode());
_log.info("err_code_des:{}", e.getErrCodeDes());
map.put("isSuccess", false);
map.put("channelErrCode", e.getErrCode());
map.put("channelErrMsg", e.getErrCodeDes());
}
return RpcUtil.createBizResult(baseParam, map);
}catch (Exception e) {
_log.error(e, "微信退款异常");
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}
@Override
public Map getWxRefundReq(String jsonParam) {
String logPrefix = "【微信退款查询】";
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
try{
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
RefundOrder refundOrder = JSON.toJavaObject(refundOrderObj, RefundOrder.class);
if (ObjectValidUtil.isInvalid(refundOrder)) {
_log.warn("{}失败, {}. jsonParam={}", logPrefix, RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
String mchId = refundOrder.getMchId();
String channelId = refundOrder.getChannelId();
PayChannel payChannel = super.baseSelectPayChannel(mchId, channelId);
WxPayConfig wxPayConfig = WxPayUtil.getWxPayConfig(payChannel.getParam(), "", wxPayProperties.getCertRootPath(), wxPayProperties.getNotifyUrl());
WxPayService wxPayService = new WxPayServiceImpl();
wxPayService.setConfig(wxPayConfig);
String refundOrderId = refundOrder.getRefundOrderId();
Map<String, Object> map = new HashMap<>();
WxPayRefundQueryResult result;
try {
result = wxPayService.refundQuery(refundOrder.getChannelPayOrderNo(), refundOrder.getPayOrderId(), refundOrder.getRefundOrderId(), refundOrder.getChannelOrderNo());
_log.info("{} >>> 成功", logPrefix);
map.putAll((Map) JSON.toJSON(result));
map.put("isSuccess", true);
map.put("refundOrderId", refundOrderId);
} catch (WxPayException e) {
_log.error(e, "失败");
//出现业务错误
_log.info("{}返回失败", logPrefix);
_log.info("err_code:{}", e.getErrCode());
_log.info("err_code_des:{}", e.getErrCodeDes());
map.put("channelErrCode", e.getErrCode());
map.put("channelErrMsg", e.getErrCodeDes());
map.put("isSuccess", false);
}
return RpcUtil.createBizResult(baseParam, map);
}catch (Exception e) {
_log.error(e, "微信退款查询异常");
return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_WX_PAY_CREATE_FAIL);
}
}
......@@ -192,7 +389,49 @@ public class PayChannel4WxServiceImpl extends BaseService implements IPayChannel
request.setLimitPay(limitPay);
request.setOpenid(openId);
request.setSceneInfo(sceneInfo);
return request;
}
/**
* 构建微信企业付款请求数据
* @param transOrder
* @param wxPayConfig
* @return
*/
WxEntPayRequest buildWxEntPayRequest(TransOrder transOrder, WxPayConfig wxPayConfig) {
// 微信企业付款请求对象
WxEntPayRequest request = new WxEntPayRequest();
request.setAmount(transOrder.getAmount().intValue()); // 金额,单位分
String checkName = "NO_CHECK";
if(transOrder.getExtra() != null) checkName = JSON.parseObject(transOrder.getExtra()).getString("checkName");
request.setCheckName(checkName);
request.setDescription(transOrder.getRemarkInfo());
request.setReUserName(transOrder.getUserName());
request.setPartnerTradeNo(transOrder.getTransOrderId());
request.setDeviceInfo(transOrder.getDevice());
request.setSpbillCreateIp(transOrder.getClientIp());
request.setOpenid(transOrder.getChannelUser());
return request;
}
/**
* 构建微信退款请求数据
* @param refundOrder
* @param wxPayConfig
* @return
*/
WxPayRefundRequest buildWxPayRefundRequest(RefundOrder refundOrder, WxPayConfig wxPayConfig) {
// 微信退款请求对象
WxPayRefundRequest request = new WxPayRefundRequest();
request.setTransactionId(refundOrder.getChannelPayOrderNo());
request.setOutTradeNo(refundOrder.getPayOrderId());
request.setDeviceInfo(refundOrder.getDevice());
request.setOutRefundNo(refundOrder.getRefundOrderId());
request.setRefundDesc(refundOrder.getRemarkInfo());
request.setRefundFee(refundOrder.getRefundAmount().intValue());
request.setRefundFeeType("CNY");
request.setTotalFee(refundOrder.getPayAmount().intValue());
return request;
}
}
......@@ -7,7 +7,7 @@ import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.PayOrder;
import org.xxpay.dubbo.api.service.IPayOrderService;
import org.xxpay.dubbo.service.BaseService;
import org.xxpay.dubbo.service.BaseService4PayOrder;
import java.util.Map;
......@@ -17,12 +17,12 @@ import java.util.Map;
* @description:
*/
@Service(version = "1.0.0")
public class PayOrderServiceImpl extends BaseService implements IPayOrderService {
public class PayOrderServiceImpl extends BaseService4PayOrder implements IPayOrderService {
private static final MyLog _log = MyLog.getLog(PayOrderServiceImpl.class);
@Override
public Map createPayOrder(String jsonParam) {
public Map create(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
......@@ -44,7 +44,7 @@ public class PayOrderServiceImpl extends BaseService implements IPayOrderService
}
@Override
public Map selectPayOrder(String jsonParam) {
public Map select(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
......@@ -63,7 +63,7 @@ public class PayOrderServiceImpl extends BaseService implements IPayOrderService
}
@Override
public Map selectPayOrderByMchIdAndPayOrderId(String jsonParam) {
public Map selectByMchIdAndPayOrderId(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
......@@ -76,14 +76,14 @@ public class PayOrderServiceImpl extends BaseService implements IPayOrderService
_log.warn("根据商户号和支付订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
PayOrder payOrder = super.baseSelectPayOrderByMchIdAndPayOrderId(mchId, payOrderId);
PayOrder payOrder = super.baseSelectByMchIdAndPayOrderId(mchId, payOrderId);
if(payOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(payOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map selectPayOrderByMchIdAndMchOrderNo(String jsonParam) {
public Map selectByMchIdAndMchOrderNo(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
......@@ -96,7 +96,7 @@ public class PayOrderServiceImpl extends BaseService implements IPayOrderService
_log.warn("根据商户号和商户订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
PayOrder payOrder = super.baseSelectPayOrderByMchIdAndMchOrderNo(mchId, mchOrderNo);
PayOrder payOrder = super.baseSelectByMchIdAndMchOrderNo(mchId, mchOrderNo);
if(payOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(payOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
......
package org.xxpay.dubbo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.xxpay.common.domain.BaseParam;
import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.RefundOrder;
import org.xxpay.dubbo.api.service.IRefundOrderService;
import org.xxpay.dubbo.service.BaseService4RefundOrder;
import org.xxpay.dubbo.service.mq.Mq4RefundNotify;
import java.util.Map;
/**
* @author: dingzhiwei
* @date: 17/10/30
* @description:
*/
@Service(version = "1.0.0")
public class RefundOrderServiceImpl extends BaseService4RefundOrder implements IRefundOrderService {
private static final MyLog _log = MyLog.getLog(RefundOrderServiceImpl.class);
@Autowired
private Mq4RefundNotify mq4RefundNotify;
@Override
public Map create(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("新增退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject refundOrderObj = baseParam.isNullValue("refundOrder") ? null : JSONObject.parseObject(bizParamMap.get("refundOrder").toString());
if(refundOrderObj == null) {
_log.warn("新增退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
RefundOrder refundOrder = BeanConvertUtils.map2Bean(refundOrderObj, RefundOrder.class);
if(refundOrder == null) {
_log.warn("新增退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseCreateRefundOrder(refundOrder);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map select(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据退款订单号查询退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String refundOrderId = baseParam.isNullValue("refundOrderId") ? null : bizParamMap.get("refundOrderId").toString();
if (ObjectValidUtil.isInvalid(refundOrderId)) {
_log.warn("根据退款订单号查询退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
RefundOrder refundOrder = super.baseSelectRefundOrder(refundOrderId);
if(refundOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(refundOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map selectByMchIdAndRefundOrderId(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据商户号和退款订单号查询退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String mchId = baseParam.isNullValue("mchId") ? null : bizParamMap.get("mchId").toString();
String refundOrderId = baseParam.isNullValue("refundOrderId") ? null : bizParamMap.get("refundOrderId").toString();
if (ObjectValidUtil.isInvalid(mchId, refundOrderId)) {
_log.warn("根据商户号和退款订单号查询退款订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
RefundOrder refundOrder = super.baseSelectByMchIdAndRefundOrderId(mchId, refundOrderId);
if(refundOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(refundOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map selectByMchIdAndMchRefundNo(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据商户号和商户订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String mchId = baseParam.isNullValue("mchId") ? null : bizParamMap.get("mchId").toString();
String mchRefundNo = baseParam.isNullValue("mchRefundNo") ? null : bizParamMap.get("mchRefundNo").toString();
if (ObjectValidUtil.isInvalid(mchId, mchRefundNo)) {
_log.warn("根据商户号和商户订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
RefundOrder refundOrder = super.baseSelectByMchIdAndMchRefundNo(mchId, mchRefundNo);
if(refundOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(refundOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map updateStatus4Ing(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String refundOrderId = baseParam.isNullValue("refundOrderId") ? null : bizParamMap.get("refundOrderId").toString();
String channelOrderNo = baseParam.isNullValue("channelOrderNo") ? null : bizParamMap.get("channelOrderNo").toString();
if (ObjectValidUtil.isInvalid(refundOrderId)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Ing(refundOrderId, channelOrderNo);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map updateStatus4Success(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String refundOrderId = baseParam.isNullValue("refundOrderId") ? null : bizParamMap.get("refundOrderId").toString();
if (ObjectValidUtil.isInvalid(refundOrderId)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Success(refundOrderId);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map updateStatus4Complete(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String refundOrderId = baseParam.isNullValue("refundOrderId") ? null : bizParamMap.get("refundOrderId").toString();
if (ObjectValidUtil.isInvalid(refundOrderId)) {
_log.warn("修改退款订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Complete(refundOrderId);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map sendRefundNotify(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("发送退款订单处理失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String msg = baseParam.isNullValue("msg") ? null : bizParamMap.get("msg").toString();
if (ObjectValidUtil.isInvalid(msg)) {
_log.warn("发送退款订单处理失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = 1;
try {
mq4RefundNotify.send(msg);
}catch (Exception e) {
_log.error(e, "");
result = 0;
}
return RpcUtil.createBizResult(baseParam, result);
}
}
package org.xxpay.dubbo.service.impl;
import com.alibaba.dubbo.config.annotation.Service;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.xxpay.common.domain.BaseParam;
import org.xxpay.common.enumm.RetEnum;
import org.xxpay.common.util.*;
import org.xxpay.dal.dao.model.TransOrder;
import org.xxpay.dubbo.api.service.ITransOrderService;
import org.xxpay.dubbo.service.BaseService4TransOrder;
import org.xxpay.dubbo.service.mq.Mq4TransNotify;
import java.util.Map;
/**
* @author: dingzhiwei
* @date: 17/10/30
* @description:
*/
@Service(version = "1.0.0")
public class TransOrderServiceImpl extends BaseService4TransOrder implements ITransOrderService {
private static final MyLog _log = MyLog.getLog(TransOrderServiceImpl.class);
@Autowired
private Mq4TransNotify mq4TransNotify;
@Override
public Map create(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("新增转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
JSONObject transOrderObj = baseParam.isNullValue("transOrder") ? null : JSONObject.parseObject(bizParamMap.get("transOrder").toString());
if(transOrderObj == null) {
_log.warn("新增转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
TransOrder transOrder = BeanConvertUtils.map2Bean(transOrderObj, TransOrder.class);
if(transOrder == null) {
_log.warn("新增转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseCreateTransOrder(transOrder);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map select(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据转账订单号查询转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String transOrderId = baseParam.isNullValue("transOrderId") ? null : bizParamMap.get("transOrderId").toString();
if (ObjectValidUtil.isInvalid(transOrderId)) {
_log.warn("根据转账订单号查询转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
TransOrder transOrder = super.baseSelectTransOrder(transOrderId);
if(transOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(transOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map selectByMchIdAndTransOrderId(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据商户号和转账订单号查询转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String mchId = baseParam.isNullValue("mchId") ? null : bizParamMap.get("mchId").toString();
String transOrderId = baseParam.isNullValue("transOrderId") ? null : bizParamMap.get("transOrderId").toString();
if (ObjectValidUtil.isInvalid(mchId, transOrderId)) {
_log.warn("根据商户号和转账订单号查询转账订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
TransOrder transOrder = super.baseSelectByMchIdAndTransOrderId(mchId, transOrderId);
if(transOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(transOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map selectByMchIdAndMchTransNo(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("根据商户号和商户订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String mchId = baseParam.isNullValue("mchId") ? null : bizParamMap.get("mchId").toString();
String mchTransNo = baseParam.isNullValue("mchTransNo") ? null : bizParamMap.get("mchTransNo").toString();
if (ObjectValidUtil.isInvalid(mchId, mchTransNo)) {
_log.warn("根据商户号和商户订单号查询支付订单失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
TransOrder transOrder = super.baseSelectByMchIdAndMchTransNo(mchId, mchTransNo);
if(transOrder == null) return RpcUtil.createFailResult(baseParam, RetEnum.RET_BIZ_DATA_NOT_EXISTS);
String jsonResult = JsonUtil.object2Json(transOrder);
return RpcUtil.createBizResult(baseParam, jsonResult);
}
@Override
public Map updateStatus4Ing(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String transOrderId = baseParam.isNullValue("transOrderId") ? null : bizParamMap.get("transOrderId").toString();
String channelOrderNo = baseParam.isNullValue("channelOrderNo") ? null : bizParamMap.get("channelOrderNo").toString();
if (ObjectValidUtil.isInvalid(transOrderId)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Ing(transOrderId, channelOrderNo);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map updateStatus4Success(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String transOrderId = baseParam.isNullValue("transOrderId") ? null : bizParamMap.get("transOrderId").toString();
if (ObjectValidUtil.isInvalid(transOrderId)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Success(transOrderId);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map updateStatus4Complete(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String transOrderId = baseParam.isNullValue("transOrderId") ? null : bizParamMap.get("transOrderId").toString();
if (ObjectValidUtil.isInvalid(transOrderId)) {
_log.warn("修改转账订单状态失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = super.baseUpdateStatus4Complete(transOrderId);
return RpcUtil.createBizResult(baseParam, result);
}
@Override
public Map sendTransNotify(String jsonParam) {
BaseParam baseParam = JsonUtil.getObjectFromJson(jsonParam, BaseParam.class);
Map<String, Object> bizParamMap = baseParam.getBizParamMap();
if (ObjectValidUtil.isInvalid(bizParamMap)) {
_log.warn("发送转账订单处理失败, {}. jsonParam={}", RetEnum.RET_PARAM_NOT_FOUND.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_NOT_FOUND);
}
String msg = baseParam.isNullValue("msg") ? null : bizParamMap.get("msg").toString();
if (ObjectValidUtil.isInvalid(msg)) {
_log.warn("发送转账订单处理失败, {}. jsonParam={}", RetEnum.RET_PARAM_INVALID.getMessage(), jsonParam);
return RpcUtil.createFailResult(baseParam, RetEnum.RET_PARAM_INVALID);
}
int result = 1;
try {
mq4TransNotify.send(msg);
}catch (Exception e) {
_log.error(e, "");
result = 0;
}
return RpcUtil.createBizResult(baseParam, result);
}
}
package org.xxpay.dubbo.service.mq;
import org.apache.activemq.ScheduledMessage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.core.JmsTemplate;
import org.springframework.jms.core.MessageCreator;
import org.springframework.stereotype.Component;
import org.xxpay.common.util.MyLog;
import org.xxpay.dubbo.service.BaseService4PayOrder;
import javax.jms.*;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
/**
* @Description: 商户通知MQ统一处理
* @author dingzhiwei jmdhappy@126.com
* @date 2017-10-31
* @version V1.0
* @Copyright: www.xxpay.org
*/
@Component
public class Mq4MchNotify extends BaseService4PayOrder {
@Autowired
private JmsTemplate jmsTemplate;
private static final MyLog _log = MyLog.getLog(Mq4MchNotify.class);
public void send(Queue queue, String msg) {
_log.info("发送MQ消息:msg={}", msg);
this.jmsTemplate.convertAndSend(queue, msg);
}
/**
* 发送延迟消息
* @param msg
* @param delay
*/
public void send(Queue queue, String msg, long delay) {
_log.info("发送MQ延时消息:msg={},delay={}", msg, delay);
jmsTemplate.send(queue, new MessageCreator() {
public Message createMessage(Session session) throws JMSException {
TextMessage tm = session.createTextMessage(msg);
tm.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_DELAY, delay);
tm.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_PERIOD, 1*1000);
tm.setLongProperty(ScheduledMessage.AMQ_SCHEDULED_REPEAT, 1);
return tm;
}
});
}
private static class TrustAnyTrustManager implements X509TrustManager {
public void checkClientTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public void checkServerTrusted(X509Certificate[] chain, String authType)
throws CertificateException {
}
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[] {};
}
}
public String httpPost(String url) {
StringBuffer sb = new StringBuffer();
try {
URL console = new URL(url);
if("https".equals(console.getProtocol())) {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, new TrustManager[] { new TrustAnyTrustManager() },
new java.security.SecureRandom());
HttpsURLConnection con = (HttpsURLConnection) console.openConnection();
con.setSSLSocketFactory(sc.getSocketFactory());
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setConnectTimeout(30 * 1000);
con.setReadTimeout(60 * 1000);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()), 1024*1024);
while (true) {
String line = in.readLine();
if (line == null) {
break;
}
sb.append(line);
}
in.close();
}else if("http".equals(console.getProtocol())) {
HttpURLConnection con = (HttpURLConnection) console.openConnection();
con.setRequestMethod("POST");
con.setDoInput(true);
con.setDoOutput(true);
con.setUseCaches(false);
con.setConnectTimeout(30 * 1000);
con.setReadTimeout(60 * 1000);
con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()), 1024*1024);
while (true) {
String line = in.readLine();
if (line == null) {
break;
}
sb.append(line);
}
in.close();
}else {
_log.error("not do protocol. protocol=%s", console.getProtocol());
}
} catch(Exception e) {
_log.error(e, "httpPost exception. url:%s", url);
}
return sb.toString();
}
}
package org.xxpay.dubbo.service.mq;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jms.annotation.JmsListener;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;
import org.xxpay.common.util.MyLog;
import org.xxpay.dubbo.service.BaseService4PayOrder;
import javax.jms.Queue;
import java.text.SimpleDateFormat;
import java.util.Date;
/**
* @Description: 商户通知MQ统一处理
* @author dingzhiwei jmdhappy@126.com
* @date 2017-10-31
* @version V1.0
* @Copyright: www.xxpay.org
*/
@Component
public class Mq4MchPayNotify extends Mq4MchNotify {
@Autowired
private Queue mchPayNotifyQueue;
@Autowired
private BaseService4PayOrder baseService4PayOrder;
private static final MyLog _log = MyLog.getLog(Mq4MchPayNotify.class);
public void send(String msg) {
super.send(mchPayNotifyQueue, msg);
}
@JmsListener(destination = MqConfig.MCH_PAY_NOTIFY_QUEUE_NAME)
public void receive(String msg) {
String logPrefix = "【商户支付通知】";
_log.info("{}接收消息:msg={}", logPrefix, msg);
JSONObject msgObj = JSON.parseObject(msg);
String respUrl = msgObj.getString("url");
String orderId = msgObj.getString("orderId");
int count = msgObj.getInteger("count");
if(StringUtils.isEmpty(respUrl)) {
_log.warn("{}商户通知URL为空,respUrl={}", logPrefix, respUrl);
return;
}
String httpResult = httpPost(respUrl);
int cnt = count + 1;
_log.info("{}notifyCount={}", logPrefix, cnt);
if("success".equalsIgnoreCase(httpResult)){
// 修改支付订单表
try {
int result = baseService4PayOrder.baseUpdateStatus4Complete(orderId);
_log.info("{}修改payOrderId={},订单状态为处理完成->{}", logPrefix, orderId, result == 1 ? "成功" : "失败");
} catch (Exception e) {
_log.error(e, "修改订单状态为处理完成异常");
}
// 修改通知
try {
int result = super.baseUpdateMchNotifySuccess(orderId, httpResult, (byte) cnt);
_log.info("{}修改商户通知,orderId={},result={},notifyCount={},结果:{}", logPrefix, orderId, httpResult, cnt, result == 1 ? "成功" : "失败");
}catch (Exception e) {
_log.error(e, "修改商户支付通知异常");
}
return ; // 通知成功结束
}else {
// 修改通知次数
try {
int result = super.baseUpdateMchNotifyFail(orderId, httpResult, (byte) cnt);
_log.info("{}修改商户通知,orderId={},result={},notifyCount={},结果:{}", logPrefix, orderId, httpResult, cnt, result == 1 ? "成功" : "失败");
}catch (Exception e) {
_log.error(e, "修改商户支付通知异常");
}
if (cnt > 5) {
_log.info("{}通知次数notifyCount()>5,停止通知", respUrl, cnt);
return ;
}
// 通知失败,延时再通知
msgObj.put("count", cnt);
this.send(mchPayNotifyQueue, msgObj.toJSONString(), cnt * 60 * 1000);
_log.info("{}发送延时通知完成,通知次数:{},{}秒后执行通知", respUrl, cnt, cnt * 60);
}
}
}
Supports Markdown
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