公众号开发实践:用PHP实现通过接口自定义微信公众号菜单

news2024/11/23 18:42:46

在这里插入图片描述

🏆作者简介,黑夜开发者,CSDN领军人物,全栈领域优质创作者✌,CSDN博客专家,阿里云社区专家博主,2023年6月CSDN上海赛道top4。
🏆数年电商行业从业经验,历任核心研发工程师,项目技术负责人。
🏆本文已收录于PHP专栏:PHP进阶实战教程。
🎉欢迎 👍点赞✍评论⭐收藏

文章目录

  • 🚀一、介绍
  • 🚀二、实现步骤
    • 🔎第一步:获取access_token
    • 🔎第二步:定义菜单结构
    • 🔎第三步:调用接口创建菜单
  • 🚀三、总结


在这里插入图片描述

🚀一、介绍

本文将介绍如何使用PHP来通过接口自定义微信公众号菜单。我们将创建一个包含三个主菜单和两个二级菜单的微信公众号菜单。其中,主菜单包括“旅游线路”,“我的目的地”和“服务中心”。而“我的目的地”下面包含五个二级菜单:“徒步团”,“自由行”。“服务中心”下面包含四个二级菜单:“我的预定”,“关于我们”。由于后台开启了开发者模式,所以必须通过接口自定义菜单。

在这里插入图片描述

🚀二、实现步骤

以下是实现该微信公众号菜单的步骤:

🔎第一步:获取access_token

首先,我们需要获取access_token,这是使用微信接口的前提条件。在调用接口之前,我们需要通过以下URL获取access_token:

https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=YOUR_APPID&secret=YOUR_APPSECRET

其中,YOUR_APPID为你的微信公众号的AppID,YOUR_APPSECRET为你的微信公众号的AppSecret。

使用PHP代码获取access_token的示例:

$appid = "YOUR_APPID";
$secret = "YOUR_APPSECRET";

$url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" . $appid . "&secret=" . $secret;

$response = file_get_contents($url);
$json = json_decode($response, true);

$access_token = $json['access_token'];

🔎第二步:定义菜单结构

接下来,我们需要定义菜单的结构。根据题目中的描述,我们将定义一个包含三个主菜单的菜单结构,并在其中添加相应的二级菜单。

$menu = [
    'button' => [
        [
            'name' => '旅游线路',
            'type' => 'click',
            'key' => 'reservations'
        ],
        [
            'name' => '我的目的地',
            'sub_button' => [
                [
                    'name' => '徒步团',
                    'type' => 'view',
                    'url' => 'https://example.com/kyoto'
                ],
                [
                    'name' => '自由行',
                    'type' => 'view',
                    'url' => 'https://example.com/osaka'
                ],
                // 其他目的地二级菜单
            ]
        ],
        [
            'name' => '服务中心',
            'sub_button' => [
                [
                    'name' => '我的预定',
                    'type' => 'view',
                    'url' => 'https://example.com/mybookings'
                ],
                [
                    'name' => '关于我们',
                    'type' => 'view',
                    'url' => 'https://example.com/aboutus'
                ],
                // 其他服务中心二级菜单
            ]
        ]
    ]
];

以上代码创建了一个包含三个主菜单的菜单结构,并在其中添加了“我的目的地”和“服务中心”的二级菜单。你可以根据自己的需求,在对应位置添加其他菜单项。

🔎第三步:调用接口创建菜单

最后,我们将使用获取到的access_token和定义的菜单结构,调用微信接口来创建菜单。

$url = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $access_token;

$options = [
    'http' => [
        'method'  => 'POST',
        'header'  => 'Content-type: application/json',
        'content' => json_encode($menu)
    ]
];

$context  = stream_context_create($options);
$result = file_get_contents($url, false, $context);

if ($result) {
    echo "菜单创建成功!";
} else {
    echo "菜单创建失败!";
}

