微信公众号开发基本流程(记录初级流程)

news2025/1/12 6:15:11

微信公众号开发基本流程

    • 一、注册公众号
    • 二、了解公众号管理页面
    • 三、必备开发者工具的使用
      • 1. 开发者文档
      • 2. 在线接口调试工具
      • 3. Web开发者工具
      • 4. 公众平台测试账号
    • 四、细读开发者文档
    • 五、开发流程重点解析
      • 1. 开发环境准备
      • 2. 服务器基本配置
      • 3. 存取access_token参数
      • 4. 公众号消息管理
      • 5. 获取openid以及网页授权(重难点)
        • (1) 理解网页授权的目的
        • (2) 两种网页授权机制
        • (3) 网页授权的配置
        • (4) 两种获取用户openid的方式
    • 结语

微信公众号开发是一项涉及多个技术领域的综合性工程,需要开发人员熟悉微信平台的接口、消息交互、网页授权等方面的知识。本文将详细介绍微信公众号开发的基本流程,帮助开发人员了解如何开始并顺利完成微信公众号项目。

一、注册公众号

首要步骤是注册一个微信公众号。在注册过程中,你可以选择不同类型的公众号,包括订阅号、服务号和企业号。个人用户通常选择订阅号,而企业用户可能会选择服务号或企业号。在项目初期,你可以注册个人订阅号进行测试,但在生产环境中,通常会使用经过微信认证的订阅号、服务号或企业号。

  • 订阅号:主要用于发布文章等基础功能,不包含高级功能如微信支付等。

  • 服务号和企业号:具备高级功能,适用于企业品牌的对外操作,如海底捞火锅、顺丰速运等。

二、了解公众号管理页面

登录微信公众平台后,你将看到左侧菜单栏提供了各种功能模块,包括设置、开发、功能、管理、推广、统计等。

作为开发人员,你应该重点关注设置和开发模块。产品运营人员关注功能、管理和推广,而数据分析人员关注统计模块。

通过设置模块,你可以配置消息回复、自定义菜单、发布文章等。这些功能通常可以由非技术人员在UI界面上操作,但在特定情况下,技术人员可能需要介入以实现更高级的自定义需求。

需要注意的是,启用服务器配置后,UI界面设置的自动回复和自定义菜单将失效。因此,确保团队内部了解此点,以避免冲突。

三、必备开发者工具的使用

1. 开发者文档

开发者文档是微信公众号开发的基础和重要参考资料。在开发过程中,你需要深入阅读文档,甚至可能需要反复研究某些部分,因为有些功能的开发可能需要仔细理解和实践。

微信开发者文档
很详细,大家可以进官方查看,哪里不会点哪里。
在这里插入图片描述

2. 在线接口调试工具

在线接口调试工具提供了大多数接口的在线调试功能。你可以在工具中输入参数,并获取微信服务端的返回结果,这有助于快速验证接口功能。
在线接口调试工具
在这里插入图片描述

3. Web开发者工具

Web开发者工具是一款桌面应用,需要下载和安装。它模拟微信客户端的UI,使开发人员可以在PC或Mac上进行开发和调试工作。通常,前端开发人员使用此工具进行页面和接口调试。
在这里插入图片描述

4. 公众平台测试账号

公众平台测试账号是开发过程中的关键工具之一。你可以创建测试账号,无需进行实名认证,以便体验和测试微信公众平台的高级接口。所有配置都可以在一个页面上编辑,使得开发和测试变得非常方便。
在这里插入图片描述

四、细读开发者文档

微信开发者文档

重要的是要重点关注文档中的核心部分,而不是阅读所有模块。以下是需要特别关注的部分:

  • 开始前必读:这部分包含了开发前的必要准备工作,需要多次阅读以建立基础知识。

  • 开始开发:这一部分也是非常关键的,涵盖了整个微信开发的基础知识,需要反复阅读。

  • 微信网页开发模块:特别注意微信网页授权部分,这通常是一个难点,需要仔细理解。

