zhuyifan

支付回调接口处理

......@@ -42,6 +42,7 @@ dependencies {
implementation "org.apache.poi:poi:4.1.2" //poi
implementation "org.apache.poi:poi-ooxml:4.1.2" //poi
implementation 'cn.hutool:hutool-all:5.8.27' //huTool-util
implementation 'com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.11.2' // Jackson XML 模块
implementation 'com.aliyun:aliyun-java-sdk-core:4.6.4' //阿里云SDK核心库
implementation 'com.aliyun:aliyun-java-sdk-dysmsapi:2.2.1'//阿里云短信服务SDK
......
......@@ -2,6 +2,7 @@ package com.infoloop.tianting.config;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import com.infoloop.tianting.store.LoginCodeStore;
import com.infoloop.tianting.utils.SmsUtil;
import io.lettuce.core.api.StatefulRedisConnection;
......@@ -10,6 +11,7 @@ import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.http.converter.xml.MappingJackson2XmlHttpMessageConverter;
import static com.infoloop.tianting.constant.ConfigConstants.REDIS_CONNECTION;
......@@ -32,4 +34,9 @@ public class AppConfig {
return new SmsUtil(smsConfig, new DefaultAcsClient(profile));
}
@Bean
public MappingJackson2XmlHttpMessageConverter mappingJackson2XmlHttpMessageConverter() {
return new MappingJackson2XmlHttpMessageConverter(new XmlMapper());
}
}
......
......@@ -4,6 +4,7 @@ import cn.dev33.satoken.annotation.SaIgnore;
import com.github.xiaoymin.knife4j.annotations.ApiSupport;
import com.infoloop.tianting.model.dto.PayDTO;
import com.infoloop.tianting.model.dto.PayDTO.PayResponseDto;
import com.infoloop.tianting.model.dto.PaymentCallbackDTO;
import com.infoloop.tianting.service.client.PayServiceClient;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -11,6 +12,7 @@ import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
......@@ -39,9 +41,9 @@ public class PayController {
@SaIgnore
@ApiOperation(value = "支付通知")
@PostMapping("/pay/callback")
@PostMapping(value = "/pay/callback", consumes = MediaType.APPLICATION_XML_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public void callback(@Valid @RequestBody PayDTO.PayInformRequestDto payInformRequestDto) {
public void callback(@RequestBody PaymentCallbackDTO payInformRequestDto) {
payServiceClient.callback(payInformRequestDto);
}
......
package com.infoloop.tianting.model.dto;
import com.fasterxml.jackson.dataformat.xml.annotation.JacksonXmlProperty;
import lombok.Data;
@Data
public class PaymentCallbackDTO {
@JacksonXmlProperty(localName = "TradeId")
private String tradeId;
@JacksonXmlProperty(localName = "TransSN")
private String transSN;
@JacksonXmlProperty(localName = "TransType")
private String transType;
@JacksonXmlProperty(localName = "TransAmount")
private String transAmount;
@JacksonXmlProperty(localName = "RealAmount")
private String realAmount;
@JacksonXmlProperty(localName = "PayMode")
private String payMode;
@JacksonXmlProperty(localName = "PayModeRemark")
private String payModeRemark;
@JacksonXmlProperty(localName = "TransDate")
private String transDate;
@JacksonXmlProperty(localName = "OrginalTransSN")
private String orginalTransSN;
@JacksonXmlProperty(localName = "Remark")
private String remark;
@JacksonXmlProperty(localName = "PayModeNote")
private String payModeNote;
@JacksonXmlProperty(localName = "PayIdentify")
private String payIdentify;
@JacksonXmlProperty(localName = "PayIdentifyNote")
private String payIdentifyNote;
}
......@@ -7,6 +7,7 @@ import com.infoloop.tianting.config.BusinessConfig;
import com.infoloop.tianting.model.dto.PayDTO.PayInformRequestDto;
import com.infoloop.tianting.model.dto.PayDTO.PayResponseDto;
import com.infoloop.tianting.model.dto.PayDTO.ThirdPartyPayInformRequestDto;
import com.infoloop.tianting.model.dto.PaymentCallbackDTO;
import com.infoloop.tianting.utils.DateUtil;
import com.infoloop.tianting.utils.EncryptionUtil;
import lombok.RequiredArgsConstructor;
......@@ -30,7 +31,9 @@ import java.time.LocalDateTime;
public class PayServiceClient {
private final RestTemplate restTemplate;
private final BusinessConfig businessConfig;
private final ObjectMapper objectMapper;
@Value("${payment.client-id:Order0001}")
......@@ -85,7 +88,8 @@ public class PayServiceClient {
return responseEntity.getBody();
}
public void callback(PayInformRequestDto payInformRequestDto) {
public void callback(PaymentCallbackDTO payInformRequestDto) {
log.info("callback: {}", payInformRequestDto);
}
}
......