Alipay-EasySDK从配置到撒钱

  • 添加SDK依赖
    • Maven
    • Gradle
  • 配置SDK
    • 准备材料
    • 代码配置
  • 编写代码,准备撒钱
    • 后台逻辑代码
    • 前端调用代码
  • 撒钱开始
    • 打开页面
      • 电脑支付网页 Page
      • 手机支付网页 Wap
  • 钱撒完了怎么办
    • 充值
  • 第二篇笔记结束

添加SDK依赖

Maven

pom.xmldependencies 标签中加入如下内容

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

Gradle

build.gradle 这个文件中的 dependencies 里加入如下内容

implementation 'com.alipay.sdk:alipay-easysdk:2.1.0'

配置SDK

准备材料

下面的配置需要用到沙箱环境,如果还没有完成沙箱环境相关的配置工作,或者不太清楚的可以先来这里看看

清单 值示例 来源
APPID 2016XXXXXXXX2651 沙箱应用中的APPID
AlipayPublicKey 类似MIIBIjAN开头的字符串 支付宝公钥
MerchantPrivateKey 长得和支付宝公钥类似,但更长 生成应用公钥时同步生成的私钥
Protocol https 网关协议,因为是对接支付宝,它提供的都是https
GateWayHost openapi.alipaydev.com 这里是支付宝的沙箱网管,实际生产环境网关地址为openapi.alipay.com/gateway.do
SignType RSA2 支付宝推荐使用RSA2加密方式

注:这里的GateWayHost后面有gateway.do,算是个小坑

代码配置

application.yml

alipay:protocol: https# 不需要加/gateway.do,这是新旧SDK的区别,切记gatewayHost: openapi.alipaydev.comsignType: RSA2# 填APPIDappId: 2016102600762651# 填应用私钥,注意是应用私钥,不要填成公钥了_(:з」∠)_merchantPrivateKey: MIIE.....# 填支付宝公钥,注意不是生成的应用公钥alipayPublicKey: MIIBIjAN......

AlipayProperties.java

@Component
@ConfigurationProperties(prefix = "alipay")
public class AlipayProperties {/** 应用识别码 */private String appId;/** 网关协议 */private String protocol;/** 网关地址 */private String gatewayHost;/** 密钥加密方式 */private String signType;/** 私钥 */private String merchantPrivateKey;/** 公钥 */private String alipayPublicKey;

AlipayConfig.java

@Configuration
public class AlipayConfig {@Beanpublic Config getConfig(@Autowired AlipayProperties properties) {Config config = new Config();// 网关协议config.protocol = properties.getProtocol().trim();// 网关地址config.gatewayHost = properties.getGatewayHost().trim();// 密钥加密方式config.signType = properties.getSignType().trim();// 应用识别码APPIDconfig.appId = properties.getAppId().trim();// 应用私钥config.merchantPrivateKey = properties.getMerchantPrivateKey().trim();// 支付宝公钥config.alipayPublicKey = properties.getAlipayPublicKey().trim();// Factory全局只需配置一次Factory.setOptions(config);return config;}
}

编写代码,准备撒钱

后台逻辑代码

AlipayController

@RestController
@RequestMapping("/pay")
public class AlipayController {// 电脑网页支付@GetMapping("/page")public Map<String, Object> pagePay() {try {// Payment.Page就是电脑网页支付的封装接口AlipayTradePagePayResponse response = Factory.Payment.Page().pay(// 商品名"来撒钱吧大兄弟",// 存在自己数据库中的唯一单号idString.valueOf(LocalTime.now().getNano()),// 金额,精确到小数点后两位,范围为[0.01,9999999999999.99]"9999.99",// 付款完成后跳转网页,这里只是演示,我随便填的"www.bilibili.com");return wrap(response.getBody());} catch (Exception e) {log.warn("调用异常,原因:{}", e.getMessage());throw new RuntimeException(e.getMessage(), e);}}// 手机网页支付@GetMapping("/wap")public Map<String, Object> wapPay() {try {// Payment.Wap就是手机网页支付的封装接口,注意他们的返回类型是不一样的AlipayTradeWapPayResponse response = Factory.Payment.Wap().pay(// 商品名"来继续撒",// 存在自己数据库中的唯一单号idString.valueOf(LocalTime.now().getNano()),// 金额,要求都一样的,参考上面电脑网页支付的注释"131499520.99",// 未支付,中途退出时返回的网址"www.csdn.com",// 完成支付后返回的网址"www.bilibili.com");return wrap(response.getBody());} catch (Exception e) {log.warn("调用异常,原因:{}", e.getMessage());throw new RuntimeException(e.getMessage(), e);}}private Map<String, Object> wrap(Object data) {return new HashMap<String, Object>(3){{put("msg", "success");put("code", "20000");put("data", data);}};}
}

前端调用代码

test.html,保存后使用浏览器打开,并将后台代码运行起来

<!DOCTYPE html>
<html>
<head><title>Alipay Learning</title><script src="https://cdn.staticfile.org/jquery/1.10.2/jquery.min.js"></script>
</head>
<body><center><button id="alipayTradeWapPay" style="border-width: 1px; border-radius: 3px; width: 100px">用手机撒钱!</button></center><div id="divwapform"></div><script type="text/javascript">$("#alipayTradeWapPay").click(function() {$.ajax({url: "http://localhost:8082/debug/wap",type: "get",dataType: "json",success: function(data) {console.log(data);$("#divwapform").html(data.data);},error: function(error) {console.log(error);}})});</script><br><center><button id="alipayTradePagePay" style="border-width: 1px; border-radius: 3px; width: 100px">用电脑撒钱!</button></center><div id="divpageform"></div><script type="text/javascript">$("#alipayTradePagePay").click(function() {$.ajax({url: "http://localhost:8082/debug/page",type: "get",dataType: "json",success: function(data) {console.log(data);$("#divpageform").html(data.data);},error: function(error) {console.log(error);}})});</script>
</body>
</html>

撒钱开始

打开页面

电脑支付网页 Page

点击 用电脑撒


扫码付款 扫码支付的话,要先去沙箱那边扫码下载沙箱钱包,然后登陆,扫码,付款目前这个沙箱钱包只有安卓版,这里给个下载的link: 下载链接

支付完成后会进行跳转,因为我这里是演示,跳转地址乱填的,所以会出现报错。

现在我们再去沙箱那边看看买家账户的余额是否已经增加


因为之前也测试过一次,所以这里余额不是9999.99哦

手机支付网页 Wap

啊这,我FireFox不要面子的吗_(:з」∠)_

换成Chrome打开 这里只演示直接登录付款

在第一篇笔记中提到了沙箱账号(点我直达),我们要用买家账号登录哦,支付密码和登录密码,沙箱账号界面里都会给到的

先来看看余额爽一爽


问:为什么上面有几张图突然变宽?

答:想着写博客的时候再测试一波进行截图的,但是不知道为什么ChromeConsole那边报CORB错误,页面也提示系统繁忙,请稍后再试了,暂时没能解决,就只能先用前几天深夜调试好拿去发朋友圈的截图啦

钱撒完了怎么办

充值

进入沙箱账户里充值

第二篇笔记结束

撒完了,梦醒了

支付宝接口学习踩坑记(2)——基于SpringBoot的Alipay-EasySDK配置及网页支付接口简单示例相关推荐

