更新时间:2022-05-27 11:29:14收藏订阅更新我的文档设置返回文档简介开发者服务端可以与支付宝开放平台服务端建立基于 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复制代码9123456<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 结果码查看下方。常见结果码codemsg说明处理方式10000success消息提交成功- 20000msg.unknow-error服务暂不可用请稍后重试或者联系凯发app官方网站的技术支持。20001msg.no-permission无权限发送该消息请检查是否开通相关消息服务。30000msg.invalid-parameter存在非法的消息参数请检查请求参数是否合法。30000msg.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。30001msg.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消息内容为空请确保投递的消息内容不为空。40000msg.consumer-not-exist该消息不存在消费方请确保该消息接口存在订阅方。msg.sys-abort系统已终止该消息的发送订阅方取消订阅或者系统自动放弃投递。