现在实习的公司要做微信开发,然而一直没安排任务,所以一直在看微信接口,记录下学习的内容

微信开发肯定要看的就是微信公众平台开发者文档,上面有每种接口的调用格式,刚开始学习的时候自己申请了一个订阅号,个人类型的,这个玩玩还可以,学习的话,貌似有点接口没有权限调用,所以我学习的时候是用的微信测试号,至于测试号的申请,很简单,在文档里面,开发者工具下面就可以看到。

微信开发,第一步,接入指南,看文档上面的

当然,弄这个之前要有一个服务器,或者就应用放在网上,微信后台其实和网站开发后台差不多

url填写域名加action的地址,比如说我的一个servlet ,

@WebServlet("/msg")
public class TestWeixin extends HttpServlet {

那么我的url就应该填写 域名/msg

token是用来校验请求是不是微信服务器发过来的,这里填写的token就是程序里面用的token,

至于EncodingAESKey 随机生成,我自己测试接口的时候没用这个,是以明文形式,真正开发的时候应该会用这个,我还没接触正在的微信开发。

填写完提交后,微信服务器会根据填写的url发get请求,带上4个参数signature,timestamp,nonce,echostr

参数的作用,我就抄开发者文档的:

signature:微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

timestamp:时间戳

nonce:随机数

echostr:随机字符串

加密/校验流程如下:
1. 将token、timestamp、nonce三个参数进行字典序排序
2. 将三个参数字符串拼接成一个字符串进行sha1加密
3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

加密后的字符串和signature相等,则返回echostr,此时校验成功

根据上面的步骤,可以看到,微信服务器是判断是否校验成功 是 根据 是否返回 echostr这个随机字符串的,

如果不进行校验,直接把得到的echostr返回给微信服务器也是可以校验成功的。当然,最好还是进行校验。

校验的代码,就是新建一个servlet

在doGet方法里面进行校验

@WebServlet("/msg")
public class TestWeixin extends HttpServlet {
private static final long serialVersionUID = 1L; private String TOKEN = "luolei";
/**
* @see HttpServlet#HttpServlet()
*/
public TestWeixin() {
super();
// TODO Auto-generated constructor stub
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
String echostr = request.getParameter("echostr"); String[] str={TOKEN,timestamp,nonce};
Arrays.sort(str);
String yanzheng = str[0]+str[1]+str[2];
String result = DigestUtils.sha1Hex(yanzheng.getBytes());
if(result.equals(signature))
{
response.getWriter().print(echostr);
} }

上面的 token换成自己的token

还有DigestUtils.sha1Hex()方法 是commons-codec  jar包里面的类。可以自己搜索怎么sha1加密,

刚刚说了,可以不进行校验,doget里面只留:

String echostr = request.getParameter("echostr");

response.getWriter().print(echostr);

这两行也是可以校验成功的

最后上传服务器,我是用bae应用引擎,上传应用,将得到的二级域名+action的key填到url里面,token按照情况自己填写,就可以了

java微信学习 接入的更多相关文章

  1. Android(java)学习笔记233: 远程服务的应用场景(移动支付案例)

    一. 移动支付:       用户需要在移动终端提交账号.密码以及金额等数据 到 远端服务器.然后远端服务器匹配这些信息,进行逻辑判断,进而完成交易,返回交易成功或失败的信息给移动终端.用户提交账号. ...

  2. Java微信公众平台开发_02_启用服务器配置

    源码将在晚上上传到 github 一.准备阶段 需要准备事项: 1.一个能在公网上访问的项目: 见:[  Java微信公众平台开发_01_本地服务器映射外网  ] 2.一个微信公众平台账号: 去注册: ...

  3. java微信开发API解析(二)-获取消息和回复消息

    java微信开发API解析(二)-获取消息和回复消息 说明 * 本演示样例依据微信开发文档:http://mp.weixin.qq.com/wiki/home/index.html最新版(4/3/20 ...

  4. Java编程学习知识点分享 入门必看

    Java编程学习知识点分享 入门必看 阿尔法颜色组成(alpha color component):颜色组成用来描述颜色的透明度或不透明度.阿尔法组成越高,颜色越不透明. API:应用编程接口.针对软 ...

