保存汇付支付回调信息

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.alibaba.fastjson2.JSONObject;
import com.google.common.collect.ImmutableMap; 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.annotation.Anonymous;
import com.jsowell.common.core.controller.BaseController; import com.jsowell.common.core.controller.BaseController;
import com.jsowell.common.core.redis.RedisCache; 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 org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import java.util.Enumeration;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -271,33 +268,9 @@ public class PayController extends BaseController {
* https://api.jsowellcloud.com/uniapp/pay/adapayCallback * https://api.jsowellcloud.com/uniapp/pay/adapayCallback
*/ */
@PostMapping("/adapayCallback") @PostMapping("/adapayCallback")
public void callback(HttpServletRequest request) { public void adapayCallback(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);
}
try { try {
//验签请参data orderService.adapayCallback(request);
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 {
//验签失败逻辑
}
} catch (Exception e) { } catch (Exception e) {
logger.error("汇付支付回调失败 error", e); logger.error("汇付支付回调失败 error", e);
} }

View File

@@ -2,13 +2,18 @@ package com.jsowell.service;
import com.alibaba.fastjson2.JSONObject; import com.alibaba.fastjson2.JSONObject;
import com.alibaba.fastjson2.TypeReference; 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.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
import com.huifu.adapay.core.AdapayCore;
import com.huifu.adapay.core.exception.BaseAdaPayException; import com.huifu.adapay.core.exception.BaseAdaPayException;
import com.huifu.adapay.core.util.AdapaySign;
import com.huifu.adapay.model.Payment; import com.huifu.adapay.model.Payment;
import com.jsowell.adapay.common.CreateAdaPaymentParam; import com.jsowell.adapay.common.CreateAdaPaymentParam;
import com.jsowell.common.constant.Constants; 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.core.redis.RedisCache;
import com.jsowell.common.enums.InvoiceRecordEnum; import com.jsowell.common.enums.InvoiceRecordEnum;
import com.jsowell.common.enums.MemberWalletEnum; import com.jsowell.common.enums.MemberWalletEnum;
import com.jsowell.common.enums.ykc.ActionTypeEnum; import com.jsowell.common.enums.ykc.*;
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.exception.BusinessException; import com.jsowell.common.exception.BusinessException;
import com.jsowell.common.util.AdapayUtil; import com.jsowell.common.util.AdapayUtil;
import com.jsowell.common.util.DateUtils; 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.StringUtils;
import com.jsowell.common.util.bean.BeanUtils; import com.jsowell.common.util.bean.BeanUtils;
import com.jsowell.common.util.id.IdUtils; import com.jsowell.common.util.id.IdUtils;
import com.jsowell.pile.domain.MemberTransactionRecord; import com.jsowell.pile.domain.*;
import com.jsowell.pile.domain.OrderBasicInfo; import com.jsowell.pile.dto.*;
import com.jsowell.pile.domain.OrderDetail; import com.jsowell.pile.service.*;
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.transaction.dto.OrderTransactionDTO; import com.jsowell.pile.transaction.dto.OrderTransactionDTO;
import com.jsowell.pile.transaction.service.TransactionService; import com.jsowell.pile.transaction.service.TransactionService;
import com.jsowell.pile.vo.base.OrderAmountDetailVO; import com.jsowell.pile.vo.base.OrderAmountDetailVO;
import com.jsowell.pile.vo.base.OrderPeriodAmountVO; import com.jsowell.pile.vo.base.OrderPeriodAmountVO;
import com.jsowell.pile.vo.base.PileInfoVO; import com.jsowell.pile.vo.base.PileInfoVO;
import com.jsowell.pile.vo.uniapp.InvoiceRecordVO; import com.jsowell.pile.vo.base.StationInfoVO;
import com.jsowell.pile.vo.uniapp.MemberVO; import com.jsowell.pile.vo.uniapp.*;
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.web.BillingTemplateVO; import com.jsowell.pile.vo.web.BillingTemplateVO;
import com.jsowell.pile.vo.web.OrderDetailInfoVO; import com.jsowell.pile.vo.web.OrderDetailInfoVO;
import com.jsowell.pile.vo.web.PileStationVO; import com.jsowell.pile.vo.web.PileStationVO;
@@ -95,15 +59,7 @@ import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParseException; import java.text.ParseException;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.ArrayList; import java.util.*;
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.concurrent.TimeUnit; import java.util.concurrent.TimeUnit;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -157,6 +113,9 @@ public class OrderService {
@Autowired @Autowired
private RedisCache redisCache; private RedisCache redisCache;
@Autowired
private AdapayCallbackRecordService adapayCallbackRecordService;
private List<String> stationIdList = Lists.newArrayList("1", "2"); private List<String> stationIdList = Lists.newArrayList("1", "2");
/** /**
@@ -1168,6 +1127,10 @@ public class OrderService {
return orderList; return orderList;
} }
public List<StationInfoVO> queryUninvoicedStationList(QueryOrderDTO dto) {
return Lists.newArrayList();
}
/** /**
* 申请开票 * 申请开票
* @param dto * @param dto
@@ -1248,7 +1211,55 @@ public class OrderService {
.build(); .build();
} }
public void adapayCallback(HttpServletRequest request, WechatPayNotifyParameter body) { public void adapayCallback(HttpServletRequest request) throws Exception {
log.info(""); //验签请参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; 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.io.Serializable;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.Date; import java.util.Date;
import lombok.Data; import java.util.Map;
/** /**
* adapay_callback_record * adapay_callback_record
@@ -14,7 +18,7 @@ public class AdapayCallbackRecord implements Serializable {
/** /**
* 主键id * 主键id
*/ */
private Integer id; private String id;
/** /**
* 汇付商户appId * 汇付商户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; private BigDecimal payAmt;
@@ -72,4 +76,10 @@ public class AdapayCallbackRecord implements Serializable {
private String delFlag; private String delFlag;
private static final long serialVersionUID = 1L; 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; package com.jsowell.pile.mapper;
import generate.AdapayCallbackRecord; import com.jsowell.pile.domain.AdapayCallbackRecord;
import org.springframework.stereotype.Repository;
@Repository
public interface AdapayCallbackRecordMapper { public interface AdapayCallbackRecordMapper {
int deleteByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id);

View File

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

View File

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