当前位置: 首页 > wzjs >正文

学习建设网站信产部网站备案

学习建设网站,信产部网站备案,西安专业网站建设服务好,西安市网站制作公司大家好,我是小悟 在对接支付宝开放平台的一些常用功能时,常常需要收到支付宝的回调通知结果,才能处理业务逻辑。此文介绍通过WebSocket长连接接入支付宝消息服务,实现消息通知。 包括五部分内容:问题、优势、配置、代…

大家好,我是小悟

在对接支付宝开放平台的一些常用功能时,常常需要收到支付宝的回调通知结果,才能处理业务逻辑。此文介绍通过WebSocket长连接接入支付宝消息服务,实现消息通知。

包括五部分内容:问题、优势、配置、代码接入、总结。在这里插入图片描述

问题
比如接入互联网平台直付通二级商户进件时,需要知道这个进件审核的结果,是审核通过还是审核拒绝,就要用到直付通商户进件审核通过消息接口和直付通二级商户进件拒绝消息接口。

再比如接入支付宝小程序模板开发时,需要知道第三应用授权取消结果、小程序审核结果、服务商代创建小程序结果等等,就要用到第三方应用授权取消消息接口、小程序审核通过通知接口、小程序审核驳回通知接口、商户确认服务商代创建小程序结果通知接口等等。

虽然可以通过对应的查询接口主动发起查询结果,但多个业务结果还需开发多个查询接口,体验终归不如由支付宝服务端侧直接通知开发者来的好。所以千万别干“脱裤子放pi,多此一举”的事情来,哈哈哈。在这里插入图片描述
为了解决通知的问题,支付宝开放平台消息服务提供两种通讯协议来接收消息,一种是基于 HTTPS/HTTP,一种是基于 WebSocket 长连接。

优势
选择WebSocket 长连接有诸多优势:

官方提供封装好的SDK,开发者无需考虑通信、验签、组装报文协议,只要专心根据收到的消息处理自身的业务逻辑即可。

无需申请https证书,减少繁琐的证书申请工作,消息也能触达。

开发者无需额外开发一个服务来接收开放平台的消息。

相比之下,WebSocket 长连接有更多的优势,所以一般选择使用WebSocket 长连接来接收支付宝服务端发来的消息。

配置
创建好应用后,在产品绑定-绑定产品,添加对应的产品。

在这里插入图片描述
然后在开发设置-消息服务-FROM平台订阅所需监听的消息接口,接入方式选择WebSocket。在这里插入图片描述
在这里插入图片描述

接入
以上操作是接入的前提条件,务必检查清楚再进行代码的开发。

可使用普通公钥方式和公钥证书方式接入,方式不同,SDK的使用也不同,这个取决于设置接口加签是何种方式,这边选择的是公钥证书方式。在这里插入图片描述
在代码中引入依赖,这边有个注意点就是,如果选择的是公钥证书模式的话,SDK版本需要使用4.11.54.ALL 及以上版本。

<!-- https://mvnrepository.com/artifact/com.alipay.sdk/alipay-sdk-java -->
<dependency><groupId>com.alipay.sdk</groupId><artifactId>alipay-sdk-java</artifactId><version>4.11.54.ALL</version>
</dependency>

这个是重点,开发一个支付宝消息配置类,支付宝服务端有消息通知时会自动触发。

@Component
@Configuration
@EnableConfigurationProperties({AliPayProperties.class})
public class AliPayMsgConfig {private static Logger logger = LoggerFactory.getLogger(AliPayMsgConfig.class);private AliPayProperties aliPay;public AliPayMsgConfig(AliPayProperties aliPay) {this.aliPay = aliPay;}@Beanpublic AlipayMsgClient alipayMsgClient() throws Exception {AlipayMsgClient alipayMsgClient = AlipayMsgClient.getInstance(aliPay.getAppId());alipayMsgClient.setConnector("openchannel.alipay.com");alipayMsgClient.setSecurityCertConfig(aliPay.getSignType(), FileUtil.readUtf8String(aliPay.getAppCertPrivateKeyPath()), aliPay.getAppCertPublicKeyPath(), aliPay.getAliPayCertPublicKeyPath(), aliPay.getAliPayRootCertPath());alipayMsgClient.setCharset(aliPay.getChartSet());alipayMsgClient.setMessageHandler(new MsgHandler() {/*** 客户端接收到消息后回调此方法*  @param  msgApi 接收到的消息的消息api名*  @param  msgId 接收到的消息的消息id*  @param  bizContent 接收到的消息的内容,json格式*/@Overridepublic void onMessage (String msgApi, String msgId, String bizContent) {logger.info("receive message. msgApi:{},msgId:{},bizContent:{}", msgApi, msgId, bizContent);if (StringUtils.equals("alipay.open.app.api.field.changed", msgApi)) {logger.info("用户信息申请记录审核通知,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.open.auth.appauth.cancelled", msgApi)) {logger.info("第三方应用授权取消消息,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.open.auth.userauth.cancelled", msgApi)) {logger.info("用户授权取消消息,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.open.mini.version.audit.passed", msgApi)) {logger.info("小程序审核通过通知,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.open.mini.version.audit.rejected", msgApi)) {logger.info("小程序审核驳回通知,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.trade.refund.depositback.completed", msgApi)) {logger.info("收单退款冲退完成通知,接收到的消息内容:{}", bizContent);} else if (StringUtils.equals("alipay.open.mini.merchant.confirmed", msgApi)) {logger.info("商户确认服务商代创建小程序结果通知,接收到的消息内容:{}", bizContent);}}});alipayMsgClient.connect();return alipayMsgClient;}}

