测试微信号连接的开发的步骤
1申请微信号
2下载ngrok 运行命令“ngrok http 8080”
3打开MYECLIPSE,建工程,并启动TOMCAT,保证项目可访问。
4用ngrok的地址,替换LOCALHOST
5编写一个servlet
CoreServlet类运行后执行校验
package org.liufeng.course.servlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.liufeng.course.service.CoreService;
import org.liufeng.course.util.SignUtil;
/**
* 请求处理的核心类
*
* @author liufeng
* @date 2013-09-01
*/
public class CoreServlet extends HttpServlet {
private static final long serialVersionUID = 4440739483644821986L;
/**
* 请求校验(确认请求来自微信服务器)
*/
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();
// 请求校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
out.print(echostr);
}
out.close();
out = null;
}
/**
* 处理微信服务器发来的消息
*/
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 将请求、响应的编码均设置为UTF-8(防止中文乱码)
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
// 接收参数微信加密签名、 时间戳、随机数
String signature = request.getParameter("signature");
String timestamp = request.getParameter("timestamp");
String nonce = request.getParameter("nonce");
PrintWriter out = response.getWriter();
// 请求校验
if (SignUtil.checkSignature(signature, timestamp, nonce)) {
// 调用核心服务类接收处理请求
String respXml = CoreService.processRequest(request);
out.print(respXml);
}
out.close();
out = null;
}
}
--------------------
CoreService 业务类
package org.liufeng.course.service;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.liufeng.course.message.resp.TextMessage;
import org.liufeng.course.util.MessageUtil;
/**
* 核心服务类
*
* @author liufeng
* @date 2013-12-02
*/
public class CoreService {
/**
* 处理微信发来的请求
*
* @param request
* @return xml
*/
public static String processRequest(HttpServletRequest request) {
// xml格式的消息数据
String respXml = null;
// 默认返回的文本消息内容
String respContent = "发送任意文本,我们开始聊天吧!";
try {
// 调用parseXml方法解析请求消息
Map<String, String> requestMap = MessageUtil.parseXml(request);
// 发送方帐号
String fromUserName = requestMap.get("FromUserName");
// 开发者微信号
String toUserName = requestMap.get("ToUserName");
// 消息类型
String msgType = requestMap.get("MsgType");
// 消息创建时间
String createTime = requestMap.get("CreateTime");
// 文本消息
if (msgType.equals(MessageUtil.REQ_MESSAGE_TYPE_TEXT)) {
String content = requestMap.get("Content");
respContent = ChatService.chat(fromUserName, createTime, content);
}
// 回复文本消息
TextMessage textMessage = new TextMessage();
textMessage.setToUserName(fromUserName);
textMessage.setFromUserName(toUserName);
textMessage.setCreateTime(new Date().getTime());
textMessage.setMsgType(MessageUtil.RESP_MESSAGE_TYPE_TEXT);
textMessage.setContent(respContent);
// 将文本消息对象转换成xml
respXml = MessageUtil.messageToXml(textMessage);
} catch (Exception e) {
e.printStackTrace();
}
return respXml;
}
}
----------------------
SignUtil 类TOKEN设置
package org.liufeng.course.util;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
/**
* 请求校验工具类
*
* @author liufeng
* @date 2013-09-01
*/
public class SignUtil {
// 与开发模式接口配置信息中的Token保持一致
private static String token = "weixinCourse";
/**
* 校验签名
*
* @param signature 微信加密签名
* @param timestamp 时间戳
* @param nonce 随机数
* @return
*/
public static boolean checkSignature(String signature, String timestamp, String nonce) {
// 对token、timestamp和nonce按字典排序
String[] paramArr = new String[] { token, timestamp, nonce };
Arrays.sort(paramArr);
// 将排序后的结果拼接成一个字符串
String content = paramArr[0].concat(paramArr[1]).concat(paramArr[2]);
String ciphertext = null;
try {
MessageDigest md = MessageDigest.getInstance("SHA-1");
// 对接后的字符串进行sha1加密
byte[] digest = md.digest(content.toString().getBytes());
ciphertext = byteToStr(digest);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
// 将sha1加密后的字符串与signature进行对比
return ciphertext != null ? ciphertext.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;
}
}
6 在测试公众号上填写URL(servlet地址)及TOKEN(在类中自定义的字符串)。
7用微信访问即可。
测试微信号连接的开发的步骤相关推荐
- 个人微信号二次开发sdk协议,微信个人号开发API接口
个人微信号二次开发sdk协议,微信个人号开发API接口 微信SDK程序概要说明 个人微信号开发sdk非微信ipad协议.非mac协议,非安卓协议,api可实现微信99%功能: 无需扫码登录.可收发朋友 ...
- 微信小程序支付开发具体步骤
一.支付业务流程图展示 地址:https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=7_4&index=2 ...
- 微信二次修改微信号_微信正测试微信号修改功能:一年只有一次机会
对于许多人来说,或许已经习惯了用自己的手机号表示自己的微信号,添加朋友或者展示什么的都直接用微信号.但是,相信也有不少人因为微信的注册时间比较长远,当年注册的时候,就给自己取了一个比较符合当时的环境的 ...
- 个人微信号二次开发的实现,api接口
各位兄弟姐妹们大家好!!!! 我又瞧到了好玩的微信机器人分享给大家! 社群运营这几年风头正盛,不能落伍啊,我们也赶紧组建了社群. 但是微信群还是社交属性为主的,当我们运营多个社群的时候会发现效率过低, ...
- Xshell 5 连接本地开发板步骤
转载注明出处:http://blog.csdn.net/zou_pl/article/details/78722527 使用xshell软件+串口线,连接本地开发板的步骤:
- 微信机器人/微信号二次开发/IPAD协议开发/个微开发
登录模块 登录微控平台 获取微信二维码 执行微信登录 获取联系人列表(群.好友) 二次登录(退出微信号 需要再次登录 调用此接口即可) 退出微信 消息接收模块 设置消息接收地址 取消消息接收 消息发送 ...
- 个微协议,微信号二次开发/ipad协议
GeWe框架,是完整的第三方服务平台,并基于IPAD协议8.0.37开发出的最新个微API服务框架. 你可以 通过API 实现 个性化微信功能 (例云发单助手.社群小助手.客服系统.机器人等),用来自 ...
- 微信小程序商城开发的流程
今天珍奶bb给大家简单唠唠微信小程序商城开发的流程? 在唠微信小程序商城制作流程前,先给大家科普一下当前的实体经济环境是如何的?制作一个微信小程序商城是否存在它的必要性.不用看具体数据,就直接看我们身 ...
- 从陈坤微信号说起:微信公众平台开发者的江湖
陈坤的微信公众号这段时间大火,企鹅君其实也想发表点意见的,但无奈不懂娱乐圈,姿势不够只有看的份. 不过看来看去吧,发现个问题:大家关注陈坤微信号如何圈钱的同时,就没想过问下,这个微信公众号到底谁做的? ...
最新文章
- 手机网页H5 自适应不同分辨率的屏幕 必学标签meta之viewport
- git——从远程库克隆
- thinkphp去掉index.php
- Android视图绘制流程完全解析,带你一步步深入了解View(二)
- 史蒂夫·乔布斯很懂团队建设
- python 转成摩尔斯电码_一篇文章教会你摩尔斯码
- Vulhub 靶场下载使用
- Amazon Alexa 新里程碑: 50000 个功能、 20000 种设备、 3500 个品牌
- 最有用的Postgres扩展:pg_stat_statements
- 2013年6月13日星期四
- TensorFlow tf.keras.losses.BinaryCrossentropy
- android生成错误日志文件,android Crash日志写入文件
- 【Gym-102059 G】Fascination Street【亏欠型DP思想】
- 基于SpringBoot开发的后台管理、系统脚手架Github\Gitee收集
- c语言观察程序流程图,程序流程图的画法
- 腾讯云不同账号之间VPC网络直接建立内网通讯
- OpenGL: WIN7的64BIT下OPENGL着色语言(GLSL)开发环境配置
- 解决Mybatis报错并分析原因:Invalid bound statement (not found): com.xxx.mapper.xxx
- 3DES解密之网页解密(xhr断点及追栈)
- Entry name *.xml collided终极解决方案