☰
php实现微信小程序订阅消息推送(access_token获取缓存刷新)
2026/9/27 23:04:21 网站建设 项目流程

摘要

微信小程序的订阅消息功能具有多个优点,可以为开发者和用户带来便利和更好的体验。

以下是一些主要的优点:

个性化消息推送:订阅消息允许开发者向用户发送个性化的消息内容,根据用户的偏好和行为进行定制化推送,从而提供更有价值的信息。

降低打扰度:相对于模板消息,订阅消息更加注重用户隐私和兴趣,用户可以自主选择订阅自己感兴趣的内容,降低了不必要的打扰。

长期沟通:订阅消息不受时间限制,允许开发者与用户建立长期的沟通渠道,向他们传递重要信息、更新和促销等。

用户参与度提升:个性化的消息内容和定制化的推送可以提高用户的参与度和互动性,从而增强用户对小程序的粘性和忠诚度。

多行业适用:订阅消息适用于多种行业,包括新闻资讯、社交、电商、健康等,开发者可以根据自己的业务需求进行灵活应用。

统计和分析:微信提供了订阅消息的统计数据,开发者可以了解消息的送达率、点击率等数据,有助于优化消息内容和推送策略。

用户控制权:用户有权随时取消订阅,保留了用户的自主权,不会让用户感到被过度干扰。

简化用户操作:用户无需频繁打开小程序,即可获取相关信息,提供了更加便捷的获取方式。

如何发送订阅消息

微信提供了完善的开发文档,通过调用接口可以向指定的openid进行发送订阅消息:

代码

sendDyxx.php

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

<?php

namespaceMyWeChat;

classWeChatApi

{

// 刷新access_token

privatestaticfunctionrefreshAccessToken($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{

returnfalse;

}

}

// 获取新的access_token

privatestaticfunctiongetAccessTokenFromCache($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缓存文件

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_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;

}

}

// 发送订阅消息的接口

$url="https://api.weixin.qq.com/cgi-bin/message/subscribe/send?access_token=$access_token";

// 需要发送的消息体

$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']

]);

// 执行cURL

$response= curl_exec($ch);

// 判断发送结果

if(curl_errno($ch)) {

// 失败

echo'执行失败: '. curl_error($ch);

}else{

// 成功

echo'执行成功: '.$response;

}

// 关闭cURL

curl_close($ch);

}

}

// 小程序配置(APPID、APPSECRET)

$APPID='xxx';// 小程序APPID

$APPSECRET='xxx';// 小程序APPSECRET

// 小程序订阅消息配置(模板id、openid、模板字段)

$template_id="xxx";// 模板id

$openid="o9usm0bhIkcbAyxM0RzDXi9tjHhM";// 接收消息的openid

// 模板id对应的模板字段

$data_template= [

"character_string1"=> ["value"=>"2023-08-03"],

"thing4"=> ["value"=>"开发测试"]

];

// 执行静态方法

WeChatApi::sendMessageWithAccessToken($APPID,$APPSECRET,$template_id,$openid,$data_template);

?>

以上代码的优点显而易见,易扩展,易维护,易移植!而且是一个php文件解决了access_token的获取、缓存、刷新、更新缓存、配置、发送!

access_token的有效期是2小时,以上代码直接获取到access_token缓存到本地,然后每次请求直接读取本地的缓存,高效、快速、安全、效率!

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询