支付宝单例模式配置 测试接口

This commit is contained in:
jieyuu 2024-09-26 21:39:27 +08:00
parent 5fc6d77853
commit abe040de40
3 changed files with 92 additions and 3 deletions

View File

@ -1,14 +1,26 @@
package net.jieyuu.config;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
public class AlipayConfig {
/**
* 支付宝网关地址 todo
*/
public static final String PAY_GATEWAY = "https://openapi-sandbox.dl.alipaydev.com/gateway.do";
/**
* 支付宝APPID todo
*/
public static final String APPID = "9021000140690163";
/**
* 应用私钥
* 应用私钥 todo
*/
public static final String APP_PRI_KEY = "MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCXErw8mdLqhNbQqNBAC4mUYXpRb3hbTYCg+W+JJe5R7oid7yGI61h9DhdWPZIKelKIN3km7QX8wa7BygBLx0U8LVmxh1Y14kxluNqykqeZc/250L+Y2fTTWZBoeaQvajZnLgnMm8ym/Z0Ned6vvCp+2OY4xjpAxJQm3RW6EMdQDQ3did8pAX03KU7W3+TZ7t3I8Ml9JeNyh4wyM4KNVH0aKTGYYn0uR6Euh5On1hID86ENRuSg3Xu9cvUkH2px/6RX2HBG43/kKHniz3T2AB+Htx6r+1GMqKjx8f3dxkKYro2EmxBxdSxEJgOqh7JjGP0qqiWwaW8zgicwtmrccI7XAgMBAAECggEAGz/Q3ilsxspRKO/aKEMsfKwccQXnMqjHE8IKITXLR9H7qGkSpmy02FGrWe3fIq6vpkxDOQc1tkKFMAUsin6V+WXAsOnVXgDEgPCX2e/j9STb1iFV/c8Kfvi/uGiAeeDxkSjXsaVEg7ZpFp4t0YriK2EaHZF7vmT2yA/GtHoESWbYw/2bchW/6OUbmugIzR7GVAjvc7/ZmkZVCnG4xDdW2Nu5jHNLPvNTluB5CZUnjjXvdRtChTdktgQD1t8LSQ6I1NHJutw10/N1anwQ99uO+LMxDUnZZvZshP26ooO2Og/kWPEU2oUgdB37DGJ0OfSWrEF67fzCyKuBxKT1TnmikQKBgQD0R09FD6vo+H6gd4WhN/BfUHtoN5Lyz8kkvaDWDzyCC/t+utJ+hNXTSHgz+hA/OQxCk0iIlPnPfBJRhzhxB2yUVwD//nXB3lu3hnfnkXrg3iKKjqkO6SP9yDHi7XghDTdU2P1F1cj+gfH+nasMElesDBSjtfHYLBS0WiHUec6LLwKBgQCeUoBZAa5p5ILHflnFva4eFQdEtr5gAwH8oRqFCTZBQtWdCDUQ9MvciLK1Pe9hBhR8iOCtP15Qgpc867vld/ZF1VeW0TYtxBwfM+u3JdXllYtx6KIt1L83jWhcmHWdv73bCCUPw/m7FTPi3lrUAGRw0+jWYoLVpmEHrd9THHes2QKBgHh7g3mIlT2+8pWq3dn6gTBBvdxVLMFeAtOARAfQVAPAbTbAZnnIgr5HDCJ2v/Su6oEbq7bR47SWeWKE0y3Mf51anD+m/eW1Cn+mbxVkB7tJVLgKTQ/xpbLSPuiyP4HtxtCuhZ0gKJZ++SCgG3FEysEs5DEq2DHK7BtYKT9nJJw5AoGAQzRMDPwcuBBqvxnQK5LvlQ9iDXXw67p7HmyYYD5fzGX9XPH97Jus6YkRKsQGl83H5nEHxiKu+0fjwNVj5ez9GfmMe5WFBPpI4andddnWqOTI02pnZUL4hDE/Sobg7jxU7+POL5oFqLdAVh4CuhkMiaQ6Ir6gQOamK2dP8+ySlEkCgYEA1kBmBFtKFl4V+ZshqcjMWcMCAANWf3jKkBAf9Dvr632vcafQeXTZdnWLQkwuwz/r0aoSKcCIuhxPzKpalSoyItX5DYYNG5BiC/Wwo3ktTvv+2xdnkpgx/+2gvbJLtNsikCDWC6zWO7Q/4/v0LsrzEWNgMXUIepqPffI3NUGtWkU=";
/**
* 支付宝公钥
* 支付宝公钥 todo
*/
public static final String ALIPAY_PUB_KEY = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAj4BMyZx16Xpfd00w25ub4ZcWzRiWCx1v6EScmq2ezu/W95FO70r6EawFGVh2nE+XqZFlf53bIBhwtxUCV2xJEy9qHuooVvqByoMRdSs4y1BlUR99WfYqc+67i41rp8hDDZ8s31/9gXbiVfsSFe3YqHq3WzCuYbqwpwt0vEFbX829DZP3BNJ/DTbx2mtFYEJYFRi8nKkHFjivjjMw9nbAQsFQT6Q7GpPR6cqUGX1YYzvsdo1U+XF3FG4SoPYZKh6KVdRJQ/RKzYnNgPN7d6UydUarFRCnyLQ9qa/gFTX373pM+IlD9WhW15ixGq/USgcOBLZ+1Ujc90OLym0mulCGRQIDAQAB";
@ -22,7 +34,34 @@ public class AlipayConfig {
*/
public static final String CHARSET = "UTF-8";
/**
* 返回参数格式
*/
public static final String FORMAT = "json";
/**
* 构造函数私有
*/
private AlipayConfig() {
}
private volatile static AlipayClient instance = null;
/**
* 单例模式获取双重锁校验
*/
public static AlipayClient getInstance() {
if (instance == null) {
synchronized (AlipayConfig.class) { // 加锁
if (instance == null) {
instance = new DefaultAlipayClient(PAY_GATEWAY, APPID, APP_PRI_KEY, FORMAT, CHARSET, ALIPAY_PUB_KEY, SIGN_TYPE);
}
}
}
return instance;
}
}

View File

@ -18,7 +18,7 @@ public class InterceptorConfig implements WebMvcConfigurer {
//拦截的路径
.addPathPatterns("/api/order/*/**")
//放行的路径
.excludePathPatterns("api/callback/*/**", "/api/order/*/query_state");
.excludePathPatterns("api/callback/*/**", "/api/order/*/query_state", "/api/order/*/test_pay");
WebMvcConfigurer.super.addInterceptors(registry);
}

View File

@ -1,10 +1,15 @@
package net.jieyuu.controller;
import com.alibaba.fastjson.JSON;
import com.alipay.api.request.AlipayTradeAppPayRequest;
import com.alipay.api.response.AlipayTradeAppPayResponse;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import net.jieyuu.config.AlipayConfig;
import net.jieyuu.config.PayUrlConfig;
import net.jieyuu.enums.BizCodeEnum;
import net.jieyuu.enums.ClientType;
import net.jieyuu.enums.ProductOrderPayTypeEnum;
@ -17,6 +22,9 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.UUID;
/**
* <p>
@ -35,6 +43,9 @@ public class ProductOrderController {
@Autowired
private ProductOrderService orderService;
@Autowired
private PayUrlConfig payUrlConfig;
@ApiOperation("提交订单")
@PostMapping("confirm")
public void confirmOrder(@ApiParam("订单对象") @RequestBody ConfirmOrderRequest confirmOrderRequest, HttpServletResponse response) {
@ -88,5 +99,44 @@ public class ProductOrderController {
return StringUtils.isBlank(state) ? JsonData.buildResult(BizCodeEnum.ORDER_CONFIRM_NOT_EXIST) : JsonData.buildSuccess(state);
}
@GetMapping("/test_pay")
public void test_Alipay(HttpServletResponse response) throws Exception {
HashMap<String, String> content = new HashMap<>();
//商户订单号,64个字符以内可包含字母数字下划线需保证在商户端不重复
String no = UUID.randomUUID().toString();
log.info("订单号:{}", no);
content.put("out_trade_no", no);
content.put("product_code", "FAST_INSTANT_TRADE_PAY");
//订单总金额单位为元精确到小数点后两位
content.put("total_amount", String.valueOf("111.99"));
//商品标题/交易标题/订单标题/订单关键字等 注意不可使用特殊字符 /=&amp;
content.put("subject", "杯子");
//商品描述可空
content.put("body", "好的杯子");
// 该笔订单允许的最晚付款时间逾期将关闭交易取值范围1m15dm-分钟h-小时d-1c-当天1c-当天的情况下无论交易何时创建都在0点关闭 该参数数值不接受小数点 1.5h可转换为 90m
content.put("timeout_express", "5m");
AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();
request.setBizContent(JSON.toJSONString(content));
request.setNotifyUrl(payUrlConfig.getAlipayCallbackUrl());
request.setReturnUrl(payUrlConfig.getAlipaySuccessReturnUrl());
AlipayTradeAppPayResponse alipayTradeAppPayResponse = AlipayConfig.getInstance().pageExecute(request);
if (alipayTradeAppPayResponse.isSuccess()) {
System.out.println("调用成功");
String form = alipayTradeAppPayResponse.getBody();
response.setContentType("text/html;charset=utf-8");
response.getWriter().write(form);
response.getWriter().flush();
response.getWriter().close();
} else {
System.out.println("调用失败");
}
}
}