最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

php實現(xiàn)微信小程序訂閱消息推送(access_token獲取緩存刷新)

 更新時間:2023年08月06日 11:01:23   作者:TANKING  
這篇文章主要為大家介紹了php實現(xiàn)微信小程序訂閱消息推送包含access_token獲取緩存刷新示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

摘要

微信小程序的訂閱消息功能具有多個優(yōu)點,可以為開發(fā)者和用戶帶來便利和更好的體驗。

以下是一些主要的優(yōu)點:

個性化消息推送: 訂閱消息允許開發(fā)者向用戶發(fā)送個性化的消息內(nèi)容,根據(jù)用戶的偏好和行為進行定制化推送,從而提供更有價值的信息。

降低打擾度: 相對于模板消息,訂閱消息更加注重用戶隱私和興趣,用戶可以自主選擇訂閱自己感興趣的內(nèi)容,降低了不必要的打擾。

長期溝通: 訂閱消息不受時間限制,允許開發(fā)者與用戶建立長期的溝通渠道,向他們傳遞重要信息、更新和促銷等。

用戶參與度提升: 個性化的消息內(nèi)容和定制化的推送可以提高用戶的參與度和互動性,從而增強用戶對小程序的粘性和忠誠度。

多行業(yè)適用: 訂閱消息適用于多種行業(yè),包括新聞資訊、社交、電商、健康等,開發(fā)者可以根據(jù)自己的業(yè)務(wù)需求進行靈活應(yīng)用。

統(tǒng)計和分析: 微信提供了訂閱消息的統(tǒng)計數(shù)據(jù),開發(fā)者可以了解消息的送達(dá)率、點擊率等數(shù)據(jù),有助于優(yōu)化消息內(nèi)容和推送策略。

用戶控制權(quán): 用戶有權(quán)隨時取消訂閱,保留了用戶的自主權(quán),不會讓用戶感到被過度干擾。

簡化用戶操作: 用戶無需頻繁打開小程序,即可獲取相關(guān)信息,提供了更加便捷的獲取方式。

如何發(fā)送訂閱消息

微信提供了完善的開發(fā)文檔,通過調(diào)用接口可以向指定的openid進行發(fā)送訂閱消息:

代碼

sendDyxx.php

