Compare commits
32 Commits
d11cc36ab2
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 9c84660ded | |||
| 3403ec5746 | |||
| 95a1f85331 | |||
| f56236dc93 | |||
| 553f6374f5 | |||
| 355710b0c4 | |||
| 6fdd3d6592 | |||
| 4ce8995e06 | |||
| 4624ff627e | |||
| 58e16118cc | |||
| 02c5209fe8 | |||
| f2529153b5 | |||
| d1c4d4bf93 | |||
| 1a3676bc5c | |||
| 35342da17a | |||
| 81d9fd7645 | |||
| bfaba5a551 | |||
| 14ab3d28a4 | |||
| 6b5de29c09 | |||
| 48b0ffdfd7 | |||
| f97eb7e47a | |||
| 0988d548cd | |||
| f7472da77d | |||
| 27f5576aa2 | |||
| f2a35a6929 | |||
| 42984db1f7 | |||
| 6d917774a0 | |||
| dc50e5fa7a | |||
| 43c5743944 | |||
| bf4c37e0d1 | |||
| 9e90145ced | |||
| 114c9a7168 |
@ -7,4 +7,4 @@ WORKDIR /app
|
||||
# 复制 jar 包
|
||||
COPY target/*.jar app.jar
|
||||
# 设置 JVM 参数和启动命令
|
||||
ENTRYPOINT ["java", "-jar", "-Xms64m", "-Xmx128m", "app.jar"]
|
||||
ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar app.jar"]
|
||||
11
Jenkinsfile
vendored
11
Jenkinsfile
vendored
@ -4,9 +4,10 @@ pipeline {
|
||||
// maven 'M3' // 必须在 Jenkins → Manage Jenkins → Global Tool Configuration 中配置过
|
||||
// }
|
||||
environment {
|
||||
APP_NAME = "sczx_singlepay"
|
||||
APP_NAME = "sczx-singlepay"
|
||||
DOCKER_IMAGE = "${APP_NAME}:latest"
|
||||
CONTAINER_NAME = "${APP_NAME}-container"
|
||||
NACOS_ADDR = "115.190.8.52:8848"
|
||||
}
|
||||
|
||||
stages {
|
||||
@ -49,9 +50,9 @@ pipeline {
|
||||
steps {
|
||||
echo "🛑 正在停止旧的容器(如果存在)..."
|
||||
sh '''
|
||||
if [ "$(docker ps -f 'name=sczx_singlepay-container' --format '{{.Status}}')" ]; then
|
||||
docker stop sczx_singlepay-container
|
||||
docker rm sczx_singlepay-container
|
||||
if [ "$(docker ps -f 'name=sczx-singlepay-container' --format '{{.Status}}')" ]; then
|
||||
docker stop sczx-singlepay-container
|
||||
docker rm sczx-singlepay-container
|
||||
fi
|
||||
'''
|
||||
}
|
||||
@ -66,10 +67,12 @@ pipeline {
|
||||
--name \${CONTAINER_NAME} \
|
||||
--network sczx-net \
|
||||
-p 8019:8019 \
|
||||
-e NACOS_SERVER_ADDR=\${NACOS_ADDR} \
|
||||
-e JAVA_OPTS="-Xms256m -Xmx512m -Duser.timezone=Asia/Shanghai" \
|
||||
-e TZ=Asia/Shanghai \
|
||||
-v /etc/localtime:/etc/localtime:ro \
|
||||
-v /root/cert:/root/cert:ro \
|
||||
-v /sczx/logs/singlepay:/sczx/logs/singlepay:rw \
|
||||
--restart always \
|
||||
\${DOCKER_IMAGE}
|
||||
"""
|
||||
|
||||
11
pom.xml
11
pom.xml
@ -92,6 +92,11 @@
|
||||
<version>1.18.30</version>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>com.alibaba.cloud</groupId>
|
||||
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!-- OpenFeign -->
|
||||
<dependency>
|
||||
<groupId>org.springframework.cloud</groupId>
|
||||
@ -136,6 +141,12 @@
|
||||
<artifactId>spring-boot-starter-data-redis</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.apache.commons</groupId>
|
||||
<artifactId>commons-pool2</artifactId>
|
||||
<version>2.9.0</version>
|
||||
</dependency>
|
||||
|
||||
<!-- MySQL 驱动 -->
|
||||
<dependency>
|
||||
<groupId>mysql</groupId>
|
||||
|
||||
@ -43,7 +43,8 @@ public class ItemController {
|
||||
public OpenResponse<List<AppxCategoryVO>> categoryList(
|
||||
@ApiParam(value = "商品类型:1-售卖类(实物),2-租赁类(实物),3-付费充值/兑换类(虚拟)") @RequestParam String itemType,
|
||||
@ApiParam(value = "类目状态,默认AUDIT_PASSED", example = "AUDIT_PASSED") @RequestParam(required = false) String catStatus) {
|
||||
return itemService.getCategories(itemType, catStatus);
|
||||
//return itemService.getCategories(itemType, catStatus);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -55,7 +56,8 @@ public class ItemController {
|
||||
public OpenResponse<AlipayOpenAppItemTemplateQueryResponse> queryTemplate(
|
||||
@ApiParam(value = "类目ID", required = true) @RequestParam String categoryId,
|
||||
@ApiParam(value = "商品类型:1-售卖类(实物),2-租赁类(实物),3-付费充值/兑换类(虚拟)") @RequestParam(required = false) String itemType) {
|
||||
return itemService.queryTemplate(categoryId, itemType);
|
||||
//return itemService.queryTemplate(categoryId, itemType);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -67,13 +69,15 @@ public class ItemController {
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/rent/create")
|
||||
public OpenResponse<String> rentCreate(@RequestBody RentRuleItem request) {
|
||||
return itemService.createRentItem(request);
|
||||
//return itemService.createRentItem(request);
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@PostMapping(value = "/rent/modify")
|
||||
public OpenResponse<String> modifyCreate(@RequestBody RentRuleItem request) {
|
||||
return itemService.modifyItem(request);
|
||||
//return itemService.modifyItem(request);
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "商品详情查询")
|
||||
@ -82,8 +86,9 @@ public class ItemController {
|
||||
public OpenResponse<AlipayOpenAppItemQueryResponse> query(@ApiParam(value = "支付平台侧商品ID") @RequestParam(required = false) String itemId,
|
||||
@ApiParam(value = "商家侧商品ID") @RequestParam(required = false) String outItemId,
|
||||
@ApiParam(value = "是否查询编辑版本,默认为0", defaultValue = "0") @RequestParam(required = false) String needEditSpu) {
|
||||
return itemService.queryItemDetail(itemId, outItemId,
|
||||
StringUtils.isNumeric(needEditSpu) ? Long.parseLong(needEditSpu) : 0);
|
||||
// return itemService.queryItemDetail(itemId, outItemId,
|
||||
// StringUtils.isNumeric(needEditSpu) ? Long.parseLong(needEditSpu) : 0);
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -93,7 +98,9 @@ public class ItemController {
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/template/create")
|
||||
public OpenResponse<String> templateCreate() {
|
||||
return itemService.syncDeliveryInfo();
|
||||
|
||||
//return itemService.syncDeliveryInfo();
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
@ -103,21 +110,27 @@ public class ItemController {
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/delivery/query")
|
||||
public OpenResponse<String> deliveryQuery() {
|
||||
return itemService.deliveryInfoQuery();
|
||||
|
||||
//return itemService.deliveryInfoQuery();
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "租赁类(实物)履约模板创建")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/deliverytemplate/query")
|
||||
public OpenResponse<String> deliveryTemplateQuery() {
|
||||
return itemService.deliveryTemplateQuery();
|
||||
|
||||
//return itemService.deliveryTemplateQuery();
|
||||
return null;
|
||||
}
|
||||
|
||||
@ApiOperation(value = "租赁类(实物)履约模板创建")
|
||||
@ApiOperationSupport(order = 4)
|
||||
@PostMapping(value = "/shop/query")
|
||||
public OpenResponse<String> shopQuery() {
|
||||
return itemService.shopQuery();
|
||||
|
||||
//return itemService.shopQuery();
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
@ -125,7 +138,8 @@ public class ItemController {
|
||||
@GetMapping(value = "/sync/item")
|
||||
public Map<String,String> syncItem(@RequestParam(required = false) String brandId,@RequestParam(required = false) String carModelId,
|
||||
@RequestParam(required = false) String carRuleId,@RequestParam(required = false) String batteryRuleId) {
|
||||
return rentRuleItemService.syncItem(brandId, carModelId,carRuleId,batteryRuleId);
|
||||
//return rentRuleItemService.syncItem(brandId, carModelId,carRuleId,batteryRuleId);
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -224,9 +224,8 @@ public class ItemServiceImpl implements ItemService {
|
||||
// 设置平台类目
|
||||
model.setCategoryId("C001684401");
|
||||
// 设置商品主图
|
||||
String imgStr = imageUploadService.uploadAndReturnId(rentRuleItem.getImage(), "ITEM_HEAD_IMG");
|
||||
model.setHeadImg(imgStr);
|
||||
rentRuleItemvo.setImage(imgStr);
|
||||
model.setHeadImg(rentRuleItem.getAliItemId());
|
||||
rentRuleItemvo.setImage(rentRuleItem.getAliItemId());
|
||||
// 设置商品模版类型
|
||||
model.setItemType("2");
|
||||
//sku_attrs
|
||||
|
||||
@ -3,6 +3,7 @@ package com.sczx.pay.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.context.annotation.Profile;
|
||||
import springfox.documentation.builders.ApiInfoBuilder;
|
||||
import springfox.documentation.builders.ParameterBuilder;
|
||||
import springfox.documentation.builders.PathSelectors;
|
||||
@ -17,6 +18,7 @@ import java.util.Arrays;
|
||||
|
||||
@Configuration
|
||||
@EnableSwagger2
|
||||
@Profile("!prod") // 除了prod环境外都启用
|
||||
public class SwaggerConfig {
|
||||
@Bean
|
||||
public Docket createRestApi() {
|
||||
|
||||
@ -0,0 +1,55 @@
|
||||
package com.sczx.pay.controller;
|
||||
|
||||
import com.sczx.pay.dto.*;
|
||||
import com.sczx.pay.service.AlipayService;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
@Api(value = "支付宝芝麻免押支付接口", tags = "支付宝芝麻免押支付接口")
|
||||
@Slf4j
|
||||
@RestController
|
||||
@RequestMapping("/api/authAlipay")
|
||||
public class AliAuthPaymentController {
|
||||
|
||||
@Autowired
|
||||
private AlipayService alipayService;
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 免押冻结
|
||||
*/
|
||||
@ApiOperation(value = "免押冻结接口")
|
||||
@PostMapping("/fundFreeze")
|
||||
public AlipayFundFreezeResponse fundFreeze(@RequestBody AlipayFundFreezeRequest request) {
|
||||
log.info("收到支付宝免押冻结请求: {}", request);
|
||||
return alipayService.fundFreeze(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 取消冻结
|
||||
*/
|
||||
@ApiOperation(value = "取消冻结接口")
|
||||
@PostMapping("/cancelFundFreeze")
|
||||
public AlipayFundFreezeResponse cancelFundFreeze(@RequestBody AlipayFundFreezeRequest request) {
|
||||
log.info("收到支付宝取消免押冻结请求: {}", request);
|
||||
return alipayService.cancelFundFreeze(request);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "查询冻结接口")
|
||||
@PostMapping("/queryFundFreeze")
|
||||
public AlipayQueryFreezeResponse queryFundFreeze(@RequestBody AlipayQueryFreezeRequest alipayQueryFreezeRequest) {
|
||||
log.info("收到支付宝查询免押冻结请求: {}", alipayQueryFreezeRequest);
|
||||
return alipayService.queryFundFreeze(alipayQueryFreezeRequest);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "完结冻结接口")
|
||||
@PostMapping("/finishFreeze")
|
||||
public AlipayResponse finishFreeze(@RequestBody AlipayFinishFreezeRequest alipayFinishFreezeRequest) {
|
||||
log.info("收到支付宝完结免押冻结请求: {}", alipayFinishFreezeRequest);
|
||||
return alipayService.finishFreeze(alipayFinishFreezeRequest);
|
||||
}
|
||||
}
|
||||
@ -138,6 +138,55 @@ public class AliPayNotifyController {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 支付宝退款结果通知
|
||||
*/
|
||||
@ApiOperation(value = "支付宝免押通知")
|
||||
@PostMapping("/freeze/notify")
|
||||
public String alipayFreezeNotify(HttpServletRequest request) {
|
||||
try {
|
||||
// 读取支付宝退款回调数据
|
||||
Map<String, String> params = new HashMap<>();
|
||||
Map<String, String[]> requestParams = request.getParameterMap();
|
||||
for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {
|
||||
String name = iter.next();
|
||||
String[] values = requestParams.get(name);
|
||||
String valueStr = "";
|
||||
for (int i = 0; i < values.length; i++) {
|
||||
valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ",";
|
||||
}
|
||||
params.put(name, valueStr);
|
||||
}
|
||||
|
||||
log.info("收到支付宝免押结果通知, 数据: {}", params);
|
||||
|
||||
// 验证签名
|
||||
// 注意:支付宝退款通知的签名验证方式可能与支付通知不同
|
||||
// 这里简化处理,实际应根据支付宝文档实现
|
||||
|
||||
|
||||
String status = params.get("status");
|
||||
|
||||
if ("SUCCESS".equals(status)) {
|
||||
log.warn("支付宝免押通知状态: {}", status);
|
||||
// 处理免押通知
|
||||
String outOrderNo = params.get("out_order_no");
|
||||
String authNo = params.get("auth_no");
|
||||
|
||||
// 更新数据库中的免押支付状态
|
||||
boolean success = alipayService.processFreezeNotify(outOrderNo,authNo);
|
||||
if (success) {
|
||||
log.info("支付宝免押处理完成,支付单号: {}, 支付宝授权资金订单号: {}",
|
||||
outOrderNo, authNo);
|
||||
return buildResponse("success");
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("处理支付宝退款通知异常", e);
|
||||
}
|
||||
return buildResponse("failure");
|
||||
}
|
||||
|
||||
private String buildResponse(String result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -27,6 +27,13 @@ public class AliPaymentController {
|
||||
return alipayService.unifiedOrder(request);
|
||||
}
|
||||
|
||||
@ApiOperation(value = "支付宝芝麻统一下单接口")
|
||||
@PostMapping("/zhiMaOrder")
|
||||
public AlipayCreateResponse zhiMaOrder(@RequestBody AlipayCreateRequest request) {
|
||||
log.info("收到支付宝免押支付请求: {}", request);
|
||||
return alipayService.zhiMaOrder(request);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询订单接口
|
||||
*/
|
||||
@ -66,5 +73,4 @@ public class AliPaymentController {
|
||||
log.info("收到支付宝退款查询请求: {}", request);
|
||||
return alipayService.refundQuery(request);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -11,4 +11,5 @@ public class AlipayCreateRequest {
|
||||
private String totalAmount; // 订单总金额
|
||||
private String body; // 订单描述
|
||||
private String openId; // 用户ID
|
||||
private String authNo;
|
||||
}
|
||||
|
||||
@ -0,0 +1,19 @@
|
||||
package com.sczx.pay.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("支付宝资金冻结请求参数")
|
||||
@Data
|
||||
public class AlipayFinishFreezeRequest {
|
||||
private String companyId;
|
||||
@ApiModelProperty(value = "支付宝资金授权订单号")
|
||||
private String authNo;
|
||||
|
||||
@ApiModelProperty(value = "解冻请求流水号")
|
||||
private String outRequestNo;
|
||||
|
||||
@ApiModelProperty(value = "解冻金额")
|
||||
private String amount;
|
||||
}
|
||||
16
src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java
Normal file
16
src/main/java/com/sczx/pay/dto/AlipayFundFreezeRequest.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.pay.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("支付宝资金冻结请求参数")
|
||||
@Data
|
||||
public class AlipayFundFreezeRequest {
|
||||
private String companyId;
|
||||
private String outOrderNo;
|
||||
private String title;
|
||||
private String amount;
|
||||
@ApiModelProperty(value = "支付宝资金授权订单号")
|
||||
private String authNo;
|
||||
}
|
||||
14
src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java
Normal file
14
src/main/java/com/sczx/pay/dto/AlipayFundFreezeResponse.java
Normal file
@ -0,0 +1,14 @@
|
||||
package com.sczx.pay.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("支付宝资金冻结响应参数")
|
||||
@Data
|
||||
public class AlipayFundFreezeResponse {
|
||||
private boolean success;
|
||||
private String message;
|
||||
private String outTradeNo; // 商户订单号
|
||||
private String orderStr; // 支付串(用于前端调起支付)
|
||||
private String code; // 状态码
|
||||
}
|
||||
12
src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java
Normal file
12
src/main/java/com/sczx/pay/dto/AlipayQueryFreezeRequest.java
Normal file
@ -0,0 +1,12 @@
|
||||
package com.sczx.pay.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("支付宝资金冻结请求参数")
|
||||
@Data
|
||||
public class AlipayQueryFreezeRequest {
|
||||
private String companyId;
|
||||
private String outOrderNo;
|
||||
private String operationType;
|
||||
}
|
||||
@ -0,0 +1,14 @@
|
||||
package com.sczx.pay.dto;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import lombok.Data;
|
||||
|
||||
@ApiModel("支付宝资金冻结响应参数")
|
||||
@Data
|
||||
public class AlipayQueryFreezeResponse {
|
||||
private boolean success;
|
||||
private String message;
|
||||
private String outTradeNo; // 商户订单号
|
||||
private String authNo; // 支付串(用于前端调起支付)
|
||||
private String code; // 状态码
|
||||
}
|
||||
@ -10,6 +10,7 @@ import org.apache.ibatis.annotations.Update;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
@Mapper
|
||||
public interface OrderPayMapper {
|
||||
@ -67,7 +68,17 @@ public interface OrderPayMapper {
|
||||
@Select("select suborder_id from zc_order_sub where payment_id = #{paymentId} and suborder_type = 'RENTBATTEY' limit 1")
|
||||
Long getSubOrderIdByTradeNo(@Param("paymentId") String paymentId);
|
||||
|
||||
@Select("select * from zc_order_sub where payment_id = #{paymentId} order by suborder_id desc limit 1")
|
||||
OrderSub getSubOrderByTradeNo(@Param("paymentId") String paymentId);
|
||||
@Select("select * from zc_order_sub where payment_id = #{paymentId}")
|
||||
List<OrderSub> listSubOrderByTradeNo(@Param("paymentId") String paymentId);
|
||||
|
||||
/**
|
||||
* 免押成功,更新子订单状态
|
||||
*/
|
||||
@Update("update zc_order_sub set transaction_id = #{authNo},pay_status = 'SUCCESS'" +
|
||||
" where payment_id = #{outTradeNo}")
|
||||
int updateFreezeSubOrderPaymentStatus(@Param("outTradeNo") String outTradeNo,@Param("authNo") String authNo);
|
||||
|
||||
@Select("SELECT SHA2 ( CONVERT (concat(u.real_name,u.id_no) USING utf8 ), 256 ) as hashStr FROM zc_order_sub s,zc_order_main m,zc_base_user u WHERE s.payment_id = #{paymentId} AND s.order_id = m.order_id AND m.customer_phone = u.phone_number AND u.authed = '1'")
|
||||
String getHashStrByTradeNo(@Param("paymentId") String paymentId);
|
||||
|
||||
}
|
||||
|
||||
@ -10,6 +10,9 @@ public interface AlipayService {
|
||||
*/
|
||||
AlipayCreateResponse unifiedOrder(AlipayCreateRequest request);
|
||||
|
||||
|
||||
AlipayCreateResponse zhiMaOrder(AlipayCreateRequest request);
|
||||
|
||||
/**
|
||||
* 查询订单
|
||||
*/
|
||||
@ -30,6 +33,26 @@ public interface AlipayService {
|
||||
*/
|
||||
AlipayResponse refundQuery(AlipayRefundRequest refundQueryRequest);
|
||||
|
||||
/**
|
||||
* 资金授权冻结接口
|
||||
*/
|
||||
AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
|
||||
|
||||
/**
|
||||
* 撤销资金授权冻结接口
|
||||
*/
|
||||
AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest);
|
||||
|
||||
/**
|
||||
* 查询资金授权冻结接口
|
||||
*/
|
||||
AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest);
|
||||
|
||||
/**
|
||||
* 完结冻结接口
|
||||
*/
|
||||
AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest);
|
||||
|
||||
/**
|
||||
* 验证通知签名
|
||||
*/
|
||||
@ -44,4 +67,9 @@ public interface AlipayService {
|
||||
* 处理退款通知
|
||||
*/
|
||||
boolean processRefundNotify(Map<String, String> notifyMap);
|
||||
|
||||
/**
|
||||
* 处理免押通知
|
||||
*/
|
||||
boolean processFreezeNotify(String outOrderNo,String authNo);
|
||||
}
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package com.sczx.pay.service;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.sczx.pay.config.DynamicWXPayConfig;
|
||||
import com.sczx.pay.dto.PaymentRequest;
|
||||
import com.sczx.pay.dto.PaymentResponse;
|
||||
@ -10,6 +11,7 @@ import com.sczx.pay.mapper.OrderPayMapper;
|
||||
import com.sczx.pay.mapper.PaymentRecordMapper;
|
||||
import com.sczx.pay.mapper.RefundRecordMapper;
|
||||
import com.sczx.pay.sdk.WXPay;
|
||||
import com.sczx.pay.thirdpart.integration.SyncInteg;
|
||||
import com.sczx.pay.utils.WXPayUtil;
|
||||
import com.sczx.pay.utils.IPUtils;
|
||||
import org.slf4j.Logger;
|
||||
@ -25,6 +27,7 @@ import java.math.BigDecimal;
|
||||
import java.math.RoundingMode;
|
||||
import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
@ -50,6 +53,9 @@ public class WechatPayService {
|
||||
@Autowired
|
||||
private OrderPayMapper orderPayMapper;
|
||||
|
||||
@Autowired
|
||||
private SyncInteg syncInteg;
|
||||
|
||||
@Value("${wechat.pay.app-id}")
|
||||
private String appId;
|
||||
|
||||
@ -173,7 +179,7 @@ public class WechatPayService {
|
||||
paymentRecord.setPayChannel(PaymentRecord.PayChannel.WECHAT.name()); // 设置支付渠道为微信支付
|
||||
|
||||
paymentRecordMapper.insertPaymentRecord(paymentRecord);
|
||||
logger.info("支付记录已保存,订单号: {}", request.getOutTradeNo());
|
||||
logger.info("支付记录已保存,订单号: {},内容为: {}",paymentRecord.getOutTradeNo(), JSON.toJSONString(paymentRecord));
|
||||
} catch (Exception e) {
|
||||
logger.error("保存支付记录异常,订单号: {}", request.getOutTradeNo(), e);
|
||||
}
|
||||
@ -270,7 +276,7 @@ public class WechatPayService {
|
||||
refundNotifyUrl
|
||||
);
|
||||
|
||||
String path = certPath+companyConfig.getMchId()+".p12";
|
||||
String path = certPath+"wechatpay-"+companyConfig.getMchId()+"/"+companyConfig.getMchId()+".p12";
|
||||
String certAbsolutePath = getCertAbsolutePath(path);
|
||||
wxPayConfig.setCertPath(certAbsolutePath);
|
||||
|
||||
@ -292,34 +298,35 @@ public class WechatPayService {
|
||||
/**
|
||||
* 记录退款信息到数据库
|
||||
*/
|
||||
private void recordRefundInfo(RefundRequest request, CompanyWechatConfig companyConfig, Map<String, String> result,BigDecimal totalFee) {
|
||||
private void recordRefundInfo(RefundRequest request, CompanyWechatConfig companyConfig, Map<String, String> result, BigDecimal totalFee) {
|
||||
try {
|
||||
RefundRecord refundRecord = refundRecordMapper.getRefundRecordByOutRefundNo(request.getOutRefundNo());
|
||||
if (refundRecord == null) {
|
||||
refundRecord = new RefundRecord();
|
||||
refundRecord.setCompanyId(request.getCompanyId());
|
||||
refundRecord.setOutTradeNo(request.getOutTradeNo());
|
||||
refundRecord.setOutRefundNo(request.getOutRefundNo());
|
||||
refundRecord.setTotalFee(totalFee);
|
||||
refundRecord.setRefundFee(new BigDecimal(request.getRefundFee()).divide(new BigDecimal(100))); // 转换为元
|
||||
refundRecord.setRefundDesc(request.getRefundDesc());
|
||||
refundRecord.setCreateTime(new Date());
|
||||
refundRecord.setUpdateTime(new Date());
|
||||
|
||||
if ("SUCCESS".equals(result.get("result_code"))) {
|
||||
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
|
||||
refundRecord.setRefundStatusDesc("退款处理中");
|
||||
refundRecord.setRefundId(result.get("refund_id"));
|
||||
} else {
|
||||
refundRecord.setRefundStatus("FAIL"); // 退款失败
|
||||
refundRecord.setRefundStatusDesc(result.get("err_code_des"));
|
||||
}
|
||||
|
||||
refundRecordMapper.insertRefundRecord(refundRecord);
|
||||
logger.info("退款记录已保存,退款单号: {}", request.getOutRefundNo());
|
||||
} else{
|
||||
logger.info("退款记录已存在,退款单号: {}", request.getOutRefundNo());
|
||||
if (refundRecord != null) {
|
||||
logger.warn("已存在对应的退款记录,退款单号: {}", request.getOutRefundNo());
|
||||
return;
|
||||
}
|
||||
refundRecord = new RefundRecord();
|
||||
refundRecord.setCompanyId(request.getCompanyId());
|
||||
refundRecord.setOutTradeNo(request.getOutTradeNo());
|
||||
refundRecord.setOutRefundNo(request.getOutRefundNo());
|
||||
refundRecord.setTotalFee(totalFee);
|
||||
refundRecord.setRefundFee(new BigDecimal(request.getRefundFee()).divide(new BigDecimal(100))); // 转换为元
|
||||
refundRecord.setRefundDesc(request.getRefundDesc());
|
||||
refundRecord.setCreateTime(new Date());
|
||||
refundRecord.setUpdateTime(new Date());
|
||||
|
||||
if ("SUCCESS".equals(result.get("result_code"))) {
|
||||
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
|
||||
refundRecord.setRefundStatusDesc("退款处理中");
|
||||
refundRecord.setRefundId(result.get("refund_id"));
|
||||
} else {
|
||||
refundRecord.setRefundStatus("FAIL"); // 退款失败
|
||||
refundRecord.setRefundStatusDesc(result.get("err_code_des"));
|
||||
}
|
||||
|
||||
refundRecordMapper.insertRefundRecord(refundRecord);
|
||||
logger.info("退款记录已保存,退款单号: {}", request.getOutRefundNo());
|
||||
|
||||
|
||||
} catch (Exception e) {
|
||||
logger.error("保存退款记录异常,退款单号: {}", request.getOutRefundNo(), e);
|
||||
@ -419,8 +426,14 @@ public class WechatPayService {
|
||||
if(OrderStatus.equals("WAIT_PAY")){
|
||||
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"WAIT_PICK");
|
||||
}else if (OrderStatus.equals("RERENT_WAIT_PAY")){
|
||||
OrderSub orderSub = orderPayMapper.getSubOrderByTradeNo(outTradeNo);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),orderSub.getReturnTime(),0,orderMain.getOrderAmount().add(orderSub.getAmount()),"RENT_ING");
|
||||
List<OrderSub> orderSub = orderPayMapper.listSubOrderByTradeNo(outTradeNo);
|
||||
OrderSub rentCarSubOrder = orderSub.stream().filter(x -> x.getSuborderType().equals("RENTCAR")).findFirst().orElse( null);
|
||||
BigDecimal rentCarAmount = orderSub.stream().map(OrderSub::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),rentCarSubOrder.getReturnTime(),0,orderMain.getOrderAmount().add(rentCarAmount),"RENT_ING");
|
||||
//发送租电订单同步
|
||||
Long batterySubOrderId = orderPayMapper.getSubOrderIdByTradeNo(outTradeNo);
|
||||
logger.info("发送租电订单同步: {}", batterySubOrderId);
|
||||
syncInteg.sendSubOrderId(batterySubOrderId);
|
||||
}
|
||||
orderPayMapper.updateSubOrderPaymentStatus(outTradeNo,"WX_PAY",PayStatus.SUCCESS.getCode(),transactionId);
|
||||
|
||||
|
||||
@ -16,6 +16,7 @@ import com.sczx.pay.mapper.OrderPayMapper;
|
||||
import com.sczx.pay.mapper.PaymentRecordMapper;
|
||||
import com.sczx.pay.mapper.RefundRecordMapper;
|
||||
import com.sczx.pay.service.AlipayRentService;
|
||||
import com.sczx.pay.thirdpart.integration.SyncInteg;
|
||||
import com.sczx.pay.utils.AlipaySdkUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -51,6 +52,10 @@ public class AlipayRentServiceImpl implements AlipayRentService {
|
||||
@Autowired
|
||||
private OrderPayMapper orderPayMapper;
|
||||
|
||||
@Autowired
|
||||
private SyncInteg syncInteg;
|
||||
|
||||
|
||||
@Override
|
||||
public AlipayRentPayResponse rentPay(AlipayRentPayReq alipayRentPayReq) {
|
||||
AlipayRentPayResponse response = new AlipayRentPayResponse();
|
||||
@ -155,8 +160,15 @@ public class AlipayRentServiceImpl implements AlipayRentService {
|
||||
if(OrderStatus.equals("WAIT_PAY")){
|
||||
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"WAIT_PICK");
|
||||
}else if (OrderStatus.equals("RERENT_WAIT_PAY")){
|
||||
OrderSub orderSub = orderPayMapper.getSubOrderByTradeNo(outTradeNo);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),orderSub.getReturnTime(),0,orderMain.getOrderAmount().add(orderSub.getAmount()),"RENT_ING");
|
||||
List<OrderSub> orderSub = orderPayMapper.listSubOrderByTradeNo(outTradeNo);
|
||||
OrderSub rentCarSubOrder = orderSub.stream().filter(x -> x.getSuborderType().equals("RENTCAR")).findFirst().orElse( null);
|
||||
BigDecimal rentCarAmount = orderSub.stream().map(OrderSub::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),rentCarSubOrder.getReturnTime(),0,orderMain.getOrderAmount().add(rentCarAmount),"RENT_ING");
|
||||
|
||||
//发送租电订单同步
|
||||
Long batterySubOrderId = orderPayMapper.getSubOrderIdByTradeNo(outTradeNo);
|
||||
log.info("发送租电订单同步: {}", batterySubOrderId);
|
||||
syncInteg.sendSubOrderId(batterySubOrderId);
|
||||
}
|
||||
orderPayMapper.updateSubOrderPaymentStatus(outTradeNo,"ZFB_PAY", PayStatus.SUCCESS.getCode(),tradeNo);
|
||||
return true;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
package com.sczx.pay.service.impl;
|
||||
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alipay.api.AlipayApiException;
|
||||
import com.alipay.api.domain.*;
|
||||
@ -14,15 +15,18 @@ import com.sczx.pay.mapper.OrderPayMapper;
|
||||
import com.sczx.pay.mapper.PaymentRecordMapper;
|
||||
import com.sczx.pay.mapper.RefundRecordMapper;
|
||||
import com.sczx.pay.service.AlipayService;
|
||||
import com.sczx.pay.thirdpart.integration.SyncInteg;
|
||||
import com.sczx.pay.utils.AlipaySdkUtil;
|
||||
import com.sczx.pay.utils.ThreadPoolUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@ -41,9 +45,19 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
@Value("${alipay.refund-notify-url}")
|
||||
private String refundNotifyUrl;
|
||||
|
||||
@Value("${alipay.freeze-notify-url}")
|
||||
private String freezeNotifyUrl;
|
||||
|
||||
|
||||
@Value("${alipay.alipay-public-cert-path}")
|
||||
private String alipayPublicCertPath;
|
||||
|
||||
@Value("${alipay.serviceid}")
|
||||
private String serviceId ;
|
||||
|
||||
@Value("${alipay.rent.rentCategory}")
|
||||
private String rentCategory;
|
||||
|
||||
|
||||
@Autowired
|
||||
private PaymentRecordMapper paymentRecordMapper;
|
||||
@ -54,6 +68,9 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
@Autowired
|
||||
private OrderPayMapper orderPayMapper;
|
||||
|
||||
@Autowired
|
||||
private SyncInteg syncInteg;
|
||||
|
||||
@Override
|
||||
public AlipayCreateResponse unifiedOrder(AlipayCreateRequest alipayCreateRequest) {
|
||||
AlipayCreateResponse response = new AlipayCreateResponse();
|
||||
@ -122,6 +139,71 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public AlipayCreateResponse zhiMaOrder(AlipayCreateRequest alipayCreateRequest) {
|
||||
AlipayCreateResponse response = new AlipayCreateResponse();
|
||||
try {
|
||||
|
||||
// 构造请求参数以调用接口
|
||||
AlipayTradePayRequest request = new AlipayTradePayRequest();
|
||||
AlipayTradePayModel model = new AlipayTradePayModel();
|
||||
|
||||
model.setBuyerOpenId(alipayCreateRequest.getOpenId());
|
||||
// 设置商户订单号
|
||||
model.setOutTradeNo(alipayCreateRequest.getOutTradeNo());
|
||||
|
||||
// 设置订单总金额
|
||||
model.setTotalAmount(alipayCreateRequest.getTotalAmount());
|
||||
|
||||
// 设置订单标题
|
||||
model.setSubject(alipayCreateRequest.getSubject());
|
||||
|
||||
model.setAuthNo(alipayCreateRequest.getAuthNo());
|
||||
|
||||
// 设置预授权确认模式
|
||||
model.setAuthConfirmMode("NOT_COMPLETE");
|
||||
|
||||
// 设置产品码
|
||||
model.setProductCode("PREAUTH_PAY");
|
||||
|
||||
|
||||
request.setBizModel(model);
|
||||
//设置回调地址
|
||||
request.setNotifyUrl(notifyUrl);
|
||||
|
||||
// 第三方代调用模式下请设置app_auth_token
|
||||
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
|
||||
log.info("支付宝免押支付下单请求:{}", JSONObject.toJSONString(request));
|
||||
AlipayTradePayResponse alipayResponse = alipaySdkUtil.execute(request);
|
||||
log.info("支付宝免押支付下单返回:{}", JSONObject.toJSONString(alipayResponse));
|
||||
if (alipayResponse.isSuccess()) {
|
||||
response.setSuccess(true);
|
||||
response.setOrderStr(alipayResponse.getBody());
|
||||
response.setOutTradeNo(alipayCreateRequest.getOutTradeNo());
|
||||
response.setTradeNo(alipayResponse.getTradeNo());
|
||||
response.setCode("SUCCESS");
|
||||
response.setMessage("下单成功");
|
||||
//保存支付单
|
||||
recordPaymentInfo(alipayCreateRequest);
|
||||
|
||||
} else {
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("下单失败: " + alipayResponse.getMsg() + ":" + alipayResponse.getSubMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("支付宝下单异常,公司ID: {}, 订单号: {}", alipayCreateRequest.getCompanyId(), alipayCreateRequest.getOutTradeNo(), e);
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("下单异常: " + e.getMessage());
|
||||
}
|
||||
|
||||
return response;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public AlipayQueryResponse orderQuery(String outTradeNo) {
|
||||
AlipayQueryResponse response = new AlipayQueryResponse();
|
||||
@ -302,6 +384,205 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlipayFundFreezeResponse fundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest) {
|
||||
AlipayFundFreezeResponse response = new AlipayFundFreezeResponse();
|
||||
try {
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundAuthOrderAppFreezeRequest request = new AlipayFundAuthOrderAppFreezeRequest();
|
||||
AlipayFundAuthOrderAppFreezeModel model = new AlipayFundAuthOrderAppFreezeModel();
|
||||
|
||||
// 设置订单标题
|
||||
model.setOrderTitle(alipayFundFreezeRequest.getTitle());
|
||||
|
||||
// 设置商户授权资金订单号
|
||||
model.setOutOrderNo(alipayFundFreezeRequest.getOutOrderNo());
|
||||
|
||||
// 设置商户本次资金操作的请求流水号
|
||||
model.setOutRequestNo(alipayFundFreezeRequest.getOutOrderNo());
|
||||
|
||||
// 设置需要冻结的金额
|
||||
model.setAmount(alipayFundFreezeRequest.getAmount());
|
||||
|
||||
// 设置预授权订单相对超时时间
|
||||
model.setTimeoutExpress("5m");
|
||||
|
||||
// 设置销售产品码
|
||||
model.setProductCode("PRE_AUTH_ONLINE");
|
||||
|
||||
// 设置业务扩展参数
|
||||
model.setExtraParam("{\"category\": \""+rentCategory+"\",\"serviceId\": \""+serviceId+"\"}");
|
||||
|
||||
// 设置免押受理台模式
|
||||
model.setDepositProductMode("DEPOSIT_ONLY");
|
||||
|
||||
request.setBizModel(model);
|
||||
|
||||
// 设置异步通知地址
|
||||
request.setNotifyUrl(freezeNotifyUrl);
|
||||
log.info("免押冻结请求 : {}", JSON.toJSONString(request));
|
||||
AlipayFundAuthOrderAppFreezeResponse fundAuthOrderAppFreezeResponse = alipaySdkUtil.sdkExecute(request);
|
||||
log.info("免押冻结响应 : {}",fundAuthOrderAppFreezeResponse.getBody());
|
||||
|
||||
if (fundAuthOrderAppFreezeResponse.isSuccess()) {
|
||||
response.setOrderStr(fundAuthOrderAppFreezeResponse.getBody());
|
||||
response.setSuccess(true);
|
||||
response.setCode("SUCCESS");
|
||||
response.setMessage("免押冻结成功");
|
||||
|
||||
} else {
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("免押冻结失败: " + fundAuthOrderAppFreezeResponse.getMsg() + ":" + fundAuthOrderAppFreezeResponse.getSubMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("支付宝免押冻结异常,公司ID: {}, 订单号: {}", alipayFundFreezeRequest.getCompanyId(), alipayFundFreezeRequest.getOutOrderNo(), e);
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("支付宝免押冻结失败异常: " + e.getMessage());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlipayFundFreezeResponse cancelFundFreeze(AlipayFundFreezeRequest alipayFundFreezeRequest) {
|
||||
AlipayFundFreezeResponse response = new AlipayFundFreezeResponse();
|
||||
try {
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundAuthOperationCancelRequest request = new AlipayFundAuthOperationCancelRequest();
|
||||
AlipayFundAuthOperationCancelModel model = new AlipayFundAuthOperationCancelModel();
|
||||
|
||||
// 设置商户的授权资金订单号
|
||||
model.setOutOrderNo(alipayFundFreezeRequest.getOutOrderNo());
|
||||
|
||||
// 设置商户的授权资金操作流水号
|
||||
model.setOutRequestNo(alipayFundFreezeRequest.getOutOrderNo());
|
||||
|
||||
//设置商户的授权资金操作流水号
|
||||
model.setAuthNo(alipayFundFreezeRequest.getAuthNo());
|
||||
|
||||
// 设置商户对本次撤销操作的附言描述
|
||||
model.setRemark(alipayFundFreezeRequest.getTitle());
|
||||
|
||||
request.setBizModel(model);
|
||||
|
||||
request.setBizModel(model);
|
||||
log.info("取消免押冻结请求 : {}",request.getTextParams());
|
||||
AlipayFundAuthOperationCancelResponse fundAuthOperationCancelResponse = alipaySdkUtil.execute(request);
|
||||
log.info("取消免押冻结响应 : {}",fundAuthOperationCancelResponse.getBody());
|
||||
|
||||
if (fundAuthOperationCancelResponse.isSuccess()) {
|
||||
response.setSuccess(true);
|
||||
response.setCode("SUCCESS");
|
||||
response.setMessage("取消免押冻结成功");
|
||||
|
||||
} else {
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("取消免押冻结失败: " + fundAuthOperationCancelResponse.getMsg() + ":" + fundAuthOperationCancelResponse.getSubMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("支付宝取消免押冻结异常,公司ID: {}, 订单号: {}", alipayFundFreezeRequest.getCompanyId(), alipayFundFreezeRequest.getOutOrderNo(), e);
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("支付宝取消免押冻结失败异常: " + e.getMessage());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlipayQueryFreezeResponse queryFundFreeze(AlipayQueryFreezeRequest alipayQueryFreezeRequest) {
|
||||
AlipayQueryFreezeResponse response = new AlipayQueryFreezeResponse();
|
||||
try {
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundAuthOperationDetailQueryRequest request = new AlipayFundAuthOperationDetailQueryRequest();
|
||||
AlipayFundAuthOperationDetailQueryModel model = new AlipayFundAuthOperationDetailQueryModel();
|
||||
//
|
||||
// // 设置支付宝授权资金订单号
|
||||
// model.setAuthNo("2014021601002000640012345678");
|
||||
|
||||
// 设置商户的授权资金订单号
|
||||
model.setOutOrderNo(alipayQueryFreezeRequest.getOutOrderNo());
|
||||
|
||||
// // 设置支付宝的授权资金操作流水号
|
||||
// model.setOperationId("20140216010020006400");
|
||||
|
||||
// 设置商户的授权资金操作流水号
|
||||
model.setOutRequestNo(alipayQueryFreezeRequest.getOutOrderNo());
|
||||
|
||||
// 设置需要查询的授权资金操作类型
|
||||
model.setOperationType(alipayQueryFreezeRequest.getOperationType());
|
||||
|
||||
request.setBizModel(model);
|
||||
log.info("查询免押冻结请求 : {}",request);
|
||||
AlipayFundAuthOperationDetailQueryResponse queryResponse = alipaySdkUtil.execute(request);
|
||||
log.info("查询免押冻结响应 : {}",queryResponse.getBody());
|
||||
|
||||
if (queryResponse.isSuccess() && StringUtils.equalsIgnoreCase(queryResponse.getOrderStatus(), "AUTHORIZED")) {
|
||||
response.setSuccess(true);
|
||||
response.setCode("SUCCESS");
|
||||
response.setAuthNo(queryResponse.getAuthNo());
|
||||
response.setOutTradeNo(queryResponse.getOutOrderNo());
|
||||
response.setMessage("查询免押冻结成功");
|
||||
|
||||
} else {
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("查询免押冻结失败: " + queryResponse.getMsg() + ":" + queryResponse.getSubMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("支付宝查询免押冻结异常,公司ID: {}, 订单号: {}", alipayQueryFreezeRequest.getCompanyId(), alipayQueryFreezeRequest.getOutOrderNo(), e);
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("支付宝查询免押冻结失败异常: " + e.getMessage());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public AlipayResponse finishFreeze(AlipayFinishFreezeRequest alipayFinishFreezeRequest) {
|
||||
AlipayResponse response = new AlipayResponse();
|
||||
try {
|
||||
// 构造请求参数以调用接口
|
||||
AlipayFundAuthOrderUnfreezeRequest request = new AlipayFundAuthOrderUnfreezeRequest();
|
||||
AlipayFundAuthOrderUnfreezeModel model = new AlipayFundAuthOrderUnfreezeModel();
|
||||
|
||||
// 设置支付宝资金授权订单号
|
||||
model.setAuthNo(alipayFinishFreezeRequest.getAuthNo());
|
||||
|
||||
// 设置解冻请求流水号
|
||||
model.setOutRequestNo(alipayFinishFreezeRequest.getOutRequestNo());
|
||||
|
||||
// 设置本次操作解冻的金额
|
||||
model.setAmount(alipayFinishFreezeRequest.getAmount());
|
||||
|
||||
// 设置商户对本次解冻操作的附言描述
|
||||
model.setRemark("还车解冻押金");
|
||||
request.setBizModel(model);
|
||||
// 第三方代调用模式下请设置app_auth_token
|
||||
// request.putOtherTextParam("app_auth_token", "<-- 请填写应用授权令牌 -->");
|
||||
log.info("完结免押冻结请求 : {}",request);
|
||||
AlipayFundAuthOrderUnfreezeResponse unFreezeResponse = alipaySdkUtil.execute(request);
|
||||
log.info("完结免押冻结响应 : {}",unFreezeResponse.getBody());
|
||||
|
||||
if (unFreezeResponse.isSuccess()) {
|
||||
response.setSuccess(true);
|
||||
response.setCode("SUCCESS");
|
||||
response.setMessage("完结免押冻结成功");
|
||||
} else {
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("完结免押冻结失败: " + unFreezeResponse.getMsg() + ":" + unFreezeResponse.getSubMsg());
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("支付宝完结免押冻结异常,公司ID: {}, 订单号: {}", alipayFinishFreezeRequest.getCompanyId(), alipayFinishFreezeRequest.getOutRequestNo(), e);
|
||||
response.setSuccess(false);
|
||||
response.setCode("FAIL");
|
||||
response.setMessage("支付宝完结免押冻结失败异常: " + e.getMessage());
|
||||
}
|
||||
return response;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean verifyNotifySign(Long companyId, Map<String, String> params) {
|
||||
try {
|
||||
@ -341,8 +622,14 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
if(OrderStatus.equals("WAIT_PAY")){
|
||||
orderPayMapper.updateOrderStatus(orderMain.getOrderNo(),"WAIT_PICK");
|
||||
}else if (OrderStatus.equals("RERENT_WAIT_PAY")){
|
||||
OrderSub orderSub = orderPayMapper.getSubOrderByTradeNo(outTradeNo);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),orderSub.getReturnTime(),0,orderMain.getOrderAmount().add(orderSub.getAmount()),"RENT_ING");
|
||||
List<OrderSub> orderSub = orderPayMapper.listSubOrderByTradeNo(outTradeNo);
|
||||
OrderSub rentCarSubOrder = orderSub.stream().filter(x -> x.getSuborderType().equals("RENTCAR")).findFirst().orElse( null);
|
||||
BigDecimal rentCarAmount = orderSub.stream().map(OrderSub::getAmount).reduce(BigDecimal.ZERO,BigDecimal::add);
|
||||
orderPayMapper.updateOrderStatusAndEndRentTime(orderMain.getOrderNo(),rentCarSubOrder.getReturnTime(),0,orderMain.getOrderAmount().add(rentCarAmount),"RENT_ING");
|
||||
//发送租电订单同步
|
||||
Long batterySubOrderId = orderPayMapper.getSubOrderIdByTradeNo(outTradeNo);
|
||||
log.info("发送租电订单同步: {}", batterySubOrderId);
|
||||
syncInteg.sendSubOrderId(batterySubOrderId);
|
||||
}
|
||||
orderPayMapper.updateSubOrderPaymentStatus(outTradeNo,"ZFB_PAY", PayStatus.SUCCESS.getCode(),tradeNo);
|
||||
return true;
|
||||
@ -414,15 +701,27 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
log.info("支付宝退款记录状态已更新,退款单号: {}, 支付宝退款单号: {}, 状态: {}", outRequestNo, outRequestNo, refundStatus);
|
||||
return true;
|
||||
} else {
|
||||
log.warn("未找到对应的微信退款记录,退款单号: {}", outRequestNo);
|
||||
log.warn("未找到对应的支付宝退款记录,退款单号: {}", outRequestNo);
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
log.error("处理微信退款通知异常,退款单号: {}", notifyMap.get("out_request_no"), e);
|
||||
log.error("处理支付宝退款通知异常,退款单号: {}", notifyMap.get("out_request_no"), e);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean processFreezeNotify(String outOrderNo, String authNo) {
|
||||
try {
|
||||
log.info("处理支付宝免押支付成功通知, 更新状态,订单号: {}, 授权号: {}", outOrderNo, authNo);
|
||||
int result = orderPayMapper.updateFreezeSubOrderPaymentStatus(outOrderNo, authNo);
|
||||
return result>0;
|
||||
} catch (Exception e) {
|
||||
log.error("处理支付宝免押支付成功通知异常,订单号: {}", outOrderNo, e);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* 记录支付信息到数据库
|
||||
*/
|
||||
@ -453,28 +752,30 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
*/
|
||||
private void recordRefundInfo(AlipayRefundRequest request) {
|
||||
try {
|
||||
PaymentRecord paymentRecord = paymentRecordMapper.getPaymentRecordByOutTradeNo(request.getOutTradeNo());
|
||||
RefundRecord refundRecord = refundRecordMapper.getRefundRecordByOutRefundNo(request.getOutRequestNo());
|
||||
if(refundRecord == null){
|
||||
PaymentRecord paymentRecord = paymentRecordMapper.getPaymentRecordByOutTradeNo(request.getOutTradeNo());
|
||||
refundRecord = new RefundRecord();
|
||||
refundRecord.setCompanyId(request.getCompanyId());
|
||||
refundRecord.setOutTradeNo(request.getOutTradeNo());
|
||||
refundRecord.setOutRefundNo(request.getOutRequestNo());
|
||||
refundRecord.setTotalFee(paymentRecord.getTotalFee());
|
||||
refundRecord.setRefundFee(new BigDecimal(request.getRefundAmount())); // 转换为元
|
||||
refundRecord.setRefundDesc(request.getRefundReason());
|
||||
refundRecord.setCreateTime(new Date());
|
||||
refundRecord.setUpdateTime(new Date());
|
||||
|
||||
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
|
||||
refundRecord.setRefundStatusDesc("退款处理中");
|
||||
refundRecord.setRefundId(request.getOutRequestNo());
|
||||
refundRecord.setPayChannel(PaymentRecord.PayChannel.ALIPAY.name());
|
||||
refundRecordMapper.insertRefundRecord(refundRecord);
|
||||
log.info("退款记录已保存,退款单号: {}", request.getOutRequestNo());
|
||||
}else {
|
||||
log.info("退款记录已存在,退款单号: {}", request.getOutRequestNo());
|
||||
if (refundRecord != null) {
|
||||
log.warn("已存在对应的退款记录,退款单号: {}", request.getOutRequestNo());
|
||||
return;
|
||||
}
|
||||
refundRecord = new RefundRecord();
|
||||
refundRecord.setCompanyId(request.getCompanyId());
|
||||
refundRecord.setOutTradeNo(request.getOutTradeNo());
|
||||
refundRecord.setOutRefundNo(request.getOutRequestNo());
|
||||
refundRecord.setTotalFee(paymentRecord.getTotalFee());
|
||||
refundRecord.setRefundFee(new BigDecimal(request.getRefundAmount())); // 转换为元
|
||||
refundRecord.setRefundDesc(request.getRefundReason());
|
||||
refundRecord.setCreateTime(new Date());
|
||||
refundRecord.setUpdateTime(new Date());
|
||||
|
||||
refundRecord.setRefundStatus("PROCESSING"); // 退款处理中
|
||||
refundRecord.setRefundStatusDesc("退款处理中");
|
||||
refundRecord.setRefundId(request.getOutRequestNo());
|
||||
refundRecord.setPayChannel(PaymentRecord.PayChannel.ALIPAY.name());
|
||||
|
||||
|
||||
refundRecordMapper.insertRefundRecord(refundRecord);
|
||||
log.info("退款记录已保存,退款单号: {}", request.getOutRequestNo());
|
||||
} catch (Exception e) {
|
||||
log.error("保存退款记录异常,退款单号: {}", request.getOutRequestNo(), e);
|
||||
}
|
||||
|
||||
16
src/main/java/com/sczx/pay/thirdpart/facade/SyncFacade.java
Normal file
16
src/main/java/com/sczx/pay/thirdpart/facade/SyncFacade.java
Normal file
@ -0,0 +1,16 @@
|
||||
package com.sczx.pay.thirdpart.facade;
|
||||
|
||||
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@FeignClient(name = "sczx-sync", url = "${sczx-sync.ribbon.listOfServers:}")
|
||||
public interface SyncFacade {
|
||||
|
||||
@GetMapping("/send/subOrder/{subOrderId}")
|
||||
Map<String, String> sendSubOrderId(@PathVariable Long subOrderId);
|
||||
|
||||
}
|
||||
@ -0,0 +1,34 @@
|
||||
package com.sczx.pay.thirdpart.integration;
|
||||
|
||||
|
||||
import com.sczx.pay.exception.InnerException;
|
||||
import com.sczx.pay.thirdpart.facade.SyncFacade;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@Component
|
||||
public class SyncInteg {
|
||||
|
||||
@Autowired
|
||||
private SyncFacade syncFacade;
|
||||
|
||||
public Map<String, String> sendSubOrderId(Long subOrderId){
|
||||
try{
|
||||
Map<String, String> result = syncFacade.sendSubOrderId(subOrderId);
|
||||
if(result.get("code") == "200"){
|
||||
return result;
|
||||
}
|
||||
} catch (Exception e){
|
||||
log.error("发送租电订单同步失败",e);
|
||||
throw new InnerException("发送租电订单同步失败");
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@ -68,6 +68,10 @@ public class AlipaySdkUtil {
|
||||
return alipayClient.certificateExecute(request);
|
||||
}
|
||||
|
||||
public <T extends AlipayResponse> T sdkExecute(AlipayRequest<T> request) throws AlipayApiException {
|
||||
return alipayClient.sdkExecute(request);
|
||||
}
|
||||
|
||||
private AlipayConfig getAlipayConfig() {
|
||||
AlipayConfig alipayConfig = new AlipayConfig();
|
||||
alipayConfig.setServerUrl("https://openapi.alipay.com/gateway.do");
|
||||
|
||||
@ -1,117 +1,4 @@
|
||||
|
||||
server:
|
||||
port: 8019
|
||||
|
||||
spring:
|
||||
application:
|
||||
name: sczx-singlepay # 微服务名称
|
||||
http:
|
||||
encoding:
|
||||
charset: UTF-8
|
||||
enabled: true
|
||||
force: true
|
||||
mvc:
|
||||
async:
|
||||
request-timeout: -1
|
||||
jackson:
|
||||
date-format: yyyy-MM-dd HH:mm:ss
|
||||
time-zone: GMT+8
|
||||
cloud:
|
||||
nacos:
|
||||
discovery:
|
||||
server-addr: 115.190.8.52:8848 # Nacos 地址
|
||||
group: DEFAULT_GROUP
|
||||
metadata:
|
||||
version: 1.0.0
|
||||
env: dev
|
||||
lifecycle:
|
||||
timeout-per-shutdown-phase: 30s # 设置优雅停机时间
|
||||
datasource:
|
||||
url: jdbc:mysql://115.190.8.52:3306/sczx?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
|
||||
username: sczx_user
|
||||
password: Sczx123@
|
||||
driver-class-name: com.mysql.cj.jdbc.Driver
|
||||
hikari:
|
||||
maximum-pool-size: 10
|
||||
auto-commit: true
|
||||
|
||||
|
||||
management:
|
||||
endpoints:
|
||||
web:
|
||||
exposure:
|
||||
include: "*" # 暴露所有监控端点
|
||||
endpoint:
|
||||
health:
|
||||
show-details: always
|
||||
|
||||
feign:
|
||||
client:
|
||||
config:
|
||||
default:
|
||||
connectTimeout: 5000
|
||||
readTimeout: 5000
|
||||
hystrix:
|
||||
enabled: true # 启用 Feign 的 Hystrix 支持
|
||||
|
||||
hystrix:
|
||||
command:
|
||||
default:
|
||||
execution:
|
||||
isolation:
|
||||
thread:
|
||||
timeoutInMilliseconds: 10000 # 默认熔断超时时间
|
||||
|
||||
|
||||
|
||||
|
||||
mybatis-plus:
|
||||
mapper-locations: classpath*:mapper/**/*.xml
|
||||
type-aliases-package: com.sczx.pay.po # 实体类包路径
|
||||
configuration:
|
||||
mapUnderscoreToCamelCase: true
|
||||
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 控制台打印 SQL(调试用)
|
||||
|
||||
|
||||
wechat:
|
||||
pay:
|
||||
app-id: wx25e1ad1a70c326de
|
||||
mch-id: your_mch_id
|
||||
key: your_api_key
|
||||
notify-url: https://www.minbo.wang:8020/api/payment/notify
|
||||
refund-notify-url: https://www.minbo.wang:8020/api/payment/refundNotify
|
||||
|
||||
#ali:
|
||||
# pay:
|
||||
# app-id: 2021004169641281
|
||||
# gateway-url: https://openapi.alipay.com/gateway.do
|
||||
# notify-url: https://www.minbo.wang:8020/api/alipay/notify
|
||||
# refund-notify-url: https://www.minbo.wang:8020/api/alipay/refundNotify
|
||||
# privateKey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCQke+mZsxNXJXMn2iUZRkhITWY9qPczwHMgRxl68JRuNzZE2AXhAc2ciF7EGob1y0al4hvJo5JUrDew9Zkv0BocAsPjLma3A9KFgj131xMuLxVvHtktkNSwwW9VIbOOhFAQAy3J9jt8PdEk40UONyu9J5Shjs6jbQ8RogdDuwuzKpNj0ZOTeUqgR6RME4xZ0VqvZe9XhVfq3QtVGttUzOpLPNg6boBy/5RqwC64lVFICMqjKkMW2NklVPBDFO46QwfWEbaA+APnd9bd+9WadyNySPb7kAK8GOlvZYfysy+QkOQdj/oebKWKzdKXpFnF+n52dYzeGTvckt1suDngwAFAgMBAAECggEAcPc39iTZe5HfE9d0FpCxBCw4/1+qRz4SP8SbdiC05Lq5B36WVYm7QRYJh2oaH8sR2XeTCpdsE2tj/Y21l1/Calkyq2HhHlraL5/sPIPeUa0ArVXsbZPmI2N0tq6376l8FWJ3DR876SGjdZh+YtDT0HogxIdS/LwBnB/Y+CvS7fWcqiMjcR4h28RU70CQqxpzYuPfqG6GZmByGyJAcdlhFAYgiksb+qZnkjoaKHsjb61xfUX4z+HGdQLqOlVKfNqIpiO7arXaeAb0RQiB8Lqi7fBvn8LLhlTmM1Hr4gyQO14lJmP5Vp2BIg9m5AC9vRkpZ9l79bUTIepDe9+Ovcx5eQKBgQDWZ5yoz8q8Z5VIfMSVTHO3wpfwOBM92S2c21hTsds7NezsMVqGcTuAcvbMW2i1MwxtS7kahXraRAxZnCDB9ZVJs+88xcgu5QJWZ1rJyrwEwB2gTQhColv+XZW6Ck/J6kk2/PG26rNQG6pg/xrKaMtPnXXyKCsdQTyEpr+mlNIJ2wKBgQCsnf4lIuwftCSm0jI73tO1Bb4U9TCIapKidnIhutbyg6u+hJMUTVDNkjsBnrTN24sSP7Cu4Zs/W4lkDqq86fHNEvnF+FouIfO/CwaGteDBNwXHSLM0D+zEBbK04bfoYi7lYZeDRPygFrM49Sxkp0MAmItDmXqbYRQBlhN1XVzznwKBgQCQ+72fFex1XOJBA0X345v4rlkKMxEn6J2EjXr8FbA3KO8OhQ0/DoD7CkLDzChRJ7UGj4cbXRnHUO69BevM3SHXlhp4ERKeS3Q6M2fcPwDHgZZHGPA2Bw6IQoaGKITt+EUMLx3Q4ILi7+JV9wwJxbV+H+9rEiidfsjKtuuwXMBvswKBgQChpElrCSrH/W8c8FSuD9l7+GapRXkvJW0uyW/S+h1yd66J96erKUNzXW339GAnLWErs4yGFynDyLn9gmaMBR6zBQP0SL5Z2N1hlreDyikvhZDZrtBw/kCexx8zlvMan2Z+0kaJXD6cwuUNfzkVADQUCMTQhpZzjhKn8ZtDGiyCzQKBgQCAhU0khG/ufZfQ089+1G7PAlErBr5MQaG40a2vfIWGtHkYyXq5N/3jow1bd2qsyLuz8mr2sWQeURK+B2xZridf6JtYz3gB+dLw0frlLKk4Q6jeehiRlE8H8tIYe/7KcgTmdIzEbo3lmyGMFAILvr/pSCWeUehQYR9PH91Qyi+Tog==
|
||||
# # publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArPG4JQ9YY9+tOeImQO0eNkp+NZkenJ9hMHEVVmwAHAI5BoJMCLvAm504BXSpgpqaiCJ6ARTwBkiDz4dyCMVfE3VE8+oMFtXqfHaZLhfd+X9VQNqRCz0HeR2IbjGnnbYxQOAEOM6z092UfNieG00HyU5yREfzjJkIcyuGeGgbIBG1gPpLhXsQKRhQYqp4Exgd4LX6qnKLPL90kJVkQnHcJkp+rCoQ5zS6ZUXE2d/2GzY7xi93uTU2CLMiZ7Vi2OZ1g7xY+yDQzTA/CseveJeW3rM6T8yBjlEJwsywEL5co3YqpJUIMIe/fLjhRRgj+JUq5w0sRqb3+CswQHIjgc71QwIDAQAB
|
||||
# appCertPath: /root/cert/appCertPublicKey_2021005174658269.crt
|
||||
# alipayCertPath: /root/cert/alipayCertPublicKey_RSA2.crt
|
||||
# alipayRootCertPath: /root/cert/alipayRootCert.crt
|
||||
|
||||
cert-path: /root/cert/
|
||||
|
||||
alipay:
|
||||
pid: 2021004169641281
|
||||
appid: 2021005174658269
|
||||
privatekey: MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQCQke+mZsxNXJXMn2iUZRkhITWY9qPczwHMgRxl68JRuNzZE2AXhAc2ciF7EGob1y0al4hvJo5JUrDew9Zkv0BocAsPjLma3A9KFgj131xMuLxVvHtktkNSwwW9VIbOOhFAQAy3J9jt8PdEk40UONyu9J5Shjs6jbQ8RogdDuwuzKpNj0ZOTeUqgR6RME4xZ0VqvZe9XhVfq3QtVGttUzOpLPNg6boBy/5RqwC64lVFICMqjKkMW2NklVPBDFO46QwfWEbaA+APnd9bd+9WadyNySPb7kAK8GOlvZYfysy+QkOQdj/oebKWKzdKXpFnF+n52dYzeGTvckt1suDngwAFAgMBAAECggEAcPc39iTZe5HfE9d0FpCxBCw4/1+qRz4SP8SbdiC05Lq5B36WVYm7QRYJh2oaH8sR2XeTCpdsE2tj/Y21l1/Calkyq2HhHlraL5/sPIPeUa0ArVXsbZPmI2N0tq6376l8FWJ3DR876SGjdZh+YtDT0HogxIdS/LwBnB/Y+CvS7fWcqiMjcR4h28RU70CQqxpzYuPfqG6GZmByGyJAcdlhFAYgiksb+qZnkjoaKHsjb61xfUX4z+HGdQLqOlVKfNqIpiO7arXaeAb0RQiB8Lqi7fBvn8LLhlTmM1Hr4gyQO14lJmP5Vp2BIg9m5AC9vRkpZ9l79bUTIepDe9+Ovcx5eQKBgQDWZ5yoz8q8Z5VIfMSVTHO3wpfwOBM92S2c21hTsds7NezsMVqGcTuAcvbMW2i1MwxtS7kahXraRAxZnCDB9ZVJs+88xcgu5QJWZ1rJyrwEwB2gTQhColv+XZW6Ck/J6kk2/PG26rNQG6pg/xrKaMtPnXXyKCsdQTyEpr+mlNIJ2wKBgQCsnf4lIuwftCSm0jI73tO1Bb4U9TCIapKidnIhutbyg6u+hJMUTVDNkjsBnrTN24sSP7Cu4Zs/W4lkDqq86fHNEvnF+FouIfO/CwaGteDBNwXHSLM0D+zEBbK04bfoYi7lYZeDRPygFrM49Sxkp0MAmItDmXqbYRQBlhN1XVzznwKBgQCQ+72fFex1XOJBA0X345v4rlkKMxEn6J2EjXr8FbA3KO8OhQ0/DoD7CkLDzChRJ7UGj4cbXRnHUO69BevM3SHXlhp4ERKeS3Q6M2fcPwDHgZZHGPA2Bw6IQoaGKITt+EUMLx3Q4ILi7+JV9wwJxbV+H+9rEiidfsjKtuuwXMBvswKBgQChpElrCSrH/W8c8FSuD9l7+GapRXkvJW0uyW/S+h1yd66J96erKUNzXW339GAnLWErs4yGFynDyLn9gmaMBR6zBQP0SL5Z2N1hlreDyikvhZDZrtBw/kCexx8zlvMan2Z+0kaJXD6cwuUNfzkVADQUCMTQhpZzjhKn8ZtDGiyCzQKBgQCAhU0khG/ufZfQ089+1G7PAlErBr5MQaG40a2vfIWGtHkYyXq5N/3jow1bd2qsyLuz8mr2sWQeURK+B2xZridf6JtYz3gB+dLw0frlLKk4Q6jeehiRlE8H8tIYe/7KcgTmdIzEbo3lmyGMFAILvr/pSCWeUehQYR9PH91Qyi+Tog==
|
||||
use_open_id: false
|
||||
openid: 111
|
||||
userid: 111
|
||||
is_isv: false
|
||||
app_auth_token: 202502BBe237336d792f49cebda1f2d202d25A23
|
||||
alipay-public-cert-path: /root/cert/appCertPublicKey_2021005174658269.crt
|
||||
ali-public-cert-path: /root/cert/alipayCertPublicKey_RSA2.crt
|
||||
alipay-root-cert-path: /root/cert/alipayRootCert.crt
|
||||
# alipay-public-cert-path: E:/cert/appCertPublicKey_2021005174658269.crt
|
||||
# ali-public-cert-path: E:/cert/alipayCertPublicKey_RSA2.crt
|
||||
# alipay-root-cert-path: E:/cert/alipayRootCert.crt
|
||||
notify-url: http://115.190.8.52:8019/alipay/pay/notify
|
||||
refund-notify-url: http://115.190.8.52:8019/alipay/refund/notify
|
||||
|
||||
rent:
|
||||
payNotifyUrl: http://115.190.8.52:8019/alipay/rent/notify/pay
|
||||
|
||||
15
src/main/resources/bootstrap.yml
Normal file
15
src/main/resources/bootstrap.yml
Normal file
@ -0,0 +1,15 @@
|
||||
spring:
|
||||
application:
|
||||
name: sczx-singlepay # 应用名称,对应 Nacos 配置的 dataId
|
||||
cloud:
|
||||
nacos:
|
||||
server-addr: ${NACOS_SERVER_ADDR} # Nacos 服务器地址
|
||||
config:
|
||||
group: DEFAULT_GROUP # 配置分组
|
||||
file-extension: yaml # 配置文件格式
|
||||
timeout: 5000 # 配置读取超时时间
|
||||
# 添加共享配置
|
||||
shared-configs:
|
||||
- data-id: shared-config.yaml
|
||||
group: DEFAULT_GROUP
|
||||
refresh: true # 是否支持动态刷新
|
||||
@ -4,7 +4,7 @@
|
||||
<!--%d表示日期,%X表示输出所有,:null表示为空时输出null,%level表示日志级别 %thread表示线程名字 %c表示类名 %L表示行号 %n表示换行符-->
|
||||
<property name="PATTERN"
|
||||
value="%-12(%d{yyyy-MM-dd HH:mm:ss.SSS}) [%X{EagleEye-TraceID}%X{EagleEye-TraceID-Copy}] %level [%thread] %c[%L] %X{requestId} %msg%n"/>
|
||||
<property name="LOG_FILE_PATH" value="./logs"/>
|
||||
<property name="LOG_FILE_PATH" value="/sczx/logs/singlepay"/>
|
||||
<appender name="STDOUT"
|
||||
class="ch.qos.logback.core.ConsoleAppender">
|
||||
<encoder>
|
||||
|
||||
Reference in New Issue
Block a user