文章目录
思路
目前微信小程序是没办法长期订阅的,除了什么教育、交通、医疗行业外。
那么想实现长期订阅,首先就要在开放平台绑定微信公众号和微信小程序。
用户注册小程序的同时,引导用户关注公众号。
如果用户不关注公众号,那么依然无法给用户长期发送消息
如果不适用于兄弟们,那就不用往下看了。
总结一下:
①:用户注册小程序,用户对于小程序的openid和unionid入库。
②:引导用户关注公众号,根据数据库中用户的unionid,更新用户对于公众号的openid信息。
③:公众号发送消息,需要用到用户在公众号中的openid。
④:公众号发送模板消息,然后在消息中跳转回小程序即可。
普及知识!
先普及一下知识。微信开放平台和微信公众平台是两个不同的平台。
微信开放平台上可以绑定公众号和小程序。
微信公众平台上可以选择公众号登录或者小程序登录,进而进入它们的管理后台。
公众号的appid和appsecret和小程序的不一样!
公众号的openid和小程序的openid不一样!
但是,绑定在同一个开放平台上的公众号的unionid和小程序的unionid是相同的。
准备工作
- 将公众号和小程序绑定在同一个开放平台中。
- 公众号管理后台菜单中,广告与服务-小程序管理菜单下,添加要发送消息的小程序。小程序中好像也需要关联一下。
- 在公众号后台设置与开发-基本设置菜单中,启用服务器配置。
启用服务器配置的方法 - 在广告与服务-模板消息中添加消息模板。(很easy,不过多介绍。)
- 检车设置与开发-接口权限中,是否有
获取用户基本信息的权限。这个一定要有。
代码示例 这里以php的tp框架为例
以下代码,我们只需要看event事件触发时候的那一部分即可。
//路由
//发送公众号通知
Route::post('sendPublicMessage', 'home/Wechat/sendPublicMessage');
//公众号服务器配置以及回调接口
Route::any('subscribe', 'home/Wechat/subscribe');
//控制器代码-- Wechat类中
<?php
use think\Db;
use think\facade\Log;
use think\Request;
private $appId = 'your appid'; //公众号appid
private $appSecret = 'your appsecret';//公众号appsecret
class Wechat
{
/**
* Description:获取token
* @return mixed
* @date 2024/4/26 14:12
* @author zls
*/
public function getAccessToken()
{
//获取access_token
$tokenAccessUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={
$this->appId}&secret={
$this->appSecret}";
$access_token_json = file_get_contents($tokenAccessUrl);
$access_token_array = json_decode($access_token_json, true);
return $access_token_array['access_token'] ?: '';
}
/**
* Description:公众号回调接口
* @param Request $request
* @return \think\response\Json
* @date 2024/4/25 17:29
* @author zls
*/
public function subscribe(Request $request)
{
//接收参数,验签的标识
$echoStr = $request->param('echostr');
if (!empty($echoStr)) {
//验签-配置服务器配置
$this->valid($request->param());
echo $echoStr;
exit;
} else {
$this->responseMsg($request->param());
exit;
}
}
/**
* Description:公众号服务器验签
* @param $data
* @return bool
* @date 2024/4/26 9:40
* @author zls
*/
public function valid($data)
{
$echoStr = $data['echoStr'];
$signature = $data['signature'];
$timestamp = $data['timestamp'];
$nonce = $data['nonce'];
$token = "123456";//公众号后台自定义的token
$tmpArr = array($token, $timestamp, $nonce);
sort($tmpArr, SORT_STRING);
$tmpStr = implode($tmpArr);
$tmpStr = sha1($tmpStr);
if ($tmpStr == $signature) {
return true;
//不可以在调用的方法中echo $echoStr; 必须要在主方法中echo;
// echo $echoStr;
// exit;
} else {
Log::info("验签失败");
return json(false);
}
}
/**
* Description:响应消息
* @return void
* @date 2024/4/26 9:56
* @author zls
*/
public function responseMsg($data)
{
$postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
if (!empty($postStr)) {
$postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
$RX_TYPE = trim($postObj->MsgType);
//处理用户发送到公众号的各种类型的消息。
//其实我们只需要关注(event)事件接口即可!别的不用管也行。只是给大家普及一下。
switch ($RX_TYPE) {
//关注、取关等事件
case "event":
$result = $this->receiveEvent($postObj);
break;
//用户发送文字消息
case "text":
$result = $this->receiveText($postObj);
break;
//用户发送图片消息 以下不再一一注释
case "image":
$result = $this->receiveImage($postObj);
break;
case "location":
$result = $this->receiveLocation($postObj);
break;
case "voice":
$result = $this->receiveVoice($postObj);
break;
case "video":
$result = $this->receiveVideo($postObj);
break;
case "link":
$result = $this->receiveLink($postObj);
break;
default:
$result = "unknown msg type: " . $RX_TYPE;
break;
}
Log::info('Result' . $result);
echo $result;
} else {
echo "";
exit;
}
}
/**
* Description:发送公众号消息推送
* @param Request $request
* @return void
* @date 2024/4/8 10:19
* @author zls
*/
public function sendPublicMessage(Request $request)
{
//获取access_token
$access_token = $this->getAccessToken();
//接收者(用户)的OpenID
$toUserOpenId = $request->param('openId');
//模板ID
$templateId = $request->param('templateId');
//模板内容,这里以键值对形式表示
$data = array(
'thing1' => array('value' => '内容1', 'color' => '#173177'),
'thing4' =

博客介绍了微信小程序实现长期订阅的思路,需在开放平台绑定公众号和小程序,引导用户关注公众号,还普及了微信开放平台和公众平台知识,说明了准备工作,最后给出了以php的tp框架为例的代码示例。
最低0.47元/天 解锁文章
432





