1. 前置准备
- 获取小程序 Access Token:
- 调用微信接口 https://api.weixin.qq.com/cgi-bin/token,获取小程序 Access Token。
- 需要提供 appid 和 secret。
- 配置订阅消息模板:
- 在微信小程序后台 > 订阅消息中,申请订阅模板,获取模板 ID(template_id)。
- 用户授权订阅:
- 在小程序中通过 wx.requestSubscribeMessage 接口,让用户授权订阅消息。
2. 推送订阅消息流程
- 获取 Access Token。
- 调用微信订阅消息接口 https://api.weixin.qq.com/cgi-bin/message/subscribe/send,发送订阅消息。
3. PHP 实现代码
以下是完整的 PHP 示例代码,包含详细注释。
代码实现
$toUser, // 用户 OpenID
'template_id' => $templateId, // 模板 ID
'page' => $page, // 跳转页面路径
'data' => $data, // 模板数据
];
// 发送 POST 请求
$options = [
'http' => [
'header' => "Content-type: application/json\r\n",
'method' => 'POST',
'content' => json_encode($postData),
],
];
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
$result = json_decode($response, true); // 解析 JSON 响应
if ($result['errcode'] == 0) {
echo "Message sent successfully!";
} else {
die("Failed to send message: " . $result['errmsg']); // 错误处理
}
}
// 示例:推送订阅消息
$accessToken = getAccessToken(); // 获取 Access Token
$toUser = "user_openid"; // 用户 OpenID
$templateId = "your_template_id"; // 模板 ID
$data = [ // 模板数据
"thing1" => ["value" => "测试标题"], // 对应模板中的字段
"date2" => ["value" => "2023-10-01"], // 根据模板字段配置
"thing3" => ["value" => "测试内容"],
];
sendSubscribeMessage($accessToken, $toUser, $templateId, $data);
?>
4. 详细说明
1. 获取 Access Token
- 调用 https://api.weixin.qq.com/cgi-bin/token 接口,传入 appid 和 secret。
- 返回的 access_token 用于后续接口调用。
2. 发送订阅消息
- 调用 https://api.weixin.qq.com/cgi-bin/message/subscribe/send 接口,传入以下参数:touser: 用户 OpenID。template_id: 订阅消息模板 ID。page: 跳转页面路径(可选)。data: 模板数据,字段需与模板中的字段对应。
3. 错误处理
- 如果 API 返回的 errcode 不为 0,表示调用失败,需根据 errmsg 进行排查。
5. 模板数据示例
假设模板 ID 为 1234567890,模板内容为:
标题:{{thing1.DATA}}
日期:{{date2.DATA}}
内容:{{thing3.DATA}}
对应的 data 数据为:
$data = [
"thing1" => ["value" => "测试标题"],
"date2" => ["value" => "2023-10-01"],
"thing3" => ["value" => "测试内容"],
];
6. 注意事项
- 用户授权:发送订阅消息前,用户必须在小程序中授权订阅消息。
- 模板字段:模板数据字段需与小程序后台的模板字段一致。
- Access Token 缓存:Access Token 有效期为 2 小时,建议缓存并复用。
通过以上步骤和代码,你可以在 PHP 中实现微信小程序订阅消息的推送功能。如果有其他问题,欢迎随时提问!
本文暂时没有评论,来添加一个吧(●'◡'●)