Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
f31a8b16e5
9 files changed
+103
-14
No files matched your search
+1
-1
@@ -35,7 +35,7 @@ public class HardOrderEntity extends Model<HardOrderEntity> {
|
||||
/**
|
||||
* 订单编号
|
||||
*/
|
||||
@Schema(description = "订单编号 目前正元正在使用")
|
||||
@Schema(description = "订单编号 目前正元、微信支付、支付宝支付正在使用")
|
||||
private String orderNo;
|
||||
|
||||
/**
|
||||
|
||||
+10
@@ -25,6 +25,16 @@ public class AlipayConf {
|
||||
/**
|
||||
* 公钥
|
||||
*/
|
||||
private String publicKey;
|
||||
|
||||
/**
|
||||
* 支付宝公钥
|
||||
*/
|
||||
private String alipayPublicKey;
|
||||
|
||||
/**
|
||||
* 回调地址
|
||||
*/
|
||||
private String callbackUrl;
|
||||
|
||||
}
|
||||
+47
@@ -0,0 +1,47 @@
|
||||
package com.bsd.pjcloud.hard.controller.ali;
|
||||
|
||||
import com.bsd.pjcloud.common.security.annotation.Inner;
|
||||
import com.bsd.pjcloud.hard.service.AlipayService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.security.SecurityRequirement;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import jakarta.servlet.http.HttpServletRequest;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@RestController
|
||||
@RequiredArgsConstructor
|
||||
@RequestMapping("/hard-ali-pay")
|
||||
@Tag(description = "hard-ali-pay", name = "支付宝相关")
|
||||
@SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
|
||||
@Validated
|
||||
public class AliPayController {
|
||||
|
||||
private final AlipayService aliPayService;
|
||||
|
||||
/* ************************************* start callback start ************************************* */
|
||||
|
||||
@Inner(value = false)
|
||||
@PostMapping("/callback")
|
||||
@Operation(summary = "支付宝回调")
|
||||
public String refundCallback(HttpServletRequest request) {
|
||||
Map<String, String[]> parameterMap = request.getParameterMap();
|
||||
Map<String, String> params = new HashMap<>();
|
||||
for (Map.Entry<String, String[]> entry : parameterMap.entrySet()) {
|
||||
params.put(entry.getKey(), entry.getValue()[0]);
|
||||
}
|
||||
return aliPayService.refundCallback(params);
|
||||
}
|
||||
|
||||
/* ************************************* end callback end ************************************* */
|
||||
|
||||
}
|
||||
+1
-1
@@ -38,5 +38,5 @@ public interface AlipayService {
|
||||
/**
|
||||
* 退款回调
|
||||
*/
|
||||
String refundCallback(HttpEntity<String> httpEntity, @RequestHeader Map<String, String> headers);
|
||||
String refundCallback(Map<String, String> params);
|
||||
}
|
||||
+14
-5
@@ -5,6 +5,7 @@ import com.alipay.api.AlipayClient;
|
||||
import com.alipay.api.AlipayConfig;
|
||||
import com.alipay.api.DefaultAlipayClient;
|
||||
import com.alipay.api.domain.*;
|
||||
import com.alipay.api.internal.util.AlipaySignature;
|
||||
import com.alipay.api.request.*;
|
||||
import com.alipay.api.response.*;
|
||||
import com.bsd.pjcloud.hard.api.dto.ali.*;
|
||||
@@ -12,7 +13,6 @@ import com.bsd.pjcloud.hard.config.AlipayConf;
|
||||
import com.bsd.pjcloud.hard.service.AlipayService;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
@@ -71,6 +71,7 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
// 支付场景
|
||||
model.setScene("bar_code");
|
||||
request.setBizModel(model);
|
||||
request.setNotifyUrl(conf.getCallbackUrl());
|
||||
try {
|
||||
AlipayTradePayResponse response = alipayClient.execute(request);
|
||||
String body = response.getBody();
|
||||
@@ -148,6 +149,7 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
// 退款单号
|
||||
model.setOutRequestNo(String.valueOf(dto.getRefundId()));
|
||||
request.setBizModel(model);
|
||||
request.setNotifyUrl(conf.getCallbackUrl());
|
||||
try {
|
||||
AlipayTradeRefundResponse response = alipayClient.execute(request);
|
||||
String body = response.getBody();
|
||||
@@ -170,6 +172,7 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
// 退款单号
|
||||
model.setOutRequestNo(String.valueOf(dto.getRefundId()));
|
||||
request.setBizModel(model);
|
||||
request.setNotifyUrl(conf.getCallbackUrl());
|
||||
try {
|
||||
AlipayTradeFastpayRefundQueryResponse response = alipayClient.execute(request);
|
||||
String body = response.getBody();
|
||||
@@ -185,13 +188,19 @@ public class AlipayServiceImpl implements AlipayService {
|
||||
* 退款回调
|
||||
*/
|
||||
@Override
|
||||
public String refundCallback(HttpEntity<String> httpEntity, Map<String, String> headers) {
|
||||
AlipayClient alipayClient = getClient();
|
||||
public String refundCallback(Map<String, String> params) {
|
||||
if (ObjectUtil.isEmpty(params)) return "fail";
|
||||
try {
|
||||
|
||||
boolean checkSignature = AlipaySignature.rsaCheckV1(params, conf.getAlipayPublicKey(), "UTF-8", "RSA2");
|
||||
if (!checkSignature) {
|
||||
log.error("支付宝回调校验失败");
|
||||
return "fail";
|
||||
}
|
||||
log.debug("支付宝回调参数:{}", params);
|
||||
return "success";
|
||||
} catch (Exception e) {
|
||||
log.error("退款回调", e);
|
||||
return "fail";
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
+19
-1
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.hard.service.impl.order;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import cn.hutool.extra.spring.SpringUtil;
|
||||
import cn.hutool.json.JSONUtil;
|
||||
import com.alipay.api.response.AlipayTradeRefundResponse;
|
||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
||||
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
||||
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
@@ -26,6 +27,7 @@ import com.bsd.pjcloud.hard.api.constant.refund.HardAfterSaleOperateTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.refund.HardRefundStatusEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.refund.HardSaleStatusEnum;
|
||||
import com.bsd.pjcloud.hard.api.constant.refund.HardSaleTypeEnum;
|
||||
import com.bsd.pjcloud.hard.api.dto.ali.AliRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.order.HardAdminRefundDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.order.HardAfterSaleDto;
|
||||
import com.bsd.pjcloud.hard.api.dto.order.HardDisagreeDto;
|
||||
@@ -42,6 +44,7 @@ import com.bsd.pjcloud.hard.api.vo.wechat.WechatRefundVo;
|
||||
import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleLogMapper;
|
||||
import com.bsd.pjcloud.hard.mapper.order.HardAfterSaleMapper;
|
||||
import com.bsd.pjcloud.hard.mapper.order.HardOrderMapper;
|
||||
import com.bsd.pjcloud.hard.service.AlipayService;
|
||||
import com.bsd.pjcloud.hard.service.HardAfterSaleService;
|
||||
import com.bsd.pjcloud.hard.service.HardOrderService;
|
||||
import com.bsd.pjcloud.hard.service.WechatPayService;
|
||||
@@ -73,6 +76,7 @@ public class HardAfterSaleServiceImpl extends ServiceImpl<HardAfterSaleMapper, H
|
||||
private final HardAfterSaleLogMapper hardAfterSaleLogMapper;
|
||||
private final HardOrderService hardOrderService;
|
||||
private final WechatPayService wechatPayService;
|
||||
private final AlipayService alipayService;
|
||||
|
||||
private final HardOrderMapper hardOrderMapper;
|
||||
|
||||
@@ -270,7 +274,21 @@ public class HardAfterSaleServiceImpl extends ServiceImpl<HardAfterSaleMapper, H
|
||||
throw new RuntimeException(refundVo.getErr_code_des());
|
||||
}
|
||||
} else if (isAliPay) {
|
||||
throw new RuntimeException("支付宝退款暂不支持");
|
||||
AliRefundDto refundDto = AliRefundDto.builder().orderId(order.getId()).refundId(afterSale.getId()).refundPrice(refundPrice).build();
|
||||
AlipayTradeRefundResponse refundVo = alipayService.refund(refundDto);
|
||||
if (ObjectUtil.isEmpty(refundVo) || !refundVo.isSuccess()) {
|
||||
throw new RuntimeException("支付宝退款错误");
|
||||
}
|
||||
// 售后成功
|
||||
HardOrderEntity updateObj = HardOrderEntity.builder()
|
||||
.id(order.getId())
|
||||
.orderStatus(HardOrderStatusEnum.REFUND.getType())
|
||||
.refundStatus(HardRefundStatusEnum.SUCCESS.getStatus())
|
||||
.payRefundId(order.getId())
|
||||
.refundPrice(order.getPayPrice())
|
||||
.refundTime(LocalDateTime.now())
|
||||
.build();
|
||||
hardOrderService.updateById(updateObj);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+6
-3
@@ -324,14 +324,14 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
|
||||
}
|
||||
// 支付宝支付
|
||||
if (isAliPay) {
|
||||
AliMicropayDto wechatPayDto = AliMicropayDto.builder().merId(orderObj.getMerchantId()).orderId(orderObj.getId()).price(payPrice).authCode(String.valueOf(dto.getOrderSourceTypeId())).build();
|
||||
AliMicropayDto wechatPayDto = AliMicropayDto.builder().merId(orderObj.getMerchantId()).orderId(orderObj.getId()).price(payPrice).subject(subject).authCode(String.valueOf(dto.getOrderSourceTypeId())).build();
|
||||
AlipayTradePayResponse micropay = alipayService.micropay(wechatPayDto);
|
||||
boolean success = micropay.isSuccess();
|
||||
if (!success) {
|
||||
if (ObjectUtil.isEmpty(micropay) || !micropay.isSuccess()) {
|
||||
// 如果支付宝支付订单返回不明确(不是支付成功)直接撤销支付
|
||||
alipayService.reverse(AliReverseDto.builder().orderId(orderObj.getId()).build());
|
||||
throw new RuntimeException(micropay.getSubMsg());
|
||||
} else {
|
||||
orderObj.setOrderNo(micropay.getTradeNo());
|
||||
getSelf().orderSuccess(orderObj, Boolean.TRUE);
|
||||
}
|
||||
}
|
||||
@@ -694,6 +694,9 @@ public class HardOrderServiceImpl extends ServiceImpl<HardOrderMapper, HardOrder
|
||||
// 订单表订单状态
|
||||
Integer payPrice = isWalletPay ? order.getTotalPrice() + order.getExtraPrice() : 0;
|
||||
HardOrderEntity update = HardOrderEntity.builder().id(order.getId()).payTime(LocalDateTime.now()).orderStatus(HardOrderStatusEnum.PAY.getType()).payPrice(payPrice).build();
|
||||
if (ObjectUtil.isNotEmpty(order.getOrderNo())) {
|
||||
update.setOrderNo(order.getOrderNo());
|
||||
}
|
||||
baseMapper.updateById(update);
|
||||
// 父购物车订单表订单状态
|
||||
if (ObjectUtil.isNotEmpty(order.getParentCarId())) {
|
||||
|
||||
@@ -36,5 +36,8 @@ spring:
|
||||
|
||||
ali-pay:
|
||||
app-id: 2021005157648588
|
||||
private-key: MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCJYA4MxEy5rmAJwUw1A7Izxr7EyF0Q1iKZ7mFqzC6skLysXPGNbC2LDE1dPi0580YFjE2E+e9T7FlU4cZH3oAUw8UpQ4Eh/MRVnsW6rTKO+kYB2bvMyehIS9/I/eg3PjBWtjG6a2a9kP1ijcKP4E90Yxc7W6yoCxF7XeWp0Qvw/sxhqglEfJZlms5L/FIpY1uMNuPeQCkTo5/mk13rB9L0R2p36EJkiPNwGpv8yiUoIAfGNYiqLcelccukZVmLhEBNSGBAdVnoz/bYzzRwHJyw63/bGsw7Rz3debm73Izs5dWEWDHGaz7dA3bNaOgMGsq47DGsbbaUNfZ5V+QBqytPAgMBAAECggEANAhc6fsEMKRanfdIHSBsQ+44XaKilXj2HCXNYj06RISB4itGFtHtoigjuXiOes+pKvrMddyRCNGRuHPXvWsKSlMof4uhArWRy/haXm2xo7QqBhNpbZTgVVnfxmpdpWb5ui5CQaDihlS/lK+rDQHiNmw95W7Aw9mFYpvbHGogwsPAzBew33x/3XPm9mAJodEi+Uw5JG3IDlVeNeXL+E6ZkO6iCfURwORPmTZDHLACoO/EM3zOd2IiH0buY/sosw3LYyALFeQi8uzjevIw7cbQnXGHTSmb+zwmlJYVCaJA04JYN8CtAdmpTl00J7lNLNA3QiFN42GTdGTyf3xADTiI4QKBgQDRU7+riJfMXmHuXomBiD9qK9eQZfTqwrT8LLYgGPohLfP42YeFydGUsC2RWhNKAr//fE2dpo+SoUJ6HligkG5vup2/cyLEyROKQhgegp+GzHjVh8hkDjoZSZk8bs/Kv3X7s2heQdEedQHzZTCSfkhMYxAiU3a8Wdsnw01tDh1qPwKBgQCoAVbBnRsC6lEy5zgs0apgDR+oxb7WRvnK6ao8E5jesVY/z58U93iMaQzvtXZLFYJ3U4nIAoIhPffWfYE+CYIOPDqLSi4Teni8VKdES5ubpkeR4wY+a5FGcCAKycW/pztcQ7YjQLcDAOwL69cik1iSgQtytNQMiKro5tWYN2Ba8QKBgAqMxQE5LiVfsGHaI+YCXufT89ZUPSbDz2lSO4+ckqavcTdeh0UH6ecrhfBocMZvIwwWULccWOoT9IzBEMhu3xIEfsTSYbM3SyPRtvN6s92QWpqwcDoSuXzix7VTBGf8hE6+OQlfGdIGJaYFuI/5i11GNN72A+r0QGZdon5XksXzAoGAeT3WHQ1Ck/0DMif4uydnu79czJBAIyS/WXb9OjOuS29Q3eX4WMoqfbHF+ytKPe884t4vfV6KCHFO7MRPw7Ra3ekLGsAitj3Y6ZhxyXCC0HXUCmz6cYtxIJMEHKT2B1QpG3Fl/NTT/d/peMTu0W3iKn/kAhiLOqxaIo+LLzkvWRECgYBtl1uraKNnnS3kuVPNWDyyuDBJHutYSlvZ5n2825Nvjm2yoInAo++YbRIAmIOw7r4OpJdUZdGi1Agm/+c1Dg19Qoi+PxfHY04J5bUb4UNyODsyNGKHYHKoksl14lyUnYAih5i5xa+WO+Ss2f0HaAJ+i6Eja121yGFVIKWK2OmxNg==
|
||||
alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiWAODMRMua5gCcFMNQOyM8a+xMhdENYime5haswurJC8rFzxjWwtiwxNXT4tOfNGBYxNhPnvU+xZVOHGR96AFMPFKUOBIfzEVZ7Fuq0yjvpGAdm7zMnoSEvfyP3oNz4wVrYxumtmvZD9Yo3Cj+BPdGMXO1usqAsRe13lqdEL8P7MYaoJRHyWZZrOS/xSKWNbjDbj3kApE6Of5pNd6wfS9Edqd+hCZIjzcBqb/MolKCAHxjWIqi3HpXHLpGVZi4RATUhgQHVZ6M/22M80cBycsOt/2xrMO0c93Xm5u9yM7OXVhFgxxms+3QN2zWjoDBrKuOwxrG22lDX2eVfkAasrTwIDAQAB
|
||||
private-key: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDa2GemYsE0HExDX8tEu7kt3cVPkPyJPgZklkyMmpI1uTBsA8qcKBoS88feD/Q+f3s6etGoBxTiln3vBVZBMGGwpL8bcxGu1ILcea8PBOsKfdRFF6wN4DsLtVL+6O2kK9SDOqZkQt/bEVE3tXljxtQ+igU0raZWISQXWCwekyzg4CQLfMBoJj0/JF4Zpiw2dYvBRKgEnR8H7pzCARJuN7B3G4NWrfyRyFn6+i+oDmFcwD2ewwQ8gX9He7mqgn+/ciLRgm/yh0orKKfECFfQUH3tZVW59QU7YAXtyPdpTGCptZkM5prh9bCGVKoOn7S05FRyUJxRD9dEen8pyVMOhSMRAgMBAAECggEAfrHsB7qCaZ28VQD/V9JqGXCbiz2/xeB/qPoOZRQTc0C8FLx5LsBUoAY7/oYz+36oI6n4+JLo92jyjU8EqYbN94rZDJYodZOYEvXrcAGD5TYFjt5ugDYBWPzniKXm9jVduX9Z1w+UM2oqH9tS5H22YGJdMysY8iILl+w21piT0bc+yHPhaKuEVbeTVtf3F7F4MXDgfF1NQ5GEpUpSW0oqkEloVSZ1mpecnJ+AwfUUdogYgW91qxxGVY9+SapEFFoK1TnUwRFMXIC+aBLT8RQZA2t+0oCbvz1r95Vu115bZYWpqWCLs3y/0LeVpC7KeL6evN/s27FA96zPJ/fd4azrdQKBgQD+AC3szrCiq2kYGn5OEbrp6l4K8F7UuY8HCWiYisIZf3524r4sBXkeKSHkaRDXvKiu6CuznSHamZiR9L28KFxQDUFvX5aZ8tmN5UXDmY7BdeLjpFz8mkyndY02fox8A4D4TtTgwJUYjFRG0Mnraoi7adEmwl6xocxJokFLkltDnwKBgQDckWLagUcKYOlNocAkQ4973bxC2+sLWsNPC1FlQEdWfJ+g8bAdaAxHVfae3Mp/gBDDPolJW8yyeockmTQW+eKp9P+x8QETH5zzxO++0ucn/RUxAajOTLZ6MAcUxiTgBzRiPeVSi5qjiBV2v+Z2FDQFgalougCUKDKscFxlNVabTwKBgQD75G+m9b9EQxtBFR0HDRxBV/SVgpV4/uBxyQnapVkickaXXfvcqjzYBVCgNPXIDUd31bVpNb5aDJK6xGzZSWlq1gp7id9Pov/PcX0DIqjpAKDWwqyYseis9a3qSgvF/K+NEJian0H9C0WUyQBGH+ujeKg7eOzx2hQ/PdLlQCqT3wKBgHl3SyQfy3qIshKBgCm4Vv0UuEdtirwfCK2wAuwqgN69FL9yOdWH5jMmwQDtgErEwPZ0qvAOMOUdGu1pvUjl5hBIjsN0gG4Cm9GW45yH0qqv8gqh6k9p6ZfSeSPUlpwU+6Eaiv5xSQDDwWY6+fSO3bMmm5/DxuvQU0+pNQi7Xe17AoGADeD3zYf1/XtlmwsVEdA/UhsXitntvB9fRlOcjE0LYif6liHrwo1AG+8taMZ3wQ7E834/plM92ZBnrgwFWc5yAqr5b9RJ72cTOVcnMpLD5w83C+SuUtU71awfBuZ7KPTGzV1coa/JTGKlIAlgCJEPktC90cGuPFLHq993UDSkzrA=
|
||||
public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2thnpmLBNBxMQ1/LRLu5Ld3FT5D8iT4GZJZMjJqSNbkwbAPKnCgaEvPH3g/0Pn97OnrRqAcU4pZ97wVWQTBhsKS/G3MRrtSC3HmvDwTrCn3URResDeA7C7VS/ujtpCvUgzqmZELf2xFRN7V5Y8bUPooFNK2mViEkF1gsHpMs4OAkC3zAaCY9PyReGaYsNnWLwUSoBJ0fB+6cwgESbjewdxuDVq38kchZ+vovqA5hXMA9nsMEPIF/R3u5qoJ/v3Ii0YJv8odKKyinxAhX0FB97WVVufUFO2AF7cj3aUxgqbWZDOaa4fWwhlSqDp+0tORUclCcUQ/XRHp/KclTDoUjEQIDAQAB
|
||||
alipay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqnCB+N172m5gxf1Rolfx5LErSiVwQCh0XQdDrVy6aTuVF5EtdqahSHtADyEPsBWudMBhzCfqpoZvfnvH7a+PED6uZ3DoXt7ETh8TmNM5yc+WTnD8pSphQvuHDJ3zMks489KNxiX6sXag71k9H1MXklJGPOUaljHqy/QlRn2ZLT7pFgaFH9LEcVoQBPIOurUn95078h848RFD30jZFW3fakxUGAGVVZaHH62z5OEWOmcA+CwxsEDMa1XMt02RGXgAAq4WOj+BqOGiFmhM8rnrUMchTyvx4umOzGvbF2Y9irN3aBZ5lfg+bzYcJpIOMzlM/V00LnEWzCblJzXNyH4hJQIDAQAB
|
||||
callback-url: https://rj4jv5rwqs.by.takin.cc/hard/hard-ali-pay/callback
|
||||
# callback-url: https://stgl.pj.gov.cn/api/hard/hard-ali-pay/callback
|
||||
-1
@@ -46,7 +46,6 @@
|
||||
<select id="getSupermarketUnitsWithSpu" resultMap="SupermarketUnitWithSpuVoMap">
|
||||
SELECT u.id,
|
||||
s.product_code,
|
||||
s.barCode,
|
||||
s.pic_url,
|
||||
s.product_name,
|
||||
s.unit,
|
||||
|
||||
Reference in new issue
Block a user