热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

springboot集成支付宝支付的示例代码

这篇文章主要介绍了springboot集成支付宝支付的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

最简单的springboot集成支付宝

1 注册沙箱

沙箱是一个模拟环境登录,百度蚂蚁金服开放平台,支付宝扫码登录如下


然后沙箱需要注册一下,非常之简单,注册好以后进入到如下页面,选沙箱工具,然后下载一个生成密钥的工具。然后解压按照里面的readme生成公私密钥,

选择沙箱应用 上传公钥即可。。沙箱到这里就基本完成了,里面还有沙箱版本的的android app可以下载下来。

java 程序

1 新建一个springboot项目

因为我们创建的是一个web工程,所以,仅仅演示支付宝的demo,只需要勾选web就足够了。

2 添加alipay-sdk-java和fastjson

fastjson 的作用是用到了其中的JSON.toString方法。
alipay-sdk-java的作用不用说自然是支付宝的sdk,是必不可少的。

 
      com.alipay.api
      alipay-sdk-java
      20170615110434
    

    
      com.alibaba
      fastjson
      1.2.7
    

3 Config

新建一个支付宝的config文件,如下
因为支付宝支付完成以后会有一个回调函数返回商家页面

该页面完成过一会儿结束以后会有一个回调,,因为回调地址必须是公网可以直接访问,这也就是下面用到了netapp映射的原因neturl即为映射的公网地址。

package com.example.pay.config.pay;

import org.springframework.context.annotation.Configuration;

import java.io.FileWriter;
import java.io.IOException;

/**
 * @author ligen
 * @title: AliPayConfig
 * @projectName demo
 * @description:
 * @date 2019/6/1014:20
 */
@Configuration
public class AliPayConfig {

//↓↓↓↓↓↓↓↓↓↓请在这里配置您的基本信息↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
 //  netapp映射的地址,,,根据自己的需要修改
  private static String neturl = "http://g5kike.natappfree.cc";

  // 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号 按照我文章图上的信息填写
  public static String app_id = "2016092800619078";

  // 商户私钥,您的PKCS8格式RSA2私钥 刚刚生成的私钥直接复制填写
  public static String merchant_private_key ="粘贴生成的私钥";

  // 支付宝公钥,对应APPID下的支付宝公钥。 按照我文章图上的信息填写支付宝公钥,别填成商户公钥
  public static String alipay_public_key = "粘贴生成的公钥";
  // 服务器异步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL
  public static String notify_url = neturl+"/alipay/notify_url";

  // 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,其实就是你的一个支付完成后返回的页面URL
  public static String return_url = neturl+"/alipay/return_url";

  // 签名方式
  public static String sign_type = "RSA2";

  // 字符编码格式
  public static String charset = "utf-8";

  // 支付宝网关
  public static String gatewayUrl = "https://openapi.alipaydev.com/gateway.do";

  // 支付宝网关
  public static String log_path = "C:\\";


//↑↑↑↑↑↑↑↑↑↑请在这里配置您的基本信息↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

