Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >微信公众号开发者账号_小程序后端开发教程

微信公众号开发者账号_小程序后端开发教程

作者头像
全栈程序员站长
发布于 2022-11-11 13:08:34
发布于 2022-11-11 13:08:34
1K00
代码可运行
举报
运行总次数:0
代码可运行

大家好,又见面了,我是你们的朋友全栈君。

编辑模式与开发模式

微信公众帐号申请成功后,要想接收处理用户的请求,就必须要在“高级功能”里进行配置,点击“高级功能”,将看到如下界面:

从上图中可以看到,高级功能包含两种模式:编辑模式和开发模式,并且这两种模式是互斥关系,即两种模式不能同时开启。那两种模式有什么区别呢?作为开发人员到底要开启哪一种呢?

编辑模式:主要针对非编程人员及信息发布类公众帐号使用。开启该模式后,可以方便地通过界面配置“自定义菜单”和“自动回复的消息”。

开发模式:主要针对具备开发能力的人使用。开启该模式后,能够使用微信公众平台开放的接口,通过编程方式实现自定义菜单的创建、用户消息的接收/处理/响应。这种模式更加灵活,建议有开发能力的公司或个人都采用该模式。

启用开发模式(上)

微信公众帐号注册完成后,默认开启的是编辑模式。那么该如何开启开发模式呢?操作步骤如下:

1)点击进入编辑模式,将右上角的编辑模式开关由“开启”切换到“关闭”,如下图所示:

2)点击高级功能进入到开发模式,将右上角的开发模式开关由“关闭”切换到“开启”,但在切换时会遇到如下提示:

提示需要我们先成为开发者,才能开启开发模式。那就先点击下图所示的“成为开发者”按钮:

如果提示资料不全,那就先补齐资料再回来继续操作。需要补全的资料有公众帐号头像、描述和运营地区。

待资料补全后,再次点击“成为开发者”,这时将看到接口配置信息界面,如下图所示:

这里需要填写URL和Token两个值。URL指的是能够接收处理微信服务器发送的GET/POST请求的地址,并且是已经存在的,现在就能够在浏览器访问到的地址,这就要求我们先把公众帐号后台处理程序开发好(至少应该完成了对GET请求的处理)并部署在公网服务器上。Token后面会详细说明。

也就是说要完成接口配置,只需要先完成微信服务器的GET请求处理就可以?是的。 那这是为什么呢?因为这是微信公众平台接口中定义的。具体请参考API文档-消息接口-消息接口指南中的网址接入部分。点此进入

上面写的很清楚,其实你只要能理解上面在说什么就OK了,至于怎么编写相关代码,我已经帮你完成了,请继续往下看。

创建公众帐号后台接口程序

创建一个Java Web工程,并新建一个能够处理请求的Servlet,命名任意,我在这里将其命名为org.liufeng.course.servlet.CoreServlet,代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package org.liufeng.course.servlet;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.liufeng.course.util.SignUtil;

/**
 * 核心请求处理类
 * 
 * @author liufeng
 * @date 2013-05-18
 */
public class CoreServlet extends HttpServlet {
	private static final long serialVersionUID = 4440739483644821986L;

	/**
	 * 确认请求来自微信服务器
	 */
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// 微信加密签名
		String signature = request.getParameter("signature");
		// 时间戳
		String timestamp = request.getParameter("timestamp");
		// 随机数
		String nonce = request.getParameter("nonce");
		// 随机字符串
		String echostr = request.getParameter("echostr");

		PrintWriter out = response.getWriter();
		// 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
		if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			out.print(echostr);
		}
		out.close();
		out = null;
	}

	/**
	 * 处理微信服务器发来的消息
	 */
	public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO 消息的接收、处理、响应
	}

}

可以看到,代码中只完成了doGet方法,它的作用正是确认请求是否来自于微信服务器;而doPost方法不是我们这次要讲的内容,并且完成接口配置也不需要管doPost方法,就先空在那里。

在doGet方法中调用了org.liufeng.course.util.SignUtil.checkSignature方法,SignUtil.java的实现如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
package org.liufeng.course.util;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/**
 * 请求校验工具类
 * 
 * @author liufeng
 * @date 2013-05-18
 */
public class SignUtil {
	// 与接口配置信息中的Token要一致
	private static String token = "weixinCourse";

	/**
	 * 验证签名
	 * 
	 * @param signature
	 * @param timestamp
	 * @param nonce
	 * @return
	 */
	public static boolean checkSignature(String signature, String timestamp, String nonce) {
		String[] arr = new String[] { token, timestamp, nonce };
		// 将token、timestamp、nonce三个参数进行字典序排序
		Arrays.sort(arr);
		StringBuilder content = new StringBuilder();
		for (int i = 0; i < arr.length; i++) {
			content.append(arr[i]);
		}
		MessageDigest md = null;
		String tmpStr = null;

		try {
			md = MessageDigest.getInstance("SHA-1");
			// 将三个参数字符串拼接成一个字符串进行sha1加密
			byte[] digest = md.digest(content.toString().getBytes());
			tmpStr = byteToStr(digest);
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}

		content = null;
		// 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
		return tmpStr != null ? tmpStr.equals(signature.toUpperCase()) : false;
	}

