文档章节

微信公众号开发教程01:接入指南

kolbe
 kolbe
发布于 2016/04/20 16:10
字数 685
阅读 237
收藏 3
点赞 1
评论 0

要成为微信开发者,首先需要进入接入校验,微信相关的接入文档地址为:

http://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421135319&token=&lang=zh_CN

具体步骤如下:

一、填写服务器配置

1、申请微信公众号,并登陆:https://mp.weixin.qq.com/

2、填写相关的参数:点击左侧菜单栏中的【开发】中的【基本配置】

3、修改服务器配置:

1)填写URL:http://www.kolbe.cn/wechat/authenticate(注意需要使用80端口)

2)填写Token:wechat(这个token需要与程序中的token一致)


二、验证服务器地址的有效性

1、填完上述信息后,微信服务器会发送一个GET请求到:http://www.kolbe.cn/wechat/authenticate

2、该请求会带上四个参数:signature、timestamp、nonce、echostr

3、开发者对参数进行相应的处理后,与signature进行对比,如果相等,则直接输出echostr,代表接入成功,否则接入失败,具体逻辑如下:

1)将token(自定义的)、timestamp、nonce进行字典排序

2)将三个参数拼接着一个字符串

3)将拼接后的字符串进行SHA-1加密

4)将加密后的字符串与signature进行对比


4、具体实现代码如下(为了代码的简洁明了,暂时没使用任何框架):

package cn.kolbe.wechat.authenticate.controller;

import java.io.IOException;
import java.io.PrintWriter;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

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

@WebServlet("/authenticate")
public class AuthenticateController extends HttpServlet {
	
	// token可自定义
	private static final String TOKEN = "wechat";
	private static final long serialVersionUID = 1L;

	/**
	 * 微信公众平台接入校验
	 */
	@Override
	public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		response.setCharacterEncoding("utf-8");
		PrintWriter out = response.getWriter();
		
		// 将token,timestamp,nonce三个参数进行字典排序
		String[] sourceArray = new String[]{TOKEN , request.getParameter("timestamp"), request.getParameter("nonce")};
		Arrays.sort(sourceArray);
		
		// 将三个参数字符串拼接成一个字符串
		StringBuilder sortArray = new StringBuilder();
		for(String s : sourceArray) {
			sortArray.append(s);
		}
		
		// 对拼接成功的字符串进行SHA-1加密
		String hexString = byteArrayToHex(sortArray.toString().getBytes());
		
		// 将加密过的字符串与signature对比
		if(hexString != null && hexString.equals(request.getParameter("signature"))) {
			// 如果相等则原样输出echostr,接入成功
			out.print(request.getParameter("echostr"));
		} else {
			// 如果不相等,则接入失败
			response.setContentType("text/html;charset=utf-8");
			out.println("校验失败");
		}
		out.close();
	}
	
	
	
	
	/**
	 * 将字节数组加密后转化成十六进制字符串
	 * @param byteArray
	 * @return
	 */
	public String byteArrayToHex(byte[]	byteArray) {
		try {
			MessageDigest md = MessageDigest.getInstance("SHA-1");
			md.update(byteArray);
			byte[] digest = md.digest();
			String s = new String();
			StringBuilder result = new StringBuilder();
			
			for(byte b : digest) {
				if((s = Integer.toHexString(b)).length() < 2) {
					s = 0 + s;
				}
				result.append(s);
			}
			return result.toString();	
		} catch (NoSuchAlgorithmException e) {
			e.printStackTrace();
		}
		return null;
	}
}


三、接入成功

1、如果顺利完成上面两步,并提示接入成功,此时代表已经成功接入微信

2、后续微信会将用户的消息通过Post发送到:http://www.kolbe.cn/wechat/authenticate,我们可以在AuthenticateController中的doPost方法进行相应的逻辑处理






© 著作权归作者所有

kolbe
粉丝 115
博文 20
码字总数 20902
作品 0
成都
程序员
微信开发、开发模式接入

需求: 一个已经注册好的微信公众号。 登陆公众号过程中需要使用微信号扫描二维码验证登陆,并在绑定主题的微信号上点击确认才可在PC浏览器上登陆。 开发者文档: 开发--〉开发者工具--〉开发...

牧歌_MG ⋅ 2016/04/30 ⋅ 0

Node.js 微信后台搭建系列 - 微信集成

Contents 1. 接入验证 2. 接收消息 3. 发送消息 终于基本到了最后的一步了。微信集成主要包含三个部分: 接入验证,让微信确认你的服务器,就是你公众号的拥有人。 接收微信给你服务器的消息...

鹄思乱想 ⋅ 2017/07/30 ⋅ 0

微信公众号开发遇到奇怪的问题

各位网友: 我们公司安排我们做微信公众号接口开发,就是由编辑模式进入开发模式,接入自己的服务器。所以我就去图书馆借了本书《微信公众平台搭建、开发与实践指南》照着搭建环境和敲代码,...

在我的歌声里 ⋅ 2017/02/04 ⋅ 1

微信开发框架(WTF)--Wechat Framework

Wechat Framework(微信开发框架,简称WTF)能帮助开发者快速搭建微信公众号开发环境,开发者在自己的微信公众号开发项目中引入本框架后,仅需简单的几步配置即可获得消息接收、解析、回复等...

老程序狗 ⋅ 2015/11/16 ⋅ 10

