diff --git a/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/Operators.java b/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/Operators.java
index 743439a..8e7b54e 100644
--- a/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/Operators.java
+++ b/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/Operators.java
@@ -19,7 +19,6 @@ public class Operators extends BaseEntity {
/**
* 运营商ID
*/
-
private Long operatorsId;
/**
diff --git a/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/PayInfo.java b/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/PayInfo.java
index 5044785..0d4f68b 100644
--- a/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/PayInfo.java
+++ b/cloud-market-common/src/main/java/com/muyu/cloud/market/domin/PayInfo.java
@@ -8,6 +8,8 @@ import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
+import java.math.BigDecimal;
+
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@@ -16,6 +18,8 @@ import lombok.experimental.SuperBuilder;
@TableName(value = "payinfo",autoResultMap = true)
public class PayInfo extends BaseEntity {
+ private static final long serialVersionUID = 1L;
+
/**
* 订单支付表主键
*/
@@ -24,6 +28,10 @@ public class PayInfo extends BaseEntity {
* 支付单号
*/
private String payInfoNum;
+ /**
+ * 支付单状态; 1待支付 2支付中 3支付成功 4支付失败 5支付超时
+ */
+ private Integer payInfoState;
/**
* 订单ID(外键)
*/
@@ -36,26 +44,45 @@ public class PayInfo extends BaseEntity {
* 渠道商ID(外鍵)
*/
private Integer payInfoOperators;
- /**
- * 支付单状态; 1待支付 2支付中 3支付成功 4支付失败 5支付超时
- */
- private Integer payInfoState;
/**
* 备注
*/
private String payInfoRemark;
+ //订单模块(要使用外键)
/**
* 订单ID(外键)
*/
private Long ordersId;
/**
- * 客户ID(外鍵)
+ * 订单编号
*/
- private Integer payInfoUser;
+ private String ordersNum;
/**
- * 渠道商ID(外鍵)
+ * 订单金额
*/
- private Integer payInfoOperators;
+ private BigDecimal ordersPrice;
+
+
+ //用户模块(要使用外键)
+ /**
+ * (关联的用户外键)
+ */
+ private Long userId;
+ /**
+ * 用户账号
+ */
+ private String userName;
+
+ //运营商模块(要使用外键)
+ /**
+ * 运营商ID
+ */
+ private Long operatorsId;
+ /**
+ * 运营商
+ */
+ private String operatorsName;
+
}
diff --git a/cloud-market-server/pom.xml b/cloud-market-server/pom.xml
index 70b0b31..0e56a35 100644
--- a/cloud-market-server/pom.xml
+++ b/cloud-market-server/pom.xml
@@ -106,12 +106,21 @@
2.0.4
+
com.alipay.sdk
alipay-sdk-java
4.34.0.ALL
+
+
+ com.alipay.sdk
+ alipay-easysdk
+ 2.2.0
+
+
+
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java
new file mode 100644
index 0000000..37bec50
--- /dev/null
+++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/config/AliPayConfig.java
@@ -0,0 +1,64 @@
+package com.muyu.cloud.market.config;
+
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+/**
+ * 支付宝工具
+ */
+@Component
+@ConfigurationProperties(prefix = "alipay")
+public class AliPayConfig {
+
+ /**
+ * 支付宝的APPID
+ */
+ private String appId;
+ /**
+ * 应用私钥
+ */
+ private String appPrivateKey;
+ /**
+ * 支付宝公钥
+ */
+ private String alipayPublicKey;
+ /**
+ * 支付宝通知本地的接口完整地址
+ */
+ private String notifyUrl;
+
+ public String getAppId() {
+ return appId;
+ }
+
+ public void setAppId(String appId) {
+ this.appId = appId;
+ }
+
+ public String getAppPrivateKey() {
+ return appPrivateKey;
+ }
+
+ public void setAppPrivateKey(String appPrivateKey) {
+ this.appPrivateKey = appPrivateKey;
+ }
+
+ public String getAlipayPublicKey() {
+ return alipayPublicKey;
+ }
+
+ public void setAlipayPublicKey(String alipayPublicKey) {
+ this.alipayPublicKey = alipayPublicKey;
+ }
+
+ public String getNotifyUrl() {
+ return notifyUrl;
+ }
+
+ public void setNotifyUrl(String notifyUrl) {
+ this.notifyUrl = notifyUrl;
+
+
+ }
+
+}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java
new file mode 100644
index 0000000..ac3f9eb
--- /dev/null
+++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/AliPayController.java
@@ -0,0 +1,124 @@
+package com.muyu.cloud.market.controller;
+
+import cn.hutool.json.JSONObject;
+import com.alipay.api.AlipayApiException;
+import com.alipay.api.AlipayClient;
+import com.alipay.api.DefaultAlipayClient;
+import com.alipay.api.internal.util.AlipaySignature;
+import com.alipay.api.request.AlipayTradePagePayRequest;
+import com.muyu.cloud.market.config.AliPayConfig;
+import com.muyu.cloud.market.domin.Orders;
+import com.muyu.cloud.market.domin.PayInfo;
+import com.muyu.cloud.market.service.PayInfoService;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletRequest;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.extern.log4j.Log4j2;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import java.util.HashMap;
+import java.util.Map;
+
+
+@RestController
+@RequestMapping("/alipay")
+@Log4j2
+@Tag(name = "支付接口控制层", description = "进行订单支付管理")
+public class AliPayController {
+ // 支付宝沙箱网关地址
+ private static final String GATEWAY_URL = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
+ private static final String FORMAT = "JSON";
+ private static final String CHARSET = "UTF-8";
+ //签名⽅式
+ private static final String SIGN_TYPE = "RSA2";
+
+ @Resource
+ private AliPayConfig aliPayConfig;
+
+ @Resource
+ private PayInfoService payInfoService;
+
+ @GetMapping("/pay") // /alipay/pay?orderNo=xxx
+ public void pay(String ordersNum, HttpServletResponse httpResponse) throws Exception {
+ //查询订单信息
+ Orders orders = payInfoService.selectByordersNum (ordersNum);
+ if (orders == null) {
+ return;
+ }
+ // 1.创建Client,通⽤SDK提供的Client,负责调⽤⽀付宝的API
+ AlipayClient alipayClient = new DefaultAlipayClient(
+ GATEWAY_URL,
+ aliPayConfig.getAppId(),
+ aliPayConfig.getAppPrivateKey(),
+ FORMAT, CHARSET,
+ aliPayConfig.getAlipayPublicKey(),
+ SIGN_TYPE);
+
+ // 2. 创建 Request并设置Request参数
+ AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 发送请求的 Request类
+ request.setNotifyUrl(aliPayConfig.getNotifyUrl());
+ cn.hutool.json.JSONObject bizContent = new JSONObject();
+ bizContent.set("orders_num", orders.getOrdersNum()); // 我们自己生成的订单编号,必须唯一不允许重复
+ bizContent.set("orders_price", orders.getOrdersPrice()); // 订单的总金额
+ bizContent.set("product_name", orders.getProductName()); // 支付的名称
+ bizContent.set("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定配置
+ request.setBizContent(bizContent.toString());
+ request.setReturnUrl("http://localhost:8080/orders"); // 支付完成后自动跳转到本地页面的路径
+
+ //执⾏请求,拿到响应的结果,返回给浏览器
+ String form = "";
+ try {
+ form = alipayClient.pageExecute(request).getBody();//调⽤SDK⽣成表单
+ } catch (AlipayApiException e) {
+ e.printStackTrace();
+ }
+ httpResponse.setContentType("text/html;charset=" + CHARSET);
+ httpResponse.getWriter().write(form);//直接将完整的表单html 输出到⻚⾯
+ httpResponse.getWriter().flush();
+ httpResponse.getWriter().close();
+ }
+
+ @PostMapping("/notify") // 注意这里必须是POST接口
+ public void payNotify(HttpServletRequest request) throws Exception {
+ if (request.getParameter("trade_status").equals("TRADE_SUCCESS")) {
+ System.out.println("=========支付宝异步回调========");
+
+ Map params = new HashMap<>();
+ Map requestParams = request.getParameterMap();
+ for (String name : requestParams.keySet()) {
+ params.put(name, request.getParameter(name));
+ }
+
+ String sign = params.get("sign");
+ String content = AlipaySignature.getSignCheckContentV1(params);
+ boolean checkSignature = AlipaySignature.rsa256CheckContent(content, sign, aliPayConfig.getAlipayPublicKey(), "UTF-8"); // 验证签名
+ // 支付宝验签
+ if (checkSignature) {
+ // 验签通过
+ System.out.println("交易名称: " + params.get("subject"));
+ System.out.println("交易状态: " + params.get("pay_info_state"));
+ System.out.println("支付宝交易凭证号: " + params.get("trade_no"));
+ System.out.println("商户订单号: " + params.get("out_trade_no"));
+ System.out.println("交易金额: " + params.get("total_amount"));
+ System.out.println("买家在支付宝唯一id: " + params.get("buyer_id"));
+ System.out.println("买家付款时间: " + params.get("gmt_payment"));
+ System.out.println("买家付款金额: " + params.get("buyer_pay_amount"));
+
+ String tradeNo = params.get("out_trade_no"); // 订单编号
+ String gmtPayment = params.get("gmt_payment"); // 支付时间
+ String alipayTradeNo = params.get("trade_no"); // 支付宝交易编号
+ // 更新订单状态为已支付,设置支付信息
+// Orders orders = ordersService.selectByOrderNo(tradeNo);
+// orders.setStatus("已支付");
+// orders.setPayTime(gmtPayment);
+// orders.setPayNo(alipayTradeNo);
+// ordersService.updateById(orders);
+
+ }
+ }
+ }
+ }
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/PayController.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/PayController.java
deleted file mode 100644
index 46835ae..0000000
--- a/cloud-market-server/src/main/java/com/muyu/cloud/market/controller/PayController.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.muyu.cloud.market.controller;
-
-import io.swagger.v3.oas.annotations.tags.Tag;
-import lombok.extern.log4j.Log4j2;
-import org.springframework.web.bind.annotation.RequestMapping;
-import org.springframework.web.bind.annotation.RestController;
-
-@Log4j2
-@RestController
-@RequestMapping("/orders")
-@Tag(name = "支付接口控制层", description = "进行订单支付管理")
-public class PayController {
-}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrdersPayMapper.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrdersPayMapper.java
deleted file mode 100644
index 6443ddf..0000000
--- a/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/OrdersPayMapper.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package com.muyu.cloud.market.mapper;
-
-import org.apache.ibatis.annotations.Mapper;
-
-@Mapper
-public interface OrdersPayMapper {
-}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/PayInfoMapper.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/PayInfoMapper.java
new file mode 100644
index 0000000..4bcace7
--- /dev/null
+++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/mapper/PayInfoMapper.java
@@ -0,0 +1,20 @@
+package com.muyu.cloud.market.mapper;
+
+import com.muyu.cloud.market.domin.PayInfo;
+import com.muyu.cloud.market.domin.req.OrdersListReq;
+import org.apache.ibatis.annotations.Mapper;
+
+import java.util.List;
+
+@Mapper
+public interface PayInfoMapper {
+
+ List selectpayinfoList(OrdersListReq req);
+
+
+
+
+
+
+
+}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/OrdersPayService.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/OrdersPayService.java
deleted file mode 100644
index 9ad8e18..0000000
--- a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/OrdersPayService.java
+++ /dev/null
@@ -1,4 +0,0 @@
-package com.muyu.cloud.market.service;
-
-public interface OrdersPayService {
-}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/PayInfoService.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/PayInfoService.java
new file mode 100644
index 0000000..f2ab826
--- /dev/null
+++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/PayInfoService.java
@@ -0,0 +1,7 @@
+package com.muyu.cloud.market.service;
+
+import com.muyu.cloud.market.domin.Orders;
+
+public interface PayInfoService {
+ Orders selectByordersNum(String ordersNum);
+}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/OrdersPayServiceImpl.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/OrdersPayServiceImpl.java
deleted file mode 100644
index c85efc3..0000000
--- a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/OrdersPayServiceImpl.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package com.muyu.cloud.market.service.impl;
-
-import com.muyu.cloud.market.service.OrdersPayService;
-import org.springframework.stereotype.Service;
-
-@Service
-public class OrdersPayServiceImpl implements OrdersPayService {
-}
diff --git a/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/PayInfoServiceImpl.java b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/PayInfoServiceImpl.java
new file mode 100644
index 0000000..035f9ab
--- /dev/null
+++ b/cloud-market-server/src/main/java/com/muyu/cloud/market/service/impl/PayInfoServiceImpl.java
@@ -0,0 +1,13 @@
+package com.muyu.cloud.market.service.impl;
+
+import com.muyu.cloud.market.domin.Orders;
+import com.muyu.cloud.market.service.PayInfoService;
+import org.springframework.stereotype.Service;
+
+@Service
+public class PayInfoServiceImpl implements PayInfoService {
+ @Override
+ public Orders selectByordersNum(String ordersNum) {
+ return null;
+ }
+}
diff --git a/cloud-market-server/src/main/resources/bootstrap.yml b/cloud-market-server/src/main/resources/bootstrap.yml
index 51311eb..fa2424d 100644
--- a/cloud-market-server/src/main/resources/bootstrap.yml
+++ b/cloud-market-server/src/main/resources/bootstrap.yml
@@ -52,3 +52,8 @@ spring:
# rabbit 配置文件
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
+ alipay:
+ appId: 9021000140633904
+ appPrivateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCavSHP47iS43En9+MaR8ussAQmI9AbqhZYfb1yROE1ztMUmV9QJqmNiTdA2Tihn+srBG9AzVeJ/0XCqRlH8mFz5FXdsCG1M2EIPgiBYX58EJ565vAgHKRA/d/kKCA5MVkWYu6YiU/V2Pqw/X8K8/FNxXYvaHpjZwpjDqJCzvy4iK4DtM4QQoZRsVr0cOycYJSiC5A6+1wCpP4ZFNL9JdaQLCkLavAeRiRpwedtdW7B+malQEUomylZMwFaB0XJS+8oPlzqYf5RDyNYret4AZzfw0ke6fm3N7ygk3TTBZ9uKfqUNRHdpJ6/uIcHFE7MO16nyoxWHlM/u9i5vmxzhgKtAgMBAAECggEAdc+z85zUhXmHSL/x96tcBeGJdyRjKPzpwHwThfGtahNLIG7ZY6PcCbfECqqX9G5WVU0uCy+MC7QAgAHRDrcavWrGeV/FejlhEi5wuVjqPTlGABreDgTghd8E3Kg0SHcq9eFi+V3qG830qFaIqGUsfmLt5ZBtRktIXDzjC2yeezvV3IPHAQw5mTHmcbzz3WLJ8kuXV3gbOAPzV6Ig5pyp2NwdTMpg1Pn6Xfhf9reYnpkesW8Jph5c6P6bJZkQngC0TFQOpK3UfmFPq1dGfD5UcHjx1H4z09ny6rgXdRxvohDsgeiNmWY+rulzpQM8/DdUwwdmSACYAKgJSn6anCqzvQKBgQD6r/cEI/ShHZlLcS/vnc1W76KBpXx89luBo1NsbqwITSPKNktXpsocYuoxe4ednhBW69W71GfROQMw9zwiM1Gym9xs81Zys+IWySwd+J+T26Z1FoifPwW5ZA2cZYqzwZjg8Urw964cjZtmEhyBvGdzfRlFwvXi36ZB8b4wuOHsEwKBgQCeBJ/tGrGW15enkbmkCKSjFje7yVpjsB7ineuXd7QU3GVXNX9n35BvEcBkgx221woInEfyGsYnw13z1kwDPg2jh2tjVRSz2hjr7UNqeEXeuc366PHzoyJdl7K4ut7F5newzJhRqNKerLvTG8Ajta1NCnDevDVSYXgpso+Qw6iuPwKBgDWSJvJekKdhgOHLVVgaW8gpO4wDBkBaESH5+hjg6ah4e555zc30WZqJVMywPkHjhlBc43bZJDpkuZbcLqCMYPgPMKKjuaSXZkhCQ0hAWjGprb+1ygpl2F5O0E3MsUBKrdXcGoy2ESIO7Nd6JVdgIKdgY2cyC4OpEYlkFKWqzLS7AoGAQxR5g6D6VKuPAJ63LPBSW705yakPixQf+FnLwlAZjWWGS8A1JrZcTRo/Dywt+AlPhBo73IYLKqQgBTwqppG4HnyFVPSwRi1GuRjOrqsCFivQSjyLQb81/n9AanVBzscodlBUNQ4y4xM25MZ6CW69c+ADzDofdKpV5XWcxnqY5+cCgYEAoguI4wGcq1ULjOnt2BLhj2X4kU5UJZwFQuV8t5GDl9BoxO31qRCvu7cs3XtMsIaMn6Zvrg/bNjPF7sC1f0uXqCn3AlnVVTaG/jlI5QywJJflG33Hfa0K7j3ivGTU+AUL4LZbXOt9YR7vGjmItyAnZosdAogp50mOA1W0Jla+Aaw=
+ alipayPublicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA7rRdHzrcyEdSOLPm3ITg+t/C3tGp9+wl739nOgFExrSD1j1C95tTRGUCqNUQtatiYmlAfwOKzkNhr/XEH/Vvpq5Ei8C4ZBWJqOMw7fQfBE6m5erO/FOuS4pyZCtQZyP9C5nhtYOupnGtq0fmgQaGKk657vszYSMEtpuQaZ5/odUYxRbYP3IHbcK+++PQBarfOdnhNcnR/Ry7TVOC3+da0dogmClPEconZQMwCJ81CJ7Hj4TKKyLTe9bz+J2tkUeNr9Mc72g4ljjftX7k0RBpBpi4HSHJ3SmPLhktiuDOeOGOef88pBgBtFV03/+aFpUEHx/imiHhBMBeNT3kqFV03QIDAQAB
+ notifyUrl: http://8wvpet.natappfree.cc/alipay/notify