php实现微信小程序订阅消息推送(access_token获取缓存刷新)
摘要微信小程序的订阅消息功能具有多个优点可以为开发者和用户带来便利和更好的体验。以下是一些主要的优点个性化消息推送订阅消息允许开发者向用户发送个性化的消息内容根据用户的偏好和行为进行定制化推送从而提供更有价值的信息。降低打扰度相对于模板消息订阅消息更加注重用户隐私和兴趣用户可以自主选择订阅自己感兴趣的内容降低了不必要的打扰。长期沟通订阅消息不受时间限制允许开发者与用户建立长期的沟通渠道向他们传递重要信息、更新和促销等。用户参与度提升个性化的消息内容和定制化的推送可以提高用户的参与度和互动性从而增强用户对小程序的粘性和忠诚度。多行业适用订阅消息适用于多种行业包括新闻资讯、社交、电商、健康等开发者可以根据自己的业务需求进行灵活应用。统计和分析微信提供了订阅消息的统计数据开发者可以了解消息的送达率、点击率等数据有助于优化消息内容和推送策略。用户控制权用户有权随时取消订阅保留了用户的自主权不会让用户感到被过度干扰。简化用户操作用户无需频繁打开小程序即可获取相关信息提供了更加便捷的获取方式。如何发送订阅消息微信提供了完善的开发文档通过调用接口可以向指定的openid进行发送订阅消息代码sendDyxx.php123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102?phpnamespaceMyWeChat;classWeChatApi{// 刷新access_tokenprivatestaticfunctionrefreshAccessToken($appid,$appsecret){$urlhttps://api.weixin.qq.com/cgi-bin/token?grant_typeclient_credentialappid$appidsecret$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{returnfalse;}}// 获取新的access_tokenprivatestaticfunctiongetAccessTokenFromCache($tokenFile){if(file_exists($tokenFile)) {$tokenDatainclude($tokenFile);if($tokenDatais_array($tokenData) isset($tokenData[access_token]) isset($tokenData[expires_at])) {return$tokenData;}}}// 更新access_token缓存文件privatestaticfunctionupdateAccessTokenCache($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);}// 发送订阅消息publicstaticfunctionsendMessageWithAccessToken($appid,$appsecret,$template_id,$openid,$data_template){$TOKEN_FILEaccess_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{echoAccess_Token刷新失败\n;return;}}// 发送订阅消息的接口$urlhttps://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token$access_token;// 需要发送的消息体$message_data [touser$openid,template_id$template_id,pagepages/read/read?aid360282,miniprogram_stateformal,langzh_CN,data$data_template];// 初始化cURL$ch curl_init();// 配置cURLcurl_setopt_array($ch, [CURLOPT_URL $url,CURLOPT_POST 1,CURLOPT_POSTFIELDS json_encode($message_data),CURLOPT_RETURNTRANSFER true,CURLOPT_HTTPHEADER [Content-Type: application/json]]);// 执行cURL$response curl_exec($ch);// 判断发送结果if(curl_errno($ch)) {// 失败echo执行失败: . curl_error($ch);}else{// 成功echo执行成功: .$response;}// 关闭cURLcurl_close($ch);}}// 小程序配置APPID、APPSECRET$APPIDxxx;// 小程序APPID$APPSECRETxxx;// 小程序APPSECRET// 小程序订阅消息配置模板id、openid、模板字段$template_idxxx;// 模板id$openido9usm0bhIkcbAyxM0RzDXi9tjHhM;// 接收消息的openid// 模板id对应的模板字段$data_template [character_string1 [value2023-08-03],thing4 [value开发测试]];// 执行静态方法WeChatApi::sendMessageWithAccessToken($APPID,$APPSECRET,$template_id,$openid,$data_template);?以上代码的优点显而易见易扩展易维护易移植而且是一个php文件解决了access_token的获取、缓存、刷新、更新缓存、配置、发送access_token的有效期是2小时以上代码直接获取到access_token缓存到本地然后每次请求直接读取本地的缓存高效、快速、安全、效率