	/**
	 * 将字节数组转换为十六进制字符串
	 * 
	 * @param byteArray
	 * @return
	 */
	private static String byteToStr(byte[] byteArray) {
		String strDigest = "";
		for (int i = 0; i < byteArray.length; i++) {
			strDigest += byteToHexStr(byteArray[i]);
		}
		return strDigest;
	}

	/**
	 * 将字节转换为十六进制字符串
	 * 
	 * @param mByte
	 * @return
	 */
	private static String byteToHexStr(byte mByte) {
		char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
		char[] tempArr = new char[2];
		tempArr[0] = Digit[(mByte >>> 4) & 0X0F];
		tempArr[1] = Digit[mByte & 0X0F];

		String s = new String(tempArr);
		return s;
	}
}

这里唯一需要注意的就是SignUtil类中的成员变量token,这里赋予什么值,在接口配置信息中的Token就要填写什么值,两边保持一致即可,没有其他要求,建议用项目名称、公司名称缩写等,我在这里用的是项目名称weixinCourse。

最后再来看一下web.xml中,CoreServlet是怎么配置的,web.xml中的配置代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
	http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
	<servlet>
		<servlet-name>coreServlet</servlet-name>
		<servlet-class>
			org.liufeng.course.servlet.CoreServlet
		</servlet-class>
	</servlet>

	<!-- url-pattern中配置的/coreServlet用于指定该Servlet的访问路径 -->
	<servlet-mapping>
		<servlet-name>coreServlet</servlet-name>
		<url-pattern>/coreServlet</url-pattern>
	</servlet-mapping>

	<welcome-file-list>
		<welcome-file>index.jsp</welcome-file>
	</welcome-file-list>
</web-app>

到这里,所有编码都完成了,就是这么简单。接下来就是将工程发布到公网服务器上,如果没有公网服务器环境,可以去了解下BAE、SAE或阿里云。发布到服务器上后,我们在浏览器里访问CoreServlet,如果看到如下界面就表示我们的代码没有问题:

啊,代码都报空指针异常了还说证明没问题?那当然了,因为直接在地址栏访问coreServlet,就相当于提交的是GET请求,而我们什么参数都没有传,在验证的时候当然会报空指针异常。

接下来,把coreServlet的访问路径拷贝下来,再回到微信公众平台的接入配置信息界面,将coreServlet的访问路径粘贴到URL中,并将SignUtil类中指定的token值weixinCourse填入到Token中,填写后的结果如下图所示:

我在写这篇教程的时候是使用的BAE环境,如果想学习微信公众帐号开发又没有公网服务器环境的,建议可以试试,注册使用都很方便,如果有问题我们还可以交流。

接着点击“提交”,如果程序写的没问题,并且URL、Token都填写正确,可以在页面最上方看到“提交成功”的提示,并会再次跳转到开发模式设置界面,而且能够看到“你已成为开发者”的提示,如下图所示:

启用开发模式(下)

这个时候就已经成为开发者了,百般周折啊,哈哈,到这里还没有完哦,还有最后一步工作就是将开发模式开启。将右上角的开发模式开关由“关闭”切换到“开启”,如下图所示:

