本篇文章将教大家如何建立微信个人公众账号,(注意:后台全部是用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. HashMap 你真的了解吗?

    HashMap深入解析及详细介绍 一. hashmap简介 HashMap是基于哈希表的Map接口的非同步实现.此实现提供所有可选的映射操作,并允许使用null值和null键.此类不保证映射的顺序,特 ...

  2. localStorage学习总结

    一.本地存储 在HTML5诞生之前,网站如果想在浏览器端存储数据,只能使用Cookie,使用Cookie有较多的限制. Cookie问题: 1.cookie大小限制在4K左右(各个浏览器不一致) 2. ...

  3. linux必知必会命令

  4. ML笔记:Classification: Logistic Regression

  5. jenkins构建个人github上的项目

    最近刚进一家新公司,公司采用的是自动化集成测试工具jenkins进行,构建,部署项目 因为以前,没接触过这类工具,所以打算在自己本机安装一个jenkins进行学习 具体安装步骤,很简单,不做讲解 1. ...

  6. 【Ural1277】 Cops and Thieves 无向图点连通度问题

    1277. Cops and Thieves Time limit: 1.0 secondMemory limit: 64 MB The Galaxy Police (Galaxpol) found ...

  7. 2015 多校联赛 ——HDU5348(搜索)

    Problem Description As we all kown, MZL hates the endless loop deeply, and he commands you to solve ...

  8. HDU 4787 GRE Words Revenge

    Description Now Coach Pang is preparing for the Graduate Record Examinations as George did in 2011. ...

  9. hdu 1166 线段树(sum+单点修改)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  10. Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offline, or that GitHub is down

    Failed to connect to GitHub to update the CocoaPods/Specs specs repo - Please check if you are offli ...