最近需要对接支付宝的支付接口,官方文档写得内容有点分散,整理了一下发布出来,用作记录,同时也希望对不了解情况的人有所帮助,这里以电脑端的网页支付为例。

开发主要分为三个步骤:一、生成私钥公钥。二、建立应用。三、沙箱环境。四、接口开发

一、生成私钥公钥

生成密钥的官网文档:官网文档
官方文档讲得已经很详细,按照步骤来即可,记得保存好公钥与私钥,下面需要用到

二、建立应用

1.首先进入蚂蚁金服开放平台的首页,通过支付宝账户登录,登录的时候要选择一个身份,这个选自研开发者吧,反正后面可以拓展
2.在蚂蚁金服的首页的头像旁边进入管理中心,然后点击“开发中心”:

然后选择网页和移动应用快速接入支付/行业,注意旁边的“研发服务”,接下来我们会用到:

进入之后选择“支付接入”创建一个用于接入支付的应用:

然后输入相关的信息后点击确认创建:

创建成功之后可以看到如下页面:

可以在功能列表选择自己需要的功能。

开发设置中可以填入自己需要的信息,其中加密方式建议选择RSA(SHA256)密钥,公钥填写之前生成的公钥。
注:输入公钥时验证会失败,但是对我们的开发没有影响,暂时可以不管

填写完之后,提交审核,审核按钮在页面上方= =,审核过程大概一个小时左右吧。实际生产环境的应用需要等待这个审核,但是我们开发可以运用沙箱环境来进行。

三、沙箱环境

什么是沙箱环境?
沙箱环境实际上跟真实的生产环境差不多,开发的时候我们用沙箱进行,测试bug,到了生产环境中,我们只要替换APPID和支付宝网关就可以了,非常方便。

  1. 在网页上端,点击开发平台,进入沙箱:

    在这里需要注意两个地方:
  • 沙箱环境下的支付宝网关
  • 配置好自己的公钥
  1. 沙箱账号

    这个账号用来模拟真实的支付宝账户,毕竟我们开发进行支付时不会使用自己的真实支付宝进行支付。

后面还有什么沙箱账号以及沙箱工具什么的,就自己看了。
准备得差不多了,接下来说说怎么开发接口

四、接口开发

我用的开发语言是JAVA,工具为IDEA,一个简单的springboot工程
1.构建一个普通的springboot工程,引入支付宝SDK的maven依赖:

        <dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>3.0.0</version></dependency>
  1. 新建一个AlipayConfig类,用于配置支付的相关配置:
public class AlipayConfig {// 应用ID,您的APPID,收款账号既是您的APPID对应支付宝账号,开发时使用沙箱提供的APPID,生产环境改成自己的APPIDpublic static String APP_ID = "你的沙箱APPID";// 商户私钥,您的PKCS8格式RSA2私钥public static String APP_PRIVATE_KEY = "你自己的私钥";// 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm 对应APPID下的支付宝公钥。public static String ALIPAY_PUBLIC_KEY = "你自己的支付宝公钥,注意是支付宝公钥,不是应用公钥";// 服务器异步通知页面路径  需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问public static String notify_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/notify_url.jsp";// 页面跳转同步通知页面路径 需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问(其实就是支付成功后返回的页面)public static String return_url = "http://localhost:8080/alipay.trade.page.pay-JAVA-UTF-8/return_url.jsp";// 签名方式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();}}}}
}

3.新建一个controller包,用于存放Action,新建一个PayController类,编写一个用于支付的接口/pay

