mirror of
https://codeup.aliyun.com/67c68d4e484ca2f0a13ac3c1/ydc/jsowell-charger-web.git
synced 2026-04-21 03:25:12 +08:00
308 lines
13 KiB
Java
308 lines
13 KiB
Java
import com.alibaba.fastjson2.JSON;
|
||
import com.alibaba.fastjson2.JSONArray;
|
||
import com.alibaba.fastjson2.JSONObject;
|
||
import com.google.common.collect.Lists;
|
||
import com.google.common.collect.Maps;
|
||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||
import com.huifu.adapay.model.PaymentReverse;
|
||
import com.huifu.adapay.model.Refund;
|
||
import com.jsowell.JsowellApplication;
|
||
import com.jsowell.adapay.dto.QueryConfirmReverseDTO;
|
||
import com.jsowell.adapay.dto.QueryPaymentConfirmDTO;
|
||
import com.jsowell.adapay.operation.PaymentReverseOperation;
|
||
import com.jsowell.adapay.response.ConfirmReverseResponse;
|
||
import com.jsowell.adapay.response.PaymentConfirmResponse;
|
||
import com.jsowell.adapay.response.PaymentReverseResponse;
|
||
import com.jsowell.adapay.response.QueryPaymentConfirmDetailResponse;
|
||
import com.jsowell.adapay.service.AdapayService;
|
||
import com.jsowell.common.enums.ykc.ScenarioEnum;
|
||
import com.jsowell.common.util.StringUtils;
|
||
import com.jsowell.pile.domain.AdapayMemberAccount;
|
||
import org.apache.commons.collections4.CollectionUtils;
|
||
import org.junit.Test;
|
||
import org.junit.runner.RunWith;
|
||
import org.slf4j.Logger;
|
||
import org.slf4j.LoggerFactory;
|
||
import org.springframework.beans.factory.annotation.Autowired;
|
||
import org.springframework.boot.test.context.SpringBootTest;
|
||
import org.springframework.test.context.ActiveProfiles;
|
||
import org.springframework.test.context.junit4.SpringRunner;
|
||
|
||
import java.io.BufferedReader;
|
||
import java.io.FileReader;
|
||
import java.io.IOException;
|
||
import java.math.BigDecimal;
|
||
import java.util.ArrayList;
|
||
import java.util.List;
|
||
import java.util.Map;
|
||
|
||
/**
|
||
* 专用处理汇付支付相关
|
||
*/
|
||
@ActiveProfiles("pre")
|
||
@SpringBootTest(classes = JsowellApplication.class, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
|
||
@RunWith(SpringRunner.class)
|
||
public class PaymentTestController {
|
||
protected final Logger logger = LoggerFactory.getLogger(this.getClass());
|
||
|
||
String wechatAppId1 = "wxbb3e0d474569481d"; // 万车充
|
||
|
||
String wechatAppId2 = "wx20abc5210391649c"; // 嘉佳充电
|
||
|
||
@Autowired
|
||
private AdapayService adapayService;
|
||
|
||
public List<String> getPaymentIdList() {
|
||
List<String> resultList = Lists.newArrayList();
|
||
// List<String> paymentIdList1 = getPaymentIdList1();
|
||
List<String> paymentIdListForFile = getPaymentIdListForFile();
|
||
resultList.addAll(paymentIdListForFile);
|
||
return resultList;
|
||
}
|
||
|
||
/**
|
||
* 从文件中读取paymentId
|
||
* @return
|
||
* @throws IOException
|
||
*/
|
||
public List<String> getPaymentIdListForFile() {
|
||
List<String> list =new ArrayList<String>();
|
||
try {
|
||
String path = "src/test/resources/payment_ids";
|
||
FileReader fileReader =new FileReader(path);
|
||
BufferedReader bufferedReader =new BufferedReader(fileReader);
|
||
String str=null;
|
||
while((str=bufferedReader.readLine())!=null) {
|
||
if(str.trim().length()>2) {
|
||
list.add(str);
|
||
}
|
||
}
|
||
} catch (Exception e) {
|
||
|
||
}
|
||
// System.out.println(list);
|
||
return list;
|
||
}
|
||
|
||
/**
|
||
* 查询分账信息
|
||
* @throws BaseAdaPayException
|
||
*/
|
||
@Test
|
||
public void queryCreateConfirmReverse() throws BaseAdaPayException {
|
||
List<String> paymentIdList = getPaymentIdList(); // 查询分账信息
|
||
|
||
List<String> unSplitList = Lists.newArrayList(); // 未分帐
|
||
List<String> splitList = Lists.newArrayList(); // 已分帐
|
||
|
||
BigDecimal total = BigDecimal.ZERO;
|
||
List<String> selfList = Lists.newArrayList();
|
||
|
||
Map<String, BigDecimal> map = Maps.newHashMap();
|
||
for (String paymentId : paymentIdList) {
|
||
if (StringUtils.isBlank(paymentId)) {
|
||
continue;
|
||
}
|
||
// 查询支付确认id
|
||
QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO();
|
||
dto.setPaymentId(paymentId);
|
||
dto.setWechatAppId(wechatAppId1);
|
||
// 查询分账信息
|
||
QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto);
|
||
if (response != null) {
|
||
List<QueryPaymentConfirmDetailResponse.PaymentConfirmInfo> confirms = response.getPaymentConfirms();
|
||
if (CollectionUtils.isEmpty(confirms)) {
|
||
unSplitList.add(paymentId);
|
||
} else {
|
||
splitList.add(paymentId);
|
||
for (QueryPaymentConfirmDetailResponse.PaymentConfirmInfo confirm : confirms) {
|
||
if (queryConfirmReverseStatus(confirm)) {
|
||
System.out.println("支付确认id:" + confirm.getId() + "撤销了。。。");
|
||
continue;
|
||
}
|
||
JSONObject jsonObject = JSON.parseObject(confirm.getDescription());
|
||
String adapayMemberId = jsonObject.getString("adapayMemberId");
|
||
BigDecimal confirmedAmt = new BigDecimal(confirm.getConfirmedAmt());
|
||
|
||
total = total.add(confirmedAmt);
|
||
|
||
// 放map
|
||
map.merge(adapayMemberId, confirmedAmt, BigDecimal::add);
|
||
|
||
if (StringUtils.equals(adapayMemberId, "0")) {
|
||
selfList.add(paymentId);
|
||
}
|
||
}
|
||
}
|
||
} else {
|
||
unSplitList.add(paymentId);
|
||
}
|
||
}
|
||
System.out.println("=================未分账:" + JSON.toJSONString(unSplitList) + ", 数量:" + unSplitList.size());
|
||
System.out.println("=================已分账:" + JSON.toJSONString(map) + ", 总分账:" + total + ", 数量:" + splitList.size());
|
||
System.out.println("=================自己:" + JSON.toJSONString(selfList) + ", 数量:" + selfList.size());
|
||
}
|
||
|
||
/**
|
||
* 查询支付撤销状态
|
||
* @param confirm
|
||
* @return
|
||
* @throws BaseAdaPayException
|
||
*/
|
||
private boolean queryConfirmReverseStatus(QueryPaymentConfirmDetailResponse.PaymentConfirmInfo confirm) throws BaseAdaPayException {
|
||
boolean result = false;
|
||
QueryConfirmReverseDTO dto = QueryConfirmReverseDTO.builder()
|
||
.paymentConfirmId(confirm.getId())
|
||
.wechatAppId(wechatAppId1)
|
||
.build();
|
||
ConfirmReverseResponse confirmReverseResponse = adapayService.queryConfirmReverse(dto);
|
||
if (confirmReverseResponse.isSuccess()) {
|
||
result = true;
|
||
}
|
||
|
||
return result;
|
||
}
|
||
|
||
/**
|
||
* 批量支付确认撤销
|
||
* @throws BaseAdaPayException
|
||
*/
|
||
@Test
|
||
public void testCreateConfirmReverse() throws BaseAdaPayException {
|
||
List<String> list = getPaymentIdList(); // 批量支付确认撤销
|
||
for (String paymentId : list) {
|
||
// 查询支付确认id
|
||
QueryPaymentConfirmDTO dto = new QueryPaymentConfirmDTO();
|
||
dto.setPaymentId(paymentId);
|
||
dto.setWechatAppId(wechatAppId1);
|
||
QueryPaymentConfirmDetailResponse response = adapayService.queryPaymentConfirmList(dto);
|
||
if (response != null) {
|
||
List<QueryPaymentConfirmDetailResponse.PaymentConfirmInfo> confirms = response.getPaymentConfirms();
|
||
System.out.println("支付id:" + paymentId + ", 确认信息:" + JSON.toJSONString(confirms));
|
||
if (CollectionUtils.isNotEmpty(confirms)) {
|
||
for (QueryPaymentConfirmDetailResponse.PaymentConfirmInfo confirm : confirms) {
|
||
adapayService.createConfirmReverse(confirm.getId(), wechatAppId1);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 查询退款信息
|
||
*/
|
||
@Test
|
||
public void queryRefundTest() {
|
||
List<String> list = getPaymentIdList(); // 查询退款信息
|
||
for (String paymentId : list) {
|
||
Map<String, Object> refundParams = Maps.newHashMap();
|
||
refundParams.put("payment_id", paymentId);
|
||
try {
|
||
Map<String, Object> refund = Refund.query(refundParams, wechatAppId2);
|
||
System.out.println("支付id:" + paymentId + ", 退款信息:" + JSON.toJSONString(refund));
|
||
System.out.println();
|
||
} catch (BaseAdaPayException e) {
|
||
throw new RuntimeException(e);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 查询支付撤销信息
|
||
*/
|
||
@Test
|
||
public void queryPaymentReverseTest() {
|
||
List<String> list = getPaymentIdList(); // 查询支付撤销信息
|
||
for (String paymentId : list) {
|
||
try {
|
||
Map<String, Object> reverse = Maps.newHashMap();
|
||
reverse.put("payment_id", paymentId);
|
||
reverse.put("app_id", wechatAppId2);
|
||
Map<String, Object> response = PaymentReverse.queryList(reverse, wechatAppId2);
|
||
System.out.printf("支付id: %s, 支付撤销信息: %s%n", paymentId, JSON.toJSONString(response));
|
||
System.out.println();
|
||
} catch (BaseAdaPayException e) {
|
||
throw new RuntimeException(e);
|
||
}
|
||
}
|
||
}
|
||
|
||
/**
|
||
* 延迟分账未确认调撤销调撤销接口退款/部分退
|
||
*/
|
||
@Test
|
||
public void createPaymentReverseRequestTest() {
|
||
String paymentId = "002212024120516445110710666157707481088";
|
||
BigDecimal refundAmount = new BigDecimal("32.31");
|
||
String memberId = "46690495";
|
||
String orderCode = "C86577082495";
|
||
|
||
// 延迟分账未确认调撤销调撤销接口退款
|
||
PaymentReverseOperation operation = new PaymentReverseOperation();
|
||
operation.setPaymentId(paymentId);
|
||
operation.setReverseAmt(refundAmount);
|
||
operation.setMerchantKey(wechatAppId1);
|
||
operation.setMemberId(memberId);
|
||
operation.setScenarioType(ScenarioEnum.ORDER.getValue());
|
||
operation.setOrderCode(orderCode);
|
||
PaymentReverseResponse response = adapayService.createPaymentReverseRequest(operation);
|
||
System.out.println(JSON.toJSONString(response));
|
||
}
|
||
|
||
@Test
|
||
public void createBalancePaymentRequestTest() {
|
||
String outMemberId = "ACM42875164"; // 出账memberId
|
||
String inMemberId = "0"; // 入账memberId
|
||
String transAmt = "798.20"; // 金额
|
||
String title = "提取余额到自己账户"; // 标题
|
||
String desc = "2024年7月31日08点55分,售后需求:客户重新添加结算账户, 原账户余额无法提取, 由现下打款给客户"; // 描述
|
||
String wechatAppId = wechatAppId1; // 万车充id
|
||
adapayService.createBalancePaymentRequest(outMemberId, inMemberId, transAmt, title, desc, wechatAppId);
|
||
}
|
||
|
||
/**
|
||
*
|
||
*/
|
||
@Test
|
||
public void createBalancePaymentRequestTest2() {
|
||
String outMemberId = "0"; // 出账memberId
|
||
String inMemberId = "ACM25158725"; // 入账memberId
|
||
String transAmt = "42.7"; // 金额
|
||
String title = "订单金额补分账"; // 标题
|
||
String desc = "补C69401257710,C86364369573结算金额"; // 描述
|
||
String wechatAppId = wechatAppId1; // 万车充id
|
||
adapayService.createBalancePaymentRequest(outMemberId, inMemberId, transAmt, title, desc, wechatAppId);
|
||
}
|
||
|
||
// 需要重新分账的订单信息(针对未分账的订单)
|
||
public JSONArray getPaymentList() {
|
||
String jsonArrayString = "[" +
|
||
"{\"orderCode\":\"C25133803815\", \"settleAmount\":\"42.94\", \"paymentId\":\"002212024071413111510658428550211133440\"}" +
|
||
"]";
|
||
return JSONArray.parseArray(jsonArrayString);
|
||
}
|
||
|
||
/**
|
||
* 批量执行分账
|
||
*/
|
||
@Test
|
||
public void batchCreatePaymentConfirm() {
|
||
JSONArray paymentList = getPaymentList();
|
||
// TODO 获取默认结算账户,如需分给对应商户就填写正确的汇付会员id
|
||
// AdapayMemberAccount adapayMemberAccount = adapayMemberAccountService.getDefault();
|
||
AdapayMemberAccount adapayMemberAccount = new AdapayMemberAccount();
|
||
adapayMemberAccount.setAdapayMemberId("ACM25158725");
|
||
for (int i = 0; i < paymentList.size(); i++) {
|
||
JSONObject jsonObject = (JSONObject) paymentList.get(i);
|
||
BigDecimal confirmAmt = jsonObject.getBigDecimal("settleAmount"); // 确认金额就是结算金额
|
||
String paymentId = jsonObject.getString("paymentId"); // 支付id
|
||
String orderCode = jsonObject.getString("orderCode"); // 订单编号
|
||
|
||
// 延时分账,使用确认交易API
|
||
PaymentConfirmResponse paymentConfirmResponse = adapayService.createPaymentConfirmRequest(paymentId,
|
||
adapayMemberAccount, confirmAmt, orderCode, wechatAppId1);
|
||
System.out.println(JSON.toJSONString(paymentConfirmResponse));
|
||
}
|
||
}
|
||
}
|