支付宝支付

1.整合依赖
1.生成签名
2.开通沙箱环境
2.引入依赖
 <dependency>
     <groupId>com.alipay.sdk</groupId>
     <artifactId>alipay-easysdk</artifactId>
     <version>2.0.1</version>
 </dependency>
3.创建配置文件(放入alipay.properties中)
 alipay.protocol=https
 alipay.gatewayHost=openapi.alipaydev.com
 alipay.signType=RSA2
 alipay.appId=<APPID>
 alipay.merchantPrivateKey=<应用私钥>
 alipay.notifyUrl=<异步回调地址>
 alipay.returnUrl=<同步回调地址>
 alipay.encryptKey=<AES密钥>
 alipay.successUrl=<支付成功后的跳转页面>
4.创建配置文件对象类
  package com.example.aliyay.config;
 import org.springframework.boot.context.properties.ConfigurationProperties;
 import org.springframework.context.annotation.PropertySource;
 import org.springframework.stereotype.Component;
 @Component
 @PropertySource("classpath:alipay.properties")
 @ConfigurationProperties("alipay")
 public class AliPayConfig {
     private String protocol;
     private String gatewayHost;
     private String signType;
     private String appId;
     private String merchantPrivateKey;
     private String notifyUrl;
     private String returnUrl;
     private String encryptKey;
     private String alipayPublicKey;
     private String successUrl;
     // 省略Getter/Setter
 }
5.创建工具类
 package com.example.aliyay.utils;
 import com.alipay.easysdk.factory.Factory;
 import com.alipay.easysdk.factory.Factory.Payment;
 import com.alipay.easysdk.kernel.Config;
 import com.alipay.easysdk.kernel.util.ResponseChecker;
 import com.alipay.easysdk.payment.page.models.AlipayTradePagePayResponse;
 import com.example.aliyay.config.AliPayConfig;
 import org.springframework.stereotype.Component;
 import javax.annotation.Resource;
 import java.util.Map;
 /**
 * 阿里支付工具类
 */
 @Component
 public class AliPayUtils {
     @Resource
     private AliPayConfig aliPayConfig;
     public AliPayConfig getAliPayConfig() {
         return aliPayConfig;
     }
     /**
     * 支付
     *
     * @param sunject 项目名称
     * @param payNo   订单号
     * @param amount  支付金额
     * @return
     */
     public String toPcPay(String sunject, String payNo, String amount) {
         String result = "";
         // 1. 设置参数(全局只需设置一次)
         Factory.setOptions(getOptions());
         try {
             // 2. 发起API调用
             AlipayTradePagePayResponse response = Payment.Page().pay(sunject, payNo, amount, aliPayConfig.getReturnUrl());
             // 3. 处理响应或异常
             if (ResponseChecker.success(response)) {
                 result = response.body;
                 System.out.println("调用成功");
             } else {
                 System.err.println("调用失败,原因:" + response.body);
             }
         } catch (Exception e) {
             System.err.println("调用遭遇异常,原因:" + e.getMessage());
             throw new RuntimeException(e.getMessage(), e);
         }
         return result;
     }
     private Config getOptions() {
         Config config = new Config();
         config.protocol = aliPayConfig.getProtocol();
         config.gatewayHost = aliPayConfig.getGatewayHost();
         config.signType = aliPayConfig.getSignType();
         config.appId = aliPayConfig.getAppId();
         config.merchantPrivateKey = aliPayConfig.getMerchantPrivateKey();
         config.encryptKey = aliPayConfig.getEncryptKey();
         config.notifyUrl = aliPayConfig.getNotifyUrl();
         config.alipayPublicKey = aliPayConfig.getAlipayPublicKey();
         return config;
     }
     /**
     * 验签
     *
     * @param parameters
     * @return
     * @throws Exception
     */
     public Boolean verify(Map<String, String> parameters) throws Exception {
         return Factory.Payment.Common().verifyNotify(parameters);
     }
 }
5.创建控制器类
 package com.example.aliyay.controller;
 import com.example.aliyay.utils.AliPayUtils;
 import org.springframework.stereotype.Controller;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestMapping;
 import org.springframework.web.bind.annotation.ResponseBody;
 import javax.annotation.Resource;
 import javax.servlet.http.HttpServletRequest;
 import java.util.HashMap;
 import java.util.Map;
 @Controller
 @RequestMapping("/api/pay")
 public class TestController {
     @Resource
     private AliPayUtils aliPayUtils;
     /**
     * 跳转到支付页
     *
     * @param subject
     * @param payno
     * @param amount
     * @return
     */
     @ResponseBody
     @PostMapping("/alipay")
     public String aliPay(String subject, String payno, String amount) {
         return aliPayUtils.toPcPay(subject, payno, amount);
     }
     /**
     * 支付成功回调函数
     *
     * @param request
     * @return
     * @throws Exception
     */
     @RequestMapping("/returnDeal")
     public String returnDeal(HttpServletRequest request) throws Exception {
         // 获取支付宝响应参数
         Map<String, String[]> params = request.getParameterMap();
         Map<String, String> paramters = new HashMap<>();
         params.entrySet();
         for (Map.Entry<String, String[]> entry : params.entrySet()) {
             paramters.put(entry.getKey(), entry.getValue()[0]);
         }
         // 验签
         boolean flag = aliPayUtils.verify(paramters);
         if (!flag) {
             return "fail";
         }
         return "redirect:" + aliPayUtils.getAliPayConfig().getSuccessUrl();
     }
 }
7.创建测试支付表单
 <!DOCTYPE html>
 <html>
 <head>
     <meta charset="UTF-8">
     <meta name="viewport" content="width=device-width, initial-scale=1.0">
     <title>支付测试页</title>
 </head>
 <body>
     <form action="/api/pay/alipay" method="POST">
         <label for="subject">项目名:</label>
         <input type="text" name="subject">
         <br>
         <label for="payno">订单号:</label>
         <input type="text" name="payno">
         <br>
         <label for="amount">订单金额:</label>
         <input type="text" name="amount">
         <br>
         <input type="submit" value="支付">
     </form>
 </body>
 </html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值