百度开放平台第三方代小程序开发,授权事件、消息与事件通知总结

大家好,我是小悟

关于百度开放平台第三方代小程序开发的两个事件接收推送通知,是开放平台代小程序实现业务的重要功能。

授权事件推送和消息与事件推送类型都以event的值判断。

授权事件推送通知

图片

授权事件推送包括:推送票据、授权成功、取消授权、授权更新、手机号权限取消。百度服务器会向第三方平台方的授权事件接收 URL 以 POST 的方式推送相关通知。

推送票据:在第三方平台创建审核通过后,百度服务器会向其“授权事件接收URL” 每隔10分钟以 POST 的方式推送票据。

event的值为push

{"Ticket" : "8c0da4968b0d1e28acbc1d738a56607d","FromUserName" : "SmartAPP","CreateTime" : 1413192605,"MsgType" : "ticket","Event" : "push"
}

授权成功:event的值为AUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "AUTHORIZED","authorizationCode":"授权码","authorizationCodeExpiresIn":60
}

取消授权:event的值为UNAUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "UNAUTHORIZED"
}

授权更新:
event的值为UPDATE_AUTHORIZED

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "UPDATE_AUTHORIZED","authorizationCode":"授权码","authorizationCodeExpiresIn":60
}

手机号权限取消:当主体账号信息发生变更时.会取消当前账号下所有小程序的获取手机号权限。若想要恢复权限,需重新调用申请手机号权限API重新审核。
event的值为
APPLY_APP_MOBILE_AUTH_PASS

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_PASS","reason":"主体信息变更"
}

接收post请求后,只需直接返回字符串success。为了加强安全性,post data中的数据将使用服务申请时的加解密key来进行加密,在收到推送后需进行解密。


@PostMapping(value = "authPushMsg")
public void authPushMsg(PostDataModel postData) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {sb = sb.append(line);}String postStr = sb.toString();logger.warn("授权推送消息---->获得数据为postData={}", postStr);PostDataModel postData = JSON.parseObject(postStr, PostDataModel.class);try {logger.warn("授权推送消息,开始");String msgSignature = MsgSignatureUtil.getMsgSignature(thirdPlatConfig.getMsgCheckToken(), postData.getTimeStamp(), postData.getNonce(), postData.getEncrypt());if (StringUtils.equals(postData.getMsgSignature(), msgSignature)) {AesDecryptUtil aesDecryptUtil = new AesDecryptUtil(thirdPlatConfig.getMsgEncodingAesKey());String decrypt = aesDecryptUtil.decrypt(postData.getEncrypt());logger.warn("授权推送消息,解密结果={}", decrypt);if (decrypt.contains("Ticket") && decrypt.contains("push")) {logger.warn("推送ticket协议---->开始");// 推送ticket通知ComponentVerifyTicket componentVerifyTicket = JSON.parseObject(decrypt, ComponentVerifyTicket.class);componentVerifyTicket.setComponentVerifyTicket(componentVerifyTicket.getTicket());RedisService<ComponentVerifyTicket> redisService = RedisService.load();redisService.save(componentVerifyTicket, ComponentVerifyTicket.class);logger.warn("推送ticket协议---->成功,保存到缓存中的值为:{}", JSON.toJSONString(componentVerifyTicket));} else {// 进行授权、取消授权、更新授权AuthPushAuthorized authPushAuthorized = JSON.parseObject(decrypt, AuthPushAuthorized.class);String event = authPushAuthorized.getEvent();if (StringUtils.equals(EventEnum.AUTHORIZED.getCode(), event)) {logger.warn("推送授权成功通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.UPDATE_AUTHORIZED.getCode(), event)) {logger.warn("推送授权更新通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.UNAUTHORIZED.getCode(), event)) {logger.warn("推送取消授权通知---->成功,{}", JSON.toJSONString(authPushAuthorized));} else if (StringUtils.equals(EventEnum.APP_MOBILE_AUTH_CANCEL.getCode(), event)) {logger.warn("获取手机号权限取消---->通知,{}", JSON.toJSONString(authPushAuthorized));}}}} catch (Exception e) {logger.error("系统异常", e);} finally {// 响应消息PrintWriter out = response.getWriter();out.print("success");}
}

消息与事件推送通知

在这里插入图片描述
消息与事件推送包括:设置小程序名称、设置小程序头像、设置小程序描述、设置小程序行业类目、小程序强制下线、小程序暂停服务、小程序服务启用、小程序限时整改通知、小程序流量下线通知、申请手机号权限、获取手机号权限、代码包审核、真实性认证状态变更、创建支付账号、配置开发者设置、开通支付服务、创建单卡子链。审核结果会向消息与事件接收 URL 进行事件推送。

小程序名称审核通过:
event的值为APP_NAME_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_NAME_AUDIT_PASS"
}

小程序名称审核不通过:
event的值为APP_NAME_AUDIT_FAIL

{"appId": 小程序appid,"appName": "TP名称拒审改名0503_审核失败_1589544087240","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_NAME_AUDIT_FAIL","reason": "名称过长(名称控制在10个字以内)。"
}

小程序头像审核通过:
event的值为APP_ICON_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_ICON_AUDIT_PASS"
}

