PHP+TP框架實現微信公衆號開發之發送模板消息

一:準備工作.

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);
}

 

 

 

這就是發送模板消息的過程,如果有錯誤,請大家指出

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章