微信小程序在年初也是进行了升级.将原来的模板消息升级为订阅消息.也是在这几天研究了下.发现和公众号的模板消息有一种异曲同工的感觉.
废话不多说.来看下小程序发送订阅消息.
首先放上官方的文档 小程序订阅消息
首先.我们应该先去微信后台的订阅消息处选择适合自己的订阅模板.这里的话也是需要将模板id保存一下.
然后就是需要用到的微信的appid和appsecret.老生常谈的东西.这里就不多说了.参照文档.我们只需要将模板需要的参数和Appid和appsecret换取到的accesToken去请求微信的链接就可以了.代码放下面,很简单.
/**
* 发送模板消息
* $openid 用户的openid
* $money 金额 此处为模板需要的参数 自行替换
*/
public function sendSubMessage($openId,$money){
$params['touser'] = $openId;
$params['template_id'] = 'muR0TMElyOHUy9Gy2M7lUAc3LpF1yd-d1JU21PQrz_4'; //模板id
$params['page'] = "/pages/user/userMaintain?type=4"; // 小程序页面
$template = array(
'touser' => $params['touser'] ,
'template_id' => $params['template_id'],
'page' => $params['page'],
'data' => array(
'thing1' => array('value' => '维修订单'),
'amount2' => $money,
'thing3' => array('value' => '订单需维修费用')
)
);
$appid = db('config')->where(['name' => 'appid'])->value('value');
$appsecret = db('config')->where(['name' => 'appsearct'])->value('value');
$send_template_url = 'https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=' .$this->getAccessToken($appid,$appsecret);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $send_template_url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($template));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
/**
* 获取access_token
*/
public function getAccessToken()
{
$appId = db('config')->where(['name' => 'appid'])->value('value');
$appSecret = db('config')->where(['name' => 'appsearct'])->value('value');
$tokenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appId . "&secret=" . $appSecret;
$getArr = array();
$tokenArr = json_decode($this->send_post($tokenUrl, $getArr, "GET"));
$access_token = $tokenArr->access_token;
return $access_token;
}
/**
* 请求方法
*/
protected function send_post($url, $post_data, $method = 'POST')
{
$postdata = http_build_query($post_data);
$options = array(
'http' => array(
'method' => $method, //or GET
'header' => 'Content-type:application/x-www-form-urlencoded',
'content' => $postdata,
'timeout' => 15 * 60 // 超时时间(单位:s)
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
return $result;
}
这里自己踩过的坑总结一下.
1.小程序路径需要为存在的路径
2.data需要为json格式的数据
3.传入的消息需要注意长度限制,这个得具体看官方的限制.