要在微信小程序中实现订阅消息的推送,主要包括以下几个步骤:小程序端的订阅请求、后台服务器的消息发送。下面以 PHP 为例详细介绍如何开发这一功能。
1. 微信小程序端请求用户订阅消息
首先,在小程序端,用户操作时请求他们订阅消息。用户同意订阅后,小程序会返回给你一个结果,这样你就可以在后台发送订阅消息。
// 触发用户订阅
wx.requestSubscribeMessage({
tmplIds: ['your_template_id'], // 模板ID数组
success(res) {
if (res['your_template_id'] === 'accept') {
console.log('订阅成功');
// 可向后台发送请求,记录用户的订阅
wx.request({
url: 'https://yourserver.com/subscribe',
method: 'POST',
data: {
openid: wx.getStorageSync('openid'), // 获取用户的openid
template_id: 'your_template_id'
},
success(response) {
console.log('订阅记录保存成功');
}
});
}
},
fail(err) {
console.error('订阅失败', err);
}
});
2. 获取 access_token
在后台发送订阅消息之前,需要获取微信 access_token,这是调用微信API的凭证。
PHP代码获取 access_token:
function getAccessToken($appId, $appSecret) {
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appId}&secret={$appSecret}";
$response = file_get_contents($url);
$result = json_decode($response, true);
return $result['access_token'];
}
3. 发送订阅消息
在用户同意订阅后,你可以在需要时通过后台发送订阅消息。下面是使用 PHP 发送订阅消息的示例代码:
PHP代码发送订阅消息:
function sendSubscribeMessage($accessToken, $openId, $templateId, $page, $data) {
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token={$accessToken}";
$postData = json_encode([
'touser' => $openId,
'template_id' => $templateId,
'page' => $page,
'data' => $data
]);
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
// 示例调用
$appId = 'your_app_id';
$appSecret = 'your_app_secret';
$openId = 'user_openid';
$templateId = 'your_template_id';
$page = 'pages/index/index'; // 用户点击消息后的跳转页面
$data = [
'keyword1' => ['value' => '值1'],
'keyword2' => ['value' => '值2'],
// 依照模板参数要求填写
];
$accessToken = getAccessToken($appId, $appSecret);
$result = sendSubscribeMessage($accessToken, $openId, $templateId, $page, $data);
if ($result['errcode'] == 0) {
echo "订阅消息发送成功";
} else {
echo "订阅消息发送失败: " . $result['errmsg'];
}
4. 数据库记录(可选)
在实际应用中,你可能希望记录用户的订阅信息,以便后续操作。可以在用户同意订阅后,将 openid、template_id 等信息保存到数据库中。
function saveSubscription($openId, $templateId) {
// 假设你使用了 PDO 连接数据库
$db = new PDO('mysql:host=localhost;dbname=your_db', 'username', 'password');
$stmt = $db->prepare("INSERT INTO subscriptions (openid, template_id) VALUES (:openid, :template_id)");
$stmt->bindParam(':openid', $openId);
$stmt->bindParam(':template_id', $templateId);
$stmt->execute();
}
5. 定时发送(可选)
如果需要定时发送消息,可以结合 cron 作业或其他定时任务工具,自动触发 PHP 脚本发送订阅消息。
总结
1. 获取 access_token:使用小程序的 AppID 和 AppSecret 获取。
2. 发送订阅消息:通过 curl 请求微信 API,发送订阅消息到用户的小程序。
3. 用户订阅请求:在小程序端请求用户订阅,并保存订阅记录。
通过这些步骤,你可以在微信小程序中实现订阅消息的推送功能。