java微信学习 接入

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

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

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

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

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 stubString 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按照情况自己填写,就可以了

转载于:https://www.cnblogs.com/luolei/p/4682647.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/471742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

钉钉老版本下载3.31_钉钉3.3.1老版本官方下载-钉钉3.3.1旧版本PC版官方版-东坡下载...

钉钉是由阿里巴巴研发的一款办公聊天工具,是新一代的团队沟通模式,该软件内置强大的办公功能,主要功能有传输文件,发送文字、语音、图片等,消息阅读以及外出打卡等功能,在这里为大家提供的是钉钉3.3.1旧版本…

Android 引用模块中的类,解决Android项目中找不到Module中的封装类或引用的第三方类库...

在日常开发中,现在越来越流行模块化开发,这就需要将项目分成不同的Module进行同时开发,最后在app层进行整合调用,但是不少开发人员都因为在build中添加关联代码,而找不到Module中封装的方法或引用的类库。下面就给大家…

LeetCode 1976. 到达目的地的方案数(迪杰斯特拉 Python 优先队列)

文章目录1. 题目2. 解题1. 题目 你在一个城市里,城市由 n 个路口组成,路口编号为 0 到 n - 1 ,某些路口之间有 双向 道路。 输入保证你可以从任意路口出发到达其他任意路口,且任意两个路口之间最多有一条路。 给你一个整数 n 和…

shell:读取文件的每一行内容并输出

写法一&#xff1a;#!/bin/bash while read linedoecho $linedone < file(待读取的文件)写法二&#xff1a; #!/bin/bash cat file(待读取的文件) | while read linedoecho $linedone写法三&#xff1a;for line in cat file(待读取的文件)doecho $linedone以上三种写法都…

c++ sendmessage 鼠标 坐标是相对自身吗_【科普】你真的足够了解五轴加工吗?看完豁然开朗!...

近年来五轴联动数控加工中心在各领域得到了越来越广泛的应用。在实际应用中&#xff0c;每当人们碰见异形复杂零件高效、高质量加工难题时&#xff0c;五轴联动技术无疑是解决这类问题的重要手段。越来越多的厂家倾向于寻找五轴设备来满足高效率、高质量的加工。但是&#xff0…

32g内存 android开发,16G走开 我要32G内存的安卓手机

对于很多用户来说&#xff0c;在准备换手机的时候最纠结的莫过于是选择16G的还是32G的&#xff0c;毕竟价格相差好几百&#xff0c;但这里给你的建议是买32G的&#xff0c;即使贵点&#xff0c;但长远来说&#xff0c;是利大于弊的&#xff0c;为什么这么说呢&#xff0c;且听小…

python 上下文管理器、 else 块、@contextmanager

文章目录1. else2. with上下文管理器3. contextlib模块实用工具4. contextmanager 装饰器learn from 《流畅的python》 1. else for/else、while/else 和 try/else 前两者 只有在 没有被break 时&#xff0c;才会运行 else try 块中没有异常抛出时 才运行 else for i in ran…

ios 异常捕获

try {autoreleasepool {return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));}}catch (NSException *exception) {NSLog("exception%", exception.description);}finally {} 在ios中经常会使用try catch finally捕获异常, 也可以使用…

andriod studio 运行 无结果_无负压静音供水设备下篇一

1、无负压静音供水设备的安全接地保护a )控制柜的金属柜体上应有可靠的接地保护&#xff0c;与接地点相连的保护导线的截面应符合GB/T3797-2005中4.10.6的规定。与接地点连接的导线必须是黄、绿双色或铜编织线&#xff0c;并有明显的接地标识。a) 主接地点与设备任何有关的、因…

html设置div页面最底,使用css让大图片不超过网页宽度

让大图片不超过网页宽度&#xff0c;让图片不撑破通过CSS样式设置的DIV宽度&#xff01;接下来&#xff0c;我们来介绍下网站在开发DIVCSS的时候会遇到一个问题&#xff0c;在发布一个大图片的时候因为图片过宽会撑破自己设置的div宽度的问题。图片撑破布局原因1、由于浏览器版…

