java微信开发平台_Java微信公众平台开发(1) 接入微信公众平台
前面几篇文章一直都在说微信公众平台的开发准备工作,那么从这篇开始我们就将正式的进入JAVA微信公众平台开发的整个流程,那么这篇我们开始聊聊如何将我们的服务端和微信公众平台对接!
(一)接入流程解析
通过上面我们可以看出其中接入微信公众平台开发,开发者需要按照如下步骤完成:
填写服务器配置
验证服务器地址的有效性
依据接口文档实现业务逻辑
按照上面的逻辑可能是填写服务器配置信息是在第一步,但是我们在真实的开发过程中往往都是先做第二步【编写代码实现验证服务器地址的有效性】,因为没有第二步的完成第一步的配置是不能达到任何效果的!
(二)验证服务器有效性代码编写
按照开发文档我们知道我们的应用服务器需要接受微信服务器的get请求,其中包含四个参数(signature、timestamp、nonce、echostr)然后通过校验方式校验服务器的可靠性,校验方式如下:
将token、timestamp、nonce三个参数进行字典序排序
将三个参数字符串拼接成一个字符串进行sha1加密
开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
①我在这里写了一个工具类去实现其中的前两步,将三个参数排序并返回sha1加密后的字符串,代码如下:
package com.cuiyongzhi.wechat.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* ClassName: SignUtil
* @Description: 请求校验工具类
* @author dapengniao
* @date 2016年3月4日 下午6:25:41
*/
public class SignUtil {
// 与接口配置信息中的Token要一致
private static String token = "dapengniaowechat";
/**
* 验证签名
* @param signature
* @param timestamp
* @param nonce
* @return
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
String[] arr = new String[] { token, timestamp, nonce };
// 将token、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;
}
}
②将我们的工具类应用到我们的服务器验证过程中,这里我新建一个controller为WechatSecurity,实现同一个get用于接收参数和返回验证参数,简单代码如下:
package com.cuiyongzhi.wechat.controller;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.cuiyongzhi.wechat.util.SignUtil;
@Controller
@RequestMapping("/wechat")
public class WechatSecurity {
private static Logger logger = Logger.getLogger(WechatSecurity.class);
/**
*
* @Description: 用于接收get参数,返回验证参数
* @param @param request
* @param @param response
* @param @param signature
* @param @param timestamp
* @param @param nonce
* @param @param echostr
* @author dapengniao
* @date 2016年3月4日 下午6:20:00
*/
@RequestMapping(value = "security", method = RequestMethod.GET)
public void doGet(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = "signature", required = true) String signature,
@RequestParam(value = "timestamp", required = true) String timestamp,
@RequestParam(value = "nonce", required = true) String nonce,
@RequestParam(value = "echostr", required = true) String echostr) {
try {
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
PrintWriter out = response.getWriter();
out.print(echostr);
out.close();
} else {
logger.info("这里存在非法请求!");
}
} catch (Exception e) {
logger.error(e, e);
}
}
@RequestMapping(value = "security", method = RequestMethod.POST)
// post方法用于接收微信服务端消息
public void DoPost() {
System.out.println("这是post方法!");
}
}
那么到这里我们的服务器验证的代码就基本完成了,下面我们就进入验证过程!
(三)服务器验证
这里我用来验证的是我的个人公众号【崔用志】,如果大家有兴趣可以搜索看到的,通过微博认证的一个私人号,当然有想法在这里我们也是可以一起交流的,验证方法如下图:
点击【提交】成功之后如下图所示:
点击图中【启用】即可,那么到这里我们的服务器接入配置就完成了,【下一篇我们将讲述如何接收消息并进行消息处理】,感谢你的翻阅,如有疑问可以留言讨论!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
java微信开发平台_Java微信公众平台开发(1) 接入微信公众平台相关推荐
- 微信上的Siri:小i机器人首次接入微信语音API
微信上的Siri:小i机器人首次接入微信语音API 不久前我们曾介绍过微信开放系统API,首次和印象笔记合作,可以将聊天内容无缝保存到印象笔记.除印象笔记外,智能语音助手小i机器人也是首批获得微信系统 ...
- 微信公众号 - H5 网页接入微信支付(JSAPI)
前言 假设您已经申请成为微信商户(认证)且各项配置弄好了,并且开通 JSAPI 支付等,只差代码(前端)编写. 如果你之前不了解,强烈建议 先看一遍如下标注的文档: [官方文档]网页客户端(H5),需 ...
- 【微信小程序】2、SpringBoot整合WxJava接入微信客服
上篇文章中已经开启了微信小程序的消息推送:[微信小程序]1.SpringBoot整合WxJava开启消息推送,接下来我们就对微信中用户发送的客服消息,转发到微信客服来处理回复 1.添加微信客服 登录微 ...
- 微信公众号一、接入微信并实现机器人自动回复功能
一.说明 微信公众平台 https://mp.weixin.qq.com/cgi-bin/loginpage?t=wxm2-login&lang=zh_CN 测试平台 https://mp.w ...
- 公众号H5页面接入微信登录流程
起步 首先创建一个项目,我们采用uni-app来作为我们的前端框架 环境安装 全局安装vue-cli npm install -g @vue/cli 创建uni-app 使用正式版(对应HBuilde ...
- java的开发工具_Java中常用的开发工具有哪些
Eclipse 据数据显示很多Java开发人员的Java开发工具便是Eclipse,这主要得益于Eclipse是一个开源的.可以基于Java的可扩展开发平台.Eclipse本身而言,它只是一个框架 ...
- java数据类型的站位_Java 数据类型在实际开发中应用
在前边的文章中,我已经介绍了Java核心的容器IO等,现在我来说一下java中的数据类型.在java中,一切东西皆为对象(这句话意思是java中绝大数情况都用对象),极少数不是对象的,也存在与之对应的 ...
- java 安卓项目案例_Java - 随笔分类 - android开发实例 - 博客园
随笔分类 - Java 摘要:1.使用标准输入串对象System.inSystem.in.read()一次只读入一个字节数据,而我们通常要取得一个字符串或一组数字,这就很不适合,需要其他方法取得这样的 ...
- java订单实现的_java订单系统的开发
问题Exceptioninthread"main"java.lang.NoSuchMethodError:mainPressandkeytocontinue..代码是importj ...
- java axis2小实例_java webservice axis2简单开发实例
Web Service学习之axis 看着网上的资料学习了一下,做点笔记以防以后忘记. 一.准备工作: 到axis官方网站下载相应的jar包,我下的是1.4final版. http://www.doc ...
最新文章
- 数据连接池的工作机制是什么?
- Ingress 继任者 Gateway API 使用
- .NET技术 ASP.NET中常用的文件上传下载方法(多文件上传)
- 计算机一级b考试理论知识,计算机一级b-一级计算机等级考试中的“一级B”指什么?谢谢! 爱问知识人...
- github gitlab BitBucket
- 静态网站任何优化怎么设置_网站关键词怎么设置对网站推广优化有利?
- 有关HL7 的C# 源码
- debian搭建php mysql_Debian下MySQL安装经验分享
- Git协助方式:Fork项目开发新功能并使用Pull-Request把新特性推送给原项目
- qt QMessageBox 中文乱码的问题
- Android查看CPU和GPU使用率
- python xml第三方库_我应该使用哪个python XML库?
- 浅谈A*算法如何演变为rrt算法
- Selenium2学习笔记一
- Yii2汉字转拼音类
- 实验3:搜索算法求解8数码问题
- 读高明之《帛書老子校注》
- 北京CBD核心区有哪些值得加入的科技公司
- 2021-2025年中国SWIR-InGaAs光电二极管线阵行业市场供需与战略研究报告
- 某手app的__NS_sig3,sig,__NStokensig算法