步骤:

第一步:准备支付宝相关的参数,如appId、公私钥

第二步:写代码,搞起

第一步:

1.你需要登录支付宝https://open.alipay.com/platform/developerIndex.htm。

2.点击控制台—>研发服务

3.到这个地址上生成一对公私钥:https://miniu.alipay.com/keytool/create

4.私钥保存下来,是要放在项目配置里面的,公钥是下面的步骤要用到的。
5.复制上面的公钥,放到这个输入框里面
6.保存设置后,打开就可以看到这样的窗口,下面的【敲黑板了!!!支付宝公钥】是放在代码里面的,自己保存下来。

7.点击左边的【沙箱账号】,把账号密码保存下来,支付的时候要用到。

8.到了这一步,咱们所需要的配置基本上就准备齐了

请看配置
# 应用ID,您的APPID
alipay.appId=2021xxxx
# 支付宝公私钥生成地址:https://miniu.alipay.com/keytool/create
# 商户私钥,您的PKCS8格式RSA2私钥
alipay.merchantPrivateKey=第一次生成的私钥
# 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm
alipay.alipayPublicKey=支付宝公钥
# 页面跳转异步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.notifyUrl=http://5ktbak.natappfree.cc/payment/alipay
# 页面跳转同步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.returnUrl=http://5ktbak.natappfree.cc/alipayResult# 签名方式
alipay.signType=RSA2
# 字符编码格式
alipay.charset=utf-8
# 支付宝网关
alipay.gatewayUrl=https://openapi.alipaydev.com/gateway.do

第二步

