(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种,并且一旦选定不可更改.按照功能的限制从小到大依次为:订阅号.服务号.企业号.个人只能注册订阅号 ...
随机推荐
- js 函数 作用域 全局作用域 局部作用域 闭包
一个变量没有声明但调用 直接报错,声明没有赋值会显示未定义. 作用域 作用域(scope):一条数据可以在哪个范围中使用. 通常来说,一段程序代码中所用到的数据并不总是有效/可用的,而限定这个数据的可 ...
- servlet与ajax数据交换(json格式)
JSON数据格式: JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 易于人阅读和编写.同时也易于机器解析和生成. 它基于的一个子集. JSON采用完全独 ...
- mv&cp
mv [选项] [源] [目标] 当目标不存在时,重命名源为目标 当目标存在时,若目标为目录文件,将源移动到目标文件里: 若目标为非目录文件,将源重命名为目标,并强制覆盖目标. mv -b 1 2 ...
- 推送本地项目至Github遇到的问题以及解决办法记录
在把本地新项目推送至GitHub仓库时的大致流程和步骤,首先现在GitHub上面新建一个项目,复制该项目的 带.git 后缀的地址,比如 git@github.com:XXX/XXX.git 然后在本 ...
- [SDOI 2010]魔法猪学院
Description 题库链接 给出一张 \(n\) 个点 \(m\) 条边有向图,询问最多有多少条不同的路径从 \(1\) 到 \(n\) 并且路径长度和 \(\leq E\) . \(2\leq ...
- [测试题]無名(noname)
Description 因为是蒯的题所以没想好名字,为什么要用繁体呢?去看<唐诗三百首>吧! 题意很简单,给你一个串,求他有多少个不同的子串,满足前缀为A,后缀为B. 需要注意的是,串中所 ...
- [HNOI 2001]产品加工
Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同的机器加工同一产品所需的时间会不同,若同时由两台机 ...
- AtCoder Beginner Contest 071 D - Coloring Dominoes
Problem Statement We have a board with a 2×N grid. Snuke covered the board with N dominoes without o ...
- Android编写点击TextView拨打电话
在任何一个电商平台都会有点击了手机号码会拨打出一个电话 那么高如何实现这个功能,我们下来分析下原理 当我们点击了一个电话号码后,会弹出一个Dialog显示是否拨打次电话号码,点击确定拨打号码,点击取消 ...
- delphi弹出信息框大全
1. 警告信息框 MessageBox(Handle,'警告信息框','警告信息框',MB_ICONWARNING);2.疑问信息框 MessageBox(Handle,'疑问信息框','疑问信息框' ...