[]
接入微信小程序消息推送服务,可以两种方式选择其一:
开发者服务器接收消息推送
开发者需要按照如下步骤完成:
在执行服务器地址有效性验证的过程中,需依据接口文档来设定服务器配置,进而实现业务逻辑;随后,接收消息和事件,这一步骤的第一步便是完成服务器配置的填写。
进入小程序管理后台,点击「开发」选项卡,随后在「开发设置」里找到「消息推送」功能。管理员需扫描二维码激活消息服务,并在此过程中输入服务器地址(即URL)、令牌()以及消息加密密钥(Key)等相关信息。
开发者有权限挑选消息的加密与解密手段,包括明文模式(这是预设选项)、兼容模式以及安全模式。此外,他们还可以决定消息数据的呈现形式,如选择XML格式(这也是默认选项)或者JSON格式。
选择模式及服务器设置一经提交,即刻产生效果,开发者需仔细填写与挑选。若需更改加密手段或数据格式,务必预先设定相关代码,具体操作指南请参阅《消息加解密说明》。
第二步:验证消息的确来自微信服务器
开发者一旦提交了相关信息,微信服务器便会向所提供的服务器地址URL发起GET请求,此次请求中包含的参数详见表格所示。
参数描述
微信加密签名,结合了开发者填写的参数和请求中的参数、参数。
时间戳
随机数
随机字符串
开发者需对请求内容进行核查(具体校验方法见下文)。若经核实,当前GET请求确实源自微信的服务器,且需直接返回相应参数,则接入将有效,标志着开发者接入成功;反之,若不符合条件,接入将视为失败。加密与校验的具体流程阐述如下:
对三个参数进行字典序排列,然后将排列后的参数字符串连接起来,执行SHA1加密操作。开发者获取到加密后的字符串后,可以将其与预设的值进行比对,以此确认该请求是否源自微信。
验证URL有效性成功后即接入生效,成为开发者。
检验的PHP示例代码:
private function checkSignature() { $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr, SORT_STRING); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr );
PHP示例代码下载:下载
第三步:接收消息和事件
一旦特定用户行为触发事件通知(比如用户向小程序客服发送信息、或是开启对话等),微信的服务器便会将相关信息或事件的数据包,通过POST请求的形式,传输至开发者事先设定的URL地址。随后,开发者可根据自己的业务需求,对相关信息进行处理和回应。
微信服务器在将用户信息传递至开发者服务器后,若在五秒钟内未收到任何反馈,便会中断连接,并尝试重新发送请求,这一过程最多会尝试三次。在调试阶段,若用户未能接收到预期的响应,应检查消息处理是否出现了超时问题。至于重试消息的重复排除,建议采用特定的方法,对于包含特定内容的消息,推荐使用特定方式进行排重;而对于事件类型消息,则推荐采用特定的组合方式进行排重。
服务器在接收到请求后,必须按照以下规定进行响应,唯有如此,微信服务器才会对此请求不予处理,同时也不会触发重试机制。若非如此,将导致出现严重的错误提示信息。具体说明请参考以下内容:
请直接给出回应(建议采用此方法),若为空字符串(即长度为0的空字符串,非结构体中字段内容为空),若接口文档中明确规定了应返回的内容,则需按照文档中的说明进行返回。
当微信客服信息遭遇特定状况时,小程序对话界面将向用户推送一条系统通知,内容为:“当前该小程序客服暂不能提供服务,请您稍候片刻再尝试联系。”
开发者在5秒内未回复任何内容开发者回复了异常数据
若开发者意图提升系统安全等级,可在开发者平台设置消息加密功能,从而确保用户向小程序发送的信息以及小程序主动回应用户的信息均保持加密状态,具体操作及加密解密细节请参阅相关消息加密说明。
云函数接收消息推送
需开发者工具版本大于 1.02.,目前需
小程序一旦接入云开发功能,便能够通过云函数接收消息的推送,目前这一功能主要针对的是客服消息的推送。
接入步骤如下:
在开发者工具内完成配置信息的填写,随后将配置信息上传至云函数,这是处理消息流程的第一步。
在项目的主目录中创建一个名为 temp---.json 的消息推送设置文件,填写完毕后,通过鼠标右键点击该文件,选择执行上传配置的操作。
配置文件格式如下(以客服消息推送配置为例):
{ "enable": true, "callbacks": [ { "msgType": 1, "functionName": "云函数名", "env": "环境ID" } ] }
字段说明:
写好后,右键该文件,选择上传配置。
第二步:云函数中处理消息
当云函数被激活时,其接收的参数应当遵循接口所规定的 JSON 结构,该结构采用统一的 JSON 格式,并且不支持使用 XML 格式。
以客服消息为例,接收到客服消息推送时, 结构如下:
{ "FromUserName": 此代码序列不得进行任何修改。, "ToUserName": "wx3d289323f5900f8e", "Content": "测试", "CreateTime": 1555684067, "MsgId": 此代码“49d72d67b16d115e7935ac386f2f0fa41535298877”与时间戳“1555684067”相对应。, "MsgType": "text" }
当前情况下,可以激活客服信息发送功能来给予回应,以下是一个示例:接收到信息后,统一以“已接收”作为反馈。
// 云函数入口文件 const cloud = require('wx-server-sdk') cloud.init() // 云函数入口函数 exports.main = async (event, context) => { const awaitCloud的OpenAPI模块中,customerServiceMessage函数被调用来发送,具体操作是通过执行send方法来实现的。 touser: wxContext.OPENID, msgtype: 'text', text: { content: '收到', }, }) return 'success' }