@RestController
public class PayController {@RequestMapping("/pay")public void payController(HttpServletRequest request, HttpServletResponse response) throws IOException {//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(AlipayConfig.gatewayUrl, AlipayConfig.APP_ID, AlipayConfig.APP_PRIVATE_KEY, "json", AlipayConfig.CHARSET, AlipayConfig.ALIPAY_PUBLIC_KEY, AlipayConfig.sign_type);//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(AlipayConfig.return_url);alipayRequest.setNotifyUrl(AlipayConfig.notify_url);//商户订单号,商户网站订单系统中唯一订单号,必填String out_trade_no = new String(request.getParameter("WIDout_trade_no").getBytes("ISO-8859-1"),"UTF-8");//付款金额,必填String total_amount = new String(request.getParameter("WIDtotal_amount").getBytes("ISO-8859-1"),"UTF-8");//订单名称,必填String subject = new String(request.getParameter("WIDsubject").getBytes("ISO-8859-1"),"UTF-8");//商品描述,可空String body = new String(request.getParameter("WIDbody").getBytes("ISO-8859-1"),"UTF-8");alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+ "\"total_amount\":\""+ total_amount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\""+ body +"\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//若想给BizContent增加其他可选请求参数,以增加自定义超时时间参数timeout_express来举例说明//alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","//     + "\"total_amount\":\""+ total_amount +"\","//       + "\"subject\":\""+ subject +"\","//     + "\"body\":\""+ body +"\","//       + "\"timeout_express\":\"10m\","//       + "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求参数可查阅【电脑网站支付的API文档-alipay.trade.page.pay-请求参数】章节//请求String form="";try {form = alipayClient.pageExecute(alipayRequest).getBody(); //调用SDK生成表单} catch (AlipayApiException e) {e.printStackTrace();}response.setContentType("text/html;charset=" + AlipayConfig.CHARSET);response.getWriter().write(form);//直接将完整的表单html输出到页面response.getWriter().flush();response.getWriter().close();}
  1. 新建一个JSP页面,用于模拟提交订单
    首先要添加JSP的相关依赖:
 <!-- tomcat 依赖包 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId></dependency><dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId></dependency><!-- servlet 依赖包 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId></dependency>

配置文件添加springMvc的映射路径

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

新建一个页面:

页面所在的目录

<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><form action="/pay" method="post">订单号:<input type="text" name="WIDout_trade_no" required><br/>订单名称:<input type="text" name="WIDsubject" required><br/>付款金额:<input type="text" name="WIDtotal_amount" required><br/>WIDbody:<input type="text" name="WIDbody"><br/><input type="submit" value="下单"> <input type="reset" value="重置">
</form>

required保证提交的时候这两项内容非空
5. controller类添加跳转到jsp页面的映射:

    @RequestMapping("/")public String toTest(){return "index";}

6.测试运行,启动项目,在浏览器输入:http://localhost:8080/

输入订单号,订单名称,金额,就可以跳转到支付宝的支付页面了:

由于这个是沙箱环境,所以这个二维码无法识别,我们选择右边的登录支付宝账户付款

在这里我们输入的是之前沙箱账号和支付密码,输入之后就可以进入到支付页面,与实际中的操作是一样的:


这里跳转回去的页面就是之前AlipayConfig类中的return_url 在这之前需要进入notify_url 接口进行验签,这两个接口就不演示了,先知道这回事,实际开发的时候再进行开发。

用springboot对接支付宝支付接口的详细开发步骤总结相关推荐

  1. PHP版本对接支付宝支付接口 电脑网站 详细介绍 沙箱环境 超简单易懂

    PHP版本对接支付宝支付接口 其实理顺了思路后,按照我接下来的步骤来,真的超级简单啊,为啥有那么多的朋友们折腾了那么久呢,嘿嘿,接下来跟我走吧~ 我是昨天晚上洗完澡之后,大概八九点,才开始正式开工尝试 ...

  2. android支付功能开发,对接支付宝支付接口开发详细步骤

