You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
hai-oil-server/service/src/main/java/com/hfkj/pay/HuiPayService.java

218 lines
9.5 KiB

package com.hfkj.pay;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.hfkj.common.exception.ErrorCode;
import com.hfkj.common.exception.ErrorHelp;
import com.hfkj.common.exception.SysCode;
import com.hfkj.common.pay.util.SignatureUtil;
import com.hfkj.common.utils.DateUtil;
import com.hfkj.common.utils.HttpsUtils;
import com.hfkj.common.utils.RandomUtils;
import com.hfkj.config.CommonSysConst;
import com.hfkj.entity.BsOrderSettle;
import com.hfkj.entity.BsOrderSettleLedger;
import com.hfkj.model.order.OrderModel;
import com.hfkj.sysenum.order.OrderPayTypeEnum;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.math.BigDecimal;
import java.util.*;
/**
* @className: HuiPayService
* @author: HuRui
* @date: 2024/5/7
**/
public class HuiPayService {
static Logger log = LoggerFactory.getLogger(HuiPayService.class);
// 请求地址
private final static String REQUEST_URL = "https://pay.dctpay.com/openApi/v1/";
/**
* JSAPI支付
* @param openId
* @param order
* @return
* @throws Exception
*/
public static Map<Object, Object> preorder(String merNo,String merKey,String appId,String openId,boolean profitSharing,OrderModel order) throws Exception {
try {
log.info("=============== start 惠支付 start ==================");
Map<String, Object> param = new HashMap<>();
param.put("merchantNo", merNo);
param.put("outTradeNo", order.getOrderNo());
param.put("transType", "JSAPI");
if (OrderPayTypeEnum.type1.getCode() == order.getPayType()) {
param.put("payMode", "ALIPAY");
} else if (OrderPayTypeEnum.type2.getCode() == order.getPayType()) {
param.put("payMode", "WECHAT");
}
param.put("totalAmount", order.getPayRealPrice());
param.put("profitSharing", profitSharing?1:0);
if (StringUtils.isNotBlank(appId)) {
param.put("subAppid", appId);
}
param.put("subject", "在线加油");
param.put("userId", openId);
param.put("notifyUrl", CommonSysConst.getSysConfig().getHuiPayPreorderNotifyUrl());
param.put("sign", SignatureUtil.createSign(param, merKey));
log.info("请求地址:" + (REQUEST_URL + "trade/preorder"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "trade/preorder", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
if (response != null && response.getString("return_code").equals("000000")) {
JSONObject payParam = response.getJSONObject("return_data").getJSONObject("payParam");
SortedMap<Object, Object> sortedMap = new TreeMap<>();
sortedMap.put("appId", payParam.get("app_id"));
sortedMap.put("nonceStr", payParam.get("nonce_str"));
sortedMap.put("timeStamp", payParam.get("time_stamp"));
sortedMap.put("signType", "MD5");
sortedMap.put("package", payParam.get("package"));
sortedMap.put("prepay_id", payParam.get("prepay_id"));
sortedMap.put("sign", payParam.get("pay_sign"));
return sortedMap;
}
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, response.getString("return_msg"));
} catch (Exception e) {
log.info("出现异常:" + e.getMessage());
throw e;
} finally {
log.info("=============== end 惠支付 end ==================");
}
}
/**
* 退款
* @param merNo
* @param outTradeNo
* @param refundTradeNo
* @param refundAmount
* @return
* @throws Exception
*/
public static JSONObject refund(String merNo,String merKey,String outTradeNo,String refundTradeNo, BigDecimal refundAmount) {
try {
log.info("=============== start 惠支付退款 start ==================");
Map<String,Object> param = new HashMap<>();
param.put("merchantNo", merNo);
param.put("outTradeNo", outTradeNo);
param.put("refundTradeNo", refundTradeNo);
param.put("refundAmount", refundAmount);
param.put("sign" , SignatureUtil.createSign(param, merKey));
log.info("请求地址:" + (REQUEST_URL + "trade/refund"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "trade/refund", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
return response;
} catch (Exception e) {
log.info("出现异常"+ e.getMessage());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款异常");
} finally {
log.info("=============== end 惠支付退款 end ==================");
}
}
/**
* 发起分账
* @param orderSettle
* @param settleLedgerList
* @return
*/
public static JSONObject profitSharingSeparate(BsOrderSettle orderSettle, List<BsOrderSettleLedger> settleLedgerList) {
try {
log.info("=============== start 惠支付分账 start ==================");
Map<String,Object> param = new HashMap<>();
param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("outTradeNo", orderSettle.getOrderNo());
param.put("outSeparateNo", orderSettle.getLedgerOrderNo());
param.put("totalAmount", orderSettle.getLedgerAmount());
JSONArray recvDatas = new JSONArray();
for (BsOrderSettleLedger settleLedger : settleLedgerList) {
JSONObject obj = new JSONObject();
obj.put("recvMerchantNo", settleLedger.getReceiverMerNo());
obj.put("separateAmount", settleLedger.getReceiverAmount());
recvDatas.add(obj);
}
param.put("recvDatas", recvDatas);
param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey()));
log.info("请求地址:" + (REQUEST_URL + "profitSharing/separate"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "profitSharing/separate", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
return response;
} catch (Exception e) {
log.info("出现异常"+ e.getMessage());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "分账异常");
} finally {
log.info("=============== end 惠支付分账 end ==================");
}
}
/**
* 分账查询
* @param orderSettle
* @return
*/
public static JSONObject profitSharingQuery(BsOrderSettle orderSettle) {
try {
log.info("=============== start 惠支付分账查询 start ==================");
Map<String,Object> param = new HashMap<>();
param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("outSeparateNo", orderSettle.getLedgerOrderNo());
param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey()));
log.info("请求地址:" + (REQUEST_URL + "profitSharing/query"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "profitSharing/query", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
return response;
} catch (Exception e) {
log.info("出现异常"+ e.getMessage());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "分账查询异常");
} finally {
log.info("=============== end 惠支付分账查询 end ==================");
}
}
/**
* 分账撤销
* @param orderSettle
* @return
*/
public static JSONObject profitSharingCancel(BsOrderSettle orderSettle) {
try {
log.info("=============== start 惠支付分账撤销 start ==================");
Map<String,Object> param = new HashMap<>();
param.put("merchantNo", orderSettle.getSettleMerNo());
param.put("originOutSeparateNo", orderSettle.getLedgerOrderNo());
param.put("outSeparateNo", "LC"+ DateUtil.date2String(new Date(), "yyMMddHHmmss") + RandomUtils.number(3, false));
param.put("totalAmount", orderSettle.getLedgerAmount());
param.put("sign" , SignatureUtil.createSign(param, orderSettle.getSettleMerKey()));
log.info("请求地址:" + (REQUEST_URL + "profitSharing/cancel"));
log.info("请求参数:" + JSONObject.toJSONString(param));
JSONObject response = HttpsUtils.doPost(REQUEST_URL + "profitSharing/cancel", param, new HashMap<>());
log.info("响应参数:" + response.toJSONString());
return response;
} catch (Exception e) {
log.info("出现异常"+ e.getMessage());
throw ErrorHelp.genException(SysCode.System, ErrorCode.COMMON_ERROR, "退款异常");
} finally {
log.info("=============== end 惠支付分账撤销 end ==================");
}
}
}