<?php
namespace app\api\controller;
use think\Controller;
use think\Request;
/**
* 订阅消息推送
*/
class Send extends Controller
{
protected $appid;
protected $appSecret;
public function __construct(Request $request = null)
{
parent::__construct($request);
$this->appid = '********'; //你的小程序appid
$this->appSecret = '*********'; //小程序密钥
}
// 发送 POST 请求的函数
function send_post($url, $post_data){
$options = array(
'http' => array(
'method' => 'POST',
'header' => 'Content-type:application/json',
'content' => $post_data,
'timeout' => 60
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
// 小程序 appID 和 appSecret 获取 token
public function getAccessToken($appid,$appsecret){
$url = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=' . $appid . '&secret=' . $appsecret;
$html = file_get_contents($url);
$output = json_decode($html, true);
$access_token = $output['access_token'];
return $access_token;
}
/**
*open_id用户的open_id
*template_id模板的id
*$data内容
*page需要跳转的小程序的页面
*/
public function send($open_id,$template_id,$data,$page){
$post_data = array(
// 用户的 openID,可用过 wx.getUserInfo 获取
"touser" => $open_id,
// 小程序后台申添加的订阅消息模板 ID
"template_id" => $template_id,
// 点击模板消息后跳转到的页面,可以传递参数
"page" => $page,
// 发送给用户的数据
"data" => $data
);
// file_put_contents('dingyue2.txt',date('Y-m-d H:i:s').json_encode($post_data, true).PHP_EOL, FILE_APPEND);
$appid=$this->appid;
$appsecret=$this->appSecret;
// // 这里替换为你的 appID 和 appSecret
$url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=".$this->getAccessToken($appid,$appsecret);
$data = json_encode($post_data, true);
$return = $this->send_post($url, $data);
// 下方是在根目录下面生成一个文本记录发送的状态
// file_put_contents('dingyue.txt',json_encode($return, true).PHP_EOL, FILE_APPEND);
}
}
发送的类到这里就结束了
这里开始调用
/**直播主题{{thing1.DATA}} 开播时间 {{time2.DATA}}
温馨提示 {{thing3.DATA}}
主播名称 {{thing4.DATA}}
*/
public function send($title,$time,$desc,$user_name,$open_id,$id){
/****************推送消息************************/
$send = new Send();
//data内容根据自己的需要去小程序·后台看,此处我i用的是开播提醒
$data = [
'thing1'=>['value'=>mb_substr($title,0,10)],//主题
'time2'=> ['value'=>$time],//时间
'thing3'=>['value'=>$desc],//提示
'thing4'=>['value'=>$user_name],//主播名称
];
$page = 'pagesc/livePlayer/live-player?id='.$id;
//此处的参数·对应上面的发送类里面的顺序
$send->send($open_id,'g9f1JXx0kxMcX6WTHAw4HPTvePqQLM1i1ZEliZi1l44',$data,$page);
/*******************推送消息*********************/
}
到此就结束,我是用thinkphp5.0,此方法直接复制出去即可使用,但注意小程序中一定要同意订阅消息,否则接受不到消息