一:準備工作.
1.將需要使用到的微信配置放在config.php配置文件中方便獲取.(我使用的是微信測試號)
return array(
//'配置項'=>'配置值'
'appID'=>'wxaf7d6c*******e6',
'appSecret'=>'0bc58d56476*********546ab81d5e2'
);
二:獲取使用微信公衆號基本接口所需要的access_token,並全局緩存.
我在tp框架Application/Home/Common/function.php中定義公共方法getAccessToken方法獲取access_token並全局緩存.
//該公共方法獲取和全局緩存基本接口需要使用的access_token(該access_token爲基本接口使用的access_token)
function getAccessToken(){
//我們將access_token全局緩存在文件中,每次獲取的時候,先判斷是否過期,如果過期重新獲取再全局緩存
//我們緩存的在文件中的數據,包括access_token和該access_token的過期時間戳.
//獲取緩存的access_token
$access_token_data = json_decode(F('access_token'),true);
//判斷緩存的access_token是否存在和過期,如果不存在和過期則重新獲取.
if($access_token_data !== null && $access_token_data['access_token'] && $access_token_data['expires_in'] > time()){
return $access_token_data['access_token'];
}else{
//重新獲取access_token,並全局緩存
$curl = curl_init();
var_dump($curl);
curl_setopt($curl,CURLOPT_URL,'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='
.C('appID').'&secret='.C('appSecret'));
curl_setopt($curl,CURLOPT_RETURNTRANSFER,true);
//獲取access_token
$data = json_decode(curl_exec($curl),true);
var_dump($data);
if($data != null && $data['access_token']){
//設置access_token的過期時間,有效期是7200s
$data['expires_in'] = $data['expires_in'] + time();
//將access_token全局緩存,快速緩存到文件中.
F('access_token',json_encode($data));
//返回access_token
return $data['access_token'];
}else{
exit('微信獲取access_token失敗');
}
}
}
三:發送模板消息.
1.發送模版消息需要以post的方式請求url。
我在tp框架Application/Home/Common/function.php中定義公共方法curl_post方法發送模版消息.
//curl使用post方式請求url,參數爲$arr是post方式傳送的數據,爲數組類型,$url爲需要請求的url
function curl_post($arr,$url){
//初始化
$curl = curl_init();
//設置抓取的url
curl_setopt($curl, CURLOPT_URL, $url);
//設置頭文件的信息作爲數據流輸出
curl_setopt($curl, CURLOPT_HEADER, 1);
//設置獲取的信息以文件流的形式返回,而不是直接輸出。
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
//設置post方式提交
curl_setopt($curl, CURLOPT_POST, 1);
//設置post數據
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($arr));
//執行命令
$data = curl_exec($curl);
//關閉URL請求
curl_close($curl);
//顯示獲得的數據
print_r($data);
}
2.在類中定義POST數據,並請求,成功發送模板消息.
//發送模版消息
public function sendTemplateMessage(){
//接受模板消息的用戶openid
$openid = 'oGRO5wHvvpLXxTu0-9p0WalaQauo';
//模板消息id
$template_id = 'yb2etwrd8GJ-n5zxTaRuyPWcUOSCFB7-hdtUYlNax4M';
//獲取access_token,該access_token爲基本接口使用的access_token
$access_token_arr = getAccessToken();
//設置模板消息
$array = array();
//設置接受消息用戶的openid
$array['touser'] = $openid;
//設置模板消息id
$array['template_id'] = $template_id;
//設置點擊模板消息跳轉的url,因爲我是測試,所以寫的是百度
$array['url'] = 'http://www.baidu.com';
//設置模板消息
$data = array();
$data['first'] = array();
$data['first']['value'] = '恭喜你測試成功';
$data['first']['color'] = '#173177';
$array['data'] = $data;
//調用公共方法curl_post,發送模板消息
curl_post($array,'https://api.weixin.qq.com/cgi-bin/message/template/send?access_token='.$access_token_arr);
}
這就是發送模板消息的過程,如果有錯誤,請大家指出