开一个网站的流程,动漫设计专业的学校,wordpress调整配置文件,四平市住房和城乡建设部网站springboot3vue3支付宝交易案例-结算支付#xff01;今天下午整理了一下结算的内容。遇到了很多问题。汇总分享给大家。
第一个问题#xff1a;支付宝结算后#xff0c;返回的交易编码#xff0c;和交易时间#xff0c;交易状态#xff0c;都应该使用varchar来存。
第二…springboot3vue3支付宝交易案例-结算支付今天下午整理了一下结算的内容。遇到了很多问题。汇总分享给大家。
第一个问题支付宝结算后返回的交易编码和交易时间交易状态都应该使用varchar来存。
第二个问题:它交易支付完成后会自动返回购物车的页面地址。 package com.example.demo.controller;import cn.hutool.json.JSONObject;
import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;import com.alipay.api.internal.util.AlipaySignature;
import com.example.demo.config.AliPayConfig;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.demo.bean.Orders;
import com.example.demo.service.IOrdersService;
import com.example.demo.service.impl.OrdersService;
import org.springframework.beans.factory.annotation.Autowired;
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 javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;RestController
RequestMapping(/alipay)
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;Resourceprivate IOrdersService ordersService;Resourceprivate AliPayConfig alipayConfig;/*** 向支付宝发送支付的接口。* param orderNo* param httpResponse* throws IOException*/GetMapping(/pay)public void pay(Integer orderNo, HttpServletResponse httpResponse) throws IOException {//查询订单信息ListOrders ordersList ordersService.getOneOrdersByOrderNo(orderNo);Orders order ordersList.get(0);if(order null){return;}//private static final String GATEWAY_URL https://openapi.alipaydev.com/gateway.do;// 1. 创建Client通用SDK提供的Client负责调用支付宝的APIAlipayClient 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, orderNo); // 我们自己生成的订单编号bizContent.set(total_amount, order.getTotal()); // 订单的总金额bizContent.set(subject, order.getGoodsName()); // 支付的名称bizContent.set(product_code, FAST_INSTANT_TRADE_PAY); // 固定配置request.setBizContent(bizContent.toString());request.setReturnUrl(http://127.0.0.1:5173/cart_list);// 执行请求拿到响应的结果返回给浏览器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(支付宝异步回调);MapString, String params new HashMap();MapString, 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);//支付交易的编码String status params.get(trade_status);//交易状态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));// 更新订单未已支付(更新数据库信息//tradeNo, 已支付, gmtPayment, alipayTradeNo//查询订单信息Integer orderNo Integer.valueOf(tradeNo);ListOrders ordersList ordersService.getOneOrdersByOrderNo(orderNo);Orders order ordersList.get(0);order.setStatus(status);order.setAlipayNo(alipayTradeNo);order.setPayTime(gmtPayment);ordersService.updateOneOrders(order);}}}
}这里面就是支付宝交易的控制器内容。里面有2个方法。一个是支付的一个是回调的。 package com.example.demo.config;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
Data
Component
ConfigurationProperties(prefix alipay)
public class AliPayConfig {private String appId;private String appPrivateKey;private String alipayPublicKey;private String notifyUrl;
}这个是一个配置类读取了我们的配置信息。 alipay.appId9021000134634591
alipay.appPrivateKeyMIIEugIBADANBgkqhkiG9w0BAQEFAASCBKQwggSgAgEAAoIBAQCvWMRgjeKZdKnT8tT7nh1Yh6RiLhYCablc5a67CojvWRk5NrooIpP39oXkisV7H2nf5J8zfLmS2l2qroDlwAx4Zx3Woloo6rcLZ42G0QuB8yBZm4doa73/lMurenmucSgCDaSap1opEGvlAFZnRi2O0KZy5t9g9WhwzC/D2EWJMSwroclfSTpVxr/on0MLw7ljTeqcZTul4czXUhnGufWgVjmA7qAd3we7FhAMCqUcWXa3pLCCGIeSaBkqiaoToyql7eqYuwoV2UkT1DeqCN0fW/Zc5h7YpbuGTDfm2SSB/lfQAvHeV5YaNIOFJ1G25VKDnAIQgfQgrDYU3Eg1AgMBAAECgf99V/cJDmPtTngYCn41X9Gad1wK0ubo0qquvYEqM12vuwFM5NIt3onnt1H/DTQdz1bftY4YQBBn6bELUbLSiXZgm1XVfOK86kI5ImL2SodyYCDQX2hXxjxNCoBr3eZWCHWF8FkSt2YisRL6vxB0y8hm4KqRxTBranmMYP2ZJGVCIyimxHAespfG47yPy42fk02DXf9StJpWqOTw5juCfUNDjDbgYLkk6B5gEmH9sj8jeG2OrNOxxjTLRnMgxxsRGV1goRQqAHD7wUAUYu1oFQCAMz3QAQeIv29OvXklRh9AxohridPImQxqzGOm9AnVB0US2GbnXYNBUEdrADn0ECgYEA4SFbruTANdLANvHjP6uzG7UrOef6imUw0Yoepwzbc4pimxkH8p3lQZFpR9i06/7skIu/u7YAOgrcMVFcDQkmprqLDSXeML/YgQzocCqPg4cwYU6EDrMFrjAT7uBRXJFHaRdVNuEpTdtWWQMMdJe/WbNVxQMf2XBe8NM5AO3PkCgYEAx2PCm//PHkeuaEoOi0hcdCmKf67iA3uahyCl3IzLO7bgEtpldLAlMiNMxNLHiuxnGMUxmJXb5GkGeSNPjajMGmYYpOx2h2SiJcMuHtMLjHwBmnEVWbMzWcD5huF//66jMI8NJN8eXZcfNxcjcD/BIEhlP6bi2vnCs1PInQB0CgYAZWR8WMyjZ0CsmcICLYwjhGNlhl23KKAGS9wxJudqki2jrAZRgb61Yjz7ZPAB/mLZ23AId7mqiBewS1fHlmuCw937yjuoYTCbQGJRShl5Af9KozyX5jPXCRHdqrVIQ41fK3SiTPalnPjeNSIV/fJq0KkK5WgOmk/HAJAaQKBgBEat7kWKrhYQdfkcnb0UCoO3jix0eWmlsz8uf4Is4cpPl81GOunVqnswmAdSakZATU4zGbci/IkvnzoxZwRtP3aJuG7pzLRCe9NEO1CKHQTO9SO/j5tnEpdEBA06cEdSyD2K/ztZbyJPK2YhEhxQJFZ0lWLorIM7UGiW0DEObpAoGAUaWp93D8VLYKzLlutCrZXmXw7gFfFXkmr5rd0ylFW7OqTtGPbvXwREpByyoKGyXZSIR9gnyYtjw4PQctKrXNvqqPevFEJ1I8EWmsKsN9E8Sg7j0M9BhRaJ9B4/OwDv9G1N6WOjaia88RBx45s8lVb9l6Fjd5wsI2O5p/1Xw
alipay.alipayPublicKeyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAoBuX6xKYpLdexDoGcjmfGGijjFnsv/0jvPmPydntbUgIWF8ghk2v3ddbY2C6toqdk1n367CyIF/swQl2gZFscWg83tvPHOhofyHJ9ZANzJqQDeEXD2YVfrOGcTJQt0dnX6w5rfZerzsrD685C1OhAIttP5HKff2iplyvx1ZPaHEhghacYjD4ObFREXo6M1pkKJJBo5mUmPQ6MBwWwkKqtIaQMMUnszOo7GyVbVd7CttS/VDXwqTNay0pPlWyyBpH9rSl45XClGGHOFgpkN//CVNO7dBtskLOCKDZfGIBPKqU5vEkZXoGanlYBOKhrh38gALiR2CaENPdCIwIDAQAB
alipay.notifyUrlhttp://8btgff.natappfree.cc/alipay/notify
这个就是配置参数文件内的配置参数信息。 如图我们都是使用的字符串存储的。否则很容易报错。存不下。 如图使用沙箱测试账户用户角色jiuky可以支付完成了。 这个就是刚刚结算的订单信息。第一个是支付宝回传过来的交易编码。第二个是交易结算时间第三个是交易结算状态。