微信公众号开发(接口配置信息URL和Token)

1、因为再微信公众号开发关键字回复的时候需要使用到接口配置信息URL和Token.

刚开始配置的时候总是失败,原因是自己使用花生壳的外网的端口不是80,所以我将外网端口该为了80,后来配置成功。

重点:1、这个一定是使用外网可以访问的url;2、外网端口一定是80的,好像还有一个不过我忘记啦,自己本地的端口可以随便(我的是8080)3、本地地址可以外网访问的话,可以使用花生壳,(是免费的,可以直接在官网下载,然后注册下就可以啦)4、token是自己随便设置的

 

微信公众号开发(接口配置信息URL和Token)_第1张图片

 1、本地写一个微信访问的方法:

package com.uvksoft.mobile.web.agent.wx;
import javax.servlet.http.HttpServletRequest;
import com.uvksoft.common.util.wx.SignUtil;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.io.PrintWriter;
import java.util.Enumeration;
import javax.servlet.http.HttpServletResponse;
@RestController
public class AgentWeixinReplyController {
	

	

	@RequestMapping(value = "/wx/reply.do")
	public void get(HttpServletRequest request, HttpServletResponse response) throws Exception {

		System.out.println("========WechatController========= ");
		

		Enumeration pNames = request.getParameterNames();
		while (pNames.hasMoreElements()) {
			String name = (String) pNames.nextElement();
			String value = request.getParameter(name);
			// out.print(name + "=" + value);
			String log = "name =" + name + "     value =" + value;
		}
		System.out.println("========WechatControllertets========= ");
		String signature = request.getParameter("signature");/// 微信加密签名
		String timestamp = request.getParameter("timestamp");/// 时间戳
		String nonce = request.getParameter("nonce"); /// 随机数
		String echostr = request.getParameter("echostr"); // 随机字符串
		PrintWriter out = response.getWriter();

		 if (SignUtil.checkSignature(signature, timestamp, nonce)) {  
			 System.out.println("校验成功!!!!!!!!!!!!!");
	          out.print(echostr);  
	      } 
		
		out.close();
		out = null;

	}

}

2、token校验方法

package com.uvksoft.common.util.wx;

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;

/** 
 * 请求校验工具类 
 *  
 * @author HXM 
 * @date 2019-07-6 
 */  
public class SignUtil {  
    // 与接口配置信息中的Token要一致  
    private static String token = "weixinCore";  
  
    /** 
     * 验证签名 
     *  
     * @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;  
    }  
}  

 

你可能感兴趣的:(微信公众号,接口配置信息URL和Token,微信公众号)