SpringBoot对接支付宝

  • 需要先注册账号

    到支付宝开发者平台创建网页支付应用

  • 启用公钥模式

    需要使用到appId和下面的两个秘钥


  • 写配置信息的代码

    1.引入依赖

            <dependency>
    <groupId>com.alipay.sdk</groupId>
    <artifactId>alipay-easysdk</artifactId>
    <version>2.2.0</version>
    </dependency>

    2.写配置

    alipay:
    appId: appid
    appPrivateKey: 应用私钥
    alipayPublicKey: 支付宝的公钥
    notifyUrl: 回调地址

    3.新建一个alipayConfig类

    import com.alipay.easysdk.factory.Factory;
    import com.alipay.easysdk.kernel.Config;
    import org.springframework.boot.context.properties.ConfigurationProperties;
    import org.springframework.stereotype.Component;
    import javax.annotation.PostConstruct; @Data
    @Component
    //拿配置文件里面alipay开头的配置信息
    @ConfigurationProperties(prefix = "alipay")
    public class AliPayConfig {
    private String appId;
    private String appPrivateKey;
    private String alipayPublicKey;
    private String notifyUrl; @PostConstruct
    public 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初始化成功=======");
    }
    }

    4.写接口

        @GetMapping("/pay")
    public String pay(AliPay aliPay) {
    AlipayTradePagePayResponse response;
    try {
    // 发起API调用(以创建当面付收款二维码为例)
    response = Factory.Payment.Page()
    .pay(URLEncoder.encode(aliPay.getSubject(), "UTF-8"), aliPay.getTraceNo(),String.valueOf(aliPay.getTotalAmount()), "");
    } catch (Exception e) {
    System.err.println("调用遭遇异常,原因:" + e.getMessage());
    throw new RuntimeException(e.getMessage(), e);
    }
    return response.getBody();
    } //如果设置了拦截器 需要放行该接口

    5.设置回调接口

     @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 tradeNo = params.get("out_trade_no");
    String gmtPayment = params.get("gmt_payment");
    String alipayTradeNo = params.get("trade_no");
    // 支付宝验签
    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")); // 更新订单未已支付
    //ordersMapper.updateState(tradeNo, "已支付", gmtPayment, alipayTradeNo);
    }
    }
    return "success";
    }

最新文章

  1. 仿浏览器TAB效果
  2. QQ付费群规则重大变更!特别是这类群!
  3. Oracle基础和用户管理
  4. 捕获当前事件作用的对象event.target和event.srcElement
  5. Android应用与系统安全防御
  6. Visual Studio安装项目中将用户选择的安装路径写入注册表的方法[转]
  7. java的nio之:浅析I/O模型
  8. 【英语】Bingo口语笔记(51) - 相信怀疑的表达
  9. 第一个c++程序 helloworld
  10. DateTime.ToString格式化日期,使用DateDiff方法获取日期时间的间隔数
  11. 【技巧】centos6.5_yum本地安装mysql
  12. HDU5044---Tree 树链剖分
  13. Thread 常搞混的几个概念sleep、wait、yield、interrupt (转)
  14. 如何不保存Word即可用Word打开想显示的内容!
  15. DELL服务器安装Windows server 2003---解决找不到安装在计算机上的硬盘驱动器 安装无法
  16. H5基础浏览器兼容性
  17. 关于一些基础的Java问题的解答(四)
  18. Linux - 主机的细部权限规划:ACL 的使用
  19. RAC(ReactiveCocoa)介绍(一)
  20. webloigc 控制台修改登录密码

热门文章

  1. uniapp+.net core 小程序获取手机号
  2. 记一次 .NET 某金融企业 WPF 程序卡死分析
  3. 在Boss直聘上投简历时,怎样保证有新消息时能及时收到
  4. 关于 Math.random()生成指定范围内的随机数的公式推导
  5. CF Workers反向代理并修改请求
  6. PLG SaaS 产品 Figma 商业模式拆解
  7. vscode-jupyter快捷键
  8. 带你了解CANN的目标检测与识别一站式方案
  9. 新渲染引擎、自定义设计和高质量用户体验的样例应用 Wonderous 现已开源
  10. fastapi教程进阶