上面代码的AliPayProperties类是配置了应用的一些参数信息,包括应用id、加签类型、应用私钥证书路径、应用公钥证书路径、支付宝公钥证书路径、支付宝根证书路径、编码格式。

@Data
@ConfigurationProperties(prefix = "alipay")
public class AliPayProperties {/*** 加签类型*/private String signType;/*** 应用id*/private String appId;/*** 请求使用的编码格式,如utf-8,gbk,gb2312等*/private String chartSet;/*** 应用私钥证书路径*/private String appCertPrivateKeyPath;/*** 应用公钥证书路径*/private String appCertPublicKeyPath;/*** 支付宝公钥证书路径*/private String aliPayCertPublicKeyPath;/*** 支付宝根证书路径*/private String aliPayRootCertPath;
}

总结
当支付宝服务端有给客户端发送消息时,会回调MsgHandler里面onMessage的实现,因此可以在onMessage中处理接收到的消息,根据msgApi消息名判断是哪种接口来处理对应的业务逻辑。

但需要注意的是,因各种异常原因,支付宝服务端可能会重复通知,因此为了业务不重复被处理,需要做幂等性的控制,可根据每条消息的唯一msgId或者自身系统的业务id比如uuid来事先查询。在这里插入图片描述

您的一键三连,是我更新的最大动力,谢谢

山水有相逢,来日皆可期,谢谢阅读,我们再会

我手中的金箍棒,上能通天,下能探海

上一篇:一不小心,登上支付宝开发者社区热文榜单Top3

http://www.dtcms.com/wzjs/820093.html

相关文章:

  • 益阳建设公司网站软件开发外包服务公司
  • 如何做旅游网站推销网页设计实训步骤和方法
  • 广州机械网站建设外包洛阳免费提供建站方案
  • 广东营销网站制作网站建设制作公司都选万维科技
  • 浙江省建设厅执业资格注册中心网站网页游戏排行力荐新壹玩
  • 做自己头像的网站在电脑制作手机网站用什么软件
  • 滑县网站建设哪家便宜网站图片加载优化
  • 中山快速做网站价格永泰县建设局网站
  • 耐克运动鞋网站建设规划书框架深圳网站建设好吗
  • 做网站外包的公司好干嘛WordPress的网外无法访问
  • 企业网站做多大尺寸深圳医院网站建设
  • 阿里服务器怎么做网站服务器吗三水顺德网站建设
  • 景区网站模板厦门广告公司排行榜
  • 一个电商网站开发要多久wordpress 登录后才能查看
  • 六种常见的网站类型两学一做网站专栏
  • go语言做的网站深圳市官网网站建设平台
  • 银徽seo官网网站优化公司
  • 做标识的网站 知乎网站建设对企业的意义
  • 电子商务网站首页深圳优秀网站建设公司
  • 网站建设服务市场大型车网站建设
  • 注册个人网站域名是com好还是net好国家重大建设项目库网站电话
  • 网站设计的目标是什么合肥公司网站搭建服务商
  • 建设监督网站怎样在百度建立自己的网站
  • 网站建设什么代码最简单app扁平化设计网站模板
  • 北京定制公交网站群晖打开wordpress4.9.8
  • 手机网站建设基本流程网站开发技术thinkphp
  • 芜湖做网站哪家好做自己的优惠券网站
  • 苏州自助建站模板wordpress前端新增头像上传
  • 如何建立公司的销售网站同wordpress
  • 网站建设高端培训学校微信小程序制作网站