(Java)微信之个人公众账号开发(一)——进入开发者模式
本篇文章将教大家如何建立微信个人公众账号,(注意:后台全部是用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)微信之个人公众账号开发(一)——进入开发者模式的更多相关文章
- (Java)微信之个人公众账号开发(二)——接收并处理用户消息(下)
接下来,我们再讲一下图文消息: 如图: 大家可以先从开发者文档中了解一下图文消息的一些参数: 如上图,用户回复4时,ipastor返回了几条图文消息,上图中属于多图文消息,当然还有单图文消息,图文消息 ...
- 微信公众账号开发教程(一) 基本原理及微信公众账号注册 ——转自http://www.cnblogs.com/yank/p/3364827.html
微信公众账号开发教程 基本原理 在开始做之前,大家可能对这个很感兴趣,但是又比较茫然.是不是很复杂?很难学啊? 其实恰恰相反,很简单.为了打消大家的顾虑,先简单介绍了微信公众平台的基本原理. 微信服务 ...
- 微信公众账号开发教程(二) 基础框架搭建——转自http://www.cnblogs.com/yank/p/3392394.html
上一章,我们已经初步讲解了微信公众账号开发的基本原理,今天我们来探索设计实现. 首先我们设计了模块层次图,当然图中只是给出一种实现方式,不局限于此.具体见下图. 主要功能介绍如下: 1)请求接口层.处 ...
- 微信公众账号开发教程(三) 实例入门:机器人(附源码) ——转自http://www.cnblogs.com/yank/p/3409308.html
一.功能介绍 通过微信公众平台实现在线客服机器人功能.主要的功能包括:简单对话.查询天气等服务. 这里只是提供比较简单的功能,重在通过此实例来说明公众平台的具体研发过程.只是一个简单DEMO,如果需要 ...
- 微信公众账号开发教程(四)自定义菜单(含实例源码)——转自http://www.cnblogs.com/yank/p/3418194.html
微信公众账号开发教程(四)自定义菜单 请尊重作者版权,如需转载,请标明出处. 应大家强烈要求,将自定义菜单功能课程提前. 一.概述: 如果只有输入框,可能太简单,感觉像命令行.自定义菜单,给我们提供了 ...
- PHP实现微信公众账号开发
1.首先需要一个可以外网访问的接口url. 我这里是申请的新浪免费云服务器,http://xxxxx.applinzi.com/wx.php,具体自己可以去新浪云中心申请地址为:http://www. ...
- 微信公众账号开发之微信登陆Oauth授权-第一篇
我曾经在2012年的时候开始研究微信,那时微信的版本还是处于1.0,当时给朋友帮忙做一个基于微信端的web应用,官方的文档是相当少的,百度搜索出来的东西基本也没有多少实用价值,不过是在官网的基础上作了 ...
- 微信公众号入门学习1_使用C#,ASP.NET APIController如何公众号接入服务器并启动开发者模式
前言: 本文是以微信公众号中的订阅号(个人)来进行简单介绍,本人也是刚刚开始学习,有不足之处,欢迎批评指正. 先粘贴2个帮助链接: 入门指引:http://mp.weixin.qq.com/wiki ...
- Java微信公众号开发
微信公众平台是腾讯为了让用户申请和管理微信公众账号而推出的一个web平台.微信公众账号的种类可以分为3种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号 ...
随机推荐
- 一.Kylin的伪分布式安装
一.伪分布式安装kylin 2018年4月15日 15:06 安装需要的环境 1. hadoop集群环境:由于安装的是CDH5.14.0的版本,所以相关组件都是跟5.14.0相关 2. spark采用 ...
- [NOI 2016]区间
Description 在数轴上有 $n$ 个闭区间 $[l_1,r_1],[l_2,r_2],...,[l_n,r_n]$.现在要从中选出 $m$ 个区间,使得这 $m$ 个区间共同包含至少一个位置 ...
- [NOIp 2009]Hankson的趣味题
Description Hanks 博士是 BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫 Hankson.现在,刚刚放学回家的 Hankson 正在思考一个有趣的问题. 今天在课 ...
- 计蒜客NOIP模拟赛(2)D1T3 深黑幻想
[问题描述] 凡终于发愤图强,决定专心搞OI,不再玩纸牌和坑钱了!没过多久就飘飘然了,总是陷入自己进了集训队的深黑幻想之中. 样听说了之后,决定考一考凡欧拉回路怎么写.样:“我给你出一道题 ...
- weak_ptr解决shared_ptr环状引用所引起的内存泄漏[转]
转载:http://blog.csdn.net/liuzhi1218/article/details/6993135 循环引用: 引用计数是一种便利的内存管理机制,但它有一个很大的缺点,那就是不能管理 ...
- 【网络流】【BZOJ1061】【NOI2008】志愿者招募
原题链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1061 题意:问你如何购买志愿者使得满足题意的总费用最小. 解题思路:首先,由于志愿者存在的 ...
- 【USACO Mar08】 奶牛跑步 A-star k短路
Description Bessie准备用从牛棚跑到池塘的方法来锻炼. 但是因为她懒,她只准备沿着下坡的路跑到池塘,然后走回牛棚. Bessie也不想跑得太远,所以她想走最短的路经. 农场上一共有M( ...
- 【Uva 11604 编码都有歧义了】
·你的目的就是要让编码有歧义,这就美妙了. ·英文题,述大意: 给出n个模板字符串,询问是否存在一个字符串,使得用模板串(随便你用多少个)来拼凑这个串,能够至少有两种拼法.如果有,就输出“ ...
- poj 2886 线段树+反素数
Who Gets the Most Candies? Time Limit: 5000MS Memory Limit: 131072K Total Submissions: 12744 Acc ...
- hdu 5641 BestCoder Round #75
King's Phone Accepts: 310 Submissions: 2980 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: ...