1. 程式人生 > >php三方網站使用微信公眾號推送文章

php三方網站使用微信公眾號推送文章



//獲取accesstoken 的方法
public function index(){ $appId = 'wxd0e50fe967dccccc'; $appSecret = 'd7f6be12ce41b60ss0f45054';//虛擬的,不要用 $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=".$appId."&secret=".$appSecret; $ch = curl_init();//初始化curl curl_setopt($ch, CURLOPT_URL,$url); //要訪問的地址 curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);//跳過證書驗證 curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); // 從證書中檢查SSL加密演算法是否存在 $data = json_decode(curl_exec($ch)); if(curl_errno($ch)){ var_dump(curl_error($ch)); //若錯誤列印錯誤資訊 } var_dump($data); //列印資訊 curl_close($ch);//關閉curl }

獲取accesstoken 的第二種方法,將accesstoken存在text檔案中每隔2小時重新整理一次

<?php
class TokenUtil {
    //獲取access_token並儲存到token.txt檔案中
    public static function build_access_token(){
        $ch = curl_init(); //初始化一個CURL物件
        curl_setopt($ch, CURLOPT_URL, "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=wx2e9f8435ebdb2856&secret=288db114f02b2b5cdc249ca75a4bf1cc");//設定你所需要抓取的URL
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);//設定curl引數,要求結果是否輸出到螢幕上,為true的時候是不返回到網頁中,假設上面的0換成1的話,那麼接下來的$data就需要echo一下。
        $data = json_decode(curl_exec($ch));
        if($data->access_token){
            $token_file = fopen("token.txt","w") or die("Unable to open file!");//開啟token.txt檔案,沒有會新建
            fwrite($token_file,$data->access_token);//重寫tken.txt全部內容
            fclose($token_file);//關閉檔案流
        }else{
            echo $data->errmsg;
        }
        curl_close($ch);
    }
    
    //設定定時器,每兩小時執行一次build_access_token()函式獲取一次access_token
    public static function set_interval(){
        ignore_user_abort();//關閉瀏覽器仍然執行
        set_time_limit(0);//讓程式一直執行下去
        $interval = 7200;//每隔一定時間執行
        do{
            build_access_token();
            sleep($interval);//等待時間,進行下一次操作。
        }while(true);
    }
    
    //讀取token
    public static function read_token(){
        $token_file = fopen("token.txt", "r") or die("Unable to open file!");
        $rs = fgets($token_file);
        fclose($token_file);
        return $rs;
    }
}
?>

 

當然ACCESS_TOKEN是會過期的
自己需要整合這個api自動獲取
我們學習過程中做測試可以直接獲取貼上上去。
當然呼叫這個介面需要配置IP白名單
如果獲取過程中出現一串英文,裡面有IP地址,就說明你還沒配置IP白名單
你需要進入公眾號後臺安全中心-IP白名單-貼上提示的IP地址即可

如果你要給指定的openID群發模板訊息
例如你公司做教育培訓服務的
有3個學生報了你們公司的某課程培訓班
你需要在上課前15分鐘主動向每個學生的微信推送模板訊息通知上課
那麼這三個學生需要關注你的服務號
你還要獲取到這三個學生的openID
然後存入陣列中,遍歷陣列傳送即可。

獲取openID的方法
1、配置回撥域名
進入公眾號,介面許可權,找到網頁服務,網頁獲取使用者基本資訊

進去修改你的域名即可

新建oauth.php

<?php
  //獲取微信access_token
function getaccess_token(){
    $code = $_GET['code'];
    $appid = '自己的appid';
    $appsecret = '自己的appsecret';
    $url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$appid}&secret={$appsecret}&code={$code}&grant_type=authorization_code";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);
    $data = curl_exec($ch);
    curl_close($ch);
    echo $data;
}
getaccess_token();

 

配置使用者要訪問的網頁
https://open.weixin.qq.com/co...

REDIRECT_URI是回撥連結
就是上面的oauth.php的地址
例如你的域名是
www.baidu.com
你把oauth.php上傳到根目錄
那麼URL轉碼的回撥連結就是
http://www.baidu.com/oauth.php