  1. SimpleDateFormat的相关学习踩坑记

    转载至:ImportNew的<还在使用 SimpleDateFormat ?你的项目崩没?> 作者:周宇峰 突然看到ImportNew的相关推送,想起了以前踩过的坑,特此转载顺便记录一下. ...

  2. 新手亲自踩坑!Jmter使用CSV Data Set Config配置原件测试登录接口,察看结果树无响应问题

    使用网上找的一个登录接口案例来练手,有需要的可以进下方链接(我用的版本是jmter3.1和5.3) http://doc.nnzhp.cn/index.php?s=/6&page_id=12 ...

  3. Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记

    前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...

  4. 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现

    本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...

  5. python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django

    <>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...

  6. 在百度地图中叠加CAD图及GIS数据展示踩坑记

    前言 在之前的几篇博客中分别介绍了 在Cesium中实现与CAD的DWG图叠加显示分析 https://www.cnblogs.com/vjmap/p/16541751.html . 高德地图与CAD ...

  7. 小小甜菜深度学习爬坑记

    小小甜菜深度学习爬坑记 主要目的是整理一路学习的技术分享贴.我的电脑是笔记本联想拯救者R720,显卡是GTX1050Ti.其它环境仅供参考. 安装ubuntu+win10双系统 详情见技术贴用 Eas ...

  8. linux mint 无法联网_linux mint踩坑记

    linux mint踩坑记 linux 简介 1.linux mint 是基于debian的一个发行版,以友好的界面素称,开始菜单很像windows,风格以清新为主! 2.linux mint 分为两 ...

  9. 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题

    ❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...

最新文章

  1. 超年轻!93年小伙已是985大学教授、博导!
  2. 如何显示jQuery中的加载微调器?
  3. 释疑の语法LOCAL
  4. shiro受权时没有走对应的realm的授权解决方案
  5. STM32开发 -- 4G模块开发详解(4)
  6. SpringSecurity简单入门
  7. 儿童手表怎么删除联系人_华为儿童手表4X体验:与你一起守护孩子的成长,带娃不再辛苦...
  8. else 策略模式去掉if_业务复杂=if else?刚来的大神竟然用策略+工厂彻底干掉了他们!...
  9. C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
  10. 验证文件路径的正则表达式(支持网络路径)
  11. 红帽发布虚拟化策略 产品即将上市
  12. 成人高考计算机专业怎么样,成人高考计算机专业就业前景怎么样?
  13. 在Status状态栏中的出现Out of date shapes问题解决方式
  14. Big Endian 和 Little Endian 详解
  15. 苹果手机扬声器没声音怎么办_苹果手机没有声音处理办法 !
  16. 双显示器如何设置上下显示和鼠标上下进入第二屏幕?
  17. 为什么录像都是用.avi而不是.mp4?
  18. 数千 npm 账号使用域名过期的邮箱,涉及 8494 个包
  19. OpenVINO: export failure: libpython3.9.so.1.0: cannot open shared object file: No such file or direc
  20. 关于电脑磁盘消失的解决方法

热门文章

  1. 微信支付-电商收付通开发-01.材料准备
  2. NovelAI tag在线生成器
  3. FileSystemWatcher用法详解
  4. MinIO未授权SSRF漏洞(CVE-2021-21287)复现
  5. 双系统重装ubuntu,ubuntu分区方案
  6. 基于layui中table组件的数据表格单元格合并
  7. 阿里开源一站式分布式事务框架seata源码分析(AT模式下TM与RM分析)
  8. YOLOv5在android端实现目标检测+跟踪+越界识别并报警
  9. 两个世界2城堡防御攻略
  10. guava Stopwatch