保存汇付支付回调信息

This commit is contained in:
2023-05-20 10:53:49 +08:00
parent 4d9135869e
commit f16ebacda9
6 changed files with 103 additions and 93 deletions

View File

@@ -2,8 +2,6 @@ package com.jsowell.api.uniapp;
import com.alibaba.fastjson2.JSONObject;
import com.google.common.collect.ImmutableMap;
import com.huifu.adapay.core.AdapayCore;
import com.huifu.adapay.core.util.AdapaySign;
import com.jsowell.common.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.redis.RedisCache;
@@ -29,7 +27,6 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.List;
import java.util.Map;
@@ -271,33 +268,9 @@ public class PayController extends BaseController {
* https://api.jsowellcloud.com/uniapp/pay/adapayCallback
*/
@PostMapping("/adapayCallback")
public void callback(HttpServletRequest request) {
//获得所有头的名称
Enumeration<String> headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {//判断是否还有下一个元素
String nextElement = headerNames.nextElement();//获取headerNames集合中的请求头
String header2 = request.getHeader(nextElement);//通过请求头得到请求内容
logger.info("汇付支付回调 请求头=========={}, VALUE:{}", nextElement , header2);
//System.out.println(nextElement+":"+header2);
}
public void adapayCallback(HttpServletRequest request) {
try {
//验签请参data
String data = request.getParameter("data");
//验签请参sign
String sign = request.getParameter("sign");
//验签标记
boolean checkSign;
//验签请参publicKey
String publicKey = AdapayCore.PUBLIC_KEY;
logger.info("汇付支付回调验签请参data={}, sign={}", data, sign);
//验签
checkSign = AdapaySign.verifySign(data, sign, publicKey);
if (checkSign) {
//验签成功逻辑
logger.info("汇付支付回调成功返回数据data:{}", data);
} else {
//验签失败逻辑
}
orderService.adapayCallback(request);
} catch (Exception e) {
logger.error("汇付支付回调失败 error", e);
}

View File

@@ -2,13 +2,18 @@ package com.jsowell.service;
import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Sets;
import com.huifu.adapay.core.AdapayCore;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.core.util.AdapaySign;
import com.huifu.adapay.model.Payment;
import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.common.constant.Constants;
@@ -19,15 +24,7 @@ import com.jsowell.common.core.page.PageResponse;
import com.jsowell.common.core.redis.RedisCache;
import com.jsowell.common.enums.InvoiceRecordEnum;
import com.jsowell.common.enums.MemberWalletEnum;
import com.jsowell.common.enums.ykc.ActionTypeEnum;
import com.jsowell.common.enums.ykc.OrderPayModeEnum;
import com.jsowell.common.enums.ykc.OrderPayRecordEnum;
import com.jsowell.common.enums.ykc.OrderStatusEnum;
import com.jsowell.common.enums.ykc.PayModeEnum;
import com.jsowell.common.enums.ykc.PileConnectorDataBaseStatusEnum;
import com.jsowell.common.enums.ykc.ReturnCodeEnum;
import com.jsowell.common.enums.ykc.ScenarioEnum;
import com.jsowell.common.enums.ykc.StartTypeEnum;
import com.jsowell.common.enums.ykc.*;
import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.DateUtils;
@@ -35,49 +32,16 @@ import com.jsowell.common.util.SecurityUtils;
import com.jsowell.common.util.StringUtils;
import com.jsowell.common.util.bean.BeanUtils;
import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.MemberTransactionRecord;
import com.jsowell.pile.domain.OrderBasicInfo;
import com.jsowell.pile.domain.OrderDetail;
import com.jsowell.pile.domain.OrderInvoiceRecord;
import com.jsowell.pile.domain.OrderPayRecord;
import com.jsowell.pile.domain.PileStationWhitelist;
import com.jsowell.pile.domain.WxpayCallbackRecord;
import com.jsowell.pile.dto.ApplyOrderInvoiceDTO;
import com.jsowell.pile.dto.BasicPileDTO;
import com.jsowell.pile.dto.GenerateOrderDTO;
import com.jsowell.pile.dto.GetPayModeDTO;
import com.jsowell.pile.dto.ManualSettlementDTO;
import com.jsowell.pile.dto.PayOrderDTO;
import com.jsowell.pile.dto.PayOrderSuccessCallbackDTO;
import com.jsowell.pile.dto.PaymentScenarioDTO;
import com.jsowell.pile.dto.QueryConnectorListDTO;
import com.jsowell.pile.dto.QueryInvoiceRecordDTO;
import com.jsowell.pile.dto.QueryOrderDTO;
import com.jsowell.pile.dto.SettleOrderDTO;
import com.jsowell.pile.dto.StopChargingDTO;
import com.jsowell.pile.dto.UniAppQueryOrderDTO;
import com.jsowell.pile.dto.WeixinPayDTO;
import com.jsowell.pile.service.IMemberBasicInfoService;
import com.jsowell.pile.service.IMemberTransactionRecordService;
import com.jsowell.pile.service.IOrderBasicInfoService;
import com.jsowell.pile.service.IOrderInvoiceRecordService;
import com.jsowell.pile.service.IOrderPayRecordService;
import com.jsowell.pile.service.IPileBillingTemplateService;
import com.jsowell.pile.service.IPileStationInfoService;
import com.jsowell.pile.service.IPileStationWhitelistService;
import com.jsowell.pile.service.WechatPayService;
import com.jsowell.pile.service.WxpayCallbackRecordService;
import com.jsowell.pile.domain.*;
import com.jsowell.pile.dto.*;
import com.jsowell.pile.service.*;
import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.base.OrderAmountDetailVO;
import com.jsowell.pile.vo.base.OrderPeriodAmountVO;
import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.uniapp.InvoiceRecordVO;
import com.jsowell.pile.vo.uniapp.MemberVO;
import com.jsowell.pile.vo.uniapp.OrderVO;
import com.jsowell.pile.vo.uniapp.PayModeVO;
import com.jsowell.pile.vo.uniapp.PileConnectorDetailVO;
import com.jsowell.pile.vo.uniapp.UniAppOrderVO;
import com.jsowell.pile.vo.base.StationInfoVO;
import com.jsowell.pile.vo.uniapp.*;
import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.OrderDetailInfoVO;
import com.jsowell.pile.vo.web.PileStationVO;
@@ -95,15 +59,7 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.ParseException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.*;
import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors;
@@ -157,6 +113,9 @@ public class OrderService {
@Autowired
private RedisCache redisCache;
@Autowired
private AdapayCallbackRecordService adapayCallbackRecordService;
private List<String> stationIdList = Lists.newArrayList("1", "2");
/**
@@ -1168,6 +1127,10 @@ public class OrderService {
return orderList;
}
public List<StationInfoVO> queryUninvoicedStationList(QueryOrderDTO dto) {
return Lists.newArrayList();
}
/**
* 申请开票
* @param dto
@@ -1248,7 +1211,55 @@ public class OrderService {
.build();
}
public void adapayCallback(HttpServletRequest request, WechatPayNotifyParameter body) {
log.info("");
public void adapayCallback(HttpServletRequest request) throws Exception {
//验签请参data
String data = request.getParameter("data");
//验签请参sign
String sign = request.getParameter("sign");
//验签请参publicKey
String publicKey = AdapayCore.PUBLIC_KEY;
log.info("汇付支付回调验签请参data={}, sign={}", data, sign);
//验签
//验签标记
boolean checkSign = AdapaySign.verifySign(data, sign, publicKey);
if (!checkSign) {
log.info("汇付支付回调验签失败:{}", data);
}
//验签成功 保存到回调记录表中
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
AdapayCallbackRecord adapayCallbackRecord = mapper.readValue(data, AdapayCallbackRecord.class);
adapayCallbackRecordService.saveAdapayCallbackRecord(adapayCallbackRecord);
}
public static void main(String[] args) throws JsonProcessingException {
String data = "{\n" +
" \"app_id\": \"app_d0c80cb1-ffc8-48cb-a030-fe9bec823aaa\",\n" +
" \"created_time\": \"20230519155322\",\n" +
" \"description\": \"充电费用3\",\n" +
" \"end_time\": \"20230519155332\",\n" +
" \"expend\": {\n" +
" \"bank_type\": \"OTHERS\",\n" +
" \"open_id\": \"o8jhot6PJF93EPhNISsXi28dKdS8\",\n" +
" \"sub_open_id\": \"o4REX5MprZfTaLnVNxfdOY-wnwGI\"\n" +
" },\n" +
" \"fee_amt\": \"0.00\",\n" +
" \"id\": \"002212023051915532110505541666512474112\",\n" +
" \"order_no\": \"819b093f874b4a2e8004e9edd4f5893c\",\n" +
" \"out_trans_id\": \"4200001872202305191271802241\",\n" +
" \"party_order_id\": \"02212305195720191805612\",\n" +
" \"pay_amt\": \"0.01\",\n" +
" \"pay_channel\": \"wx_lite\",\n" +
" \"real_amt\": \"0.01\",\n" +
" \"share_eq\": \"Y\",\n" +
" \"status\": \"succeeded\",\n" +
" \"wx_user_id\": \"\"\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
mapper.setPropertyNamingStrategy(PropertyNamingStrategies.SNAKE_CASE);
AdapayCallbackRecord adapayCallbackRecord = mapper.readValue(data, AdapayCallbackRecord.class);
System.out.println(adapayCallbackRecord);
}
}

View File

@@ -1,9 +1,13 @@
package com.jsowell.pile.domain;
import com.alibaba.fastjson2.JSONObject;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import lombok.Data;
import java.util.Map;
/**
* adapay_callback_record
@@ -14,7 +18,7 @@ public class AdapayCallbackRecord implements Serializable {
/**
* 主键id
*/
private Integer id;
private String id;
/**
* 汇付商户appId
@@ -43,11 +47,11 @@ public class AdapayCallbackRecord implements Serializable {
/**
* 商户支付订单号
*/
private Integer orderNo;
private String orderNo;
private Integer outTransId;
private String outTransId;
private Integer partyOrderId;
private String partyOrderId;
private BigDecimal payAmt;
@@ -72,4 +76,10 @@ public class AdapayCallbackRecord implements Serializable {
private String delFlag;
private static final long serialVersionUID = 1L;
@JsonProperty(value = "expend")
public void setExpend(Map<String, Object> expend){
this.expend = JSONObject.toJSONString(expend);
}
}

View File

@@ -1,7 +1,9 @@
package com.jsowell.pile.mapper;
import generate.AdapayCallbackRecord;
import com.jsowell.pile.domain.AdapayCallbackRecord;
import org.springframework.stereotype.Repository;
@Repository
public interface AdapayCallbackRecordMapper {
int deleteByPrimaryKey(Integer id);

View File

@@ -1,4 +1,7 @@
package com.jsowell.pile.service;
import com.jsowell.pile.domain.AdapayCallbackRecord;
public interface AdapayCallbackRecordService {
void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord);
}

View File

@@ -1,8 +1,19 @@
package com.jsowell.pile.service.impl;
import com.jsowell.pile.domain.AdapayCallbackRecord;
import com.jsowell.pile.mapper.AdapayCallbackRecordMapper;
import com.jsowell.pile.service.AdapayCallbackRecordService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class AdapayCallbackRecordServiceImpl implements AdapayCallbackRecordService {
@Autowired
private AdapayCallbackRecordMapper adapayCallbackRecordMapper;
@Override
public void saveAdapayCallbackRecord(AdapayCallbackRecord callbackRecord) {
adapayCallbackRecordMapper.insert(callbackRecord);
}
}