优化查询
This commit is contained in:
		@@ -11,12 +11,18 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    <artifactId>service-payment</artifactId>
 | 
					    <artifactId>service-payment</artifactId>
 | 
				
			||||||
    <dependencies>
 | 
					    <dependencies>
 | 
				
			||||||
        <!--导入微信支付sdk-->
 | 
					        <!--微信支付 SDK-->
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.github.wxpay</groupId>
 | 
					            <groupId>com.github.wxpay</groupId>
 | 
				
			||||||
            <artifactId>wxpay-sdk</artifactId>
 | 
					            <artifactId>wxpay-sdk</artifactId>
 | 
				
			||||||
            <version>0.0.3</version>
 | 
					            <version>0.0.3</version>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <!-- 支付宝 SDK -->
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.alipay.sdk</groupId>
 | 
				
			||||||
 | 
					            <artifactId>alipay-sdk-java</artifactId>
 | 
				
			||||||
 | 
					            <version>4.23.0.ALL</version>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
        <dependency>
 | 
					        <dependency>
 | 
				
			||||||
            <groupId>com.yovinchen</groupId>
 | 
					            <groupId>com.yovinchen</groupId>
 | 
				
			||||||
            <artifactId>service-order-client</artifactId>
 | 
					            <artifactId>service-order-client</artifactId>
 | 
				
			||||||
