要在微信小程序中实现订阅消息的推送,主要包括以下几个步骤:小程序端的订阅请求、后台服务器的消息发送。下面以 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. 用户订阅请求:在小程序端请求用户订阅,并保存订阅记录。
通过这些步骤,你可以在微信小程序中实现订阅消息的推送功能。