小程序发送公众号模版信息
发表时间:2020-10-19
发布人:葵宇科技
浏览次数:31
小程序的发送模版信息功能,经过修改,只能发送订阅信息,如需向公众号一样发送模版信息,需满足以下条件
一、微信开放平台花300元开通认证,认证通过后、去管理中心、小程序、绑定小程序(小程序登入账号就是微信公众号的账号and密码)
二、在公众号中绑定对应的小程序
三、在公众号中基本配置-服务器配置(启用-注意,启用此配置后,公众号自定义菜单会失效,需要自己开发对应的功能)
配置如下图
四、在服务器中上图地址创建url接口getGzhConfig方法,及相关代码
//公众号服务器配置url
public function getGzhConfig(){
$timestamp = input('get.timestamp');
$nonce = input('get.nonce');
$token = 'cmxx';//自定义,对应令牌token名
$signature = input('get.signature');
$array = array($timestamp, $nonce, $token);
sort($array);
$stmstr = implode('', $array);
$stmstr = sha1($stmstr);
$echostr = input('get.echostr');
if($stmstr == $signature && $echostr){
echo $echostr;
exit;
} else {
$this->responseMsg();
}
}
//发送响应消息(暂只做关注处理,保存关注用户的信息,openid unionid,nickname等)
public function responseMsg()
{
$postArr = file_get_contents("php://input");
$postObj = simplexml_load_string($postArr);
$type = strtolower($postObj->MsgType);
//关注和向公众号发送消息是两个不同的事件
//因此可以通过获取到的事件类型来决定回复什么内容
switch ($type) {
//关注事件回复内容
case 'event':
if (strtolower($postObj->Event) == 'subscribe') {
$this->getUserInfo($postObj->FromUserName);
}
break;
default:
break;
}
}
//用户关注时,通过openId获取用户信息
public function getUserInfo($openid){
$token = $this->getWxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=".$token."&openid=".$openid."&lang=zh_CN";
$res = $this->curl($url);
$userGzh = UserGzhModel::where('openid',$openid)->find();
if(empty($userGzh)){
UserGzhModel::create($res);
}else{
UserGzhModel::where('openid',$openid)->update($res);
}
//发送模版信息-关注公众号
$template_id = "IXAHnaj1ZyOlWAoQu9CqMkfVQIzS0suHbfojhNiIDFQ";
$strFirstVal = '您好,您已通xxxxx';
$keyword1Val = $res['nickname'];
$keyword2Val = getTimeData6(date("Y-m-d H:i:s"));
$keyword3Val = 'aaa盒';
$remark = '新人立赠6元优惠,赶紧开启您的点餐之旅吧!充值多多,优惠多多!';
//参数说明:$openid = 用户openid $template_id=模版id $model=自定义类型 $strFirstVal=模版参数.....
$this->sendMsg2AttGZH($res['openid'],$template_id,$strFirstVal,$keyword1Val,$keyword2Val,$keyword3Val,$remark);
}
//此方法只需提前运行一次,所有关注公众号的用户信息
//获取所有关注公众号的用户信息,保存在数据库中,只用做一次,把旧的数据保存即可,新的用户关注时自动保存
public function getGzhUser(){
$token = $this->getWxAccessToken();
$url = "https://api.weixin.qq.com/cgi-bin/user/get?access_token=".$token;
$res = $this->curl($url);
foreach($res['data']['openid'] as $k=>$vo) {
// p($vo);die;
$this->getUserInfo($vo);
}
}
/**
* 获取公众号access_token
*/
public function getWxAccessToken(){
$appId = constant("APPIDGZH");
$appSecret = constant("SECRETGZH");
$access_token = Cache::get('wx_access_token:'.$appId);
if($access_token){
return $access_token;
}else{
//1.请求url地址
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret;
$res = $this->curl($url);
if(isset($res['errcode']) && $res['errcode']!=0){
return ('获取access_token出错');
}
$access_token = $res['access_token'];
Cache::set('wx_access_token:'.$appId,$access_token,5400);
return $access_token;
}
}
public function curl($url,$data = null){
$curl = curl_init();
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_TIMEOUT, 500);
// 为保证第三方服务器与微信服务器之间数据传输的安全性,所有微信接口采用https方式调用,必须使用下面2行代码打开ssl安全校验。
// 如果在部署过程中代码在此处验证失败,请到 http://curl.haxx.se/ca/cacert.pem 下载新的证书判别文件。
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_URL, $url);
if (!empty($data)){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
$res = curl_exec($curl);
curl_close($curl);
$json_obj = json_decode($res,true);
return $json_obj;
}
通过以上的方法,就能把关注过公众号的openid保存在数据库中,当用户触发小程任务,需要发送模版信息时,就先通过小程序用户信息,从数据库中查询到该用户的公众号openid,然后通过此openid发送模版信息即可,怎么发送模版信息,在这里就不在描叙。