【Java 微信公众号开发】① 介绍、测试号、接入

简介: 微信公众号是开发者或商家在微信公众平台上申请的应用账号。该帐号与 QQ 账号互通,平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动 ,形成了一种主流的线上线下微信互动营销方式。微信公众号是用户在微信公众平台注册的一个账号。账号开通后,可在微信公众号里发视频、图片、文字等推销你的商品或分享生活经验等。微信公众号类似于一个网站。可作为公司名片、个人名片,可做成商城、互动社区等。管理员可通过微信公众平台发送文章,关注了微信公众号的用户可查看到管理员发送的文章。

一、微信公众号介绍

微信公众号是开发者或商家在微信公众平台上申请的应用账号。该帐号与 QQ 账号互通,平台上实现和特定群体的文字、图片、语音、视频的全方位沟通、互动 ,形成了一种主流的线上线下微信互动营销方式。

微信公众号是用户在微信公众平台注册的一个账号。账号开通后,可在微信公众号里发视频、图片、文字等推销你的商品或分享生活经验等。

微信公众号类似于一个网站。可作为公司名片、个人名片,可做成商城、互动社区等。管理员可通过微信公众平台发送文章,关注了微信公众号的用户可查看到管理员发送的文章。

二、微信公众号分类

可访问下面的网址查看微信公众号的分类。

【微信公众平台:https://mp.weixin.qq.com/
在这里插入图片描述
微信公众可分为以下4种(本人的文章中主要讲解服务号和订阅号):

  • 服务号:给企业和组织提供更强大的业务服务与用户管理能力;帮助企业快速实现全新的公众号服务平台。
  • 订阅号:为媒体个人提供一种新的信息传播方式,构建与读者之间更好的沟通与管理模式。
  • 小程序:一种新的开放能力。可在微信内被便捷地获取和传播,同时具有出色的使用体验。
  • 企业微信(认证):企业的专业办公管理工具。与微信一致的沟通体验,提供丰富免费的办公应用,并与微信消息、小程序、微信支付等互通,助力企业高效办公和管理。

(1) 公众号类型功能介绍

公众号相关问题:https://kf.qq.com/faq/170815aUZjeQ170815mU7bI7.html
在这里插入图片描述

(2) 服务号订阅号功能区别

在这里插入图片描述
【订日1服月4】阅号每可群发1条,务号每可群发4条消息

三、测试号和接入指南

微信公众号开发文档https://developers.weixin.qq.com/doc/offiaccount/Getting_Started/Overview.html


(1) 测试号申请

由于用户体验和安全性方面的考虑,某些高级接口的权限需要微信认证后才可获取,微信认证又是需要组织和企业才可进行的操作。

为帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,微信团队推出了微信公众帐号测试号通过手机微信扫描二维码即可获得测试号
在这里插入图片描述

(2) 接入指南

接入微信公众平台开发,开发者需要按照如下步骤完成:

a. 填写服务器配置

登录微信公众平台官网,并进入下图页面。填写 URL、Token、和 EncodingAESKey。

  • URL:开发者用来接收微信消息和事件的接口
  • Token:可由开发者任意填写,用于生成签名(Token 会和接口 URL 中包含的 Token 进行对比,从而验证安全性)
  • EncodingAESKey:由开发者手动填写或随机生成,将用作消息体加密或解密秘钥

在这里插入图片描述
(上图是生产环境填写 URL、Token 和 EncodingAESKey 的地方,测试号是在【测试管理】进行填写)

b. 验证服务器地址的有效性

① 介绍

开发者提交信息后,微信服务器将发送 GET 请求到填写的服务器地址 URL 上。GET 请求会携带如下参数:

参数 描述
signature 微信加密签名(是结合开发者填写的 token、timestamp 和 nonce 生成的)
timestamp 时间戳
nonce 随机数
echostr 随机字符串

在这里插入图片描述

② Java 代码(接收微信服务器发送的 GET 中的参数)

@RestController
@RequestMapping("/wechats")
public class WechatController {

