Jump to: Alipay Sandbox Platform
1. Enter the console
##2. Create a small program, write the name and bind the merchant
3. Return to the first page, Scroll down to enter the sandbox
4. Perform relevant configurations and get the AppID, application public key, application private key, and Alipay public key
5. After entering the sandbox account, first recharge the virtual account with some money (merchant account and ordinary account)
2. Use the intranet to penetrate nat app Jump to: nat app1. Register and log in
No display here2. Apply for a free tunnel
# #3. Download the latest clientAfter downloading, extract it to a drive letter that does not require administrator rights, such as E drive
4. Open the directory where you are located
5. Copy it in nat app and then create start.txt Make changes in the file
Copy:
##Modify:
Run:
Modify start.txt to bat and run to get the URL
3. Write java program
<!-- 阿里支付--> <dependency> <groupId>com.alipay.sdk</groupId> <artifactId>alipay-sdk-java</artifactId> <version>4.22.110.ALL</version> </dependency> <!-- 糊涂工具类--> <dependency> <groupId>cn.hutool</groupId> <artifactId>hutool-all</artifactId> <version>5.8.11</version> </dependency>
## 支付宝配置 alipay: appId: 2021000122615995 appPrivateKey: 这是在第一步中的应用私钥,在查看里面,特别长的一串 alipayPublicKey: 这是第一步中的支付宝公钥 notifyUrl: 这是第二步中运行start.bat后得到的网址 + /alipay/notify
@Data public class AliPay { private String traceNo; // 订单编号 private double totalAmount; // 总金额 private String subject; // 商品名称 private String alipayTraceNo; }
@Data @Component @ConfigurationProperties(prefix = "alipay") public class AlipayConfig { // 对应配置文件中的内容 private String appId; private String appPrivateKey; private String alipayPublicKey; private String notifyUrl; }
@RestController @RequestMapping("/alipay") public class AliPayController { private static final String GATEWAY_URL = "https://openapi.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; @GetMapping("/pay") // &subject=xxx&traceNo=xxx&totalAmount=xxx public void pay(AliPay aliPay, HttpServletResponse httpResponse) throws Exception { // 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()); JSONObject bizContent = new JSONObject(); bizContent.set("out_trade_no", aliPay.getTraceNo()); // 我们自己生成的订单编号 bizContent.set("total_amount", aliPay.getTotalAmount()); // 订单的总金额 bizContent.set("subject", aliPay.getSubject()); // 支付的名称 bizContent.set("product_code", "FAST_INSTANT_TRADE_PAY"); // 固定配置 request.setBizContent(bizContent.toString()); // 执行请求,拿到响应的结果,返回给浏览器 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 String 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)); // System.out.println(name + " = " + request.getParameter(name)); } String outTradeNo = params.get("out_trade_no"); String gmtPayment = params.get("gmt_payment"); String alipayTradeNo = params.get("trade_no"); 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("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"; } }
The above is the detailed content of What is the method for Java Springboot to integrate Alipay interface?. For more information, please follow other related articles on the PHP Chinese website!