以上代码使用POST方法调用微信接口,在请求头中设置Content-Type为application/json,并将菜单结构转换为JSON格式作为请求的内容。如果菜单创建成功,则会输出“菜单创建成功!”;否则,输出“菜单创建失败!”。

在这里插入图片描述

🚀三、总结

通过以上步骤,我们可以使用PHP来实现用接口自定义微信公众号菜单。首先获取access_token,然后定义菜单结构,并最终调用接口创建菜单。

在这里插入图片描述

希望本文对大家有所帮助!如有任何疑问,请随时留言。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1190289.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Apache DolphinScheduler如何完全设置东八区?

默认情况 为了兼容全世界不同时区,Apache DolphinScheduler 使用的是 UTC 0 时区,包括保存到数据库表中的数据时区,以及展示到页面上的时区。 如果我们想在页面上看到东八区时间,则需要在页面上手动选择上海时区,如下…

小程序订单中心path设置本次审核不通过,审核原因:小程序尚未发布,无法审核。

小程序尚未发布,无法审核。 先按照这篇文章把小程序审核通过,小程序版本审核未通过,需在开发者后台「版本管理—提交审核——小程序订单中心path」设置订单中心页path,请设置后再提交代码审核 小程序审核通过后,发布…

2023.11.09 homework

4年级数学:不会做就作图,画出来,简单化就容易懂 2023.11.09 homework (2)-CSDN博客

MySQL代码子查询续集

dept表: emp表: -- 查询每个部门的信息(包括:部门名,编号,地址)和人员数量 -- 1.将两张表结合起来,筛选出部门名,编号,地址 tips: 表.* 表示将该表所有列都显示出来&#xff…

基于SpringBoot+Vue的婚恋相亲交友系统

基于SpringBootVue的婚恋相亲交友系统~ 开发语言:Java数据库:MySQL技术:SpringBootMyBatisVue工具:IDEA/Ecilpse、Navicat、Maven 系统展示 主页 管理员界面 摘要 基于SpringBootVue的婚恋相亲交友系统是一个现代化的、高效的交…

【算法设计】回溯法算法设计——骑士游历问题(C++实现)

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 更多算法分析与设计知识专栏&#xff1a;算法分析&#x1f525; 给大家跳…

【19】c++11新特性 —>线程异步

什么是异步&#xff1f; async的两种方式 //方式1 async( Function&& f, Args&&... args ); //方式2 async( std::launch policy, Function&& f, Args&&... args );函数参数&#xff1a; f:任务函数 Args:传递给f的参数 policy:可调用对象f的…

小解List的使用【C++】

小解List的使用【C】 一. List1.1. 与vector的不同1.2 与vector的使用不同1.2.1 迭代器失效1.2.2. insert1.2.3 erase1.2.4 sort1.3. 其他接口 补充迭代器容器与迭代器的关系迭代器的类型 一. List 学习了STL&#xff0c;也已经到了List的内容 因为List与string以及vector比起…

【Kurbernetes资源管理】陈述式资源管理方式

