发送订阅消息之前你先去申请模板 , 公共的直接选用就可以, 没有符合的你还得申请,审核时间有点久,
然后根据你申请的模板来填写模板需要的参数就好了, 前提是用户要授权接收订阅消息 , 不然用户是收不到的 , 如果想要以后可以实现自动发送, 可以引导用户永久授权 . 这样就不用每次都需要授权,因为现在订阅消息只有一次性订阅消息
//根据小程序里面的模板消息来设置
$msg = [
'time3' => ['value'=> date('Y-m-d H:i:s', time())],
'thing4' => ['value'=> $userName['name']],
'thing2' => ['value'=> $userInfo['content']],
'phrase8' => ['value'=> "报价消息"],
'thing7' => ['value'=> "您当前有{$count}条未读消息, 可能需要尽快处理"],
];
用户的openid
$sendSubscribeMessage[] = $this->sendSubscribeMessage($userOpneid['wx_openid'],
'Mpfk11CE1uTnElfGbsSQ9Y6wjejdXtg2fhSpxvQYSRw', 'pages/myPrice/index', $msg);
//access_token
$access_token = $this->getAccessToken();
//请求url
$url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token ;
/***
* @param $touser //需要接受订阅消息的openid
* @param $template_id //模板ID
* @param $page //点击返回页面路径
* @param $dataArray //订阅格式请参照小程序订阅消息模板中的格式
* @return array
* 订阅消息模板
*/
public function sendSubscribeMessage($touser, $template_id, $page, $dataArray)
{
//access_token 一般都存在缓存 ,
$access_token = $this->getAccessToken();
//请求url
$url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' . $access_token ;
//发送内容
$data = [] ;
$data['touser'] = $touser; //用户的openid
$data['template_id'] = $template_id; //所需下发的订阅模板id
//点击模板卡片后的跳转页面,仅限本小程序内的页面。支持带参数,(示例index?foo=bar)。该字段不填则模板无跳转。
$data['page'] = $page;
//模板内容,格式形如 { "key1": { "value": any }, "key2": { "value": any } }
$data['data'] = $dataArray;
//跳转小程序类型:developer为开发版;trial为体验版;formal为正式版;默认为正式版
$data['miniprogram_state'] = 'trial';
$data['lang'] = 'zh_CN';
$json_data = json_encode($data);
$http = new Http();
return [
'openid' => $touser,
'data' => $http->curlRequest($url, $json_data)//这里面就是个curl请求 , 转成数组返回
];
}
/***
* @return mixed
* 获取access_token
*/
protected function getAccessToken()
{
$AccessToken = Cache::get('accessToken');
if ($AccessToken) return $AccessToken; else{
$model = new Http();
$access_token = $model->curlRequest('https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$this->appid.'&secret='.$this->appsecret);
$access_token = $access_token['access_token'];
Cache::set('accessToken',$access_token, 5400);
return Cache::get('accessToken');
}
}