微信公众号开发之连简单的自动回复都不能实现

各位网友: 我们公司安排我们做微信公众号接口开发,就是由编辑模式进入开发模式,接入自己的服务器。所以我就去图书馆借了本书《微信公众平台搭建、开发与实践指南》照着搭建环境和敲代码,...

在我的歌声里 ⋅ 2017/02/04 ⋅ 2

微信公众平台开发(1)-接入指南

接入指南 第一步:申请消息接口 登录https://mp.weixin.qq.com/ 后,在公众平台后台管理页面 – 开发者中心页,点击“修改配置”按钮,填写URL、Token和EncodingAESKey, 其中URL是开发者用来...

当时我就震惊啦 ⋅ 2014/11/26 ⋅ 0

大前端 Android 开发日记 10:微信分享

大前端 Android 开发日记 10:微信分享 Blog | Phodal Geek's Life2017-12-241 阅读 Android 与之前的微博分享相比,微信分享就没有那么容易了——微信官方的 SDK 太差劲了。文章也写得像一坨...

Blog | Phodal Geek's Life ⋅ 2017/12/24 ⋅ 0

微信公众号开发小记——1.接入微信服务器

描述 由于马上要做一波公众号开发,今天先调研,把基本的服务器接起来。微信公众号服务器在接入的时候要做一些烦躁的事情,改配置的时候要进行握手,api调用要做一些烦躁的加密解密检查,而且...

D咄咄 ⋅ 2017/11/29 ⋅ 0

微信小程序开放公测,企业、政府及媒体可申请

11 月 3 日晚间,微信团队对外宣布,微信小程序开放公测,开发者可登陆微信公众平台申请,开发完成后可以提交审核,公测期间暂不能发布。 根据微信团队的介绍,开放注册范围为企业、政府、媒...

局长 ⋅ 2016/11/03 ⋅ 15

01第三方平台概述

第三方平台概述 一、概述 公众平台第三方平台是为了让公众号或小程序运营者,在面向垂直行业需求时,可以一键授权给第三方平台(并且可以同时授权给多家第三方),通过第三方平台来完成业务,...

MadDragon ⋅ 03/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

知乎Java数据结构

作者:匿名用户 链接:https://www.zhihu.com/question/35947829/answer/66113038 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 感觉知乎上嘲讽题主简...

颖伙虫 ⋅ 今天 ⋅ 0

Confluence 6 恢复一个站点有关使用站点导出为备份的说明

推荐使用生产备份策略。我们推荐你针对你的生产环境中使用的 Confluence 参考 Production Backup Strategy 页面中的内容进行备份和恢复(这个需要你备份你的数据库和 home 目录)。XML 导出备...

honeymose ⋅ 今天 ⋅ 0

JavaScript零基础入门——(九)JavaScript的函数

JavaScript零基础入门——(九)JavaScript的函数 欢迎回到我们的JavaScript零基础入门,上一节课我们了解了有关JS中数组的相关知识点,不知道大家有没有自己去敲一敲,消化一下?这一节课,...

JandenMa ⋅ 今天 ⋅ 0

火狐浏览器各版本下载及插件httprequest

各版本下载地址:http://ftp.mozilla.org/pub/mozilla.org//firefox/releases/ httprequest插件截至57版本可用

xiaoge2016 ⋅ 今天 ⋅ 0

Docker系列教程28-实战:使用Docker Compose运行ELK

原文:http://www.itmuch.com/docker/28-docker-compose-in-action-elk/,转载请说明出处。 ElasticSearch【存储】 Logtash【日志聚合器】 Kibana【界面】 答案: version: '2'services: ...

周立_ITMuch ⋅ 今天 ⋅ 0

使用快嘉sdkg极速搭建接口模拟系统

在具体项目研发过程中,一旦前后端双方约定好接口,前端和app同事就会希望后台同事可以尽快提供可供对接的接口方便调试,而对后台同事来说定好接口还仅是个开始、设计流程,实现业务逻辑,编...

fastjrun ⋅ 今天 ⋅ 0

PXE/KickStart 无人值守安装

导言 作为中小公司的运维,经常会遇到一些机械式的重复工作,例如:有时公司同时上线几十甚至上百台服务器,而且需要我们在短时间内完成系统安装。 常规的办法有什么? 光盘安装系统 ===> 一...

kangvcar ⋅ 昨天 ⋅ 0

使用Puppeteer撸一个爬虫

Puppeteer是什么 puppeteer是谷歌chrome团队官方开发的一个无界面(Headless)chrome工具。Chrome Headless将成为web应用自动化测试的行业标杆。所以我们很有必要来了解一下它。所谓的无头浏...

小草先森 ⋅ 昨天 ⋅ 0

Java Done Right

* 表示难度较大或理论性较强。 ** 表示难度更大或理论性更强。 【Java语言本身】 基础语法,面向对象,顺序编程,并发编程,网络编程,泛型,注解,lambda(Java8),module(Java9),var(...

风华神使 ⋅ 昨天 ⋅ 0

Linux系统日志

linux 系统日志 /var/log/messages /etc/logrotate.conf 日志切割配置文件 https://my.oschina.net/u/2000675/blog/908189 logrotate 使用详解 dmesg 命令 /var/log/dmesg 日志 last命令,调......

Linux学习笔记 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部