到这里,接口配置、开发模式的开启就都完成了,本章节的内容也就讲到这里。接下来要章节要讲的就是如何接收、处理、响应由微信服务器转发的用户发送给公众帐号的消息,也就是完成CoreServlet中doPost方法的编写。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/187592.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年9月30日 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
excel数据分析工具库系列四|假设检验
今天要跟大家分享的是excel数据分析工具库系列四——假设检验! 一共会讲到关于假设检验的5个知识点: Z-检验:双样本均值差检验 T-检验:平均值的成对二样本检验 T-检验:双样本等方差假设 T-检
数据小磨坊
2018/04/10
4K0
excel数据分析工具库系列四|假设检验
数学建模---t检验样例和matlab代码
下面的三个题目分别对应上面的三个类型,可以简单的实践一下:因为之前的这个理论并不有利于我们的理解,在一个真实的案例里面,我们可以更加清楚的知道这个参数的具体含义,以及我们的这个检验方法的适用场景
阑梦清川
2025/02/24
1640
数学建模---t检验样例和matlab代码
数据分析:两组数据的T检验power评估
百度网盘链接: https://pan.baidu.com/s/1NE-jYGWY9snI7j8NkJS-8A
生信学习者
2024/08/01
1710
Java开发者的Python快速进修指南:掌握T检验
T检验是一种用于比较两个独立样本均值差异的统计方法。它通过计算T值和P值来判断样本之间是否存在显著性差异。通常情况下,我们会有两组数据,例如一组实验组和一组对照组。
努力的小雨
2024/03/05
4660
数据分析师必备的基本统计学知识
数据分析师,无疑是数据时代最耀眼的职业之一,统计学,又是数据分析师必备的基础知识。
1480
2019/07/15
1.3K0
数据分析师必备的基本统计学知识
没有最好,只有A/B测试!
“A/B测试不一定是最好的评估方法。它不是万能的,但不会A/B测试肯定是不行的。”
阿泽 Crz
2021/07/06
1.7K0
没有最好,只有A/B测试!
Python统计分析
描述性统计偏度和峰度累计值假设检验和区间估计示例1假设检验置信区间示例2假设检验置信区间
用户3577892
2020/07/14
9540
Python统计分析
python scipy.stats计算单样本假设检验(1 sample test)
单样本检验:检验单个变量的均值与目标值之间是否存在差异,如果总体均值已知,样本均值与总体均值之间差异的显著性检验属于单样本假设检验。
小末快跑
2020/08/13
2.4K0
概率分析方法与推断统计(来自我写的python书)
在数据分析统计的场景里,常用的方法除了描述性统计方法外,还有推断统计方法,如果再从工作性质上来划分,推断统计包含了参数估计和假设验证这两方面的内容。而推断统计用到了很多概率统计方法,所以本小节在介绍推断统计的内容前,还将讲述一些常用的概率统计方法。
用户1153489
2021/03/02
8450
概率分析方法与推断统计(来自我写的python书)
如何检测两组数据是否同分布?
一个模型中,很重要的技巧就是要确定训练集与测试集特征是否同分布,这也是机器学习的一个很重要的假设,但很多时候我们默认这个道理,却很难有方法来保证数据同分布。
Python数据科学
2021/10/08
2.5K0
t检验的工作原理和在Python中的实现
因此,总有一天你可能会使用t检验,深入了解它的工作原理非常重要。作为开发人员,通过从头开始实现假设检验以理解。
AiTechYun
2018/08/16
9.2K0
t检验的工作原理和在Python中的实现
独家|使用Python进行机器学习的假设检验(附链接&代码)
也许所有机器学习的初学者,或者中级水平的学生,或者统计专业的学生,都听说过这个术语,假设检验。
数据派THU
2019/08/30
1.1K0
独家|使用Python进行机器学习的假设检验(附链接&代码)
假设检验在数据分析中的应用
在这篇文章中,我不会具体去推导检验统计量和相应拒绝域的得出,这对于大部分非统计学专业的人士来说是晦涩的,我只想通过一个案例告诉大部分初学者假设检验怎么在数据挖掘中使用。
用户3577892
2020/10/09
1.3K0
假设检验在数据分析中的应用
Python数据科学:正态分布与t检验
区间估计用到了中心极限定理,表现为如果抽样多次,每次抽样都有一个均值,产生的多个均值服从正态分布。
小F
2020/10/09
2.2K0
Python数据科学:正态分布与t检验
常用统计检验的Python实现
今天给大家整理了一些使用python进行常用统计检验的命令与说明,请注意,本文仅介绍如何使用python进行不同的统计检验,对于文中涉及的假设检验、统计量、p值、非参数检验、iid等统计学相关的专业名词以及检验背后的统计学意义不做讲解,因此读者应该具有一定统计学基础。
刘早起
2020/04/22
2.4K0
python数据分析——在数据分析中有关概率论的知识
参数和统计量在数据分析中起着至关重要的作用。参数是对总体特征的描述,如均值、方差等,而统计量则是基于样本数据计算得出的,用于估计或推断总体参数的值。
鲜于言悠
2024/03/20
2990
python数据分析——在数据分析中有关概率论的知识
数据分析必备——统计学入门基础知识
导读:要做好数据分析,除了自身技术硬以及数据思维灵活外,还得学会必备的统计学基础知识!因此,统计学是数据分析必须掌握的基础知识,即通过搜索、整理、分析、描述数据等手段,以达到推断所测对象的本质,甚至预测对象未来的一门综合性科学。统计学用到了大量的数学及其它学科的专业知识,其应用范围几乎覆盖了社会科学和自然科学的各个领域,而在数据量极大的互联网领域也不例外,因此扎实的统计学基础是一个优秀的数据人必备的技能。
数据社
2020/10/09
1.7K0
数据分析必备——统计学入门基础知识
利用python进行T检验
注:ttest_1samp, ttest_ind, ttest_rel均进行双侧检验 H0:μ=μ0H_0: μ=μ_0 H1:μ≠μ0H_1: μ≠μ_0
py3study
2020/01/13
2.5K0
数据分析:假设检验方法汇总及R代码实现
显著性检验方法,通常也被称为假设检验方法,是统计学中用于评估样本统计量是否显著不同于某个假设值的一种重要工具。以下是假设检验方法使用时需要考虑的三个条件的书面化表述:
生信学习者
2024/06/20
8540
数据分析:假设检验方法汇总及R代码实现
统计学基础:Python数据分析中的重要概念
统计学是一门研究数据收集、分析和解释的学科,它在数据分析中起着重要的作用。Python作为一种功能强大的编程语言,在数据分析领域拥有广泛的应用。本文将介绍Python数据分析中的重要统计学概念,帮助您更好地理解和应用统计学知识。
网络技术联盟站
2023/07/03
6660
统计学基础:Python数据分析中的重要概念
推荐阅读
相关推荐
excel数据分析工具库系列四|假设检验
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验