  5. Wmyskxz文章目录导航附Java精品学习资料

    前言:这段时间一直在准备校招的东西,所以一晃眼都好长时间没更新了,这段时间准备的稍微好那么一点点,还是觉得准备归准备,该有的学习节奏还是要有..趁着复习的空隙来整理整理自己写过的文章吧..好多加了微信 ...

  6. 《Java开发学习大纲文档》V7.0

    <Java开发学习大纲文档>V7.0简介: 本文档是根据企业开发所需要掌握的知识点大纲进行总结汇编,是Java开发工程师必备知识体系,系统化学习针对性非常强,逻辑分析能力非常清晰;技术方面 ...

  7. java后端学习记录2019

    学习计划 2019年计划 1.学习计算机基础,并加以实践.包括LeetCode刷题.数据库原理(索引和锁.Sql优化等).网络协议(Http.Tcp).操作系统(加深Linux).<Http权威 ...

  8. Java工程师学习指南 完结篇

    Java工程师学习指南 完结篇 先声明一点,文章里面不会详细到每一步怎么操作,只会提供大致的思路和方向,给大家以启发,如果真的要一步一步指导操作的话,那至少需要一本书的厚度啦. 因为笔者还只是一名在校 ...

  9. Java工程师学习指南 中级篇

    Java工程师学习指南 中级篇 最近有很多小伙伴来问我,Java小白如何入门,如何安排学习路线,每一步应该怎么走比较好.原本我以为之前的几篇文章已经可以解决大家的问题了,其实不然,因为我写的文章都是站 ...

随机推荐

  1. 2015.7.8(千股跌停!做T不应当只做中色,中国软件)

    2015.7.81.今天开盘所有的股票全部跌停,真是一大奇观! 今天中色股份和以往不同买卖盘为正! 但是中色的爬升比较慢,价位始终没有高过昨天的收盘价————这种情况下是否应该做T呢? 2.做T不应当 ...

  2. CSS清除浮动使父级元素展开的三个方法

    点评:一个没有设置高度的容器div内如果存在浮动元素(即使用了属性float:left或者float:right),那么该父级元素会无法展开,下面举个例子为大家详细介绍下,希望对大家有所帮助 一个没有 ...

  3. 【Topcoder】SRM157 DIV2总结

    250分题:简单的二分,就是平常玩的猜数字游戏 代码:GitHub 500分题:给出一个员工一天的打卡时间段,要求求出员工这一天的工资.其中正常上班时间是6:00:00到18:00:00,薪水是wag ...

  4. 乌云TOP 10 简单介绍

    已知OWASP TOP10的WEB漏洞,乌云出了一个更加符合中国国情的 乌云:Top10 for 2014. A1-互联网泄密事件/撞库攻击 本质上来说是使用了不安全的口令,也许我可以将自己的密码设置 ...

  5. arguments解析

    js中并没有函数重载的概念,但函数的arguments参数能帮助我们模拟重载. arguments并不是真正的数组,但拥有length(参数数目),且能通过数组下标的方式进行访问,例如argument ...

  6. 20145240《Java程序设计》第七周学习总结

    20145240<Java程序设计>第七周学习总结 教材学习内容总结 12.1认识Lambda语法 12.1.1Lambda语法概览 在java中引入了Lambda的同时,与现有API维持 ...

  7. 获取CPU利用率

    #define MB (1024 * 1024) MEMORYSTATUSEX statex; statex.dwLength = sizeof (statex); GlobalMemoryStatu ...

  8. 在Linux终端中查看公有IP的方法详解

    首先回顾一下一般的查看IP的命令: ifconfigLinux查看IP地址的命令--ifconfigifconfig命令用于查看和更改网络接口的地址和参数 $ifconfig -a  lo0: fla ...

  9. jstl标签 c:if和c:choose

    <c:if test="${test == null}">test为null</c:if> 其意思是,如果test 为 null,那么就打印 “test为n ...

  10. 深入Struts2的过滤器FilterDispatcher--中文乱码及字符编码过滤器

    引用 前几天在论坛上看到一篇帖子,是关于Struts2.0中文乱码的,楼主采用的是spring的字符编码过滤器(CharacterEncodingFilter)统一编码为GBK,前台提交表单数据到Ac ...