<?php
namespace MyWeChat;
class WeChatApi
{
    // 刷新access_token
    private static function refreshAccessToken($appid, $appsecret)
    {
        $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=$appid&secret=$appsecret";
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
        $response = curl_exec($ch);
        curl_close($ch);
        $data = json_decode($response, true);
        if (isset($data['access_token'])) {
            return $data['access_token'];
        } else {
            return false;
        }
    }
    // 獲取新的access_token
    private static function getAccessTokenFromCache($tokenFile)
    {
        if (file_exists($tokenFile)) {
            $tokenData = include($tokenFile);
            if ($tokenData && is_array($tokenData) && isset($tokenData['access_token']) && isset($tokenData['expires_at'])) {
                return $tokenData;
            }
        }
    }
    // 更新access_token緩存文件
    private static function updateAccessTokenCache($tokenFile, $access_token, $expires_in)
    {
        $expires_at = time() + $expires_in - 60;
        $tokenData = "<?php\nreturn array('access_token' => '$access_token', 'expires_at' => $expires_at);\n";
        file_put_contents($tokenFile, $tokenData);
    }
    // 發(fā)送訂閱消息
    public static function sendMessageWithAccessToken($appid, $appsecret, $template_id, $openid, $data_template)
    {
        $TOKEN_FILE = 'access_token.php';
        $tokenData = self::getAccessTokenFromCache($TOKEN_FILE);
        if ($tokenData && $tokenData['expires_at'] > time()) {
            $access_token = $tokenData['access_token'];
        } else {
            $access_token = self::refreshAccessToken($appid, $appsecret);
            if ($access_token) {
                self::updateAccessTokenCache($TOKEN_FILE, $access_token, 7200);
            } else {
                echo "Access_Token刷新失敗\n";
                return;
            }
        }
        // 發(fā)送訂閱消息的接口
        $url = "https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=$access_token";
        // 需要發(fā)送的消息體
        $message_data = [
            "touser" => $openid,
            "template_id" => $template_id,
            "page" => "pages/read/read?aid=360282",
            "miniprogram_state" => "formal",
            "lang" => "zh_CN",
            "data" => $data_template
        ];
        // 初始化cURL
        $ch = curl_init();
        // 配置cURL
        curl_setopt_array($ch, [
            CURLOPT_URL => $url,
            CURLOPT_POST => 1,
            CURLOPT_POSTFIELDS => json_encode($message_data),
            CURLOPT_RETURNTRANSFER => true,
            CURLOPT_HTTPHEADER => ['Content-Type: application/json']
        ]);
        // 執(zhí)行cURL
        $response = curl_exec($ch);
        // 判斷發(fā)送結(jié)果
        if (curl_errno($ch)) {
            // 失敗
            echo '執(zhí)行失敗: ' . curl_error($ch);
        } else {
            // 成功
            echo '執(zhí)行成功: ' . $response;
        }
        // 關(guān)閉cURL
        curl_close($ch);
    }
}
// 小程序配置(APPID、APPSECRET)
$APPID = 'xxx'; // 小程序APPID
$APPSECRET = 'xxx'; // 小程序APPSECRET
// 小程序訂閱消息配置(模板id、openid、模板字段)
$template_id = "xxx"; // 模板id
$openid = "o9usm0bhIkcbAyxM0RzDXi9tjHhM"; // 接收消息的openid
// 模板id對應(yīng)的模板字段
$data_template = [
    "character_string1" => ["value" => "2023-08-03"],
    "thing4" => ["value" => "開發(fā)測試"]
];
// 執(zhí)行靜態(tài)方法
WeChatApi::sendMessageWithAccessToken($APPID, $APPSECRET, $template_id, $openid, $data_template);
?>

以上代碼的優(yōu)點顯而易見,易擴展,易維護,易移植!而且是一個php文件解決了access_token的獲取、緩存、刷新、更新緩存、配置、發(fā)送!

access_token的有效期是2小時,以上代碼直接獲取到access_token緩存到本地,然后每次請求直接讀取本地的緩存,高效、快速、安全、效率!

技術(shù)拓展

如果你有大量的openid,那么你需要結(jié)合異步消息隊列的技術(shù)來實現(xiàn)群發(fā),例如Redis異步消息隊列,定時任務(wù)等在后臺執(zhí)行一個任務(wù)去實現(xiàn)群發(fā),就可以實現(xiàn)批量openid的推送,可以研究一下!

