基於php的微信公眾號模板訊息傳送還有遇到的問題
最近在做企業微信公眾開發,其實是簡單的做一個服務號群發和針對性傳送訊息給關注使用者的功能,相對於客服訊息和群發訊息,模板訊息無疑是最符合需求的。
這裡直接上程式碼把:
<?php
header('content-type:text/html;charset=utf-8');
define("TOKEN", "my_weixin"); //define your token
class Oauth {
//獲得全域性access_token
public function get_token(){//如果已經存在直接返回access_token
$appid = ''; //appid
$appsecret = '';
$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $appsecret;//請求地址
//2初始化curl請求
$ch = curl_init();
//3.配置請求引數
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳過證書檢查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 從證書中檢查SSL加密演算法是否存在
curl_setopt($ch, CURLOPT_URL, $url);//請求
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//不直接輸出資料
//4.開始請求
$res = curl_exec($ch);//獲取請求結果
if (curl_errno($ch)) {
var_dump(curl_error($ch));//列印錯誤資訊
}
//5.關閉curl
curl_close($ch);
$arr = json_decode($res, true);//將結果轉為陣列
$_SESSION['access_token'] = $arr['access_token'];//將access_token存入session中,可以不存,每次都獲得新的token
$_SESSION['expire_time'] = time() + 7200;
return $arr['access_token'];
}
//推送模板資訊 引數:傳送給誰的openid,客戶姓名,客戶電話,推薦樓盤(引數自定)
function sendMessage($openid,$customName,$customPhone,$reportBuilding) {
//獲取全域性token
$token = $this->get_token();
$url="https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=".$token;//模板資訊請求地址
//傳送的模板資訊(微信要求json格式,這裡為陣列(方便新增變數)格式,然後轉為json)
$post_data = array(
"touser"=>$openid, //推送給誰,openid
"template_id"=>"DrAuVKmBFSogNRKXXEXsmuXHpM_Tcj1MdN4xj6GsFiE", //微信後臺的模板資訊id
"url"=>"", //下面為預約看房模板示例
"data"=> array(
"first" => array(
"value"=>"您有新客戶,請及時檢視!",
"color"=>"#173177"
),
"keyword1"=>array(
"value"=>$customName, //傳的變數
"color"=>"#173177"
),
"keyword2"=>array(
"value"=>$customPhone,
"color"=>"#173177"
),
"keyword3"=>array(
"value"=>$reportBuilding,
"color"=>"#173177"
),
"keyword4"=> array(
"value"=>date('Y-m-d H:i:s'),
"color"=>"#173177"
),
"remark"=> array(
"value"=>"請及時聯絡客戶哦!",
"color"=>"#173177"
),
)
);
//將上面的陣列資料轉為json格式
$post_data = json_encode($post_data);
//傳送資料,post方式<br> //配置curl請求
}
}
$send = new Oauth();//例項化類
$send->sendMessage('o9ARg1uVOw0tNpSjhOsxC_ZktAcw','1','肖翔寧','3');//呼叫方法
?>
程式碼也是看網上的大佬的分享和介面文件,過程中遇到一個很蠢的問題,就是本來想著執行一次這個方法,但是訪問頁面的時候一直刷模板訊息直到把介面訪問次數給刷沒了。查了很久發現是把這個程式碼寫在了公眾號和伺服器配置的url的預設頁面,微信傳送訊息成功時候會把成功的訊息返回給url頁面,這是一次新的訪問,模板訊息會重新發送,所以不斷執行方法傳送訊息,把這個程式碼寫在其他頁面問題就解決了,相當尷尬