alipay.properties
# 应用ID,您的APPID
alipay.appId=2021xxxx
# 支付宝公私钥生成地址:https://miniu.alipay.com/keytool/create
# 商户私钥,您的PKCS8格式RSA2私钥
alipay.merchantPrivateKey=第一次生成的私钥
# 支付宝公钥,查看地址:https://openhome.alipay.com/platform/keyManage.htm
alipay.alipayPublicKey=支付宝公钥
# 页面跳转异步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.notifyUrl=http://5ktbak.natappfree.cc/payment/alipay
# 页面跳转同步通知页面路径,需http://格式的完整路径,不能加?id=123这类自定义参数,必须外网可以正常访问
alipay.returnUrl=http://5ktbak.natappfree.cc/alipayResult# 签名方式
alipay.signType=RSA2
# 字符编码格式
alipay.charset=utf-8
# 支付宝网关
alipay.gatewayUrl=https://openapi.alipaydev.com/gateway.do
AliPayResource.java
package com.alipay.resource;import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;@Data
@Component
@ConfigurationProperties(prefix="alipay")
@PropertySource("classpath:alipay.properties")
public class AliPayResource {private String appId;private String merchantPrivateKey;private String alipayPublicKey;private String notifyUrl;private String returnUrl;private String signType;private String charset;private String gatewayUrl;
}
AlipayController.java
package com.alipay.controller;import com.alipay.api.AlipayApiException;
import com.alipay.api.AlipayClient;
import com.alipay.api.DefaultAlipayClient;
import com.alipay.api.internal.util.AlipaySignature;
import com.alipay.api.request.AlipayTradePagePayRequest;
import com.alipay.resource.AliPayResource;
import com.alipay.utils.DateUtil;
import com.alipay.utils.JsonResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;/*** @author: HuGoldWater* @description:*/
@Slf4j
@RestController
@RequestMapping("payment")
public class AlipayController {@Autowiredprivate AliPayResource aliPayResource;/*** 前往支付宝进行支付*/@GetMapping(value="/goAlipay")public JsonResult goAlipay(String merchantUserId, String merchantOrderId) throws Exception{//获得初始化的AlipayClientAlipayClient alipayClient = new DefaultAlipayClient(aliPayResource.getGatewayUrl(),aliPayResource.getAppId(),aliPayResource.getMerchantPrivateKey(),"json",aliPayResource.getCharset(),aliPayResource.getAlipayPublicKey(),aliPayResource.getSignType());//设置请求参数AlipayTradePagePayRequest alipayRequest = new AlipayTradePagePayRequest();alipayRequest.setReturnUrl(aliPayResource.getReturnUrl());alipayRequest.setNotifyUrl(aliPayResource.getNotifyUrl());// 商户订单号, 商户网站订单系统中唯一订单号, 必填String out_trade_no = merchantOrderId;// 付款金额, 必填 单位元String total_amount = "0.01";  // 测试用 1分钱// 订单名称, 必填String subject = "胡金水-付款用户[" + merchantUserId + "]";// 商品描述, 可空, 目前先用订单名称String body = subject;// 该笔订单允许的最晚付款时间,逾期将关闭交易。取值范围:1m~15d。m-分钟,h-小时,d-天,1c-当天(1c-当天的情况下,无论交易何时创建,都在0点关闭)。 该参数数值不接受小数点, 如 1.5h,可转换为 90m。String timeout_express = "1h";alipayRequest.setBizContent("{\"out_trade_no\":\""+ out_trade_no +"\","+ "\"total_amount\":\""+ total_amount +"\","+ "\"subject\":\""+ subject +"\","+ "\"body\":\""+ body +"\","+ "\"timeout_express\":\""+ timeout_express +"\","+ "\"product_code\":\"FAST_INSTANT_TRADE_PAY\"}");//请求String alipayForm = "";try {alipayForm = alipayClient.pageExecute(alipayRequest).getBody();} catch (AlipayApiException e) {e.printStackTrace();}log.info("支付宝支付 - 前往支付页面, alipayForm: \n{}", alipayForm);return JsonResult.ok(alipayForm);}/*** 支付成功后的支付宝异步通知*/@RequestMapping(value="/alipay")public String alipay(HttpServletRequest request, HttpServletResponse response) throws Exception {log.info("支付成功后的支付宝异步通知");//获取支付宝POST过来反馈信息Map<String,String> params = new HashMap<String,String>();Map<String,String[]> requestParams = request.getParameterMap();for (Iterator<String> iter = requestParams.keySet().iterator(); iter.hasNext();) {String name = (String) iter.next();String[] values = (String[]) requestParams.get(name);String valueStr = "";for (int i = 0; i < values.length; i++) {valueStr = (i == values.length - 1) ? valueStr + values[i]: valueStr + values[i] + ",";}//乱码解决,这段代码在出现乱码时使用
//       valueStr = new String(valueStr.getBytes("ISO-8859-1"), "utf-8");params.put(name, valueStr);}boolean signVerified = AlipaySignature.rsaCheckV1(params,aliPayResource.getAlipayPublicKey(),aliPayResource.getCharset(),aliPayResource.getSignType()); //调用SDK验证签名if(signVerified) {//验证成功// 商户订单号String out_trade_no = new String(request.getParameter("out_trade_no").getBytes("ISO-8859-1"),"UTF-8");// 支付宝交易号String trade_no = new String(request.getParameter("trade_no").getBytes("ISO-8859-1"),"UTF-8");// 交易状态String trade_status = new String(request.getParameter("trade_status").getBytes("ISO-8859-1"),"UTF-8");// 付款金额String total_amount = new String(request.getParameter("total_amount").getBytes("ISO-8859-1"),"UTF-8");if (trade_status.equals("TRADE_SUCCESS")){//                String merchantReturnUrl = paymentOrderService.updateOrderPaid(out_trade_no, CurrencyUtils.getYuan2Fen(total_amount));
//                notifyFoodieShop(out_trade_no,merchantReturnUrl);}log.info("************* 支付成功(支付宝异步通知) - 时间: {} *************", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));log.info("* 订单号: {}", out_trade_no);log.info("* 支付宝交易号: {}", trade_no);log.info("* 实付金额: {}", total_amount);log.info("* 交易状态: {}", trade_status);log.info("*****************************************************************************");return "success";}else {//验证失败log.info("验签失败, 时间: {}", DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));return "fail";}}}
Application.java
package com.alipay;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
public class Application {public static void main(String[] args) {SpringApplication.run(Application.class, args);}}

运行Application,在页面输入localhost:9090/payment/goAlipay?merchantUserId=123456&merchantOrderId=654321

结果如下:

五月 08, 2021 11:30:51 下午 org.apache.catalina.core.ApplicationContext log
信息: Initializing Spring DispatcherServlet 'dispatcherServlet'
INFO  DispatcherServlet:525 - Initializing Servlet 'dispatcherServlet'
INFO  DispatcherServlet:547 - Completed initialization in 3 ms
INFO  AlipayController:80 - 支付宝支付 - 前往支付页面, alipayForm:
<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=0G7TbOfYZn8BS1dYY%2FITfZLBHgz%2F0uBz3XU4ndiw%2Fpd%2BADurlNMtYNugvZpGTjrL4JBJb%2Fgzl6vG%2B9urFCbeLiVDXhnGMIvqzXOY67YVGIMfIDxR%2BOytOzZ3zctPeEVHDZBAjRNy4aOqW1elJ491Q%2BptPNT2X3vy8Qts0Ago1HaOyoCRlFag5nB3fwD5t3NQz4ZCEG8slwERixJnN2sIQLj4NGI2bM2T6x8ayDtehRC89hwXJ1ZY9IyLVkwhby%2BW4HU2LiQ%2BqD%2FOKLmxsC65M5pWNF7vw9uswmEuN5qBswJ5rqlTl6iyYd5EKK2Xqhj6hCQYz0IMR1cymRhqDoPG1Q%3D%3D&return_url=http%3A%2F%2F5ktbak.natappfree.cc%2FalipayResult&notify_url=http%3A%2F%2F5ktbak.natappfree.cc%2Fpayment%2Falipay&version=1.0&app_id=2021000117651511&sign_type=RSA2&timestamp=2021-05-08+23%3A30%3A51&alipay_sdk=alipay-sdk-java-3.7.110.ALL&format=json">
<input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;654321&quot;,&quot;total_amount&quot;:&quot;0.01&quot;,&quot;subject&quot;:&quot;胡金水-付款用户[123456]&quot;,&quot;body&quot;:&quot;胡金水-付款用户[123456]&quot;,&quot;timeout_express&quot;:&quot;1h&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}">
<input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

把上面的html代码放到html文件中:

<form name="punchout_form" method="post" action="https://openapi.alipaydev.com/gateway.do?charset=utf-8&method=alipay.trade.page.pay&sign=0G7TbOfYZn8BS1dYY%2FITfZLBHgz%2F0uBz3XU4ndiw%2Fpd%2BADurlNMtYNugvZpGTjrL4JBJb%2Fgzl6vG%2B9urFCbeLiVDXhnGMIvqzXOY67YVGIMfIDxR%2BOytOzZ3zctPeEVHDZBAjRNy4aOqW1elJ491Q%2BptPNT2X3vy8Qts0Ago1HaOyoCRlFag5nB3fwD5t3NQz4ZCEG8slwERixJnN2sIQLj4NGI2bM2T6x8ayDtehRC89hwXJ1ZY9IyLVkwhby%2BW4HU2LiQ%2BqD%2FOKLmxsC65M5pWNF7vw9uswmEuN5qBswJ5rqlTl6iyYd5EKK2Xqhj6hCQYz0IMR1cymRhqDoPG1Q%3D%3D&return_url=http%3A%2F%2F5ktbak.natappfree.cc%2FalipayResult&notify_url=http%3A%2F%2F5ktbak.natappfree.cc%2Fpayment%2Falipay&version=1.0&app_id=2021000117651511&sign_type=RSA2&timestamp=2021-05-08+23%3A30%3A51&alipay_sdk=alipay-sdk-java-3.7.110.ALL&format=json"><input type="hidden" name="biz_content" value="{&quot;out_trade_no&quot;:&quot;654321&quot;,&quot;total_amount&quot;:&quot;0.01&quot;,&quot;subject&quot;:&quot;胡金水-付款用户[123456]&quot;,&quot;body&quot;:&quot;胡金水-付款用户[123456]&quot;,&quot;timeout_express&quot;:&quot;1h&quot;,&quot;product_code&quot;:&quot;FAST_INSTANT_TRADE_PAY&quot;}"><input type="submit" value="立即支付" style="display:none" >
</form>
<script>document.forms[0].submit();</script>

打开html文件后,会进入这个页面:

输入沙箱的账号密码:



输入密码后,就已经付款完成了,控制台会打印支付成功的回调通知。

INFO  AlipayController:91 - 支付成功后的支付宝异步通知
INFO  AlipayController:129 - ************* 支付成功(支付宝异步通知) - 时间: 2021-05-09 00:09:32 *************
INFO  AlipayController:130 - * 订单号: 123123123123
INFO  AlipayController:131 - * 支付宝交易号: 2021050922001489970501658602
INFO  AlipayController:132 - * 实付金额: 0.01
INFO  AlipayController:133 - * 交易状态: TRADE_SUCCESS
INFO  AlipayController:134 - *****************************************************************************

如何让支付宝将付款成功的通知,回调到你本机,我使用的是内网穿透:Natapp,可以看到另一篇文章:https://blog.csdn.net/qq_17555933/article/details/116549415

源码地址:

链接: https://pan.baidu.com/s/1cgNiqa5gZoJcaHlikqm_XA 提取码: 16f7

手把手教你如何对接支付宝支付接口(奶爸级别)相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. 支付宝支付接口对接的总结

