开发者社区
社区提问意见反馈
开发者钉组织
扫描二维码
加入支付宝开发者钉组织
文档中心
开放平台 
技术接入指南 > 支付宝开放平台消息服务 > websocket长连接接入
收藏
订阅更新
我的文档
设置
简介
开发者服务端可以与支付宝开放平台服务端建立基于 websocket 的长连接通道,用于收发消息。
相对于需要开发者提供应用网关接收 from 蚂蚁消息,长连接通道有如下优点:
开发者不需要开发一个 http server 来接收 from 蚂蚁消息,也不需要购买 https 证书。
基于长连接,比 https 通信更高效。
长连接 sdk 高层次封装,通信、数字签名等开发者都不需要考虑,只需要关注消息处理逻辑本身。
使用方法
选择通信方式
开发者服务端与支付宝开放平台服务端消息交互目前有两种通信方式,一种是基于 https/http,一种是基于 websocket 长连接。因此,开发者在订阅消息 api(from 蚂蚁)时要选择通信方式,这样支付宝服务端才知道通过什么通信方式下发消息给开发者服务端。
接入代码
支付宝开放平台提供的服务端 sdk(java 语言版,其它语言敬请期待)支持长连接通道,使用 sdk 可以不用关心连接通信的细节,只需要关注消息报文的处理。
引入依赖
目前支持长连接通道的服务端 sdk 只有 java 语言版,请添加 ,并使用 3.6.0.all 及以上版本。如:
注意:若使用证书模式接入请使用 4.11.54.all 及以上版本 sdk。
xml
复制代码
<dependency>
<groupid>com.alipay.sdkgroupid>
<artifactid>alipay-sdk-javaartifactid>
<version>4.11.54.allversion>
dependency>
获取客户端对象
开发者可根据自身应用加签方式构造、配置基于长连接通道的消息客户端 alipaymsgclient。使用 alipaymsgclient.getinstance(appid) 可获取 alipaymsgclient 对象,相同的 appid 会对应同一个实例,不同的 appid 对应不同的实例。
普通公钥方式
若使用 普通公钥方式 接入支付宝 api,可参考如下方法构造、配置 alipaymsgclient :
公钥证书方式
若使用 公钥证书方式 接入支付宝 api,可参考如下方法构造、配置 alipaymsgclient 。
建立连接
调用上文的方法,客户端就会开始与支付宝开放平台服务端尝试建立连接。如果建连失败,会抛出异常。
注意: 
1alipaymsgclient 的所有 setxx 方法都必须在 connect 方法调用之前被调用,否则设置无效。
2alipaymsgclient.connect() 调用之后,如果连接失败或中断,alipaymsgclient 会自动进行重连,每次重连间隔 0-10s。因此每个 alipaymsgclient 实例,只需要调用 connect 方法一次。
3支付宝开放平台服务端对客户端连接数有限制,一般请求下不会达到。但如果集群的机器确实很多,建立的连接达到了限制,connect() 一直抛异常,请联系支付宝凯发app官方网站的技术支持。
处理接收到的消息
当客户端收到一条消息时,会回调开发者定义的 msghandler 实现,在 onmessage 方法实现中,不抛出任何异常,则认为消费消息成功,否则服务端认为此消息客户端没有消费成功,会触发重试。
注意:每一条 from 蚂蚁的消息都会有 msgid,不保证不会重复投递,因此,需要业务上借助 msgid 或其它业务 id 来做幂等控制。 回调的执行会在单独的线程池中进行,此线程池默认 coresize 为 5,maxsize 为10。如果想修改,可以如下调用:
发送消息
向支付宝开放平台服务端发送to蚂蚁消息,代码如下。
sendmessage 是同步调用,得到服务端响应之后,才会返回。超时时间是10s,超时后会抛出异常。
producemsgack.getxcode 结果码查看下方。
常见结果码
code
msg
说明
处理方式
10000
success
消息提交成功
-
20000
msg.unknow-error
服务暂不可用
请稍后重试或者联系凯发app官方网站的技术支持。
20001
msg.no-permission
无权限发送该消息
请检查是否开通相关消息服务。
30000
msg.invalid-parameter
存在非法的消息参数
请检查请求参数是否合法。
30000
msg.invalid-sign
验签失败
检查公私钥是否是一对。
检查公钥上传是否与私钥匹配。
存在中文需要做 urlencode。
签名算法是否无误。
msg.invalid-app-id
无效的appid
检查入参 app_id,app_id 不存在,或者未上线。
msg.invalid-msg-api
消息 api 不存在
请检查消息 api 名称是否有误
msg.empty-content
消息内容不允许为空
请检查请求消息对象是否正常设置
msg.invalid-timestamp
时间戳格式非法或者过期
时间戳参数 timestamp 非法,请检查格式为数字,精确到毫秒级,且在10分钟内。
msg.invalid-sign-type
非法的签名类型
检查入参 sign_type,目前只支持 rsa、rsa2。
msg.invalid-version
非法的version
非法的协议参数 version,请检查入参 version。
msg.invalid-charset
非法的字符集类型
请求参数 charset 错误,目前支持格式:gbk,utf-8。
30001
msg.missing-sign
缺少sign参数
请检查是否缺少协议参数 sign。
msg.missing-charset
缺少charset参数
请检查是否缺少协议参数 charset。
msg.missing-sign-type
缺少sign_type参数
请检查是否缺少协议参数 sign_type。
msg.missing-timestamp
缺少timestamp参数
请检查是否缺少协议参数 timestamp。
msg.missing-app-id
缺少appid参数
请检查参数 appid 是否缺失。
msg.missing-msg-api
缺少msgapi参数
请检查参数 msgapi 是否缺失。
msg.missing-msg-id
缺失msgid参数
请检查消息报文是否缺少 msgid。
msg.missing-content
消息内容为空
请确保投递的消息内容不为空。
40000
msg.consumer-not-exist
该消息不存在消费方
请确保该消息接口存在订阅方。
msg.sys-abort
系统已终止该消息的发送
订阅方取消订阅或者系统自动放弃投递。
内容没有解决您的问题?您还可以前往 或 寻求帮助
凯发k8官方网娱乐官方 copyright © 2022 支付宝(杭州)信息技术有限公司  | icp证浙b2-20160559
该文档对你是否有帮助?
当前页面目录
网站地图