下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法
下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法
下拉↓ 有源码 使用方法 下拉↓ 有源码 使用方法
微信发送模板消息
通常是微信公众号发送给关注人的信息
需要准备:
- https://api.weixin.qq.com/cgi-bin/token
说明:这个地址是获取公众号access_token的官方接口地址
A.需要带一个默认参数grant_type=client_credential(这个照用就可以 官方标配参数)
B.公众号的appid 如:wx1b608b0bee000002
C.公众号的secret 如:0945ed246f6b5fc3fd1e3c00000000ae - 微信公众号需要申请需要的模板 也就有了模板ID
知道模板结构: - 准备好待接收模板信息的用户的openid
如:粉丝1:ojaFp6PS03gSFUubQmoRcRdxKk3A 粉丝2:ojaFp6PS03gSFUubQmoRcRdxXXXXX
至此:准备工作就绪
发送模板消息过程:
第一步:根据第一步准备好的参数 get方式请求接口获取access_token
如:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx1b608b0bee000002&secret=0945ed246f6b5fc3fd1e3c00000000ae
得到结果:
{
“access_token”: “25_y5EvpM964jz8isCHh3YwZNegcfdYSW4IZTGSU3rfrWi_6KWwZBu5_E7QOuBxDGl4lxvpIdcoXcY_9PjdT_2usKBVHWTLxGJ1WGPmWgE8EOM_YWnjNj-V5FrrgaICLIfABAOXU”,
“expires_in”: 7200
}
说明:access_token的失效为7200秒,为了避免繁琐的请求接口数据,可以把access_token存储为本地json文件,redis获取其他自己常用的临时保存。
第二步:根据模板消息数据模型封装数据:get形式传参access_token post形式发送数据。
话不多说 上干货 代码奉上 后面有使用方法说明
class sendMsg{
private $appid = "";
private $secret = "";
public $template='';
public function __construct($appid,$secret)
{
$this->appid = $appid;
$this->secret = $secret;
}
public function getAccessToken(){
// 缓存文件名
$file_path = "/access_token.txt";
$str = '';
if(is_file($file_path)) {
$str = file_get_contents($file_path);//将整个文件内容读入到一个字符串中
$str = str_replace("\r\n", "<br />", $str);
}
$data = json_decode($str); //转换为json格式
if ($data->expire_time < time() or ! $data->expire_time) {
//token过期的情况
$temp_url = 'https://api.weixin.qq.com/cgi-bin/token?';
$temp_url .= 'grant_type=client_credential';
$temp_url .= '&appid='.$this->appid;
$temp_url .= '&secret='.$this->secret;
$res = $this->https_request($temp_url);
$res = json_decode($res, true); // 对 JSON 格式的字符串进行编码
$access_token = $res['access_token'];
if ($access_token) {
$tempdata['expire_time'] = time() + 3600; //保存1小时
$tempdata['access_token'] = $access_token;
$fp = fopen($file_path, "w"); //只写文件
fwrite($fp, json_encode($tempdata)); //写入json格式文件
fclose($fp); //关闭连接
}
} else {
$access_token = $data->access_token;
}
return $access_token;
}
/**
* sendMsg constructor.
* @param $touser openid数组
* @param $url 点击模板信息跳转地址
* @param $template_id 模板id
*/
public function sendMessage($touser,$url,$template_id){
$access_token = $this->getAccessToken();
//模板消息请求URL
$wxurl = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $access_token;
//遍历发送微信消息
foreach ($touser as $value) {
$data = $this->getDataArray($value,$template_id,$url);
$json_data = json_encode($data);//转化成json数组让微信可以接收
$res_json = $this->https_request($wxurl, urldecode($json_data));//请求开始
$res = json_decode($res_json, true);
if ($res['errcode'] == 0 && $res['errcode'] == "ok") {
//成功
echo $res_json;
}else{
//失败
echo $res_json;
}
}
}
/**
* 获取发送数据数组
* @param $value 用户openid
* @param $template_id 模板id
* @param $url 点击模板跳转地址
* @return array 返回 支持微信接口的模板数据
*/
function getDataArray($value,$template_id,$url)
{
$template =$this->template;
$data = array(
'touser' => $value, //要发送给用户的openid
'template_id' => $template_id,//改成自己的模板id,在微信后台模板消息里查看
'url' => $url, //自己网站链接url
'data' =>$template
);
return $data;
}
public function updateTemplate($id){
$this->template = $this->baseTemplate($id);
}
/**
* 模板库
* @param $id
* @return mixed
*/
public function baseTemplate($id){
$data = array(
//一个模板
'tjJ4m-gtcTaMOh3GQuVKEj-OZcUBtEDmpaty4leJH9I'=> array(
'first' => array(
'value' => "first value",
'color' => ""//白色
),
'keyword1' => array(
'value' => "keyword1 value",
'color' =>''//"#FF0000"//红色 "#FF0000"//红色
),
'keyword2' => array(
'value' => "keyword2 value",
'color' => ''//"#FF0000"//红色"#00FF00"//绿色
),
'keyword3' => array(
'value' => "keyword3 value",
'color' => ''//"#0000FF"//蓝色
),
'remark' => array(
'value' => "\n remark value >>>",
'color' => "#0000FF"//蓝色 "#FFFF00"//黄色
),
),
//第二个模板
'id'=> array(
'first' => array(
'value' => "first value",
'color' => "#000"
),
'keyword1' => array(
'value' => "keyword1 value",
'color' => "#f00"
),
'keyword2' => array(
'value' => "keyword2 value",
'color' => "#173177"
),
'keyword3' => array(
'value' => "keyword3 value",
'color' => "#3d3d3d"
),
'remark' => array(
'value' => "\n remark value >>>",
'color' => "#3d3d3d"
),
)
);
return $data[$id];
}
//curl请求函数,微信都是通过该函数请求
function https_request($url, $data = null)
{
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
}
//调用方法
//这里是你要发送粉丝的openid
$touser = array('ojaFp6PS03gSFUubQmoRcRdxKk3A','ojaFp6PS03gSFUubQmoRcRdxKk3A');
//这个地址是点击消息跳转的页面
$url='';
$appid = 'wx1b608b0bee479ba2';
$secret = '0945ed246f6b5fc3fd1e3c1633dd07ae';
$a = new sendMsg($appid,$secret);
$template_id = 'tjJ4m-gtcTaMOh3GQuVKEj-OZcUBtEDmpaty4leJH9I';
//重构模板提示信息
$a->updateTemplate($template_id);
$a->template['first']['value'] = '恭喜您,您的预约审核通过!';
$a->template['keyword1']['value'] = '赵大夫';
$a->template['keyword2']['value'] = '2019年9月17日11:45';
$a->template['keyword3']['value'] = '尽快完成付款,我们就可以调配相关人员了!';
$a->template['remark']['value'] = "\n 点击进入订单详细 >>>";
//发送
$a->sendMessage($touser,$url,$template_id);
至此 模板消息发布完成
你的成功了吗 有问题留言吧