|
@@ -1,29 +1,50 @@
|
|
|
-package com.ruoyi.web.controller.alipay;
|
|
|
+package com.ruoyi.system.service.impl;
|
|
|
|
|
|
-import com.alipay.api.AlipayApiException;
|
|
|
-import com.alipay.api.AlipayClient;
|
|
|
-import com.alipay.api.DefaultAlipayClient;
|
|
|
-import com.alipay.api.AlipayConfig;
|
|
|
-import com.alipay.api.response.AlipayTradeWapPayResponse;
|
|
|
+import com.alipay.api.*;
|
|
|
import com.alipay.api.domain.AlipayTradeWapPayModel;
|
|
|
+import com.alipay.api.internal.util.AlipaySignature;
|
|
|
import com.alipay.api.request.AlipayTradeWapPayRequest;
|
|
|
+import com.alipay.api.response.AlipayTradeWapPayResponse;
|
|
|
+import com.ruoyi.system.domain.ali.AliPayBean;
|
|
|
+import com.ruoyi.system.domain.wx.WxPayV3Bean;
|
|
|
+import com.ruoyi.system.service.IAlipayService;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
|
|
|
-public class AlipayTradeWapPay {
|
|
|
+import javax.annotation.Resource;
|
|
|
+import java.util.Map;
|
|
|
|
|
|
- public void AlipayApi() throws AlipayApiException {
|
|
|
+/**
|
|
|
+ * @Author: tjf
|
|
|
+ * @Date: 2024/1/18 10:04
|
|
|
+ * @Describe:
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class AlipayServiceImpl implements IAlipayService {
|
|
|
+ @Resource
|
|
|
+ private AliPayBean aliPayBean;
|
|
|
+ /**
|
|
|
+ * 支付宝开放平台接收 request请求对象后
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public String tradeCreate() throws Exception {
|
|
|
String privateKey = "MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdEgdHzKCYUjMUW9eNkVU6I6JWstTRCw5w6typSld7LKF0mCCnz0GFrxx4p+28rQzp8V9ONH/UH81qFSrQQIZPMdJQITNqJNidC7ypMcarruZhvmwa/9O1U/teKbelMuBtWoke0deAl6YmNXcc5t1EU2mYbwF3ITYBylxRpQ5Mea6ScERP0kxfyTGkQ8K1TdrvXHvr0HePbl2TDBCN88B/QwTx0wIL1cdBSriewftiZ+PITctYlXtPqtKe/WEWl4vk+pfLYDH/q6XkR4zrxXkHhyV0JHZSeO2FNsMdcv3zImbaWAHdbiQj5gaWywXaMdnOaYyFKSSKStbYnWue6HHLAgMBAAECggEAPqYeOUkpFRhUP16Sj2jUcagc7C/QKsEaNXe4I93/HqYij/rNq6FDJSs/U/DHJmZvrDAWL39JLTayHAntVbsm1xesJ0HW3BNuQtWXnnS4JWpRgdMOE4bOzph8voYtNbshQPzHjH9uUWAraToSFHkQ8FvE1oQQNZANlpE8WWRYW6/bftFEkVi+VeJUH8xEhFUkwuMZ5w7ERnMCjqnzdtBYLFA3pAJQkyv0XLEj5Bs/IetF4Q4+IopeI/H7+vFwRmDnZvNDdgWOyFnWsuvW1rhJjhYF/B56MWZwP/KfbZdI3YjMdYpveULzesk4wlG5xuzmFsS3AKw2nm/Rq/HtQmIRgQKBgQDoJnPwii3nmiO/FA35pkVNvGWSBtHheRnwhUvwqd1p68/sxNPe5LiBP8zwr1hTtUT+zy5TZQLF3HIlzARIH6NVEh5YTFK3OkJu18w64IrAEKCMfO3U2lYaDIDHrPqkMMFYKKyNJA6cUkCG5g3QXNuFXqUPUjOJjAFTrRqGyVE3mwKBgQCtNPpz8nux/y+X6ggRDdeI2bpr+BrMQKT1DF/an9k8twP1i0S+RBkCEoRlSJ6gELE24dA6ZuU9tnE0FO14eM2cUviqHU3pkyUj9rcpHxlYBokCyr8q5EnTruYsAzoydcc99CiHD3QC2LDdFb5iGh+OGn+Gql5S2T6A5nO4zNKJkQKBgQDKvgJVGSg78way8n2+AHLYD+eYnzIeutdnkdIfbQn8XkApZEAwkgl8f06pCEmYWV/XNPMdS8MfL4XU8pbusgq/2eH8dTNr54prKTWoWb9zO1IrP1Opp8C4YSD6wVvnltjT+DmxzcKgzMijxzhbNy1UDbMTbVOrFUV3YV8gRaMTbwKBgBUfOMua7mqua+diqskpnvcZVhqEjwAJghRABhBrHdrBlsIC0cdCFqqiB3Myf+WVI4dF0lbM5Xe5H+TyCGOAl9JQa/KS0EWDpCvWkk95c2XApkSo5NceL8KYuYj0e8xbgIiVlbuirssKEcdkN2tPNDnoEVUiwY3o4C5n7ATFNYeBAoGBAKrFwAfpj70UC1jRmYJ/FL7h5M+CPIkweT+biD5YGC0T9ijrgKUm2LV1rCQyo70nGDP7/wK15XiuOk69oZCF/bdjNTpNpYA1j1sC1oHuq746zh/4protfOdb+mk6rVWwYF++swttQ5pcmu2W/l+ufd8edbkzMl/a2zi0kvVrnx2x";
|
|
|
String alipayPublicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAogc/9hKx6FAM6btKymkkFh932UfOPal4DgxXGstpFUG5Ehc+dMqm6e0CoMfNjZ4IBTRttE/OaBP/mW+YI53Tb+ND2rb22BqG+5JMp1WBJ4Tdz6DTKsbTRfN0Hrv1HiBglpgaJZs6Oymt1b43jnpL1bWsUULBnI+PWamlIottHK2IHC3/d5jN/9gz6TP6VkPnmokiBr0Hfcmv7jMjWsVsOf1wh5Jk/I7VSc+H314EO83Z1Cd+jS7lXLhHz105ORKUQf0dZD0VBa9Nl1aOMGZThrpcA9S6B3KfE8f66fIFLkhG/7IM7zSSsR0G8aLxiORCN9vpf38qwxBrWuugJtJqqwIDAQAB";
|
|
|
+ //封装签名过程
|
|
|
AlipayConfig alipayConfig = new AlipayConfig();
|
|
|
alipayConfig.setServerUrl("https://openapi-sandbox.dl.alipaydev.com/gateway.do");
|
|
|
alipayConfig.setAppId("9021000134610854");
|
|
|
-
|
|
|
alipayConfig.setPrivateKey(privateKey);
|
|
|
alipayConfig.setFormat("json");
|
|
|
alipayConfig.setAlipayPublicKey(alipayPublicKey);
|
|
|
alipayConfig.setCharset("UTF-8");
|
|
|
alipayConfig.setSignType("RSA2");
|
|
|
AlipayClient alipayClient = new DefaultAlipayClient(alipayConfig);
|
|
|
+ ////支付宝公共参数
|
|
|
AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest();
|
|
|
+ ///同步跳转地址,仅支持http/https
|
|
|
+ request.setReturnUrl("");
|
|
|
+ //封装参数
|
|
|
AlipayTradeWapPayModel model = new AlipayTradeWapPayModel();
|
|
|
model.setOutTradeNo("70501111111S001111119");
|
|
|
model.setTotalAmount("9.00");
|
|
@@ -31,6 +52,8 @@ public class AlipayTradeWapPay {
|
|
|
model.setProductCode("QUICK_WAP_WAY");
|
|
|
model.setSellerId("2088102147948060");
|
|
|
request.setBizModel(model);
|
|
|
+
|
|
|
+ //执行请求,调用支付宝
|
|
|
AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "POST");
|
|
|
// 如果需要返回GET请求,请使用
|
|
|
// AlipayTradeWapPayResponse response = alipayClient.pageExecute(request, "GET");
|
|
@@ -44,5 +67,53 @@ public class AlipayTradeWapPay {
|
|
|
// String diagnosisUrl = DiagnosisUtils.getDiagnosisUrl(response);
|
|
|
// System.out.println(diagnosisUrl);
|
|
|
}
|
|
|
+ return pageRedirectionData;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public String tradeNotify(Map<String, String> params) {
|
|
|
+ String result = "failure";
|
|
|
+ try {
|
|
|
+ //异步通知验签
|
|
|
+ boolean signVerified = AlipaySignature.rsaCheckV1(params,
|
|
|
+ aliPayBean.getPublicKey(),
|
|
|
+ AlipayConstants.CHARSET_UTF8,
|
|
|
+ AlipayConstants.SIGN_TYPE_RSA2);
|
|
|
+ if (!signVerified) {
|
|
|
+ // TODO 验签失败则记录异常日志,并在response中返回failure.
|
|
|
+ System.out.println("支付成功,异步通知验签失败!");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ System.out.println("支付成功,异步通知验签成功!");
|
|
|
+ //TODO 验签成功后,按照支付结果异步通知中的描述,对支付结果中的业务内容进行二次校验
|
|
|
+ //1.验证out_trade_no 是否为商家系统中创建的订单号
|
|
|
+ String outTradeNo = params.get("out_trade_no");
|
|
|
+ //2.判断 total_amount 是否确实为该订单的实际金额
|
|
|
+ String totalAmount = params.get("total_amount");
|
|
|
+ //3.校验通知中的 seller_id是否为 out_trade_no 这笔单据的对应的操作方
|
|
|
+ String sellerId = params.get("seller_id");
|
|
|
+ if (!sellerId.equals(aliPayBean.getSellerId())) {
|
|
|
+ System.out.println("商家PID校验失败");
|
|
|
+
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ //4.验证 app_id 是否为该商家本身
|
|
|
+ String appId = params.get("app_id");
|
|
|
+ if (!appId.equals(aliPayBean.getAppId())){
|
|
|
+ System.out.println("app_id校验失败");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ //在支付宝的业务通知中,只有交易通知状态为 TRADE_SUCCESS 或 TRADE_FINISHED 时,支付宝才会认定为买家付款成功
|
|
|
+ String tradeStatus = params.get("trade_status");
|
|
|
+ if (!"TRADE_SUCCESS".equals(tradeStatus) && !"TRADE_FINISHED".equals(tradeStatus)){
|
|
|
+ System.out.println("未支付成功");
|
|
|
+ return result;
|
|
|
+ }
|
|
|
+ //TODO 处理自身业务
|
|
|
+ result = "success";
|
|
|
+ } catch (AlipayApiException e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ return result;
|
|
|
}
|
|
|
}
|