回撥連結需要URL轉碼
給大家提供一個轉碼工具

http://tool.oschina.net/encod...

 

最終的回撥連結是
http%3A%2F%2Fwww.baidu.com%2Foauth.php

例如的你APPID是:wx66666666666666
整個使用者要訪問的網頁就是
https://open.weixin.qq.com/co...://www.baidu.com/oauth.php&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

使用者訪問的網頁也需要URL轉碼
最終的網址是:
https%3A%2F%2Fopen.weixin.qq.com%2Fconnect%2Foauth2%2Fauthorize%3Fappid%3Dwx66666666666666%26redirect_uri%3Dhttp%3A%2F%2Fwww.baidu.com%2Foauth.php%26response_type%3Dcode%26scope%3DSCOPE%26state%3DSTATE%23wechat_redirect

然後用微信訪問上面的最終的網址,就會返回一串JSON資料,裡面有openid
要想獲得3個學生的openid那麼就要這三個學生點進去,獲取發給你

下面就是模板訊息推送給指定的openid的程式碼
我就以這三個學生的openid為例

<?php
$ACCESS_TOKEN = "替換你的ACCESS_TOKEN";//ACCESS_TOKEN
//openid陣列
$touser = [
    'ouD7BuHpIKRXPIz7pdrwI9IwDRCU',
    'ouD7BuI36wSUZgteyiydmDrldQLU',
    'ouD7BuLejq7R4Vbuyh41bH778cg0'];
//模板訊息請求URL
$url = "https://api.weixin.qq.com/cgi-bin/message/template/send?access_token=" . $ACCESS_TOKEN;

//遍歷傳送微信訊息
foreach ($touser as $value) {
    $data = getDataArray($value);
    $json_data = json_encode($data);//轉化成json陣列讓微信可以接收
    $res = https_request($url, urldecode($json_data));//請求開始
    $res = json_decode($res, true);
    if ($res['errcode'] == 0 && $res['errcode'] == "ok") {
        echo "傳送成功!<br/>";
    }
}

//獲取傳送資料陣列
function getDataArray($value)
{
    $data = array(
        'touser' => $value, //要傳送給使用者的openid
        'template_id' => "mfopDNUlvoBGGsPLB-d_nrfL8Je92xnTq5vk5ZBxL-w",//改成自己的模板id,在微信後臺模板訊息裡檢視
        'url' => "http://mp.weixin.qq.com/s/8UWPqHVa8PReWZp-No0ebA", //自己網站連結url
        'data' => array(
            'first' => array(
                'value' => "親愛的同學,您有考試提醒,請查閱。",
                'color' => "#000"
            ),
            'keyword1' => array(
                'value' => "2017下半年教師資格證面試",
                'color' => "#f00"
            ),
            'keyword2' => array(
                'value' => "2018-1-6",
                'color' => "#173177"
            ),
            'keyword3' => array(
                'value' => "請看您的准考證",
                'color' => "#3d3d3d"
            ),
            'keyword4' => array(
                'value' => "教師資格證試講",
                'color' => "#3d3d3d"
            ),
            'keyword5' => array(
                'value' => "答辯,選題,結構化",
                'color' => "#3d3d3d"
            ),
            'remark' => array(
                'value' => "\n現在是列印准考證時間,請您在考試前列印准考證,戳進來可以檢視詳情>>>",
                'color' => "#3d3d3d"
            ),
        )
    );
    return $data;
}


//curl請求函式,微信都是通過該函式請求
function https_request($url, $data = null)
{
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
    if (!empty($data)) {
        curl_setopt($curl, CURLOPT_POST, 1);
        curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
    }
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($curl);
    curl_close($curl);
    return $output;
}



?>

 新建test.php
拷貝程式碼
修改你的
ACCESS_TOKEN
修改你的學生的3個openid
修改你的模板ID
模板ID是什麼?
就是你要推送的那個卡片的模板
例如支付成功模板,上課通知模板,發貨模板....