    本周工作最大的困难还是支付宝支付接口的对接. 遇到主要的问题是两个:1. 发送订单给支付宝接口,接口验证签名失败. 2.支付宝付款结束后,发送信息给网站接收方进行二次验签,还是签名过不了.验签的方式是 ...

  9. java 对接支付宝支付

    2019独角兽企业重金招聘Python工程师标准>>> 对接支付宝支付的前提: 1,商户开通支付能力 登录蚂蚁金服 开放平台:https://open.alipay.com/plat ...

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

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

最新文章

  1. DevExpress WPF v18.2新版亮点(四)
  2. 辨析矩阵内积(hadamard、kronecker)
  3. CozyRSS开发记录8-解析一份RSS
  4. LetCode-MSSQL超过5名学生的课
  5. 今天看到{飞鸽传书2009}
  6. Android笔记 网络源代码浏览器demo
  7. 安卓学习笔记12:安卓按键事件
  8. 1405 奶牛的旅行
  9. 69. Php部分常见问题总结
  10. mysql索引使用b_mysql索引的数据结构,为什么用b+树
  11. 全国省份城市区域代码
  12. XSD文件与XML文件有什么关系
  13. keepalived mysql 主主_MySQL主主+Keepalived高可用(一):解决单点故障
  14. 基于DSP的主动降噪开发之三(CCS软件学习)
  15. Python 学习笔记 列表 for 循环 xxx XXX
  16. JQuery下载文件
  17. 主干(trunk)、分支(branch )、标记(tag) 用法示例 + 图解
  18. [BJWC2018]第k大斜率
  19. 2021年中国农民工总量、外出农民工规模及农民工平均年龄分析[图]
  20. 有符号和无符号整型的临界点

热门文章

  1. ppt中插入html格式图表
  2. 前端核心工作内容有哪些?
  3. 开发者模式各功能详解。
  4. 基于Python的淘宝用户行为分析
  5. R语言使用aov函数进行单因素方差分析(One-way ANOVA)、使用multcomp包的glht函数检验组均值之间所有成对对比差异、使用plot函数可视化Tukey HSD两两均值比较图
  6. BOM差异对比——Spreadsheet Compare
  7. systemtap分析软raid io拆分问题
  8. Latex语法学习05:代码表格的制作
  9. Python购物车系统模拟1
  10. 【6】python生成数据曲线平滑处理——(Savitzky-Golay 滤波器、convolve滑动平均滤波)方法介绍,推荐玩强化学习的小伙伴收藏