    @GetMapping("/checkValid")
    public String checkValid(String signature, String timestamp,
                             String nonce, String echostr) {
        System.out.println("signature = " + signature);
        System.out.println("timestamp = " + timestamp);
        System.out.println("nonce = " + nonce);
        System.out.println("echostr = " + echostr);
        return "WechatController - checkValid";
    }

}

在这里插入图片描述
在这里插入图片描述

填写的 URL 地址所在的项目必须被部署到云服务器上或者使用内网穿透,否则是无法成功的。

③ Java 代码(校验请求确实来自微信服务器)

开发者通过检查 signature 对请求进行校验(下面有校验方式)。若确认此次 GET 请求来自微信服务器,请原样返回 echostr 参数的内容。返回 echostr 参数的内容则表示接入生效(成为开发者成功),否则接入失败。

加密/校验流程:

  • 将 token、timestamp、nonce 三个参数进行字典序排序
  • 将三个参数字符串拼接成一个字符串进行 sha1 加密(使用他人的代码进行 sha1 加密)
  • 把 sha1 加密后的字符串与 signature 比较,标识该请求是否来源于微信服务器
@RestController
@RequestMapping("/wechats")
public class WechatController {
    @Autowired
    private WechatService service;

    @GetMapping("/checkValid")
    public String checkValid(String signature, String timestamp,
                             String nonce, String echostr) {
        return service.checkSignature(timestamp, nonce, signature) ? echostr
                : "校验失败"; 
    }

}
@Service
public class WechatServiceImpl implements WechatService {
    private static final String TOKEN = "sui bian xie dou ke yi";

    /**
     * 校验 signature(签名) 的正确性
     * a. 将 token、timestamp、nonce 三个参数进行字典序排序
     * b. 将三个参数字符串拼接为一个字符串后进行 sha1 加密
     * c. 把 sha1 加密后的字符串与 signature 的值进行比较
     * d. 若相同, 返回 true; 若不相同, 返回 false
     */
    @Override
    public boolean checkSignature(String timestamp, String nonce, String signature) {

        String[] params = {TOKEN, timestamp, nonce};
        Arrays.sort(params);

        // b. 将三个参数字符串拼接为一个字符串后进行 sha1 加密
        StringBuilder joinParam = new StringBuilder();
        for (String param : params) {
            joinParam.append(param);
        }

        String secretParam = DigestUtils.sha1Hex(joinParam.toString());

        return secretParam.equals(signature);
    }

}
   <!-- 把字符串进行 sha1 加密 -->
   <dependency>
       <groupId>commons-codec</groupId>
       <artifactId>commons-codec</artifactId>
       <version>1.14</version>
   </dependency>

在这里插入图片描述

c. 依据接口文档实现业务逻辑

验证 URL 有效性成功后即接入生效,成为开发者。你可以在公众平台网站中申请微信认证,认证成功后,将获得更多接口权限,满足更多业务需求。

成为开发者后,用户每次向公众号发送消息、或者产生自定义菜单、或产生微信支付订单时,开发者填写的服务器配置 URL 将得到微信服务器推送过来的消息和事件,开发者可以依据自身业务逻辑进行响应,如回复消息。

公众号调用各接口时,一般会获得正确的结果,具体结果可见对应接口的说明。返回错误时,可根据返回码来查询错误原因。

用户向公众号发送消息时,公众号方收到的消息发送者是一个 OpenID(是使用用户微信号加密后的结果),每个用户对每个公众号有一个唯一的 OpenID

微信公众号接口必须以 http://https:// 开头,分别支持 80 端口和 443 端口