其他模块可以根据项目的功能需求进行有选择性的阅读。

五、开发流程重点解析

1. 开发环境准备

在项目开发环境准备阶段,我们需要确保具备以下条件:

  • 为每个开发人员配置独立的域名,以便微信能够通过该域名访问我们的本地开发服务。
  • 使用内网穿透工具,如natapp,为本地开发环境提供自己的域名。
  • 配置测试号管理页面中的本地访问地址URL。
# 使用natapp进行内网穿透
natapp -authtoken=YOUR_AUTHTOKEN -log=stdout

内网穿透对于微信开发还是很有必要的,不然调试起来比较麻烦

2. 服务器基本配置

在公众号的服务器配置中,需要配置以下基本参数:

  • 开发者ID(AppID)
  • 开发者密码(AppSecret)
  • 服务器地址(URL)
  • 令牌(Token)

其中,AppID和AppSecret是公众号的唯一标识和密码,用于调用公众号的接口。URL是后台服务的入口地址,必须以域名形式填写,以http或https开头,支持80端口和443端口。Token

用于验证公众平台配置的Token和后台代码配置的Token是否一致,以确保通信安全。

以下是Java代码示例,用于验证微信服务器传递过来的签名:

@RestController
@RequestMapping(value = "/wechat")
public class ValidateController {
    @Autowired
    WechatConfig wechatConfig;

    @RequestMapping(value = "", method = RequestMethod.GET)
    public void validate(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("-----开始校验签名-----");

        // 接收微信服务器发送请求时传递过来的参数
        String signature = req.getParameter("signature");
        String timestamp = req.getParameter("timestamp");
        String nonce = req.getParameter("nonce"); // 随机数
        String echostr = req.getParameter("echostr"); // 随机字符串

        // 将token、timestamp、nonce三个参数进行字典序排序并拼接为一个字符串
        String TOKEN = wechatConfig.getToken();
        String sortStr = sort(TOKEN, timestamp, nonce);

        // 字符串进行SHA1加密
        String mySignature = WechatUtils.sha1(sortStr);

        // 校验微信服务器传递过来的签名和加密后的字符串是否一致,若一致则签名校验通过
        if (!"".equals(signature) && !"".equals(mySignature) && signature.equals(mySignature)) {
            System.out.println("-----签名校验通过-----");
            try {
                resp.getWriter().write(echostr);
            } catch (IOException e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("-----校验签名失败-----");
        }
    }

    /**
     * 参数排序
     */
    public static String sort(String token, String timestamp, String nonce) {
        String[] strArray = {token, timestamp, nonce};
        Arrays.sort(strArray);
        StringBuilder sb = new StringBuilder();
        for (String str : strArray) {
            sb.append(str);
        }
        return sb.toString();
    }
}

3. 存取access_token参数

access_token是公众号的全局唯一接口调用凭据,需要定时刷新并妥善存储。你可以将access_token存储在内存、Redis或数据库中,然后定时刷新它以确保有效性。

@Scheduled(fixedRate = 3600 * 1000) // 每小时刷新一次
public void refreshAccessToken() {
    // 调用微信接口刷新access_token,并更新存储
}

4. 公众号消息管理

微信公众号允许通过消息发送与用户交互。消息交互使用XML格式进行,需要开发者处理消息的接收和回复。你可以使用第三方的微信开发SDK来简化消息处理和解析。

5. 获取openid以及网页授权(重难点)

获取用户的openid是公众号开发的重难点之一。网页授权机制分为snsapi_base和snsapi_userinfo两种,用于获取用户基本信息。具体机制和配置需详细了解,因为它们直接影响用户体验和功能实现。

(1) 理解网页授权的目的

网页授权机制允许公众号获取用户基本信息,如头像、昵称、地区、个性签名等。这对于实现某些业务逻辑是非常重要的。

(2) 两种网页授权机制
  • snsapi_base:用于获取用户的openid,属于静默授权,用户无感知。
  • snsapi_userinfo:用于获取用户基本信息,需要用户手动同意授权。
(3) 网页授权的配置

在公众号的设置中,需要配置授权回调域名,以确保安全的网页授权。

(4) 两种获取用户openid的方式

微信提供两种方式获取用户的openid:

  • 消息交互方式:当用户与公众号产生消息交互时,微信会以POST请求的方式向配置的服务器URL发送XML格式的消息,并附带用户的openid。

  • 网页授权方式:通过用户手动同意授权,获取用户的openid。这种方式适用于需要主动获取用户openid的场景,不受用户关注状态的影响。

在网页授权方式中,需要构建授权链接,包括AppID、回调URL、scope等参数,然后用户点击链接进行授权确认,最终获取用户的openid。

结语

微信公众号开发是一个复杂而多样化的领域,需要综合考虑前端和后端开发、接口调试、消息处理、网页授权等多个方面的知识。深入阅读官方文档、积极参与社区和开发者交流,将有助于你顺利完成微信公众号项目。同时,不断学习和更新技术,保持对新功能和变化的敏感性,是成为一名优秀的微信公众号开发者的关键。祝你在微信公众号开发的道路上取得成功!

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

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

相关文章

第一百六十二回 PopupMenuButton组件

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了Sliver综合示例相关的内容,本章回中将介绍 PopupMenuButton组件.闲话休提,让我们一起Talk Flutter吧。 概念介绍 我们在本章回中介绍的PopupMenuButton组件位于AppBar右侧,通常显…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络(分类应用) - 附代码 文章目录 基于蜉蝣优化的BP神经网络(分类应用) - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果:5.M…

【算法训练-二分查找 一】二分查找、在排序数组中查找元素的第一个和最后一个位置

废话不多说,喊一句号子鼓励自己:程序员永不失业,程序员走向架构!本篇Blog的主题是螺旋矩阵,使用【二维数组】这个基本的数据结构来实现 二分查找【EASY】 从最简单的二分查找入手,进而开始解决一系列其变体…

网络摄像头(IPC)介绍:类型、供电、镜头、夜视等

IPC(Internet Protocol Camera,网络摄像头),它是一种由传统摄像机与网络技术结合所产生的新一代摄像机。它可以将视频、音频、报警及控制信号通过网络传输,接受网络监控主机(NVR或监控管理平台)…

GitHub与GitHubDesktop的使用

1、介绍 见天来学习使用GitHub与GitHubDesktop。 学习前先来介绍一下什么是GitHub。 GitHub是一个基于Git的代码托管平台和开发者社区。它提供了一个Web界面,让开发者能够轻松地托管、共享和管理他们的软件项目。 在GitHub上,开发者可以创建自己的代…

对图像中边、线、点的检测(支持平面/鱼眼/球面相机)附源码

前言 图像的线段检测是计算机视觉和遥感技术中的一个基本问题,可广泛应用于三维重建和 SLAM 。虽然许多先进方法在线段检测方面表现出了良好的性能,但对未去畸变原始图像的线 段检测仍然是一个具有挑战性的问题。此外,对于畸变和无畸变的图像都缺乏统一的…

淘宝天猫粉丝福利购店铺优惠券去哪里找到领取网站?

淘宝天猫优惠券去哪里找到领取网站? 领取淘宝天猫粉丝福利购优惠券可通过百度搜索:草柴,进入草柴官方网站 或 手机应用商店搜索:草柴,下载安装草柴APP,就可以领取淘宝天猫优惠券; 草柴APP如何领…

【Redis】基础数据结构-简单动态字符串SDS

C语言字符串 char *str "redis"; // 可以不显式的添加\0,由编译器添加 char *str "redis\0"; // 也可以添加\0代表字符串结束C语言中使用char*字符数组表示字符串,‘\0’来标记一个字符串的结束,不过在使用的过程中我…

Android 进阶——系统启动之BootLoader 及内核启动一(下)

文章大纲 引言一、Android 系统启动流程概述1、手机电源被打开时,首先是引导进入BootLoader分区2、BootLoader分区加载Linux 内核3、内核解析执行init.rc脚本并启动进程id为1 的init进程4、init进程初始化各种Android系统服务、ServiceManager以及Zygote 进程孵化器…

C++算法 —— 动态规划(7)两个数组的dp

文章目录 1、动规思路简介2、最长公共子序列3、不相交的线4、不同的子序列5、通配符匹配6、正则表达式匹配7、交错字符串8、两个字符串的最小ASCII删除和9、最长重复子数组 每一种算法都最好看完第一篇再去找要看的博客,因为这样会帮你梳理好思路,看接下…

vued中图片路径与主机路径相关联,例如img:‘http://127.0.0.1:8000/media/data/els.jpg‘

1.在Django项目的settings.py文件中,确保已指定正确的MEDIA_URL和MEDIA_ROOT。MEDIA_URL定义了图片的URL前缀,MEDIA_ROOT定义了本地文件系统中存储图片的路径。 2.在 Django 项目的主 urls.py 文件中,确保包含了适当的 URL 配置,以…

计算机毕业设计 基于SpringBoot的图书馆管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍:✌从事软件开发10年之余,专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ 🍅文末获取源码联系🍅 👇🏻 精…

java学生管理系统

一、项目概述 本学生管理系统旨在提供一个方便的界面,用于学校或机构管理学生信息,包括学生基本信息、课程成绩等。 二、系统架构 系统采用经典的三层架构,包括前端使用JavaSwing,后端采用Java Servlet,数据库使用M…

【AI视野·今日Sound 声学论文速览 第十七期】Tue, 3 Oct 2023

AI视野今日CS.Sound 声学论文速览 Tue, 3 Oct 2023 Totally 15 papers 👉上期速览✈更多精彩请移步主页 Daily Sound Papers DiffAR: Denoising Diffusion Autoregressive Model for Raw Speech Waveform Generation Authors Roi Benita, Michael Elad, Joseph Kes…

【简单的留言墙】HTML+CSS+JavaScript

目标&#xff1a;做一个简单的留言墙 1.首先我们用HTML的一些标签&#xff0c;初步构造区域 样式。 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>留言墙</title><style>/* ...... */ …

国庆中秋特辑(六)大学生常见30道宝藏编程面试题

以下是 30 道大学生 Java 面试常见编程面试题和答案&#xff0c;包含完整代码&#xff1a; 什么是 Java 中的 main 方法&#xff1f; 答&#xff1a;main 方法是 Java 程序的入口点。它是一个特殊的方法&#xff0c;不需要被声明。当 Java 运行时系统执行一个 Java 程序时&…

C++ 程序员入门之路——旅程的起点与挑战

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

Java中过滤器和拦截器的区别、作用、使用场景

在Java中&#xff0c;过滤器&#xff08;Filters&#xff09;和拦截器&#xff08;Interceptors&#xff09;都是用于在应用程序中实现请求和响应处理逻辑的关键组件&#xff0c;但它们在功能、作用和使用场景上有一些区别。以下是它们的详细解释&#xff1a; 过滤器&#xff…

通过ElementUi在Vue搭建的项目中实现CRUD

&#x1f3c5;我是默&#xff0c;一个在CSDN分享笔记的博主。&#x1f4da;&#x1f4da; &#x1f31f;在这里&#xff0c;我要推荐给大家我的专栏《Vue》。&#x1f3af;&#x1f3af; &#x1f680;无论你是编程小白&#xff0c;还是有一定基础的程序员&#xff0c;这个专栏…

Java的一些常见类【万字介绍】

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;题目大解析&#xff08;3&#xff09; 目录 &#x1f449;&#x1f3fb;输入输出Scanner类输出输出…