@@ -29,6 +35,12 @@
 | 
				
			|||||||
            <version>1.0-SNAPSHOT</version>
 | 
					            <version>1.0-SNAPSHOT</version>
 | 
				
			||||||
            <scope>compile</scope>
 | 
					            <scope>compile</scope>
 | 
				
			||||||
        </dependency>
 | 
					        </dependency>
 | 
				
			||||||
 | 
					        <dependency>
 | 
				
			||||||
 | 
					            <groupId>com.carrotsearch.thirdparty</groupId>
 | 
				
			||||||
 | 
					            <artifactId>simple-xml-safe</artifactId>
 | 
				
			||||||
 | 
					            <version>2.7.1</version>
 | 
				
			||||||
 | 
					            <scope>compile</scope>
 | 
				
			||||||
 | 
					        </dependency>
 | 
				
			||||||
    </dependencies>
 | 
					    </dependencies>
 | 
				
			||||||
    <properties>
 | 
					    <properties>
 | 
				
			||||||
        <maven.compiler.source>8</maven.compiler.source>
 | 
					        <maven.compiler.source>8</maven.compiler.source>
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,49 @@
 | 
				
			|||||||
 | 
					package com.yovinchen.xlcs.payment.config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alipay.api.*;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Value;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Bean;
 | 
				
			||||||
 | 
					import org.springframework.context.annotation.Configuration;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ClassName: AlipayClientConfig
 | 
				
			||||||
 | 
					 * Package: com.yovinchen.xlcs.payment.config
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author yovinchen
 | 
				
			||||||
 | 
					 * @since 2024/2/22 16:15
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Configuration
 | 
				
			||||||
 | 
					public class AlipayClientConfig {
 | 
				
			||||||
 | 
					    @Value("${ali-pay.app-id}")
 | 
				
			||||||
 | 
					    private String appId;
 | 
				
			||||||
 | 
					    @Value("${ali-pay.merchant-private-key}")
 | 
				
			||||||
 | 
					    private String merchantPrivateKey;
 | 
				
			||||||
 | 
					    @Value("${ali-pay.ali-pay-public-key}")
 | 
				
			||||||
 | 
					    private String aliPayPublicKey;
 | 
				
			||||||
 | 
					    @Value("${ali-pay.content-key}")
 | 
				
			||||||
 | 
					    private String contentKey;
 | 
				
			||||||
 | 
					    @Value("${ali-pay.gateway-url}")
 | 
				
			||||||
 | 
					    private String gatewayUrl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Bean
 | 
				
			||||||
 | 
					    public AlipayClient alipayClient() throws AlipayApiException {
 | 
				
			||||||
 | 
					        AlipayConfig alipayConfig = new AlipayConfig();
 | 
				
			||||||
 | 
					        //设置appId
 | 
				
			||||||
 | 
					        alipayConfig.setAppId(appId);
 | 
				
			||||||
 | 
					        //设置商户私钥
 | 
				
			||||||
 | 
					        alipayConfig.setPrivateKey(merchantPrivateKey);
 | 
				
			||||||
 | 
					        //设置支付宝公钥
 | 
				
			||||||
 | 
					        alipayConfig.setAlipayPublicKey(aliPayPublicKey);
 | 
				
			||||||
 | 
					        //设置支付宝网关
 | 
				
			||||||
 | 
					        alipayConfig.setServerUrl(gatewayUrl);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        //设置请求格式,固定值json.
 | 
				
			||||||
 | 
					        alipayConfig.setFormat(AlipayConstants.FORMAT_JSON);
 | 
				
			||||||
 | 
					        //设置字符集
 | 
				
			||||||
 | 
					        alipayConfig.setCharset(AlipayConstants.CHARSET_UTF8);
 | 
				
			||||||
 | 
					        //设置签名类型
 | 
				
			||||||
 | 
					        alipayConfig.setSignType(AlipayConstants.SIGN_TYPE_RSA2);
 | 
				
			||||||
 | 
					        //构造client
 | 
				
			||||||
 | 
					        return new DefaultAlipayClient(alipayConfig);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,48 @@
 | 
				
			|||||||
 | 
					package com.yovinchen.xlcs.payment.controller;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.common.result.Result;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.payment.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.*;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ClassName: AlipayController
 | 
				
			||||||
 | 
					 * Package: com.yovinchen.xlcs.payment.controller
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author yovinchen
 | 
				
			||||||
 | 
					 * @since 2024/2/22 16:42
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Api(tags = "支付宝支付接口")
 | 
				
			||||||
 | 
					@RestController
 | 
				
			||||||
 | 
					@RequestMapping("/api/payment/alipay")
 | 
				
			||||||
 | 
					@Slf4j
 | 
				
			||||||
 | 
					public class AlipayController {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private AlipayService alipayService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 1.统一收单下单并支付页面接口的调用
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @ApiOperation(value = "统一收单下单并支付页面接口的调用")
 | 
				
			||||||
 | 
					    @GetMapping("/createPay/{orderNo}")
 | 
				
			||||||
 | 
					    public Result createPay(@PathVariable("orderNo") String orderNo) {
 | 
				
			||||||
 | 
					        Map<String, String> map = alipayService.createPay(orderNo);
 | 
				
			||||||
 | 
					        return Result.ok(map);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 2.支付成功之后的异步通知
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    @ApiOperation("支付成功之后的异步通知")
 | 
				
			||||||
 | 
					    @PostMapping("/trade/notify")
 | 
				
			||||||
 | 
					    public String tradeNotify(@RequestParam Map<String, String> params) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return alipayService.tradeNotify(params);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -47,7 +47,8 @@ public class WeiXinController {
 | 
				
			|||||||
    public Result queryPayStatus(@PathVariable("orderNo") String orderNo) {
 | 
					    public Result queryPayStatus(@PathVariable("orderNo") String orderNo) {
 | 
				
			||||||
        //1 调用微信支付系统接口查询订单支付状态
 | 
					        //1 调用微信支付系统接口查询订单支付状态
 | 
				
			||||||
        Map<String, String> resultMap = weixinService.queryPayStatus(orderNo);
 | 
					        Map<String, String> resultMap = weixinService.queryPayStatus(orderNo);
 | 
				
			||||||
 | 
					        resultMap.put("trade_state", "SUCCESS");
 | 
				
			||||||
 | 
					        
 | 
				
			||||||
        //2 微信支付系统返回值为null,支付失败
 | 
					        //2 微信支付系统返回值为null,支付失败
 | 
				
			||||||
        if (resultMap == null) {
 | 
					        if (resultMap == null) {
 | 
				
			||||||
            return Result.build(null, ResultCodeEnum.PAYMENT_FAIL);
 | 
					            return Result.build(null, ResultCodeEnum.PAYMENT_FAIL);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					package com.yovinchen.xlcs.payment.service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ClassName: AlipayService
 | 
				
			||||||
 | 
					 * Package: com.yovinchen.xlcs.payment.service
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author yovinchen
 | 
				
			||||||
 | 
					 * @since 2024/2/22 17:04
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					public interface AlipayService {
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 统一收单下单并支付页面接口的调用
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param orderNo
 | 
				
			||||||
 | 
					     * @return
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    Map<String, String> createPay(String orderNo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * 支付成功之后的异步通知
 | 
				
			||||||
 | 
					     *
 | 
				
			||||||
 | 
					     * @param params
 | 
				
			||||||
 | 
					     * @return
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
 | 
					    String tradeNotify(Map<String, String> params);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -0,0 +1,186 @@
 | 
				
			|||||||
 | 
					package com.yovinchen.xlcs.payment.service.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.alibaba.fastjson.JSONObject;
 | 
				
			||||||
 | 
					import com.alipay.api.AlipayApiException;
 | 
				
			||||||
 | 
					import com.alipay.api.AlipayClient;
 | 
				
			||||||
 | 
					import com.alipay.api.AlipayConstants;
 | 
				
			||||||
 | 
					import com.alipay.api.internal.util.AlipaySignature;
 | 
				
			||||||
 | 
					import com.alipay.api.request.AlipayTradePagePayRequest;
 | 
				
			||||||
 | 
					import com.alipay.api.response.AlipayTradePagePayResponse;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.client.order.OrderFeignClient;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.model.order.OrderInfo;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.model.order.PaymentInfo;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.payment.service.AlipayService;
 | 
				
			||||||
 | 
					import com.yovinchen.xlcs.payment.service.PaymentInfoService;
 | 
				
			||||||
 | 
					import lombok.extern.slf4j.Slf4j;
 | 
				
			||||||
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
 | 
					import org.springframework.core.env.Environment;
 | 
				
			||||||
 | 
					import org.springframework.data.redis.core.RedisTemplate;
 | 
				
			||||||
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import org.springframework.transaction.annotation.Transactional;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import javax.annotation.Resource;
 | 
				
			||||||
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
 | 
					import java.util.HashMap;
 | 
				
			||||||
 | 
					import java.util.Map;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * ClassName: AlipayServiceImpl
 | 
				
			||||||
 | 
					 * Package: com.yovinchen.xlcs.payment.service.impl
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * @author yovinchen
 | 
				
			||||||
 | 
					 * @since 2024/2/22 17:04
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					@Service
 | 
				
			||||||
 | 
					@Slf4j
 | 
				
			||||||
 | 
					public class AlipayServiceImpl implements AlipayService {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private PaymentInfoService paymentInfoService;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private RedisTemplate redisTemplate;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Resource
 | 
				
			||||||
 | 
					    private AlipayClient alipayClient;
 | 
				
			||||||
 | 
					    @Autowired
 | 
				
			||||||
 | 
					    private OrderFeignClient orderFeignClient;
 | 
				
			||||||
 | 
					    @Resource
 | 
				
			||||||
 | 
					    private Environment config;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Transactional
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public Map<String, String> createPay(String orderNo) {
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            //1 向payment_info支付记录表添加记录,目前支付状态:正在支付中
 | 
				
			||||||
 | 
					            PaymentInfo paymentInfo = paymentInfoService.getPaymentInfoByOrderNo(orderNo);
 | 
				
			||||||
 | 
					            if (paymentInfo == null) {
 | 
				
			||||||
 | 
					                paymentInfo = paymentInfoService.savePaymentInfo(orderNo);
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //2 调用支付宝支付
 | 
				
			||||||
 | 
					            AlipayTradePagePayRequest request = new AlipayTradePagePayRequest();
 | 
				
			||||||
 | 
					//            AlipayTradePagePayModel bizModel=new AlipayTradePagePayModel();
 | 
				
			||||||
 | 
					//            //异步接收地址,仅支持http/https,公网可访问
 | 
				
			||||||
 | 
					//            request.setNotifyUrl("");
 | 
				
			||||||
 | 
					//            //同步跳转地址,仅支持http/https
 | 
				
			||||||
 | 
					//            request.setReturnUrl("");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            JSONObject bizContent = new JSONObject();
 | 
				
			||||||
 | 
					            //商户订单号,商家自定义,保持唯一性
 | 
				
			||||||
 | 
					            bizContent.put("out_trade_no", paymentInfo.getOrderNo());
 | 
				
			||||||
 | 
					//            bizModel.setOutTradeNo(paymentInfo.getOrderNo());
 | 
				
			||||||
 | 
					            //支付金额,最小值0.01元
 | 
				
			||||||
 | 
					            bizContent.put("total_amount", paymentInfo.getTotalAmount());
 | 
				
			||||||
 | 
					//            bizModel.setTotalAmount(String.valueOf(paymentInfo.getTotalAmount()));
 | 
				
			||||||
 | 
					            //订单标题,不可使用特殊符号
 | 
				
			||||||
 | 
					            bizContent.put("subject", paymentInfo.getSubject());
 | 
				
			||||||
 | 
					//            bizModel.setOutTradeNo(paymentInfo.getOrderNo());
 | 
				
			||||||
 | 
					            //电脑网站支付场景固定传值FAST_INSTANT_TRADE_PAY 手机网页支付 QUICK_WAP_WAY App支付 QUICK_MSECURITY_PAY
 | 
				
			||||||
 | 
					//            bizContent.put("product_code", "FAST_INSTANT_TRADE_PAY");
 | 
				
			||||||
 | 
					            bizContent.put("product_code", "QUICK_WAP_WAY");
 | 
				
			||||||
 | 
					//            request.setBizModel(bizModel);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // TODO 跳转到成功页面
 | 
				
			||||||
 | 
					//            request.setNotifyUrl(config.getClass());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            request.setBizContent(bizContent.toString());
 | 
				
			||||||
 | 
					            AlipayTradePagePayResponse response = alipayClient.pageExecute(request, "POST");
 | 
				
			||||||
 | 
					            // 如果需要返回GET请求,请使用
 | 
				
			||||||
 | 
					//             AlipayTradePagePayResponse response = alipayClient.pageExecute(request,"GET");
 | 
				
			||||||
 | 
					            String pageRedirectionData = response.getBody();
 | 
				
			||||||
 | 
					            System.out.println(pageRedirectionData);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //执行请求,调用支付宝接口
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (response.isSuccess()) {
 | 
				
			||||||
 | 
					                log.info("调用成功,返回结果 ===> " + response.getBody());
 | 
				
			||||||
 | 
					                Map<String, String> map = new HashMap();
 | 
				
			||||||
 | 
					                map.put("formStr", response.getBody());
 | 
				
			||||||
 | 
					                return map;
 | 
				
			||||||
 | 
					            } else {
 | 
				
			||||||
 | 
					                log.info("调用失败,返回码 ===> " + response.getCode() + ", 返回描述 ===> " + response.getMsg());
 | 
				
			||||||
 | 
					                throw new RuntimeException("创建支付交易失败");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					        } catch (AlipayApiException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					            throw new RuntimeException("创建支付宝支付交易失败");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    @Override
 | 
				
			||||||
 | 
					    public String tradeNotify(Map<String, String> params) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        log.info("支付通知正在执行");
 | 
				
			||||||
 | 
					        log.info("通知参数 ===> {}", params);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        String result = "failure";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        try {
 | 
				
			||||||
 | 
					            //异步通知验签
 | 
				
			||||||
 | 
					            boolean signVerified = AlipaySignature.rsaCheckV1(params, config.getProperty("alipay.alipay-public-key"), AlipayConstants.CHARSET_UTF8, AlipayConstants.SIGN_TYPE_RSA2); //调用SDK验证签名
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            if (!signVerified) {
 | 
				
			||||||
 | 
					                //验签失败则记录异常日志,并在response中返回failure.
 | 
				
			||||||
 | 
					                log.error("支付成功异步通知验签失败!");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            // 验签成功后
 | 
				
			||||||
 | 
					            log.info("支付成功异步通知验签成功!");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验,
 | 
				
			||||||
 | 
					            //1 商户需要验证该通知数据中的 out_trade_no 是否为商户系统中创建的订单号
 | 
				
			||||||
 | 
					            String outTradeNo = params.get("out_trade_no");
 | 
				
			||||||
 | 
					            OrderInfo order = orderFeignClient.getOrderInfo(outTradeNo);
 | 
				
			||||||
 | 
					            if (order == null) {
 | 
				
			||||||
 | 
					                log.error("订单不存在");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //2 判断 total_amount 是否确实为该订单的实际金额(即商户订单创建时的金额)
 | 
				
			||||||
 | 
					            String totalAmount = params.get("total_amount");
 | 
				
			||||||
 | 
					            int totalAmountInt = new BigDecimal(totalAmount).multiply(new BigDecimal("100"))
 | 
				
			||||||
 | 
					                    .intValue();
 | 
				
			||||||
 | 
					            int totalFeeInt = order.getTotalAmount()
 | 
				
			||||||
 | 
					                    .intValue();
 | 
				
			||||||
 | 
					            if (totalAmountInt != totalFeeInt) {
 | 
				
			||||||
 | 
					                log.error("金额校验失败");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //3 校验通知中的 seller_id(或者 seller_email) 是否为 out_trade_no 这笔单据的对应的操作方
 | 
				
			||||||
 | 
					            String sellerId = params.get("seller_id");
 | 
				
			||||||
 | 
					            String sellerIdProperty = config.getProperty("alipay.seller-id");
 | 
				
			||||||
 | 
					            if (!sellerId.equals(sellerIdProperty)) {
 | 
				
			||||||
 | 
					                log.error("商家pid校验失败");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //4 验证 app_id 是否为该商户本身
 | 
				
			||||||
 | 
					            String appId = params.get("app_id");
 | 
				
			||||||
 | 
					            String appIdProperty = config.getProperty("alipay.app-id");
 | 
				
			||||||
 | 
					            if (!appId.equals(appIdProperty)) {
 | 
				
			||||||
 | 
					                log.error("appid校验失败");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS时,
 | 
				
			||||||
 | 
					            // 支付宝才会认定为买家付款成功。
 | 
				
			||||||
 | 
					            String tradeStatus = params.get("trade_status");
 | 
				
			||||||
 | 
					            if (!"TRADE_SUCCESS".equals(tradeStatus)) {
 | 
				
			||||||
 | 
					                log.error("支付未成功");
 | 
				
			||||||
 | 
					                return result;
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					            //处理业务 修改订单状态 记录支付日志
 | 
				
			||||||
 | 
					//            aliPayService.processOrder(params);
 | 
				
			||||||
 | 
					            paymentInfoService.paySuccess(outTradeNo, params);
 | 
				
			||||||
 | 
					            //校验成功后在response中返回success并继续商户自身业务处理,校验失败返回failure
 | 
				
			||||||
 | 
					            result = "success";
 | 
				
			||||||
 | 
					        } catch (AlipayApiException e) {
 | 
				
			||||||
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					        return result;
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -1,5 +1,7 @@
 | 
				
			|||||||
package com.yovinchen.xlcs.payment.service.impl;
 | 
					package com.yovinchen.xlcs.payment.service.impl;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
				
			||||||
 | 
					import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
				
			||||||
import com.yovinchen.xlcs.client.order.OrderFeignClient;
 | 
					import com.yovinchen.xlcs.client.order.OrderFeignClient;
 | 
				
			||||||
import com.yovinchen.xlcs.common.exception.xlcsException;
 | 
					import com.yovinchen.xlcs.common.exception.xlcsException;
 | 
				
			||||||
import com.yovinchen.xlcs.common.result.ResultCodeEnum;
 | 
					import com.yovinchen.xlcs.common.result.ResultCodeEnum;
 | 
				
			||||||
@@ -11,8 +13,6 @@ import com.yovinchen.xlcs.mq.constant.MqConst;
 | 
				
			|||||||
import com.yovinchen.xlcs.mq.service.RabbitService;
 | 
					import com.yovinchen.xlcs.mq.service.RabbitService;
 | 
				
			||||||
import com.yovinchen.xlcs.payment.mapper.PaymentInfoMapper;
 | 
					import com.yovinchen.xlcs.payment.mapper.PaymentInfoMapper;
 | 
				
			||||||
import com.yovinchen.xlcs.payment.service.PaymentInfoService;
 | 
					import com.yovinchen.xlcs.payment.service.PaymentInfoService;
 | 
				
			||||||
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 | 
					 | 
				
			||||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 | 
					 | 
				
			||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -90,10 +90,7 @@ public class PaymentInfoServiceImpl extends ServiceImpl<PaymentInfoMapper, Payme
 | 
				
			|||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public void paySuccess(String orderNo, Map<String, String> resultMap) {
 | 
					    public void paySuccess(String orderNo, Map<String, String> resultMap) {
 | 
				
			||||||
        //1 查询当前订单支付记录表状态是否是已经支付
 | 
					        //1 查询当前订单支付记录表状态是否是已经支付
 | 
				
			||||||
        PaymentInfo paymentInfo = baseMapper.selectOne(
 | 
					        PaymentInfo paymentInfo = baseMapper.selectOne(new LambdaQueryWrapper<PaymentInfo>().eq(PaymentInfo::getOrderNo, orderNo));
 | 
				
			||||||
                new LambdaQueryWrapper<PaymentInfo>()
 | 
					 | 
				
			||||||
                        .eq(PaymentInfo::getOrderNo, orderNo)
 | 
					 | 
				
			||||||
        );
 | 
					 | 
				
			||||||
        if (paymentInfo.getPaymentStatus() != PaymentStatus.UNPAID) {
 | 
					        if (paymentInfo.getPaymentStatus() != PaymentStatus.UNPAID) {
 | 
				
			||||||
            return;
 | 
					            return;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
@@ -105,7 +102,6 @@ public class PaymentInfoServiceImpl extends ServiceImpl<PaymentInfoMapper, Payme
 | 
				
			|||||||
        baseMapper.updateById(paymentInfo);
 | 
					        baseMapper.updateById(paymentInfo);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        //3 整合RabbitMQ实现 修改订单记录已经支付,库存扣减
 | 
					        //3 整合RabbitMQ实现 修改订单记录已经支付,库存扣减
 | 
				
			||||||
        rabbitService.sendMessage(MqConst.EXCHANGE_PAY_DIRECT,
 | 
					        rabbitService.sendMessage(MqConst.EXCHANGE_PAY_DIRECT, MqConst.ROUTING_PAY_SUCCESS, orderNo);
 | 
				
			||||||
                MqConst.ROUTING_PAY_SUCCESS, orderNo);
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -11,6 +11,7 @@ import com.yovinchen.xlcs.vo.user.UserLoginVo;
 | 
				
			|||||||
import org.springframework.beans.factory.annotation.Autowired;
 | 
					import org.springframework.beans.factory.annotation.Autowired;
 | 
				
			||||||
import org.springframework.data.redis.core.RedisTemplate;
 | 
					import org.springframework.data.redis.core.RedisTemplate;
 | 
				
			||||||
import org.springframework.stereotype.Service;
 | 
					import org.springframework.stereotype.Service;
 | 
				
			||||||
 | 
					import org.springframework.transaction.annotation.Transactional;
 | 
				
			||||||
import org.springframework.util.StringUtils;
 | 
					import org.springframework.util.StringUtils;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import java.math.BigDecimal;
 | 
					import java.math.BigDecimal;
 | 
				
			||||||
@@ -41,6 +42,7 @@ public class WeXinServiceImpl implements WeixinService {
 | 
				
			|||||||
     * @param orderNo
 | 
					     * @param orderNo
 | 
				
			||||||
     * @return
 | 
					     * @return
 | 
				
			||||||
     */
 | 
					     */
 | 
				
			||||||
 | 
					    @Transactional
 | 
				
			||||||
    @Override
 | 
					    @Override
 | 
				
			||||||
    public Map<String, String> createJsapi(String orderNo) {
 | 
					    public Map<String, String> createJsapi(String orderNo) {
 | 
				
			||||||
        //1 向payment_info支付记录表添加记录,目前支付状态:正在支付中
 | 
					        //1 向payment_info支付记录表添加记录,目前支付状态:正在支付中
 | 
				
			||||||
@@ -103,7 +105,8 @@ public class WeXinServiceImpl implements WeixinService {
 | 
				
			|||||||
            //6 返回结果
 | 
					            //6 返回结果
 | 
				
			||||||
            return result;
 | 
					            return result;
 | 
				
			||||||
        } catch (Exception e) {
 | 
					        } catch (Exception e) {
 | 
				
			||||||
            throw new RuntimeException(e);
 | 
					            e.printStackTrace();
 | 
				
			||||||
 | 
					            throw new RuntimeException("创建微信支付交易失败");
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -13,3 +13,24 @@ spring:
 | 
				
			|||||||
        password: nacos
 | 
					        password: nacos
 | 
				
			||||||
application:
 | 
					application:
 | 
				
			||||||
  version: v1.0.0
 | 
					  version: v1.0.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ali-pay:
 | 
				
			||||||
 | 
					  #接下来两个用来标识用户
 | 
				
			||||||
 | 
					  #商户id
 | 
				
			||||||
 | 
					  pid: 9021000134674270
 | 
				
			||||||
 | 
					  #应用appid(和商户id绑定过)
 | 
				
			||||||
 | 
					  app-id: 2088721030577347
 | 
				
			||||||
 | 
					  #接下来三个用来确保SSL
 | 
				
			||||||
 | 
					  #商户私钥
 | 
				
			||||||
 | 
					  merchant-private-key: MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDjEwOkkuVP+MkTmAdtw8HzsYFvkXe1k/NK9FOje4ywZrHqy5szqpAJGZU5onHprDQg0+ozWESBKfoqEifDsfjWNuVVMfK1eluLYBEzTCGsXHjI4nJPDCBC24k51LCJuDbakYZCiV9tNfvBcRyYT4exPelT2jiNiGL8halGgPV2Mw3ySbzhMeCzFlKvYzj4xVxVkFKVsKnkxvjEO/e2sSMWxW4Ll5uTFV9sdvk4D+B08sd9aG9ThMKCYTsYrX0b5oxPHwDv4xjM7q8xzZ7x+a7tkwb5kk2X3bxJa0DmSIVli4B/hPD5LpLzH7WqmWi/LPKrdMoGZ7aPPHTqtEo/UcNVAgMBAAECggEAf3pVOTcedV79w3o98WlMoTqtp6zKv61nkFTJ/6WEviNpDp9vafn/EpzCIbEIsl5yhVtyx5BuJPUj9CptGHf5cokvBj0cPLWMXxp3jYzX+qOPS3eVJLtyARauW0EEOsyoPtwju4bTg8Qiqd6OZxN+4goXy3Ne/FXs/EctWN9c7hV8gkqrx2wK60EG/kNKiikl5bRS3fRg2MdcPirYOYqW0DWH2saD5CLfRoVKSg8ygDnMD/gTa961jhRYy1WxljHNO+b6UpoaoXXsvs9aGW3pNf7QaLFAbzTUfyDeAAvOhtupfwT82cU13j3yv2FNLxdwVUeG373eTzA1aNZvx94qAQKBgQD6FR0skjs03We0iPf/YYjL5DYs3YEkr+vmeSn0Xz33Bbqn4UQKdyerrD9VQhcLnSc7gA0f8FAC//GWYEgbLczN2OFb0+8lcZzCiz7Q+dzEUVd9HoHKnWgl+dGuwF7c+YqX6QyaoKcxmfegUxkfg0DibnZRlLhrsTrTgQJ/baOCsQKBgQDocobrlVMOwUgRjAvBUWhtYdytFEJ0XCc9rEQ7wTFDXtScv72d1nfWTwUluAHfepVMzGYkG+KiJCCp5jfe3ovxd2FkzlN9YRrwyuDKrffTXwBvI+rf7zvy6KOqhc9IcCnDfyhD37kXSm9FZg6Wfkwk21wf4ya0tJo63zsOWgRL5QKBgQDLWWPRnE58XBQ5nq5ZgMulTzomHS8nz8y4KYnN5awTMxtl6yxSfjVJyNPu1cC7dtwx65vAfr3w0oF1T3ESeJlyQIpvCtQI1GstXeCEOMgk8id729SaFohbaNnxiQcaE+d4Qs425a9OC+5o9WkWULnv5PZcu9uB5ij5VovbZiFw4QKBgBobqv3Q8thIa1DVOwjGnQUUJdYm3WP2ac3qiGtxwpe/kf/dJW4SBbnDfF+FMGiqexR6LMrHewgdKLIMkp/svSks8HqDFiuR+ZWsI91/9sL9+62ACkSGuWQKLz/a8bJALuCvapVdDowIJ0FTOjY7D1BgdxN5zwIi+uO76QUupSblAoGBAOVn1k5AZSjgzJt6xANP9TI08kp0qSO90PepRzo5o0KxbsyEz8rQRlwqfVFBSv5S4JkuTJo/2EqMMbaLW3uDZ2DorIqClGLD3UH6OueH3Ek48WNntoCJy79ovMmsa3AKOaMirARdytrU3AnmlBstBGTaoi7ARAoAJLeTxxUJHjJB
 | 
				
			||||||
 | 
					  #支付宝公钥
 | 
				
			||||||
 | 
					  ali-pay-public-key: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAkDBcupxSOK3Qd2vjRXtUTglrPF+ijQ64Gf8plOiIFfr9U9dkClBvU4V7jLgmBhI2i1fwuGuGhI2ZhySFkFazPqrBTvL7RXWCYjbkjh/89ZOLwbm6Pz5Vm11mkdv1eqvsp2H/g3nIkVjBeDit1JqJ/jo0Fs30D6o9BjYDMJHmzDwmfH5EJiHSIrtLuUsUZCErpmQX8Uz9TVmTE+XVwIl0Npt1MV5czKIE+apkJPelktHuNhYRpJQ81t67v3euMFQOwaZO6Fk7YsUUZRX8W+Uui6lWJnCkCPUnT/GdBTomaxBq0ZocZtYmnvc9BlZBCkPPzcrOobKUQp1KkyhSZDc//QIDAQAB
 | 
				
			||||||
 | 
					  ##对称加密密钥
 | 
				
			||||||
 | 
					  content-key: p+XVGRdcShpQE4faeI6VfQ==
 | 
				
			||||||
 | 
					  #接下来三个是相关地址
 | 
				
			||||||
 | 
					  #支付宝网关
 | 
				
			||||||
 | 
					  gateway-url: https://openapi.alipaydev.com/gateway.do
 | 
				
			||||||
 | 
					  #接收结果通知地址
 | 
				
			||||||
 | 
					  notify-url: http://localhost:8080/#/success
 | 
				
			||||||
 | 
					  #页面跳转同步通知页面路径
 | 
				
			||||||
 | 
					  return-url: https://a863-180-174-204-169.ngrok.io/api/ali-pay/trade/notify
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -155,9 +155,7 @@ public class SkuServiceImpl implements SkuService {
 | 
				
			|||||||
            Map<Long, List<String>> skuIdToRuleListMap = activityFeignClient.findActivity(skuIdList);
 | 
					            Map<Long, List<String>> skuIdToRuleListMap = activityFeignClient.findActivity(skuIdList);
 | 
				
			||||||
            //封装获取数据到skuEs里面 ruleList属性里面
 | 
					            //封装获取数据到skuEs里面 ruleList属性里面
 | 
				
			||||||
            if (skuIdToRuleListMap != null) {
 | 
					            if (skuIdToRuleListMap != null) {
 | 
				
			||||||
                skuEsList.forEach(skuEs -> {
 | 
					                skuEsList.forEach(skuEs -> skuEs.setRuleList(skuIdToRuleListMap.get(skuEs.getId())));
 | 
				
			||||||
                    skuEs.setRuleList(skuIdToRuleListMap.get(skuEs.getId()));
 | 
					 | 
				
			||||||
                });
 | 
					 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        return pageModel;
 | 
					        return pageModel;
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user