实现微信的订阅消息或模板消息API以实现实时通知,需要经过几个关键步骤,包括用户订阅、消息发送和接收消息事件。以下是具体实现流程:
1. 用户订阅消息
首先,需要让用户订阅消息。这通常通过前端代码触发一个授权请求来完成:
wx.requestSubscribeMessage({
tmplIds: ['您的模板ID'], // 从微信公众平台获取的模板ID数组
success (res) {
// 用户点击了“同意”按钮
if (res.errMsg === 'requestSubscribeMessage:ok') {
// 可以在这里调用后台接口,将用户订阅状态保存到数据库
}
},
fail (err) {
// 用户点击了“拒绝”按钮
console.log('用户拒绝订阅', err);
}
})
2. 配置模板消息
在微信公众平台中配置模板消息,获取模板ID。模板消息的内容和样式需要符合微信的要求。
3. 发送模板消息
当需要发送消息时,可以使用微信公众平台提供的API发送模板消息。这通常在服务器端完成:
使用云函数发送模板消息示例(Node.js):
const cloud = require('wx-server-sdk')
cloud.init()
exports.main = async (event, context) => {
const wxContext = cloud.getWxContext()
try {
const result = await cloud.openapi.subscribeMessage.send({
touser: event.openId, // 用户的OpenID
templateId: '您的模板ID',
data: {
'thing1': {
'value': '您的数据',
'color': '#173177'
},
// 其他模板数据
},
page: '/index', // 用户点击消息跳转的小程序页面
miniprogramState: 'developer', // 跳转小程序类型
})
return result
} catch (e) {
console.error(e)
}
}
使用服务器发送模板消息示例(PHP):
use EasyWeChat\Factory;
$options = [
'app_id' => 'your-app-id',
'secret' => 'your-app-secret',
'token' => 'your-token',
'aes_key' => 'your-encoding-aes-key',
];
$app = Factory::officialAccount($options);
$app->template_message->send([
'touser' => '用户的OpenID',
'template_id' => '您的模板ID',
'url' => '用户点击消息跳转的URL',
'data' => [
'User' => 'Dear',
'Date' => '2024-08-17',
'Content' => 'Your message content',
],
]);
4. 接收消息事件
当用户触发某些事件(如提交投诉或建议)时,小程序服务器需要接收这些事件并处理。这通常通过监听微信公众平台的事件消息来完成。
接收事件示例(Node.js):
// 在小程序的逻辑服务中监听事件
cloud.event.subscribe('submit_message', async (event) => {
// 处理事件,例如发送模板消息
const result = await cloud.openapi.subscribeMessage.send({
// 发送模板消息的参数
})
return result
})
接收事件示例(PHP):
// 在处理微信公众平台请求的脚本中
$app->server->push(function ($message) {
if ($message['MsgType'] === 'event') {
// 处理事件,例如用户提交投诉或建议
// 发送模板消息
$app->template_message->send([
// 发送模板消息的参数
]);
}
});
5. 测试和调试
在开发过程中,使用微信开发者工具进行测试和调试,确保消息发送和接收功能正常。
注意事项
- 确保遵守微信官方文档中关于模板消息的所有规定和限制。
- 用户订阅消息后,才能向用户发送模板消息。
- 模板消息的内容需要提前在微信公众平台中配置并通过审核。
- 服务器配置应确保安全,避免滥用模板消息发送功能。
通过上述步骤,您可以实现微信小程序的订阅消息或模板消息API,以实现实时通知的功能。