css3列表属性

</head> <!--first-child--给元素中的第一个子表签改变效果--> <style> li:first-child{ background-color:#00F; } /*last-child--给元素中最后一个标签改变效果*/ li:last-child{ background-color:#0F9; } /*li:nth-child()--给指定的位置添加属性&#x…

java上机题四取三排列_java语言特性概述

一.前言 我们都知道java是面向对象的编程&#xff0c;其中四个基本特性&#xff1a;抽象、封装、继承、多态。这四个特性&#xff0c;概括起来可以这么理解&#xff0c;抽象、封装、继承是多态的基础&#xff0c;多态是抽象、封装、继承的表现。二. JAVA 语言特点 a) 跨平台&am…

LeetCode 1984. 学生分数的最小差值

文章目录1. 题目2. 解题1. 题目 给你一个 下标从 0 开始 的整数数组 nums &#xff0c;其中 nums[i] 表示第 i 名学生的分数。另给你一个整数 k 。 从数组中选出任意 k 名学生的分数&#xff0c;使这 k 个分数间 最高分 和 最低分 的 差值 达到 最小化 。 返回可能的 最小差…

django 修改html无变化,Django Pycharm 修改html后立即刷新页面

写项目时需要页面实时刷新&#xff0c;而不是频繁人肉重启项目。测试过dj-static&#xff0c;django-livereload-server&#xff0c;此处使用livereload包,简单好用。仅在debugFalse时生效&#xff0c;不过可以满足调试需求了。安装pip install livereload如果报错&#xff1a;…

C++中vector使用详细说明 (转)

转自&#xff1a;http://blog.chinaunix.net/uid-26000296-id-3785610.html http://www.cnblogs.com/mr-wid/archive/2013/01/22/2871105.html 一、向量的介绍 向量 vector 是一种对象实体, 能够容纳许多其他类型相同的元素, 因此又被称为容器。 与string相同, vector 同属于…

c++ 一行输出八个数字_R语言笔记(三):数据输入与输出

本文主要介绍数据基本的输入与输出方法&#xff0c;内容包括&#xff1a;1. 数据的输入1.1 scan(), edit(), fix()1.2 调用 R 包自带数据1.3 调用本地数据2. 数据的输出1. 数据的输入1.1 scan(), edit(), fix()手动输入数据主要有以下几种方式&#xff1a;x <- c() # c() 进…

html表单action属性值,HTML中的form表单中的action属性

用户提问在一本书中&#xff0c;在一个处理用户注册的html里&#xff0c;作者把action的值设为"regist.jsp"&#xff0c;如下&#xff1a;function on_submit(){ if (form1.username.value""){ alert("用户名不能为空&#xff0c;请输入用户名&#x…

LeetCode 1985. 找出数组中的第 K 大整数(排序)

文章目录1. 题目2. 解题1. 题目 给你一个字符串数组 nums 和一个整数 k 。 nums 中的每个字符串都表示一个不含前导零的整数。 返回 nums 中表示第 k 大整数的字符串。 注意&#xff1a;重复的数字在统计时会视为不同元素考虑。 例如&#xff0c;如果 nums 是 [“1”,“2”,…

gitosis随记

0、创建git用户 useradd -m git passwd git 1、安装脚本工具&#xff08;gitosis依赖python&#xff09; apt-get install python-setuptools 2、git clone源码 git clone https://github.com/tv42/gitosis.git cd gitosis sudo python setup.py install 3、安装gitosis *id_ds…

firefox应用自动全屏显示_【b】—自动化测试:基础selenium—API

一、浏览器对象# 导入webdriverfrom selenium import webdriver# 创建一个浏览器对象driver webdriver.Firefox()# 设置全屏# driver.maximize_window()# 获取当前浏览器尺寸# size driver.get_window_size()# print(size)# 设置浏览器尺寸driver.set_window_size(400, 400)s…