支付宝接口学习踩坑记(2)——基于SpringBoot的Alipay-EasySDK配置及网页支付接口简单示例
Alipay-EasySDK从配置到撒钱
- 添加SDK依赖
- Maven
- Gradle
- 配置SDK
- 准备材料
- 代码配置
- 编写代码,准备撒钱
- 后台逻辑代码
- 前端调用代码
- 撒钱开始
- 打开页面
- 电脑支付网页 Page
- 手机支付网页 Wap
- 钱撒完了怎么办
- 充值
- 第二篇笔记结束
添加SDK依赖
Maven
在
pom.xml
的dependencies
标签中加入如下内容<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打开 这里只演示直接登录付款
在第一篇笔记中提到了沙箱账号(点我直达),我们要用买家账号登录哦,支付密码和登录密码,沙箱账号界面里都会给到的
先来看看余额爽一爽
问:为什么上面有几张图突然变宽?
答:想着写博客的时候再测试一波进行截图的,但是不知道为什么
Chrome
的Console
那边报CORB
错误,页面也提示系统繁忙,请稍后再试了,暂时没能解决,就只能先用前几天深夜调试好拿去发朋友圈的截图啦
钱撒完了怎么办
充值
进入沙箱账户里充值
第二篇笔记结束
撒完了,梦醒了
支付宝接口学习踩坑记(2)——基于SpringBoot的Alipay-EasySDK配置及网页支付接口简单示例相关推荐
- SimpleDateFormat的相关学习踩坑记
转载至:ImportNew的<还在使用 SimpleDateFormat ?你的项目崩没?> 作者:周宇峰 突然看到ImportNew的相关推送,想起了以前踩过的坑,特此转载顺便记录一下. ...
- 新手亲自踩坑!Jmter使用CSV Data Set Config配置原件测试登录接口,察看结果树无响应问题
使用网上找的一个登录接口案例来练手,有需要的可以进下方链接(我用的版本是jmter3.1和5.3) http://doc.nnzhp.cn/index.php?s=/6&page_id=12 ...
- Vue + TypeScript + Element 搭建简洁时尚的博客网站及踩坑记
前言 本文讲解如何在 Vue 项目中使用 TypeScript 来搭建并开发项目,并在此过程中踩过的坑 . TypeScript 具有类型系统,且是 JavaScript 的超集,TypeScript ...
- 口罩、安全帽识别比赛踩坑记(二) 比赛流程及 SSD / YOLO V3 两版本实现
本篇文章主要对比赛流程中的各个环节进行展开说明,并对笔者践行过的代码及更改的地方进行记录.如哪里有侵权请联系笔者进行删除.另外在这里对比赛举办方表示感谢 ~ ~ 其中开源代码会在整理后放在github ...
- python从入门到实践django看不懂_Python编程:从入门到实践踩坑记 Django
<>踩坑记 Django Django Python 19.1.1.5 模板new_topic 做完书上的步骤后,对主题添加页面经行测试,但是浏览器显示 服务器异常. 个人采用的开发环境是 ...
- 在百度地图中叠加CAD图及GIS数据展示踩坑记
前言 在之前的几篇博客中分别介绍了 在Cesium中实现与CAD的DWG图叠加显示分析 https://www.cnblogs.com/vjmap/p/16541751.html . 高德地图与CAD ...
- 小小甜菜深度学习爬坑记
小小甜菜深度学习爬坑记 主要目的是整理一路学习的技术分享贴.我的电脑是笔记本联想拯救者R720,显卡是GTX1050Ti.其它环境仅供参考. 安装ubuntu+win10双系统 详情见技术贴用 Eas ...
- linux mint 无法联网_linux mint踩坑记
linux mint踩坑记 linux 简介 1.linux mint 是基于debian的一个发行版,以友好的界面素称,开始菜单很像windows,风格以清新为主! 2.linux mint 分为两 ...
- 东八区转为0时区_踩坑记 | Flink 天级别窗口中存在的时区问题
❝ 本系列每篇文章都是从一些实际的 case 出发,分析一些生产环境中经常会遇到的问题,抛砖引玉,以帮助小伙伴们解决一些实际问题.本文介绍 Flink 时间以及时区问题,分析了在天级别的窗口时会遇到的 ...
最新文章
- 超年轻!93年小伙已是985大学教授、博导!
- 如何显示jQuery中的加载微调器?
- 释疑の语法LOCAL
- shiro受权时没有走对应的realm的授权解决方案
- STM32开发 -- 4G模块开发详解(4)
- SpringSecurity简单入门
- 儿童手表怎么删除联系人_华为儿童手表4X体验:与你一起守护孩子的成长,带娃不再辛苦...
- else 策略模式去掉if_业务复杂=if else?刚来的大神竟然用策略+工厂彻底干掉了他们!...
- C++ Primer 第五版 第6章——函数阅读笔记及习题答案(完整,附C++代码)
- 验证文件路径的正则表达式(支持网络路径)
- 红帽发布虚拟化策略 产品即将上市
- 成人高考计算机专业怎么样,成人高考计算机专业就业前景怎么样?
- 在Status状态栏中的出现Out of date shapes问题解决方式
- Big Endian 和 Little Endian 详解
- 苹果手机扬声器没声音怎么办_苹果手机没有声音处理办法 !
- 双显示器如何设置上下显示和鼠标上下进入第二屏幕?
- 为什么录像都是用.avi而不是.mp4?
- 数千 npm 账号使用域名过期的邮箱,涉及 8494 个包
- OpenVINO: export failure: libpython3.9.so.1.0: cannot open shared object file: No such file or direc
- 关于电脑磁盘消失的解决方法