微信公众号平台开发者文档 https://mp.weixin.qq.com/wiki/home/index.html(在这里可以进行微信测试号的申请)
申请时需要有一个自己的域名,如果没有的话就可以用微信ngrok, 下载地址 http://ngrok.2bdata.com/
验证服务器有效性
首先进入到测试号管理界面可以看到接口配置信息,第一次进入url和token是没有的。
填写你服务器的访问地址及token,Token按照自己的需求随意设置。验证方法如下:
参考官方文档:
点击打开链接
根据填写的服务器访问地址接收相应参数进行验证,代码示例:
- import java.security.MessageDigest;
- import java.security.NoSuchAlgorithmException;
- import java.util.Arrays;
- /**
- * 微信工具类
- *
- */
- public class WxUtils {
- /**
- * 验证消息合法性
- * @param signature
- * @param paraStr
- * @return
- * @throws NoSuchAlgorithmException
- */
- public static boolean checkSingature(String signature,String...paraStr) throws NoSuchAlgorithmException {
- // 按字典顺序排序
- Arrays.sort(paraStr);
- // 字符串拼接
- StringBuilder content = new StringBuilder();
- for (String string : paraStr) {
- content.append(string);
- }
- // sha1加密
- MessageDigest md = MessageDigest.getInstance("SHA-1");
- byte[] digest = md.digest(content.toString().getBytes());
- String testingStr = byteArrayToHexString(digest);
- // 比较返回
- if (testingStr.equalsIgnoreCase(signature.toUpperCase())) {
- return true;
- }
- return false;
- }
- // 将字节数组转换为十六进制字符串
- private static String byteArrayToHexString(byte[] bytearray) {
- String strDigest = "";
- for (int i = 0; i < bytearray.length; i++) {
- strDigest += byteToHexString(bytearray[i]);
- }
- return strDigest;
- }
- // 将字节转换为十六进制字符串
- private static String byteToHexString(byte ib) {
- char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
- 'B', 'C', 'D', 'E', 'F' };
- char[] ob = new char[2];
- ob[0] = Digit[(ib >>> 4) & 0X0F];
- ob[1] = Digit[ib & 0X0F];
- String s = new String(ob);
- return s;
- }
- }
对验证消息进行封装,以便下次直接调用,在访问路径中进行服务器验证,jsp中代码示例:
- <%@page import="com.weixin.utils.WxUtils"%>
- <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
- <%
- //在接口配置信息设置的Token
- String token = "jsharelife";
- //接收微信服务器三个参数
- String signature = request.getParameter("signature");
- String timestamp = request.getParameter("timestamp");
- String nonce = request.getParameter("nonce");
- //进行验证
- try{
- if(WxUtils.checkSingature(signature,token,timestamp,nonce)){
- //返回echostr
- response.getOutputStream().print(request.getParameter("echostr"));
- out.clear();
- out = pageContext.pushBody();
- }
- } catch(Exception e) {
- e.printStackTrace();
- }
- %>
然后再接口配置界面点击提交,会显示是否验证成功。