陈述式 一、 理论部分1.1 管理K8s资源的基本方法1.1.1 陈述式资源管理方式1.1.2声明式资源管理方式1.1.3 GUI式资源管理方法 1.2 陈述式资源管理方式1.2.1 Kubelet工具简介1.2.2 kubectl 的基本语法1.2.3 Kubectl工具的自动补全功能 1.3 Kubernetes Service1.4 Service 的类型(…

Python教程之字典(Dictionary)操作详解

文章目录 前言一、创建字典二、访问字典里的值三、访问字典里的值四、删除字典元素五、字典键的特性六、字典内置函数&方法七、字典练习代码关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Py…

11-09 周四 CNN 卷积神经网络基础知识

11-09 周四 CNN 卷积神经网络 时间版本修改人描述2023年11月9日09:38:12V0.1宋全恒新建文档 简介 学习一下CNN&#xff0c;卷积神经网络。使用的视频课程。视觉相关的任务&#xff1a; 人脸识别 卷积网络与传统网络的区别&#xff1a; <img altimage-20231109094400591 s…

soildworks2022如何快速更改草图基准面?

1.有时候拉伸切除的时候会显示“重建模型错误”&#xff0c;原因为切除的方向有问题&#xff0c;可以通过拉切除箭头的切除方向来解决&#xff1b; 2.有时候一个面需要正面切一部分&#xff0c;背面再切一部分&#xff0c;不是很好整&#xff0c;那么就得更改草图基准面&#x…

MySQL中表的增删查改(进阶),超详细!

目录 一、数据库的约束 1、约束类型 2、NULL约束 3、UNIQUE&#xff1a;唯一约束 4、DEFAULT&#xff1a;默认值约束 5、PRIMARY KEY&#xff1a;主键约束&#xff08;主键只能定义一个&#xff0c;NOT NULL 和 UNIQUE 的结合&#xff09; 6、FOREIGN KEY&#xff1a;外键约…

在Google Kubernetes集群创建分布式Jenkins(二)

上一篇博客在Google Kubernetes集群创建分布式Jenkins(一)-CSDN博客我介绍了如何在GCP的K8S集群上部署一个分布式的Jenkins&#xff0c;并实现了一个简单的Pipeline的运行。 在实际的开发中&#xff0c;我们通常都会按照以下的CICD流程来设置Pipeline 在我司的实际实践中&…

手把手 Golang 实现静态图像与视频流人脸识别

说起人脸识别&#xff0c;大家首先想到的实现方式应该是 Python 去做相关的处理&#xff0c;因为相关的机器学习框架&#xff0c;库都已经封装得比较好了。但是我们今天讨论的实现方式换成 Golang&#xff0c;利用 Golang 去做静态图像和视频流人脸识别的相应处理。 静态图像人…

【leaflet】1. 初见

▒ 目录 ▒ &#x1f6eb; 导读需求开发环境 1️⃣ 概念概念解释特点 2️⃣ 学习路线图3️⃣ html示例&#x1f6ec; 文章小结&#x1f4d6; 参考资料 &#x1f6eb; 导读 需求 要做游戏地图了&#xff0c;看到大量产品都使用的leaflet&#xff0c;所以开始学习这个。 开发环境…

IP可视对讲实时录制系统

介绍 软件架构 技术支持 CallRecored介绍 IP可视对讲实时录制系统设计了数据库表&#xff0c;并完成了数据库建模&#xff0c;采用了视频编解码技术&#xff0c;高效网络传输&#xff0c;磁盘高效读写技术&#xff0c;以及提供开放接口。 系统客户端采用扁平化UI&#xff0c;…

说说对高阶组件的理解?应用场景?

一、是什么 高阶函数&#xff08;Higher-order function&#xff09;&#xff0c;至少满足下列一个条件的函数 接受一个或多个函数作为输入输出一个函数 在React中&#xff0c;高阶组件即接受一个或多个组件作为参数并且返回一个组件&#xff0c;本质也就是一个函数&#xf…

【c趣编程】输入一个整数,判断其有几位

目录 1题目要求&#xff1a; 2解题思路&#xff1a; 3代码如下所示&#xff1a; 4运行代码如下&#xff1a; 5总结&#xff1a; 1题目要求&#xff1a; 只用一个scanf输出一串数&#xff0c;不可以一个一个的输入并计数&#xff0c;那样太浪费时间了。 C语言是一门面向过…

RabbitMQ 系列教程

一、RabbitMQ 部署及配置详解(集群部署) 二、RabbitMQ 部署及配置详解 (单机) 三、RabbitMQ 详解及实例&#xff08;含错误信息处理&#xff09; 四、RabbitMq死信队列及其处理方案 五、RabbitMQ Java开发教程—官方原版 六、RabbitMQ Java开发教程&#xff08;二&#x…