支付宝接口对接指南(四、回调通知对接:websoket方式)【保姆级】
导航
- 一、支付宝文档解读和支付宝侧沟通
- 二、对接框架基础搭建 springboot+支付宝SDK
- 三、支付宝开放接口对接:老版SDK
- 四、回调通知对接:websoket方式
文章目录
- 导航
- 导读
- gitee代码地址
- 案例:新蓝海活动报名结果通知
- 支付宝开放接口文档解读
- 一、新蓝海活动报名结果通知文档地址
- 二、蚂蚁金服消息文档
- From 蚂蚁消息服务
- 核心代码
- 一、支付宝基础服务层
- 二、服务启动后开启websoket长连接
- 避坑指南
- 一、接收不到通知-springboot项目
- 二、接收不到通知-springcloud项目
- 最后
导读
- 经过前三篇的解读,对支付宝开放接口对接已经有了大体的了解,下面针对支付宝回调通知对接进行详细阐述,完成整体的支付宝接口对接闭环。开门见山。老规矩先上gitee代码。
gitee代码地址
- https://gitee.com/zhaifengxi/zhai-docking-alipay-open
案例:新蓝海活动报名结果通知
支付宝开放接口文档解读
一、新蓝海活动报名结果通知文档地址
- https://opendocs.alipay.com/apis/01ebii
二、蚂蚁金服消息文档
- 地址:https://opendocs.alipay.com/open/10381/rkohsn
- 消息的两种模式:1. From 蚂蚁消息服务 2.To 蚂蚁消息服务
- From 蚂蚁消息服务:支付宝通知对接平台的消息服务,新蓝海活动报名结果通知 选用此模式来接收回调通知。
- To蚂蚁消息服务:对接平台发送消息给支付宝平台。未使用,所以不展开说明。
From 蚂蚁消息服务
- 两种对接方式:1.http(s)协议 2.websocket长连接
- 官方原话:与 http(s) 相比,该方式接入性能更优,通道安全,减少成本,接入快速等优势,推荐使用 websocket 长连接 SDK 来接收 From 蚂蚁消息。所以选择使用此方式。
- 消息通知间隔频率:2m、10m、10m、1h、2h、6h、15h
核心代码
一、支付宝基础服务层
@Slf4j
@Service
public class BaseAlipayApiNotifySerImpl implements BaseAlipayApiNotifySer {@AutowiredAlipayApiProperties alipayApiProp;@AutowiredBizLogSer bizLogSer;@SneakyThrows@Overridepublic String alipayMessage() {AlipayMsgClient alipayMsgClient = AlipayMsgClient.getInstance(alipayApiProp.getAppid());alipayMsgClient.setConnector(AlipayConstant.COMMON_MESSAGE_SERVER_URL);alipayMsgClient.setSecurityConfig(AlipayConstant.COMMON_SIGN_TYPE, alipayApiProp.getPrivateKey(), alipayApiProp.getPublicKey());alipayMsgClient.setMessageHandler(new MsgHandler() {/*** 客户端接收到消息后回调此方法* @param msgApi 接收到的消息的消息api名* @param msgId 接收到的消息的消息id* @param bizContent 接收到的消息的内容,json格式*/@Overridepublic void onMessage(String msgApi, String msgId, String bizContent) {/** 操作:记录业务日志 */BaseAlipayApiMessage message = new BaseAlipayApiMessage();message.setMsgApi(msgApi);message.setMsgId(msgId);message.setBizContent(bizContent);bizLogSer.save(new BizLogSave(new BizLogDataTemp(message, null), AlipayConstant.MESSAGE_LOG));}});/** 开启websoket长连接 */alipayMsgClient.connect();return JSONUtil.toStr(alipayMsgClient);}
}
BaseAlipayApiNotifySerImpl.java 详情:https://gitee.com/zhaifengxi/zhai-docking-alipay-open/blob/master/src/main/java/zhai/docking/alipay/service/base/alipay/api/notify/BaseAlipayApiNotifySerImpl.java
二、服务启动后开启websoket长连接
@Component
public class StartupRunner implements CommandLineRunner {@AutowiredBaseAlipayApiNotifySer baseAlipayApiNotifySer;@Overridepublic void run(String... args) throws Exception {/*** 保证每次服务启动时,调用蚂蚁金服connect方法*/String result = baseAlipayApiNotifySer.alipayMessage();}
}
- 因为使用的websoket方式,每次项目重启都需要调用SDK中的connect方法,保持长连接。
StartupRunner.java 详情:https://gitee.com/zhaifengxi/zhai-docking-alipay-open/blob/master/src/main/java/zhai/docking/alipay/runner/StartupRunner.java
- 以上核心代码就是完整的一套对接支付宝回调通知websoket方式的核心代码。
避坑指南
- 上面的一整套代码已经躲避了支付宝开放接口的坑,下面讲解下这些坑。
一、接收不到通知-springboot项目
- 原因:需要通过支付宝SDK的connect方法开启长连接,项目如果停止,启动之后仍然需要调用connect方法。
二、接收不到通知-springcloud项目
- 原因:接口链路某个地方断掉了,需要通过调用connect方法,重新保持长连接。
- 实际发生场景:gateway网关服务停后重启,业务微服务未停止,此时也接收不到通知,依然需要调用connect方法,重新保持长连接。
- 可以提供一个手动触发connect的口,当链路中断的地方,常见网关服务,通过手动触发(如:restful接口)来进行启动长连接。
这个问题关键点在于分布式项目如何保持websocket通信,分布式项目会有很长的链路,至少两层,先是网关然后是具体微服务,中间任意环节中断websocket也会中断通信,导致接不到消息,所以需要针对分布式服务做好websocket的长连接的畅通。
最后
- 本篇主要通过 “案例:新蓝海活动报名结果通知”,来完整串联如何开发对接支付宝回调通知,通过对具体文档、核心代码、避坑指南来进行详细分析,希望能给你一些参考。在这里发现自己的薄弱知识websoket和https,故下篇主要讲解http和websoket由浅入深,原创不易,希望大家多多支持。
支付宝接口对接指南(四、回调通知对接:websoket方式)【保姆级】相关推荐
- 玩转群晖NAS套件系列四:Audio Station安装使用保姆级教程!
本章总结: 上一章节我们讲解<玩转群晖NAS套件系列三:Video Station安装使用保姆级教程!>,此教程堪称史上手把手的保姆教程,受到广大网友的一致好评. 很多人喜欢听音乐,但苦于 ...
- 项目对接支付宝支付,内网穿透实现监听支付宝的支付成功异步回调通知
调试的话使用支付宝的沙箱环境来进行调试 调试的时候因为是本地调试,没有上线的域名,无法被支付宝的异步回调请求所打到,这种情况下可以使用内网穿透来进行解决 内网穿透步骤: 内网穿透的几个常用软件 1.n ...
- 高考准考证的照片要跟大学四年吗?快GET保姆级最美证件照全攻略!
很多学弟学妹们都私信我,问高考准考证上的那张丑照真的要跟大学四年吗?的确,那个时候大家都熬夜苦读,哪有闲情逸致去打扮自己呢?就算拍照那天精心打扮了,得,死亡黑眼圈.死亡化妆技术.丑到爆的校服.还没来得 ...
- 免费物流快递单号查询接口快速对接指南
[场景需求描述] 电商平台及ISV商家对物流api接口的需求有很多,今天我们主要分享的就是快递鸟快递单号查询接口的对接指南,快递单号查询接口对接的应用场景有很多,很多场景会遇到,最主要的就是电商网站用 ...
- 以证书方式对接支付宝接口
在项目中也是第一次用到,测试的流程都好了,后来我问客户要相应的支付宝参数 结果给我的是证书文件,不是我之前测试用的公钥和私钥(一脸懵...) .......... 对接支付宝接口也可以用证书文件(不只 ...
- 支付宝对接源码php,thinkphp3.2.3 成功对接支付宝接口
thinkphp3.2.3 成功对接支付宝接口,吾爱源码亲测!!! 一.首先下载支付宝官方接口,下载地址: https://b.alipay.com/order/productDetail.htm?p ...
- 主流常用100个快递物流单号查询接口对接指南
快递单号查询接口指南的目的: 便于需要的用户理解快递单号查询接口作用并正确应用到实际场景. 快递单号查询接口作用: 快递物流轨迹类接口包含:即时查询接口和物流跟踪接口. 快递单号即时查询接口:实时查询 ...
- 支付宝接口 - 即时到账交易接口 对接 整理 1
支付宝官方开放平台接口说明: https://doc.open.alipay.com/docs/doc.htm?spm=a219a.7629140.0.0.Gp6DiG&treeId=62&a ...
- Flutter对接支付宝接口
" Flutter支付宝接口的对接教程" 对于一个App来说,支付功能是不可获取的一部分,今天,我就来分享一下在Flutter框架中支付宝的APP支付功能的接入过程.本文结构如下: ...
- 支付宝 当面付(扫描支付) 对接逻辑
支付宝 当面付(扫描支付) 对接逻辑 这两天给网站 博客下方添加了 打赏功能 使用的是 支付宝的 当面付功能 特此记录一下,觉得不错的可以在下方打赏 嘿嘿 ,下面先来看一下效果图. 1.当面付产品介绍 ...
最新文章
- 2006鄂土整项目精神
- Android博客文章整理
- FileChannel应用实例——本地文件读数据
- Centos7使用yum源安装mysql5.7和redis
- 如何用distinct消除重复记录的同时又能选取多个字段值?
- HTML5基础一:常用布局标签
- 数据分析常用Python库:数值计算、可视化、机器学习等领域
- snmp 获得硬件信息_计算机网络基础课程—简单网络管理协议(SNMP)
- Access denied for user 'root'@'localhost' Could not obtain connection
- CLion开发,运行报错后问题排查
- LoadRunner压力测试:测试报告结果分析
- Spell of the rising moon
- iOS 修改app名称
- 二级域名使用https证书注意事项
- The content of element type “mapper“ must match “(cache-ref|cache|resultMap*|parameterMap*|sql*|inse
- 苦练基本功《如何阅读看懂一篇Datasheet》
- GitHub热榜:来膜拜这个流弊的AI框架!
- echarts环形柱状图
- QT5.14.1简单实现百度语音识别(附源码)
- 卷积神经网络和深度神经网络的区别是什么?
热门文章
- 计算机不显示验证码,验证码不显示_网页不显示验证码是怎么回事?
- 5.6 图层样式的缩放 [原创Ps教程]
- 王小九用计算机弹桥边姑娘,抖音最火歌曲是哪首?QQ音乐开放平台《桥边姑娘》让“野狼”靠边站...
- 生态 | 协同办公软件发展任重道远——基于数据库领域视角
- 双电阻差分电流采样_运放-输入偏置电流与输入失调电流
- 怎么把动态ip改成静态ip?
- 常用的不透明度的值,以黑色为例
- 如何删除双系统中的Linux系统
- hashcat简单使用
- Excel / WPS 下拉选择数据