相关文章
|
1天前
|
数据采集 前端开发 测试技术
《手把手教你》系列技巧篇(三十一)-java+ selenium自动化测试- Actions的相关操作-番外篇(详解教程)
【4月更文挑战第23天】本文介绍了网页中的滑动验证码的实现原理和自动化测试方法。作者首先提到了网站的反爬虫机制,并表示在本地创建一个没有该机制的网页,然后使用谷歌浏览器进行验证。接着,文章详细讲解了如何使用WebElement的click()方法以及Action类提供的API来模拟鼠标的各种操作,如右击、双击、悬停和拖动。
6 2
|
2天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
2天前
|
Web App开发 数据采集 Java
《手把手教你》系列技巧篇(三十)-java+ selenium自动化测试- Actions的相关操作下篇(详解教程)
【4月更文挑战第22天】本文介绍了在测试过程中可能会用到的两个功能:Actions类中的拖拽操作和划取字段操作。拖拽操作包括基本讲解、项目实战、代码设计和参考代码,涉及到鼠标按住元素并将其拖动到另一个元素上或指定位置。划取字段操作则介绍了如何在一段文字中随机选取一部分,包括项目实战、代码设计和参考代码。此外,文章还提到了滑动验证的实现,并提供了相关的代码示例。
28 2
|
7天前
|
IDE Java 数据库连接
使用 Java 进行桌面应用开发
【4月更文挑战第19天】Java 是一款广泛应用于企业级、网络和桌面应用开发的编程语言。其跨平台特性使Java程序能在不同操作系统上运行,而JDK提供了开发所需工具和库。使用Swing等GUI库构建用户界面,结合JDBC进行数据库操作,Socket实现网络通信。虽然面临性能和用户体验的挑战,但通过优化和选用合适的IDE,Java仍能开发出高效稳定的桌面应用。
|
Java 测试技术
Java 中的单元测试和集成测试策略
【4月更文挑战第19天】本文探讨了Java开发中的单元测试和集成测试。单元测试专注于单一类或方法的功能验证,使用测试框架如JUnit,强调独立性、高覆盖率和及时更新测试用例。集成测试则验证模块间交互,通过逐步集成或模拟对象来检测系统整体功能。两者相辅相成,确保软件质量和降低修复成本。
|
7天前
|
前端开发 JavaScript Java
《手把手教你》系列技巧篇(二十五)-java+ selenium自动化测试-FluentWait(详细教程)
【4月更文挑战第17天】其实今天介绍也讲解的也是一种等待的方法,有些童鞋或者小伙伴们会问宏哥,这也是一种等待方法,为什么不在上一篇文章中竹筒倒豆子一股脑的全部说完,反而又在这里单独写了一篇。那是因为这个比较重要,所以宏哥专门为她量身定制了一篇。FluentWait是Selenium中功能强大的一种等待方式,翻译成中文是流畅等待的意思。在介绍FluentWait之前,我们来讨论下为什么需要设置等待,我们前面介绍了隐式等待和显式等待。
29 3
|
7天前
|
前端开发 Java Go
开发语言详解(python、java、Go(Golong)。。。。)
开发语言详解(python、java、Go(Golong)。。。。)
|
8天前
|
人工智能 前端开发 Java
Java语言开发的AI智慧导诊系统源码springboot+redis 3D互联网智导诊系统源码
智慧导诊解决盲目就诊问题,减轻分诊工作压力。降低挂错号比例,优化就诊流程,有效提高线上线下医疗机构接诊效率。可通过人体画像选择症状部位,了解对应病症信息和推荐就医科室。
147 10
|
8天前
|
Java 关系型数据库 MySQL
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
UWB (ULTRA WIDE BAND, UWB) 技术是一种无线载波通讯技术,它不采用正弦载波,而是利用纳秒级的非正弦波窄脉冲传输数据,因此其所占的频谱范围很宽。一套UWB精确定位系统,最高定位精度可达10cm,具有高精度,高动态,高容量,低功耗的应用。
一套java+ spring boot与vue+ mysql技术开发的UWB高精度工厂人员定位全套系统源码有应用案例
|
9天前
|
Java 测试技术 定位技术
《手把手教你》系列技巧篇(二十三)-java+ selenium自动化测试-webdriver处理浏览器多窗口切换下卷(详细教程)
【4月更文挑战第15天】本文介绍了如何使用Selenium进行浏览器窗口切换以操作不同页面元素。首先,获取浏览器窗口句柄有两种方法:获取所有窗口句柄的集合和获取当前窗口句柄。然后,通过`switchTo().window()`方法切换到目标窗口句柄。在项目实战部分,给出了一个示例,展示了在百度首页、新闻页面和地图页面之间切换并输入文字的操作。最后,文章还探讨了在某些情况下可能出现的问题,并提供了一个简单的本地HTML页面示例来演示窗口切换的正确操作。
37 0

热门文章

最新文章