本篇文章将教大家如何建立微信个人公众账号,(注意:后台全部是用javaweb相关技术开发),大家知道,现在微信公众账号分服务号和订阅号,现在我要讲的主要是个人微信公众账号的建立以及后台的开发,个人公众账号一旦申请成功一般为订阅号,详细情况,大家可以到微信官网了解。先来看一下我自己的微信个人公众账号:ipastor(现已改名为AndroidMax),大家可以关注体验一下。

完成个人公众账号的开发,必需的原材料有:

1,个人微信公众账号一个(没有的可以去微信公众平台申请);

2,自己的服务器(网络可以访问到的,主要用于后台开发);

3,自己需要会javaweb相关技术(这个不必我说了吧)。

大家再看我这篇文章之前,最好看一下微信公众平台开发者文档,看个大概后,再来看这篇文章会达到事半功倍的效果。申请个人公众账号需要七天审核时间,通过前,高级功能是无法使用的,通过后,在网页登录微信公众平台,会看到下图所示:

审核通过后的账号默认是编辑模式开启,我们要选择开启开发者模式,当点击进入开发者模式时会出现

然后点击成为开发者出现:

上图中的URL就是开发者服务器上的接口地址,以接受微信服务器发向自己服务器的信息,在这里有必要了解一下消息传递方式,首先用户向开发者发送信息后,首先会通过微信服务器,然后微信服务器处理用户的信息为特定格式后,再发向开发者服务器,其中包含了用户的id(加密后),开发者id,消息形式(包括文本,语音,视频,地理位置,图片等类型),消息内容,以及随机的消息id,全部为xml格式,如图:

每个标签代表什么意思不用我说了吧,而URL就是处理接收到的消息的服务接口,这里我是用servlet完成的,接收消息并根据消息内容返回信息,Token主要作用则是用于开发者后台做出对消息是否来自微信服务器的判断,这个值由开发者自定义,而上图中填写的token值一定要与自定义的一致。开发者文档中有详细说明:

开发者可以在servlet中的get方法接收get请求来判断消息是否来源于微信服务器,如果是,则原样返回echostr字符串,接入成功,否则失败,用户将收不到开发者回复信息!

具体怎么检验可以详细看上图中的加密检验流程,当然我已经把检验过程写好了,大家可以参考,以下是servlet中的get方法:

/**
	 * 确认请求来自微信服务器
	 */
	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();
		//校验过程
		if (SignUtil.checkSignature(signature, timestamp, nonce)) {
			out.print(echostr);
		}
		out.close();
		out = null;
	}

其中,SignUtil.checkSignature(signature, timestamp, nonce)返回true,则表示校验成功,否则校验失败,SignUtil类的代码如下:

public class SignUtil {
     //与接口中的配置要一致
	private static String token="bylcss";

	/**
	 *验证签名
	 * @param signature
	 * @param timestamp
	 * @param nonce
	 *
	 * */
	public static boolean checkSignature(String signature,String timestamp,String nonce){
		String [] arr=new String[]{token,timestamp,nonce};
		//将signature,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;
    }  

}

这个验证过程应该很简单吧,校验成功,则原样返回微信服务器发过来的随机字符串echostr。

而上面的URL指向的就是我们的这个servlet,若想成功成为开发者,这个过程必须能够走通,

比如:URL:http://服务器地址/项目名/servlet

Token:我上面定义的Token为bylcss,那么这里就填bylcss

点击提交,如果通过验证,则会提示成为开发者成功,便可进入开发模式。

这个过程,我们的后台web项目,至少包含两个文件,一个是servlet,一个是检验工具类SignUtil。

下一篇将讲述如何接收并处理用户消息。

(Java)微信之个人公众账号开发(一)——进入开发者模式的更多相关文章

  1. (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)

    接下来,我们再讲一下图文消息: 如图: 大家可以先从开发者文档中了解一下图文消息的一些参数: 如上图,用户回复4时,ipastor返回了几条图文消息,上图中属于多图文消息,当然还有单图文消息,图文消息 ...

  2. 微信公众账号开发教程(一) 基本原理及微信公众账号注册 ——转自http://www.cnblogs.com/yank/p/3364827.html

    微信公众账号开发教程 基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信公众平台的基本原理. 微信服务 ...

  3. 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html

    上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处 ...

  4. 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html

    一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要 ...

  5. 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html

    微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...

  6. PHP实现微信公众账号开发

    1.首先需要一个可以外网访问的接口url. 我这里是申请的新浪免费云服务器,http://xxxxx.applinzi.com/wx.php,具体自己可以去新浪云中心申请地址为:http://www. ...

  7. 微信公众账号开发之微信登陆Oauth授权-第一篇

    我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了 ...

  8. 微信公众号入门学习1_使用C#,ASP.NET APIController如何公众号接入服务器并启动开发者模式

    前言:  本文是以微信公众号中的订阅号(个人)来进行简单介绍,本人也是刚刚开始学习,有不足之处,欢迎批评指正. 先粘贴2个帮助链接: 入门指引:http://mp.weixin.qq.com/wiki ...

  9. Java微信公众号开发

    微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个web平台.微信公众账号的种类可以分为3种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号 ...

随机推荐

  1. [LeetCode] Longest Word in Dictionary through Deleting 删除后得到的字典中的最长单词

    Given a string and a string dictionary, find the longest string in the dictionary that can be formed ...

  2. webpack模块化管理和打包工具

    Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具.它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的 ...

  3. [AH/HNOI2017]抛硬币

    题目描述 小 A 和小 B 是一对好朋友,他们经常一起愉快的玩耍.最近小 B 沉迷于**师手游,天天刷本,根本无心搞学习.但是已经入坑了几个月,却一次都没有抽到 SSR,让他非常怀疑人生.勤勉的小 A ...

  4. SAC E#1 - 一道神题 Sequence1

    题目背景 小强和阿米巴是好朋友. 题目描述 小强很喜欢数列.有一天,他心血来潮,写下了一个数列. 阿米巴也很喜欢数列.但是他只喜欢其中一种:波动数列. 一个长度为n的波动数列满足对于任何i(1 < ...

  5. bzoj 5288: [Hnoi2018]游戏

    Description Solution 乱搞能A的题,毁我青春 记忆化一下扩展过程 只要不是从 \(1\) 枚举到 \(n\) 去扩展都可以 \(AC\) 于是 \(random\_shuffle\ ...

  6. C++Primer学习——类型转换

    无符号之间的运算 当一个是无符号类型,另外一个是带符号类型: 如果无符号不小于带符号,那么带符号转换成无符号. 如果无符号小于带符号,当无符号类型的所有值都能存到带符号中时,则无符号转换成带符号,否则 ...

  7. hdu 5534(dp)

    Input The first line contains an integer T indicating the total number of test cases. Each test case ...

  8. Codeforces #Round 406(Div.2)

    来自FallDream的博客,未经允许,请勿转载,谢谢. ------------------------------------------------------- 大家好,我是一个假人.在学习O ...

  9. bzoj4514

    4514: [Sdoi2016]数字配对 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1870  Solved: 712[Submit][Statu ...

  10. Python中模块之os的功能介绍

    Python中模块之os的功能介绍 1. os的变量 path 模块路径 方法:os.path 返回值:module 例如:print(os.path) >>> <module ...