小程序头像审核不通过:
event的值为APP_ICON_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_ICON_AUDIT_FAIL","reason": "不通过原因。"
}

小程序描述审核通过:
event的值为APP_DESC_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_DESC_AUDIT_PASS"
}

小程序描述审核不通过:
event的值为APP_DESC_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_DESC_AUDIT_FAIL","reason": "不通过原因。"
}

小程序行业审核通过:
event的值为APP_CATEGORY_AUDIT_PASS

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_CATEGORY_AUDIT_PASS"
}

小程序行业审核不通过:
event的值为APP_CATEGORY_AUDIT_FAIL

{"appId": 小程序appid,"appName": "小程序名称","tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_CATEGORY_AUDIT_FAIL","reason": "不通过原因。"
}

小程序强制下线:
event的值为APP_FORCE_OFFLINE

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_FORCE_OFFLINE","reason":"强制下线原因","offlineReason":3,"illegalFields":"appName,photoAddr,appDesc"
}

小程序暂停服务:
event的值为APP_SERVER_PAUSE

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_SERVER_PAUSE","reason":"强制下线原因","offlineReason":3,"illegalFields":"appName,photoAddr,appDesc"
}

小程序服务启用:
event的值为APP_SERVER_RESUME

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_SERVER_RESUME"
}

小程序限时整改通知:
event的值为TIME_LIMIT_RECTIFY_NOTIFY

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "TIME_LIMIT_RECTIFY_NOTIFY"
}

小程序流量下线通知:
event的值为FLOW_CLOSE_NOTIFY

{"appId":小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "FLOW_CLOSE_NOTIFY"
}

小程序手机号权限审核通过:event的值为
APPLY_APP_MOBILE_AUTH_PASS

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_PASS"
}

小程序手机号权限审核不通过:event的值为
APPLY_APP_MOBILE_AUTH_REJECT

{"appId":15263713,"tpAppId": 14242323,"eventTime": "2019-01-14 12:45:10","event": "APPLY_APP_MOBILE_AUTH_REJECT","reason":"审核失败原因"
}

代码包审核通过:
event的值为PACKAGE_AUDIT_PASS

{"appId": 1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "PACKAGE_AUDIT_PASS","packageId":529394,"packageVersion":"0.2.2"
}

代码包审核不通过:
event的值为PACKAGE_AUDIT_FAIL

{"appId": 1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "PACKAGE_AUDIT_FAIL","reason":"名称过长(名称控制在10个字以内)。名称与实际打开后的名称不符。","packageId":745815,"packageVersion":"1.3.46"
}

真实性认证结果推送:当客户的真实性认证状态发生变化后,第三方平台将可以通过开放平台上填写的消息与事件接受URL,获得变更内容。若客户账号下有多个小程序,会收到数量与客户小程序数量相等的推送。
event的值为ADVANCED_AUDIT_CHANGED

{"appId":1452365,"tpAppId": 17328232,"eventTime": "2019-01-14 12:45:10","event": "ADVANCED_AUDIT_CHANGED","adType":2,"adStatus":1
}

创建支付账号通过:event的值为
APP_PAYMENT_CREATE_ACCOUNT_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_ACCOUNT_PASS"
}

创建支付账号不通过:event的值为
APP_PAYMENT_CREATE_ACCOUNT_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_ACCOUNT_FAIL","reason": "失败原因"
}

配置开发者设置通过:event的值为
APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS"
}

配置开发者设置不通过:event的值为
APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL","reason": "失败原因"
}

