feat(pay): 更新支付宝支付配置并添加异步通知处理

- 更新了支付宝支付的 appID、私钥、公钥和通知 URL
- 在 OrderTradeController 中添加了支付宝异步通知处理方法- 更新了 AliPayIntegration 中的支付逻辑
- 调整了 MemberBillingConsumer 中的消息确认逻辑
- 在 SecurityConfig 中允许匿名访问支付通知接口
feature/comment
yang 2025-01-06 15:30:36 +08:00
parent a98d3bea72
commit a5fa3457d5
5 changed files with 48 additions and 10 deletions

View File

@ -27,11 +27,11 @@ public class AliPayIntegration {
public String pay(OrderTrade tradeEntity) throws Exception {
Factory.setOptions(config);
//调用支付宝的接口
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
// .preCreate(tradeEntity.getUserName(),
// tradeEntity.getCode(),
// tradeEntity.getPaymentAmount().toString());
AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题Mac笔记本", "LS123qwe123", "19999");
AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace()
.preCreate(tradeEntity.getUserName(),
tradeEntity.getCode(),
tradeEntity.getPaymentAmount().toString());
// AlipayTradePrecreateResponse payResponse = Factory.Payment.FaceToFace().preCreate("订单主题Mac笔记本", "LS123qwe123", "19999");
//参照官方文档响应示例,解析返回结果
String httpBodyStr = payResponse.getHttpBody();
JSONObject jsonObject = JSONObject.parseObject(httpBodyStr);

View File

@ -1,6 +1,7 @@
package com.mcwl.web.controller.pay;
import cn.hutool.extra.qrcode.QrCodeUtil;
import com.alipay.easysdk.factory.Factory;
import com.mcwl.common.core.controller.BaseController;
import com.mcwl.common.core.domain.AjaxResult;
import com.mcwl.common.core.page.TableDataInfo;
@ -15,8 +16,11 @@ import org.springframework.util.CollectionUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import static com.mcwl.common.utils.PageUtils.startPage;
@ -110,4 +114,36 @@ public class OrderTradeController extends BaseController {
}
@PostMapping("/notify") // 注意这里必须是POST接口
public String payNotify(HttpServletRequest request) throws Exception {
System.out.println("aaaaa");
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));
// System.out.println(name + " = " + request.getParameter(name));
}
String tradeNo = params.get("out_trade_no");
String gmtPayment = params.get("gmt_payment");
String alipayTradeNo = params.get("trade_no");
// 支付宝验签
if (Factory.Payment.Common().verifyNotify(params)) {
// 验签通过
System.out.println("交易名称: " + params.get("subject"));
System.out.println("交易状态: " + params.get("trade_status"));
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"));
// 更新订单状态
}
}
return "success";
}
}

View File