以上就是php實現(xiàn)微信小程序訂閱消息推送(access_token獲取緩存刷新)的詳細(xì)內(nèi)容,更多關(guān)于php微信小程序訂閱消息推送的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • PHP通過pem文件校驗簽名異常問題解決

    PHP通過pem文件校驗簽名異常問題解決

    在對接第三方支付過程中,支付成功異步回調(diào)時,校驗簽名,一直無法通過,最后經(jīng)過排查,是引用秘鑰文件時,報錯了,本文給大家分享PHP通過pem文件校驗簽名異常問題解決方法,需要的朋友可以參考下
    2023-09-09
  • PHP中使用strpos函數(shù)實現(xiàn)屏蔽敏感關(guān)鍵字功能

    PHP中使用strpos函數(shù)實現(xiàn)屏蔽敏感關(guān)鍵字功能

    這篇文章主要介紹了PHP中使用strpos函數(shù)實現(xiàn)屏蔽敏感關(guān)鍵字功能,本文用在發(fā)布文章保存到數(shù)據(jù)庫時前攔截敏感關(guān)鍵,需要的朋友可以參考下
    2014-08-08
  • ThinkPHP5+UEditor圖片上傳到阿里云對象存儲OSS功能示例

    ThinkPHP5+UEditor圖片上傳到阿里云對象存儲OSS功能示例

    這篇文章主要介紹了ThinkPHP5+UEditor圖片上傳到阿里云對象存儲OSS功能,結(jié)合實例形式分析了ThinkPHP5使用富文本編輯器UEditor實現(xiàn)圖片上傳到阿里云的相關(guān)操作技巧,需要的朋友可以參考下
    2019-08-08
  • yii2 數(shù)據(jù)庫讀寫分離配置示例

    yii2 數(shù)據(jù)庫讀寫分離配置示例

    本篇文章主要介紹了yii2 數(shù)據(jù)庫讀寫分離配置示例,數(shù)據(jù)庫讀寫分離是在網(wǎng)站遇到性能瓶頸的時候最先考慮優(yōu)化的步驟,有興趣的可以了解一下。
    2017-02-02
  • Laravel5.1 框架模型遠(yuǎn)層一對多關(guān)系實例分析

    Laravel5.1 框架模型遠(yuǎn)層一對多關(guān)系實例分析

    這篇文章主要介紹了Laravel5.1 框架模型遠(yuǎn)層一對多關(guān)系,結(jié)合實例形式分析了laravel5.1框架模型遠(yuǎn)層一對多關(guān)系相關(guān)原理、實現(xiàn)方法與操作注意事項,需要的朋友可以參考下
    2020-01-01
  • 百度地圖API使用方法詳解

    百度地圖API使用方法詳解

    百度地圖api是由javascript語言編寫的,在使用之前需要把api引用到頁面中,本篇文章給大家介紹百度地圖api使用方法,需要的朋友可以參考下
    2015-08-08
  • 在PHP中使用X-SendFile頭讓文件下載更快

    在PHP中使用X-SendFile頭讓文件下載更快

    這篇文章主要介紹了在PHP中讓文件下載更快的一個方法,那就是使用X-SendFile頭實現(xiàn),主流量的服務(wù)器都支持這個頭文件,的朋友可以參考下
    2014-06-06
  • PHP與jquery實時顯示網(wǎng)站在線人數(shù)實例詳解

    PHP與jquery實時顯示網(wǎng)站在線人數(shù)實例詳解

    在線人數(shù)最簡單的就是直接利用js調(diào)用php了,這樣可以顯示出有多少人訪問了本站,如果要在用戶未刷新頁面的狀態(tài)實時顯示用戶在線人數(shù),我們可以利用jquery ajax來實現(xiàn),需要的朋友可以參考下
    2016-12-12
  • 微信自定義菜單的處理開發(fā)示例

    微信自定義菜單的處理開發(fā)示例

    在微信5.0以前,自定義菜單是作為一種內(nèi)測資格使用的,只有少數(shù)公眾帳號擁有菜單,因此出現(xiàn)很多企業(yè)為了弄到菜單不惜重金求購?,F(xiàn)如今,一大批帳號從訂閱號轉(zhuǎn)為服務(wù)號,很多都是奔著自定義菜單去的。今天我們就來簡單研究下微信自定義菜單的處理。
    2015-04-04
  • smarty模板引擎基礎(chǔ)知識入門

    smarty模板引擎基礎(chǔ)知識入門

    這篇文章主要介紹了smarty模板引擎基礎(chǔ)知識入門,較為詳細(xì)的分析了smarty的基本概念并實例分析了相關(guān)的基本用法,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03

最新評論

衡阳县| 尚义县| 温泉县| 营山县| 达孜县| 晋中市| 博兴县| 北碚区| 吴忠市| 广灵县| 兴安县| 华宁县| 资阳市| 南乐县| 五指山市| 延安市| 碌曲县| 甘南县| 兴安县| 平陆县| 商洛市| 双流县| 建宁县| 昌吉市| 高青县| 左云县| 拉孜县| 探索| 大邑县| 山东省| 三台县| 横峰县| 安龙县| 伊春市| 上蔡县| 平江县| 安平县| 广丰县| 开平市| 正镶白旗| 广州市|