开通支付服务通过:event的值为
APP_PAYMENT_CREATE_PAYMENT_PASS

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_PAYMENT_PASS"
}

开通支付服务不通过:event的值为
APP_PAYMENT_CREATE_PAYMENT_FAIL

{"appId": 小程序appid,"tpAppId": 第三方平台appid,"eventTime": "2019-01-14 12:45:10","event": "APP_PAYMENT_CREATE_PAYMENT_FAIL","reason": "失败原因"
}

创建单卡子链审核通过:小程序单卡是面向开发者的流量权益,是符合准入要求的小程序开发者向百度用户提供相关产品及服务的搜索特型卡片。第三方平台(TP)可代替小程序开发者提交2-15个小程序的核心功能或子频道,作为小程序单卡的外露子链,被用户直接访问触达。
event的值为AUDIT_SUB_CHAIN_PASS

{"appId":小程序appid,"tpAppId":第三方平台appid,"eventTime":"2019-01-14 12:45:10","event":"AUDIT_SUB_CHAIN_PASS","subchainId":13234
}

创建单卡子链审核不通过:
event的值为AUDIT_SUB_CHAIN_FAILED

{"appId":小程序appid,"tpAppId":第三方平台appid,"eventTime":"2019-01-14 12:45:10","event":"AUDIT_SUB_CHAIN_FAILED","subchainId":13234,"reason":"失败原因"
}

接收post请求后,只需直接返回字符串success。为了加强安全性,post data中的数据将使用服务申请时的加解密key来进行加密,在收到推送后需进行解密。

