Merge branch 'dev2'

dev2
Aaaaaaaa 2024-09-01 01:16:46 +08:00
commit 518a1b9e02
17 changed files with 359 additions and 41 deletions

View File

@ -19,7 +19,6 @@ public class Operators extends BaseEntity {
/** /**
* ID * ID
*/ */
private Long operatorsId; private Long operatorsId;
/** /**

View File

@ -0,0 +1,88 @@
package com.muyu.cloud.market.domin;
import com.baomidou.mybatisplus.annotation.TableName;
import com.muyu.common.core.web.domain.BaseEntity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
import java.math.BigDecimal;
@EqualsAndHashCode(callSuper = true)
@Data
@AllArgsConstructor
@NoArgsConstructor
@SuperBuilder
@TableName(value = "payinfo",autoResultMap = true)
public class PayInfo extends BaseEntity {
private static final long serialVersionUID = 1L;
/**
*
*/
private Long payInfoId;
/**
*
*/
private String payInfoNum;
/**
* ; 1 2 3 4 5
*/
private Integer payInfoState;
/**
* ID()
*/
private Integer payInfoOrders;
/**
* ID()
*/
private Integer payInfoUser;
/**
* ID()
*/
private Integer payInfoOperators;
/**
*
*/
private String payInfoRemark;
//订单模块(要使用外键)
/**
* ID()
*/
private Long ordersId;
/**
*
*/
private String ordersNum;
/**
*
*/
private BigDecimal ordersPrice;
//用户模块(要使用外键)
/**
* ()
*/
private Long userId;
/**
*
*/
private String userName;
//运营商模块(要使用外键)
/**
* ID
*/
private Long operatorsId;
/**
*
*/
private String operatorsName;
}

View File

@ -122,6 +122,22 @@
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId> <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.0.4</version> <version>2.0.4</version>
</dependency> </dependency>
<!-- 支付宝相关-->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-sdk-java</artifactId>
<version>4.34.0.ALL</version>
</dependency>
<!-- 支付宝依赖沙箱支付 -->
<dependency>
<groupId>com.alipay.sdk</groupId>
<artifactId>alipay-easysdk</artifactId>
<version>2.2.0</version>
</dependency>
</dependencies> </dependencies>

View File

@ -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;
}
}

View File

@ -0,0 +1,128 @@
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.OrderShowService;
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;
@Resource
private OrderShowService orderShowService;
@GetMapping("/pay")
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<String, String> params = new HashMap<>();
Map<String, String[]> 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 = orderShowService.selectByOrderNo(tradeNo);
// orders.setOrdersState(Integer.valueOf("已支付"));
// orders.setCreateTime(gmtPayment);
// orders.setOrdersNum(alipayTradeNo);
// orderShowService.updateOrders(orders);
}
}
}
}

View File

@ -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 {
}

View File

@ -5,6 +5,7 @@ import com.muyu.cloud.market.domin.req.OrdersAddReq;
import com.muyu.cloud.market.domin.req.OrdersListReq; import com.muyu.cloud.market.domin.req.OrdersListReq;
import com.muyu.cloud.market.domin.req.OrdersUpdReq; import com.muyu.cloud.market.domin.req.OrdersUpdReq;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Select;
import java.util.List; import java.util.List;
@ -66,12 +67,12 @@ public interface OrderShowMapper {
/** /**
* (), *
* , * @param ordersNum
* @return
*/ */
@Select("select * from orders where orders_num = #{ordersNum}")
Orders selectByordersNum(String ordersNum);
/** /**
* , * ,

View File

@ -1,7 +0,0 @@
package com.muyu.cloud.market.mapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface OrdersPayMapper {
}

View File

@ -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<PayInfo> selectpayinfoList(OrdersListReq req);
}

View File

@ -64,7 +64,12 @@ public interface OrderShowService {
*/ */
Orders findAllById (Integer ordersId); Orders findAllById (Integer ordersId);
/**
*
* @param ordersNum
* @return
*/
Orders selectByOrderNo(String ordersNum);

View File

@ -1,4 +0,0 @@
package com.muyu.cloud.market.service;
public interface OrdersPayService {
}

View File

@ -0,0 +1,7 @@
package com.muyu.cloud.market.service;
import com.muyu.cloud.market.domin.Orders;
public interface PayInfoService {
Orders selectByordersNum(String ordersNum);
}

View File

@ -123,6 +123,11 @@ public class OrderShowServiceImpl implements OrderShowService {
} }
public Orders selectByOrderNo(String ordersNum) {
return orderShowMapper.selectByordersNum(ordersNum);
}
} }

View File

@ -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 {
}

View File

@ -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;
}
}

View File

@ -52,3 +52,8 @@ spring:
# rabbit 配置文件 # rabbit 配置文件
- application-rabbit-config-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension} - 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

View File

@ -63,8 +63,7 @@
</insert> </insert>
<update id="updateOrders"> <update id="updateOrders">
UPDATE `orders` SET UPDATE `orders` SET `orders`.`orders_product` = #{ordersProduct},
`orders`.`orders_product` = #{ordersProduct},
`orders`.`orders_price` = #{ordersPrice}, `orders`.`orders_price` = #{ordersPrice},
`orders`.`orders_specification` = #{ordersSpecification}, `orders`.`orders_specification` = #{ordersSpecification},
`orders`.`orders_state` = #{ordersState} `orders`.`orders_state` = #{ordersState}