@ -95,7 +95,7 @@ token:
# 令牌密钥
secret: abcdefghijklmnopqrstuvwxyz
# 令牌有效期默认30分钟
expireTime: 30
expireTime: 1440
# MyBatis Plus配置
mybatis-plus:
@ -180,8 +180,8 @@ mall:
protocol: https
gatewayHost: openapi-sandbox.dl.alipaydev.com
signType: RSA2
appId: 9021000140696171
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCIw8lnyhxyCK/2NLXeJcZUwOoU9hA6Opg5dxJqOrLB0yZpxSrqgv+PooMBzFV5Wwf0s388sC9cdTEUm8NevIAwlioCc2JLfNwgVtfOHVQr4A4bwrzg9zpDJWw5fHmxfGodPCQCF2ZfdY48n/W8eI+6WdInIg7yXUT3/xN3nMepA2J96TYBrqwURoFMzzw0Z3fV+z82QOQrIAJQeMVsTkBZOeZriykNs7sVT+DtLuGDsznEDTj04xu1Miymd81sxeGxmR8j53/nlN4UCnKn+BjwmPGn9/PolSknAzjkgnFaeOX7gG+wSYus+R6UcVEvql3uYEHp4iBi/dukV/vXw9xzAgMBAAECggEABrHOwg3apppWQq8B2AXxV2S6EJya3r7PhMCXXivRZDt5veOw3hnbeKRz1TqzVGVoVkoTCF13dAcoh+G4BoMjoz02gTg0r41FGTAnECfPXvZwulsl870mVPMYARhevJlieFvhR1jt4e5XMBCEbt1X679J0jCQmryGC72orko2W8eD2NAoEVOZy7ZGhNAsNSAisHDGy0XlDTcU1h9MlEb7qeg1N48L+GrYZB27FHxWR8DwXhK+nlznJrNOPcDhvFds+LM1YH2wV2sKWMPmjW5gZv+kLdHK7tY6oHEmdG8Co4ULSCwQl9/ZCbQJC5n1K80Cxs6GbO02pl2+J/1psNebwQKBgQDqk+O1HuasPGWbbvOZz3RBtaGqnarZWXWPa0K7xtTjyVyNtvdzaU9lY/jHvyCsq/4djmIE9QL4v2HZm6L8X1rPP0mZLGygZuoYhf2G8OaKA1XLFvplYMVNmxa5FHOlW0udxzbIjrNQY5TnMZLsmeI18+1W8n7zMBBrmwJhayioZwKBgQCVQSnSe7SZHXV30I5OVzJtnx2hrerskNtxNAsMjZGgKWk6FKK/5j33SrUCBT6BH+jPrhQqVcdv62c7Vjuj8oM6BH2kUJykXKWGDJgltB8jPvl7Cc+IGKMNcrmD1gF24xzHeAK6m3yfZHAgbsI90kGRAqTvKOR8troBIpXyqcoUFQKBgQCj/louEHlhpiO+w5WITVFQcuOf/PQpWXJnnqwbzMieqvKKnIRoahI4puiQ9JyqOt+/1//MyWGXd2y4Diem2h8JToxsinMyvGAiXuI8iYQSrnw3LExHvZySQb9kCtlCnA3EMzaohaL0q3m5G55EzNwpreuaYpO//jUslUTXyGu3NwKBgAsFN7hR6ADSOwUwwgEo0RFlCUQR2mHDRGC0bghsP49q31kpgubWckbbHkha6MWR/JexC84gbUxnPkUUVe0CEAxtnnVOenJsYNBoB6fpB8+La9JY5BjxcMCicu44E/2aQVq9Er6Cko4WVW0foHn+F1dEsbby9wP6XfuNeTLktIYNAoGAUS2pUS30KMeeVyHj0uFey+tbsDA0MHZal0ZRsNwWCIwlBaouTIVmzKlz5t2Eg4JtoZov1n9T3BU6pnfNqJxOUEirRYz+WJxH9usIy8F3RAICjLqBbIYGdgtF+YSLKPWx9RrB5JRjgOYXByhPyGqQSARI+L4wVQxeENxypfqgLbo=
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqKWaJol63OuxavPwcqLNahXzxrDDqlqrsFDkeG3j5F+15qUJvBxmKiirAVWXeBkDFf/6cdBlI4gvkfNCE4TUq59nGfpRGEx0Gv5WhPfD1RJMPmjOhbCtuBkQDGPOSKF42zxL+B0o9lmV/z02hPrE5a8D8rarZkmEGFu96o10oMcg6o75u0JSDH+hBgA+B42zDghpLrEyMoljJDt5cQwnatStmKpHlhSZoKnzTwWN4q8YAMy/8J8yvy/RMz6jwntacbN8Rm9d1bM7BDCAU62CjhGZKLu14HrFRX/bDSlnL6Ud+J9Hhnr6sYSCG+Oqu3hu2zpeqRFVj/vKPqOsIZ8fUwIDAQAB
notifyUrl: http://susan.net.cn/notify
appId: 9021000135682614
privateKey: MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCQxmQGcaiKjOhayWi+zNTvpp8B5YT8jFFkjLzrD+W+T2Dwf2GfFR4p95zsCJxYeoLWdghMPA6/GMFrLbuVFpaEjuTm4icqA9N8n5d3W0j7gh+wMjZoqyJclAIeb09ut7rY6mWzilA9kWmZnUG7MOWIU70RVRYrfJectCFw/odM9lG4XIVe13X2h+1ecTQyQzLWmnvKFCfo7dQjE7fIYiWfud1ZGUneNs3u73pNWMB6ThGTTCbs0atcgM3fYOg3q7fTxIu9VcaUCJiJ/kNbL9sVEyOrSyx2f2o6w06zdEaOiQFsuDeS8QPYGMg7pf42wAfqCO6hqxQiQT5vp1hvB0o1AgMBAAECggEAIhaEYLwMSispXo8D2cES9iaOU/z91hUX6Qv2Q4anuqqoEZh8nN91Db6etTjFz1NxURvTklelxTsH97t56n26DRY0MWTYgd0Kw9Iz8MeOpKGb4nnAM97vpUq4QQBGfLRIC2ENdzu+7vA5JBFR88hsky/cWaNmJ/EbJauIIDneE7GigMR2HF7kfzdZzOBN4ZEh/ef5NKeCnEieRJJhWRgrgNXVZ44Tqi67AM7ey9pyUtBe7fgzxXtrWXBN9yKaVxxSXm3KJXFQqA6mcilFVZaxMNlAySc4MPTW8lq0ozOCOCunoeIphNz/OVIxGu3/voXFXlBfOKqOkYMVZxMY6OrvtQKBgQD0nIlXK4VW72VaGpz9kxQkRNzJV/yqaqet1GOSlPM2l0RCRFOVVdnvbQdHGPe6+HxHL1dh5MP8T/aHoP+4UXkkQCc8moS2FZxJvFH2QTSZBcSSdGL7GMpROqs38J+XlJzrhNcB20lrW6D7yMeQa4YEcXwdbD8Er/YaIqODBWYYewKBgQCXg+16RLDArciwwhf0TBWZPor2iYFDdwU5UPu7CKOhU1MLfQhG85gGpXHjB6G8cMUi/ezxh/FEl+sWOZegpkPwL5/BQS9tNYWIaC4kipPF/a5Up4DMYUHVAuuPwNqqXpvgU+rGjCns0wtPRnjrkghLkc3oTSID7o7pzUwIk2whDwKBgAys3+EIfExY82OL5X6uVGjcuKQmTw11oWK8krxRw5iclgjpCXu/ix+BAtOIU634mlgF9/02oYE9k4TLrvSaJDDgsifNyfq1e/fGLmkYT+VuCxWbulVQn4s+AwlPCrYMGWWK6KlL9638fYcOjGjLaZJpXwkXRtyzUYlhKh/r87JpAoGBAIavRp2mi/xrPvgpQQPv0k9L8llfOCHRnjoqC+thrZsNp8eRmJcBmMVnskofEZ2iHQuS71pw/n58EQTLo0ayJbhPjVJL8K3CovXzrfjbmqqoa5xi3bJQTiXdF6rMw1QpD6Uk05E1LVuQ6v/IZFr7kBYlAQWb8z3NhQq+bPU+nyLvAoGAGpBbSM8gPzdWQqkHoos0icu3cj0GhN3MU7+1Eb/rsXyh/lk5wtZTEnHjwhdUOUtwVNjvrv7CzA7unhOoaM6YcE/Zpd4zt8pjqH1Mhds7UHf4Xg+A+J4G6meYnhSwfBpOub02ncsqfBlXE0qhFv6AvcMewWndyLb8EYaUUXTYkG0=
publicKey: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApHkjwHnoUnZuqbas+ZputyWIfU2WKBFKd+wFwlCZytpQhVA16CGAMCGpgjxUPpqbmOtPy74y0wxmDHB9IaYOVsVmi2SAl1IqfxwUSIllbdvbjBvZFAIQlPa8U/zHJPgdGNHDt/Bwqp5uB0OkcGLB9PYyAXBEKiu6zdTsiZloUrPwgnBRJ0iNHYiWo/oOYD9KfopLA+D1nQjqq8m3ShZe46ecMo6ZCHtQI/HtgL/EGga5KY2zOUi0Wwviu8w79RjjzfdsDkzu5VnBdaSru4awDyiF9nAF+uPgA4ZOdLKkpoEANwuIorDW8tT69Gwh+mYx9sDJMxJf7XOekdPbymomiwIDAQAB
notifyUrl: https://702bc39c.r27.cpolar.top/web/pay/notify
gatewayUrl: https://openapi-sandbox.dl.alipaydev.com/gateway.do

View File

@ -133,6 +133,7 @@ public class SecurityConfig
// 静态资源,可匿名访问
.antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
.antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()
.antMatchers("/web/pay/notify").permitAll()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
})

View File

@ -28,6 +28,7 @@ public class MemberBillingConsumer {
try {
// TODO 发送短信提醒用户会员账单如果支付成功更新last_payment_date并重新计算end_datestart_date + 1个月
log.info("获取到会员账单的数据:{}", member);
channel.basicAck(message.getMessageProperties().getDeliveryTag(), false);
} catch (Exception e) {
log.error("处理会员账单消息时出错: {}", e.getMessage(), e);
try {