@PostMapping(value = "eventPushMsg")
public void eventPushMsg(PostDataModel postData) throws IOException {BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(),"UTF-8"));StringBuffer sb = new StringBuffer();String line;while ((line = br.readLine()) != null) {sb = sb.append(line);}String postStr = sb.toString();logger.warn("事件推送消息---->获得数据为postData={}", postStr);PostDataModel postData = JSON.parseObject(postStr, PostDataModel.class);try {logger.warn("事件推送消息,开始");String msgSignature = MsgSignatureUtil.getMsgSignature(thirdPlatConfig.getMsgCheckToken(), postData.getTimeStamp(), postData.getNonce(), postData.getEncrypt());if (StringUtils.equals(postData.getMsgSignature(), msgSignature)) {AesDecryptUtil aesDecryptUtil = new AesDecryptUtil(thirdPlatConfig.getMsgEncodingAesKey());String decrypt = aesDecryptUtil.decrypt(postData.getEncrypt());logger.warn("事件推送消息,解密结果={}", decrypt);EventPushMsg eventPushMsg = JSON.parseObject(decrypt, EventPushMsg.class);String event = eventPushMsg.getEvent();if (StringUtils.equals(EventEnum.APP_NAME_AUDIT_PASS.getCode(), event)) {logger.warn("小程序名称审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_NAME_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序名称审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_ICON_AUDIT_PASS.getCode(), event)) {logger.warn("小程序头像审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_ICON_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序头像审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_DESC_AUDIT_PASS.getCode(), event)) {logger.warn("小程序描述审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_DESC_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序描述审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_CATEGORY_AUDIT_PASS.getCode(), event)) {logger.warn("小程序行业类目审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_CATEGORY_AUDIT_FAIL.getCode(), event)) {logger.warn("小程序行业类目审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_FORCE_OFFLINE.getCode(), event)) {logger.warn("小程序强制下线---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_SERVER_PAUSE.getCode(), event)) {logger.warn("小程序暂停服务---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_SERVER_RESUME.getCode(), event)) {logger.warn("小程序服务启用---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.TIME_LIMIT_RECTIFY_NOTIFY.getCode(), event)) {logger.warn("小程序限时整改通知---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.FLOW_CLOSE_NOTIFY.getCode(), event)) {logger.warn("小程序流量下线通知---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APPLY_APP_MOBILE_AUTH_PASS.getCode(), event)) {logger.warn("申请手机号权限审核通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APPLY_APP_MOBILE_AUTH_REJECT.getCode(), event)) {logger.warn("申请手机号权限审核拒绝---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.PACKAGE_AUDIT_PASS.getCode(), event)) {logger.warn("代码包审核成功---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.PACKAGE_AUDIT_FAIL.getCode(), event)) {logger.warn("代码包审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.ADVANCED_AUDIT_CHANGED.getCode(), event)) {logger.warn("真实性认证状态变更---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_ACCOUNT_PASS.getCode(), event)) {logger.warn("创建支付账号通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_ACCOUNT_FAIL.getCode(), event)) {logger.warn("创建支付账号失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_UPDATE_DEVELOP_CONFIG_PASS.getCode(), event)) {logger.warn("配置开发者设置通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_UPDATE_DEVELOP_CONFIG_FAIL.getCode(), event)) {logger.warn("配置开发者设置失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_PAYMENT_PASS.getCode(), event)) {logger.warn("开通支付服务通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.APP_PAYMENT_CREATE_PAYMENT_FAIL.getCode(), event)) {logger.warn("开发支付服务失败---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.AUDIT_SUB_CHAIN_PASS.getCode(), event)) {logger.warn("创建单卡子链审核通过---->通知,{}", JSON.toJSONString(eventPushMsg));} else if (StringUtils.equals(EventEnum.AUDIT_SUB_CHAIN_FAILED.getCode(), event)) {logger.warn("创建单卡子链审核失败---->通知,{}", JSON.toJSONString(eventPushMsg));}}}} catch (Exception e) {logger.error("系统异常", e);} finally {// 响应消息PrintWriter out = response.getWriter();out.print("success");}
}

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/105101.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【使用教程】在Ubuntu下PMM60系列一体化伺服电机通过SDO跑循环同步位置模式详解

本教程将指导您在Ubuntu操作系统下使用SDO&#xff08;Service Data Object&#xff09;来配置和控制PMM60系列一体化伺服电机以实现循环同步位置模式。我们将介绍必要的步骤和命令&#xff0c;以确保您能够成功地配置和控制PMM系列一体化伺服电机。 01.准备工作 在正式介绍之…

一种更具破坏力的DDoS放大攻击新模式

近日&#xff0c;内容分发网络&#xff08;CDN&#xff09;运营商Akamai表示&#xff0c;一种使网站快速瘫痪的DDoS放大攻击新方法正在被不法分子所利用。这种方法是通过控制数量巨大的中间设备&#xff08;middlebox&#xff0c;主要是指配置不当的服务器&#xff09;&#xf…

【VR】【Unity】白马VR课堂系列-VR开发核心基础03-项目准备-VR项目设置

【内容】 详细说明 在设置Camera Rig前,我们需要针对VR游戏做一些特别的Project设置。 点击Edit菜单,Project Settings,选中最下方的XR Plugin Management,在右边面板点击Install。 安装完成后,我们需要选中相应安卓平台下的Pico VR套件,关于怎么安装PICO VR插件,请参…

PyCharm运行Nosetests并导出测试报告

1. Pycharm运行Nosetests PyCharm可以使用两种方法&#xff0c;运行Nosetests测试文件&#xff1a; 1) 图形用户界面GUI a) 在PyCharm中&#xff0c;选中测试文件&#xff0c;如Tests/test_demo.py b) 鼠标右键选择Run Nosetests in test_demo.py即可执行测试 注1&#xff…

极简c++(4)类的静态成员

静态数据成员 ::是作用域操作符&#xff01; #include<iostream> using namespace std;class Point{private:int x,y;public:point(int x 0,int y 0):x(x),y(y){}~point();int getX(){return x;}int getY(){return x;} }假设需要统计点的个数&#xff0c;考虑添加一个…

【mfc/VS2022】计图实验:绘图工具设计知识笔记

绘制曲线&#xff08;贝塞尔曲线&#xff09;&#xff1a; 转自&#xff1a;CDC 类 | Microsoft Learn 绘制一条或多条贝塞尔曲线。 BOOL PolyBezier(const POINT* lpPoints,int nCount);参数 lpPoints 指向包含曲线端点和控制点的 POINT 数据结构数组。 nCount 指定 lpPo…

使用kaliber与imu_utils进行IMU、相机+IMU联合标定

目录 1 标定工具编译 1.1 IMU标定工具 imu_utils 1.2 相机标定工具 kaliber 2 标定数据录制 3 开始标定 3.1 IMU标定 3.2 相机标定 3.3 相机IMU联合标定 4 将参数填入ORBSLAM的文件中 1 标定工具编译 1.1 IMU标定工具 imu_utils 标定IMU我们使用imu_utils软件进行标定…

如何使用前端包管理器(如npm、Yarn)?

聚沙成塔每天进步一点点 ⭐ 专栏简介 前端入门之旅&#xff1a;探索Web开发的奇妙世界 欢迎来到前端入门之旅&#xff01;感兴趣的可以订阅本专栏哦&#xff01;这个专栏是为那些对Web开发感兴趣、刚刚踏入前端领域的朋友们量身打造的。无论你是完全的新手还是有一些基础的开发…

Linux CentOS8安装gitlab_ce步骤

1 下载安装包 wget --content-disposition https://packages.gitlab.com/gitlab/gitlab-ce/packages/el/8/gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm/download.rpm2 安装gitlab yum install policycoreutils-python-utilsrpm -Uvh gitlab-ce-15.0.2-ce.0.el8.x86_64.rpm3 更新配…

Stm32_标准库_12_串口_发送数据

波特率&#xff1a;约定的传输速率&#xff0c;1000bps,1s发1000位 引脚 结构 数据帧的传输特点 代码&#xff1a; #include "stm32f10x.h" // Device header #include "Delay.h" #include "OLED.h"GPIO_InitTypeDef GPIO_InitStruct; USART…

2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合&#xff08;安监局&#xff09;特种作业人员操作证考试大纲和&#xff08;质检局&#xff09;特种设备作业人…

【算法-动态规划】两个字符串的删除操作-力扣 583

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

Idea创建springboot工程的时候,发现pom文件没有带<parent>标签

今天创建springboot工程&#xff0c;加载maven的时候报错&#xff1a; 这个问题以前遇到过&#xff0c;这是因为 mysql-connector-j 没有带版本号的原因&#xff0c;但是springboot的依赖的版本号不是都统一交给spring-boot-starter-parent管理了吗&#xff0c;为什么还会报错&…

Redis 集群 Redis 事务 Redis 流水线 Redis 发布订阅 Redis Lua脚本操作

Redis 集群 & Redis 事务 & Redis 流水线 & Redis 发布订阅 Redis 集群linux安装redis主从配置查看当前实例主从信息 Redis Sentinelsentinel Redis Cluster Redis 事务Redis 流水线Redis 发布订阅Redis Lua脚本操作 Redis 集群 linux安装redis 下载安装包&#…

五子棋(C语言实现)

目录 构思 1、主程序 2、初始化 3、游戏菜单 4、打印棋盘 6、玩家下棋 7、判断输赢 8、功能整合 人机下棋 完整版&#xff1a; game.h game.c text.c 测试功能代码 构思 五子棋不必多介绍了&#xff0c;大家小时候都玩过哈。 我们要通过程序实现这个小游戏&…

C++算法:最短回文串

题目 给定一个字符串 s&#xff0c;你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。 示例 1&#xff1a; 输入&#xff1a;s “aacecaaa” 输出&#xff1a;“aaacecaaa” 示例 2&#xff1a; 输入&#xff1a;s “abcd” 输…

Django框架集成Celery异步-【2】:django集成celery,拿来即用,可用操作django的orm等功能

一、项目结构和依赖 study_celery | --user |-- models.py |--views.py |--urls.py |--celery_task |--__init__.py |--async_task.py |-- celery.py | --check_task.py | --config.py | --scheduler_task.py | --study_celery | --settings.py | --manage.py 依赖&#xff1a…

ChatGPT

chatgpt使用地址 https://mycaht.top/#/chat 申请内测免费key https://github.com/chatanywhere/GPT_API_free 设置 接口地址设置改成 https://api.chatanywhere.com.cnAPI Key设置成申请出来的免费key 开始聊天

关于网络协议的若干问题(五)

1、DH 算法会因为传输随机数被破解吗&#xff1f; 答&#xff1a;DH 算法的交换材料要分公钥部分和私钥部分&#xff0c;公钥部分和其他非对称加密一样&#xff0c;都是可以传输的&#xff0c;所以对于安全性是没有影响的&#xff0c;而且传输材料远比传输原始的公钥更加安全。…

zabbix触发器与动作

一、触发器&#xff08;Trigger&#xff09; 1、概念&#xff1a; 在 Zabbix 中&#xff0c;触发器用于监测 Zabbix 监控系统中的各种指标和条件&#xff0c;并在特定条件满足时触发警报。&#xff08;触发器用于定义监控项的报警阈值&#xff09; 2、触发器对象&#xff1a…