    对接支付宝支付接口,官方文档已经写的很清楚了,但是也有很多像我一样的小白,第一次对接支付宝支付接口,会有些迷茫,所以我在此写下这篇文章,给我和我一样的同学,一点思路吧. 第一步:(先要在支付宝进行操做 ...

  3. SpringBoot整合支付宝支付接口 详解 (有源文件)

    目录 1.简介与支付接口运行原理 2.基本配置说明 3.支付接口实现 4.整合后沙箱测试 1.简介与支付接口运行原理 简介: 现在与钱有关的项目都离不开支付,现在就来介绍一下如何对接支付宝接口.演示项 ...

  4. 订单支付功能对接支付宝支付接口

    求助:这张GIF的效果动图整了一个多小时,没找到好的编辑软件,都太难用了.如果恰巧看到这篇文章有好的GIF编辑或者录制软件,请推荐一 个!万谢 订单支付功能是购物的最后一个环节,本文将通过对接支付宝的 ...

  5. TP5 对接支付宝支付接口开发详细步骤(证书签名方式)

    注: 支付宝支付分为支付宝公钥和证书签名方式两种,如果需要使用退款功能要用证书签名方式开发 php接入支付宝证书方式签名 支付宝 PHP SDK 分为老版和新版,老版本的 PHP SDK(v3.4.2 ...

  6. 支付宝html5接入,app和h5怎样对接支付宝支付接口?

    1.支付宝开放平台https://open.alipay.com 新增应用并签约手机网站支付/APP支付. 2.服务端使用java, 集成支付宝sdk. 3.为方便以后更多支付方式扩展, 先定义接口, ...

  7. 对接支付宝支付接口开发详细步骤

    之前做web项目接入支付宝,网上看了很多文档和案列,不是不讲重点就是过时不适用了,导致走了很多弯路,经过冷静分析总算跑通了,这里分享下接入流程. 第一步:(先要在支付宝进行操做,拿到我们需要开发的信息 ...

  8. jsp对接支付宝支付接口,实现网站在线支付(JSP/JAVA WEB/Servlet)

    首先登录 支付宝开放平台 点击立即入驻 打开手机支付宝扫码登录,登录后会提示填写相关信息,填完之后就算入驻成功了. 说明,由于我没有 企业账号,所以以下的操作全在沙箱中进行. 接着,点击开发者中心,选 ...

  9. SpringBoot+vue3对接支付宝支付详细教程

    SpringBoot+vue3对接支付宝支付详细教程 本人也是第一次做这个,是一个刚刚学习自学支付的萌新,目的是在于学习,只是为了记录自己的学习过程,怕以后会忘记,因为我没有企业账号,所以用的是自己的 ...

  10. JAVA对接支付宝支付(超详细,一看就懂)

    Java对接支付宝支付 更多内容 冷文博客: 传送门 引入 为什么要发这篇帖子呢?原因很简单,就是因为在一个稍稍正规一点的应用上都会有支付这个环节,我们日常的在线支付如今包括支付宝,微信钱包,QQ钱包 ...

最新文章

  1. 我对2019年人工智能行业发展的预测
  2. [LeetCode] Rotate List
  3. 【TensorFlow】笔记4:图像识别与CNN
  4. 无障碍开发(九)之tabindex属性
  5. springboot事物注解不生效_Springboot注解事务隔离性无效
  6. oracle数据库sid已存在,Oracle SID在本机下已经存在,请指定一个不同的SID”的解决方法...
  7. android 手机固定mac地址吗,Android手机获取Mac地址的几种方法
  8. GO 语言博客 搬家部署,NGINX作为代理
  9. 使用SQL语句操作数据
  10. 【Tensorflow】基于卷积神经网络实现车牌的识别
  11. python是一种什么类型的编程_python是什么类型的编程语言
  12. matlab 切点投资组合 程序,MATLAB证券投资组合分析
  13. 时序分析 42 -- 时序数据转为空间数据 (一) 格拉姆角场
  14. 万亿蚂蚁的高光与隐忧
  15. Java系统记一次排查生产环境邮件突然就发不出来的问题
  16. [Matlab]巴特沃夫滤波器设计:低通、高通、带通和带阻
  17. OpenVINO环境搭建
  18. mel表达式_mel语言~`详解
  19. 我们的《机器学习》课程被认定为浙江省一流课程
  20. 【时间序列分析】12.MA(q)模型

热门文章

  1. 出门在外的程序员注意了!! IDEA一定要设置为护眼的豆沙绿
  2. Eclipse使用技巧--设置编辑器背景护眼色和设置字体
  3. 得分——UVa1585
  4. 四、随机变量及其分布函数的基本定义和性质 random variables and distribution
  5. linux没有安装防火墙,Linux安装防火墙
  6. exp 导数oracle,指数函数 exp(x) 导数的直接求法
  7. This file should be served over HTTPS. This download has been blocked. computed高级处理
  8. 微信开发者工具 文件删除操作 二次确认框 设置
  9. 如何将成绩用C语言分,如何利用C语言实现简单的分数化简
  10. 相似图片搜索的原理(二)【作者: 阮一峰】