一:打开支付宝开发平台,登录,然后点击控制台
https://open.alipay.com/

文章插图
二:滚动到底部 , 选着沙箱服务

文章插图
三:获取到对接要用的appId和公钥私钥

文章插图

文章插图
四:打开IDEA导入所需的xml文件
<!--支付宝--><!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-easysdk --><dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-easysdk</artifactId><version>2.2.0</version></dependency>五:编写实体类:
import lombok.Data;@Datapublic class Alipay {private String traceNo;private String totalAmount;private String subject;private String alipayTraceNo;}六:编写yaml文件(这里的回调要用网络https服务,这里建议使用花生壳可以完成域名访问?。?
#支付宝配置alipay:appId: ?#私钥appPrivateKey: ?#公钥alipayPublicKey: ?#回调地址notifyUrl: ?七:编写服务类:
import com.alipay.easysdk.factory.Factory;import com.alipay.easysdk.kernel.Config;import lombok.Data;import org.springframework.boot.context.properties.ConfigurationProperties;import org.springframework.stereotype.Component;import javax.annotation.PostConstruct;@Data@Component@ConfigurationProperties(prefix = "alipay")public class AplipayConfig {private String appId;private String appPrivateKey;private String alipayPublicKey;private String notifyUrl;@PostConstructpublic void init() {// 设置参数(全局只需设置一次)Config config = new Config();config.protocol = "https";config.gatewayHost = "openapi.alipaydev.com";config.signType = "RSA2";config.appId = this.appId;config.merchantPrivateKey = this.appPrivateKey;config.alipayPublicKey = this.alipayPublicKey;config.notifyUrl = this.notifyUrl;Factory.setOptions(config);System.out.println("=======支付宝SDK初始化成功=======");}}八:编写控制器(写完控制器建议直接测试访问看看可不可以访问的到,链接在第九步)
import com.alipay.easysdk.factory.Factory;import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;import com.rookie.sixthbackstage.entity.Alipay;import com.rookie.sixthbackstage.entity.OrderItem;import com.rookie.sixthbackstage.mapper.OrderItemMapper;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.servlet.http.HttpServletRequest;import java.net.URLEncoder;import java.util.HashMap;import java.util.Map;@RestController@RequestMapping("/alipay")public class AliPayController {@AutowiredOrderItemMapper orderItemMapper;@GetMapping("/alipay") // &subject=xxx&traceNo=xxx&totalAmount=xxxpublic String pay(Alipay aliPay) {AlipayTradePagePayResponse response;try {//发起API调用(以创建当面付收款二维码为例)response = Factory.Payment.Page().pay(URLEncoder.encode(aliPay.getSubject(), "UTF-8"), aliPay.getTraceNo(), aliPay.getTotalAmount(), "《这里放支付成功的地址!》");} catch (Exception e) {System.err.println("调用遭遇异常,原因:" + e.getMessage());throw new RuntimeException(e.getMessage(), e);}return response.getBody();}@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));}int tradeNo = Integer.parseInt(params.get("out_trade_no"));String gmtPayment = params.get("gmt_payment");String alipayTradeNo = params.get("trade_no");double pay_price= Double.parseDouble(params.get("buyer_pay_amount"));// 支付宝验签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"));// 支付成功后,修改自己的订单状态 , 这里的方法是我自己写的,根据自己实际情况来做更改OrderItem orderItem=new OrderItem(0,tradeNo,0,pay_price,gmtPayment,"","已支付");orderItemMapper.updateOrderItemById(orderItem);}}return "success";}}
推荐阅读
- Asp-Net-Core开发笔记:集成Hangfire实现异步任务队列和定时任务
- Skywalking Swck Agent注入实现分析
- golang channel底层结构和实现
- Python 实现Tracert追踪TTL值
- 独辟蹊径:逆推Krpano切图算法,实现在浏览器切多层级瓦片图
- 一个 dubbo 和 springboot 的兼容性问题
- Python实现改进后的Bi-RRT算法实例
- Java实现6种常见排序
- SpringBoot的starter到底是什么?
- C++实现双向RRT算法