  /**
   * 写日志,方便测试(看网站需求,也可以改成把记录存入数据库)
   * @param sWord 要写入日志里的文本内容
   */
  public static void logResult(String sWord) {
    FileWriter writer = null;
    try {
      writer = new FileWriter(log_path + "alipay_log_" + System.currentTimeMillis()+".txt");
      writer.write(sWord);
    } catch (Exception e) {
      e.printStackTrace();
    } finally {
      if (writer != null) {
        try {
          writer.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
  }
}

4 Service

调用支付宝的支付接口就是将一包数据通过支付宝SDK的一个接口发送给支付宝的服务器,然后他会返回给你一个输入密码确认支付的界面。
所以只需要干两件事

1 组装数据

数据最少有5项,注意map的key和value都是字符串

2 创建客户端

创建一个 Client实例,其中的值即为我们Config中的值

3 发送数据

这里面先将数据转化为request 最后将request通过Client发出去。用到了fastjson的toString方法。也就是前面导入fastjson依赖的原因

package com.example.pay.config.pay;

import com.alibaba.fastjson.JSON;
import com.alipay.api.AlipayApiException;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.example.pay.domain.AlipayVo;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * @author ligen
 * @title: AliPayService
 * @projectName demo
 * @description:
 * @date 2019/6/119:11
 */
@Service
public class AliPayService {
  Logger logger = LoggerFactory.getLogger("AliPayService.class");


  @Autowired
  AlipayVo staticVo;

  //  支付服务
  public String aliPay() throws AlipayApiException {

    // 构建支付数据信息
    Map data = new HashMap<>();
    data.put("subject", staticVo.getSubject()); //订单标题
    data.put("out_trade_no", new SimpleDateFormat().format(new Date())); //商户订单号,64个字符以内、可包含字母、数字、下划线;需保证在商户端不重复   //此处模拟订单号为时间
    data.put("timeout_express", staticVo.getTimout_express()); //该笔订单允许的最晚付款时间
    data.put("total_amount", staticVo.getTotle_amout()); //订单总金额,单位为元,精确到小数点后两位,取值范围[0.01,100000000]
    data.put("product_code", "FAST_INSTANT_TRADE_PAY"); //销售产品码,商家和支付宝签约的产品码,为固定值QUICK_MSECURITY_PAY


    //构建客户端
    DefaultAlipayClient alipayRsa2Client = new DefaultAlipayClient(
        AliPayConfig.gatewayUrl,
        AliPayConfig.app_id,
        AliPayConfig.merchant_private_key,
        "json",
        AliPayConfig.charset,
        AliPayConfig.alipay_public_key,
        AliPayConfig.sign_type);
//    AlipayTradeAppPayRequest request = new AlipayTradeAppPayRequest();// APP支付
    AlipayTradePagePayRequest request = new AlipayTradePagePayRequest(); // 网页支付
//    AlipayTradeWapPayRequest request = new AlipayTradeWapPayRequest(); //移动h5
    request.setNotifyUrl(AliPayConfig.notify_url);
    request.setReturnUrl(AliPayConfig.return_url);
    request.setBizContent(JSON.toJSONString(data));
    logger.info(JSON.toJSONString(data));
    String respOnse= alipayRsa2Client.pageExecute(request).getBody();
    logger.info(response);
    return response;
  }
}

5 controller 层很简单 代码如下

package com.example.pay.controller;

import com.alipay.api.AlipayApiException;
import com.example.pay.config.pay.AliPayService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**

@author ligen
@title: PayController
@projectName demo
@description:
@date 2019/6/1013:25
*/
@Api(tags = “支付宝测试”)
@RestController
public class PayController {

Logger logger = LoggerFactory.getLogger("PayController.class");

@Autowired
AliPayService aliPayService;

@ApiOperation("支付接口")
@RequestMapping(value = "alipay/toPay/{amount}", method = RequestMethod.GET)
public String alipay(@PathVariable(value = "amount") Integer amount) throws AlipayApiException {
  return aliPayService.aliPay(amount);
}

@ApiOperation("支付异步通知接口")
@GetMapping("alipay/notify_url")
public String notifyAlipay() {

  logger.info("----notify-----");
  return " a li pay notify ";
}

@ApiOperation("支付完成以后的回调接口")
@GetMapping("alipay/return_url")
public String returnAlipay() {
  logger.info("----return-----");
  return " a li pay return ";
}
}

6 运行

浏览器访问(我这里设置了端口号为1234) 路径最后面200是金额参数。

会跳转到如下页面,

此时可以使用沙箱支付宝app支付了,这里我们使用账户登录。。。记住是付款用户登录,而不是收款用户。。。那么哪里看付款收款呢。
打开蚂蚁金服->开发者中心->沙箱 如下图

登录第二个账号后如下图 密码默认都是111111

如果设置了return url 将在该页面结束以后自动跳转至return url对应的页面,如下 我在return url只是返回了一个字符串。

代码git 地址

https://github.com/ligengithub/pay.git

到此这篇关于springboot 集成支付宝支付的示例代码的文章就介绍到这了,更多相关springboot 集成支付宝支付内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!


推荐阅读
  • MongoDB高可用架构:深入解析Replica Set机制
    MongoDB的高可用架构主要依赖于其Replica Set机制。Replica Set通过多个mongod节点的协同工作,实现了数据的冗余存储和故障自动切换,确保了系统的高可用性和数据的一致性。本文将深入解析Replica Set的工作原理及其在实际应用中的配置和优化方法,帮助读者更好地理解和实施MongoDB的高可用架构。 ... [详细]
  • AppFog 是一个基于 CloudFoundry 的多语言 PaaS(平台即服务)提供商,允许用户在其平台上轻松构建和部署 Web 应用程序。本文将通过详细的图文步骤,指导读者如何在 AppFog 免费云平台上成功部署 WordPress,帮助用户快速搭建个人博客或网站。 ... [详细]
  • 在Python编程中,探讨了并发与并行的概念及其区别。并发指的是系统同时处理多个任务的能力,而并行则指在同一时间点上并行执行多个任务。文章详细解析了阻塞与非阻塞操作、同步与异步编程模型,以及IO多路复用技术的应用。通过模拟socket发送HTTP请求的过程,展示了如何创建连接、发送数据和接收响应,并强调了默认情况下socket的阻塞特性。此外,还介绍了如何利用这些技术优化网络通信性能和提高程序效率。 ... [详细]
  • Node.js 教程第五讲:深入解析 EventEmitter(事件监听与发射机制)
    本文将深入探讨 Node.js 中的 EventEmitter 模块,详细介绍其在事件监听与发射机制中的应用。内容涵盖事件驱动的基本概念、如何在 Node.js 中注册和触发自定义事件,以及 EventEmitter 的核心 API 和使用方法。通过本教程,读者将能够全面理解并熟练运用 EventEmitter 进行高效的事件处理。 ... [详细]
  • 本文详细解析了JSONP(JSON with Padding)的跨域机制及其工作原理。JSONP是一种通过动态创建``标签来实现跨域请求的技术,其核心在于利用了浏览器对``标签的宽松同源策略。文章不仅介绍了JSONP的产生背景,还深入探讨了其具体实现过程,包括如何构造请求、服务器端如何响应以及客户端如何处理返回的数据。此外,还分析了JSONP的优势和局限性,帮助读者全面理解这一技术在现代Web开发中的应用。 ... [详细]
  • 本文深入探讨了 Android DrawingView 的优化技巧与实现方法,重点介绍了如何实现平滑绘制效果。通过支持常见的绘图工具和形状,以及图层变换功能,提升了用户体验。文章详细解析了绘制过程中的性能优化策略,包括减少重绘次数、使用硬件加速和优化内存管理等技术,为开发者提供了实用的参考。 ... [详细]
  • 通过优化模板消息机制,本研究提出了一种高效的信息化推送方案。该方案利用获取的访问令牌(access token)和指定的模板ID,实现了精准且快速的信息推送,显著提升了用户体验和信息传递效率。具体实现中,通过调用相关API接口,确保了消息的准确性和及时性,为用户提供更加便捷的服务。 ... [详细]
  • Java服务问题快速定位与解决策略全面指南 ... [详细]
  • 本项目在Java Maven框架下,利用POI库实现了Excel数据的高效导入与导出功能。通过优化数据处理流程,提升了数据操作的性能和稳定性。项目已发布至GitHub,当前最新版本为0.0.5。该项目不仅适用于小型应用,也可扩展用于大型企业级系统,提供了灵活的数据管理解决方案。GitHub地址:https://github.com/83945105/holygrail,Maven坐标:`com.github.83945105:holygrail:0.0.5`。 ... [详细]
  • 作为140字符的开创者,Twitter看似简单却异常复杂。其简洁之处在于仅用140个字符就能实现信息的高效传播,甚至在多次全球性事件中超越传统媒体的速度。然而,为了支持2亿用户的高效使用,其背后的技术架构和系统设计则极为复杂,涉及高并发处理、数据存储和实时传输等多个技术挑战。 ... [详细]
  • 本文介绍了如何通过掌握 IScroll 技巧来实现流畅的上拉加载和下拉刷新功能。首先,需要按正确的顺序引入相关文件:1. Zepto;2. iScroll.js;3. scroll-probe.js。此外,还提供了完整的代码示例,可在 GitHub 仓库中查看。通过这些步骤,开发者可以轻松实现高效、流畅的滚动效果,提升用户体验。 ... [详细]
  • Java Web开发中的JSP:三大指令、九大隐式对象与动作标签详解
    在Java Web开发中,JSP(Java Server Pages)是一种重要的技术,用于构建动态网页。本文详细介绍了JSP的三大指令、九大隐式对象以及动作标签。三大指令包括页面指令、包含指令和标签库指令,它们分别用于设置页面属性、引入其他文件和定义自定义标签。九大隐式对象则涵盖了请求、响应、会话、应用上下文等关键组件,为开发者提供了便捷的操作接口。动作标签则通过预定义的动作来简化页面逻辑,提高开发效率。这些内容对于理解和掌握JSP技术具有重要意义。 ... [详细]
  • ASP11:深入解析与应用展望本文详细探讨了 ASP11 中的 `AppRelativeTemplateSourceDirectory` 属性,该属性用于获取或设置包含控件的 Page 或 UserControl 对象的应用程序相对虚拟目录。此外,文章还介绍了 1.0 版本中的 Binding 机制,分析了其在实际开发中的应用和优化方法,为开发者提供了全面的技术指导。 ... [详细]
  • 在Mac平台上通过终端操作完成MySQL的启动与彻底关闭——八步指南
    在Mac平台上,通过终端操作实现MySQL的启动与完全关闭,本文提供了一套详细的八步指南。首先,在Finder中使用快捷键进入 `/usr/local` 目录,找到并进入 `mysql` 文件夹。接着,右键选择该文件夹并从上下文菜单中打开终端。在终端中,输入并执行 `./scripts/mysql_install` 命令以开始安装或初始化过程。后续步骤将指导用户如何顺利启动和安全关闭MySQL服务,确保系统资源的有效管理。 ... [详细]
  • 智能制造数据综合分析与应用解决方案
    在智能制造领域,生产数据通过先进的采集设备收集,并利用时序数据库或关系型数据库进行高效存储。这些数据经过处理后,通过可视化数据大屏呈现,为生产车间、生产控制中心以及管理层提供实时、精准的信息支持,助力不同应用场景下的决策优化和效率提升。 ... [详细]
author-avatar
我们的北京宫
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有