继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

Java调用微信登录以及eclipse 远程调试

幕布斯6054654
关注TA
已关注
手记 1303
粉丝 221
获赞 1015

前言:

这些年微信异常火爆,甚至爷爷奶奶辈的人都会用微信。所以很多网站都支持用微信账号登录,那么接下来就来看看如何当用户通过微信访问我们的链接时,我们如何获取到该用户的微信公开资料,以及如何用eclipse 远程调试代码。
(本文的前提是有一个可以在阿里云上运行的web项目)。

一、微信测试号的连接与申请:

1、编写servlet响应测试号:

当用户关注我们的测试号(公众号)时,微信测试号便会发请求到我们配置好的URL中,我们现在就要编写这个响应的URL对应的程序,这样才能顺利连通。
需要编写两个类:
SignUtil.java

/**
 * 微信请求校验工具类
 * 校验在微信公众平台填写的配置
 */public class SignUtil {    // 与接口配置信息中的Token要一致
    private static String token = "meilianMall";    /**
     * 验证签名
     * 
     * @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去响应微信测试号。
WechatController.java

/**
 * 获取微信信息的controller
 * @author zhu
 *
 */@Controller// 一会儿微信测试号url就设置上这个路由@RequestMapping("wechat")public class WechatController {    private static Logger log = LoggerFactory.getLogger(WechatController.class);    @RequestMapping(method = {RequestMethod.GET})    public void doGet(HttpServletRequest request, HttpServletResponse response) {
        log.debug("##########################  wechat get  ###########################");        // 微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数,nonce参数
        String signature = request.getParameter("signature");        // 时间戳
        String timestamp = request.getParameter("timestamp");        // 随机数
        String nonce = request.getParameter("nonce");        // 随机数字符串
        String echostr = request.getParameter("echostr");        // 通过检验signature对请求进行校验,若成功就返回echostr
        PrintWriter out = null;        try {
            out = response.getWriter();            if (SignUtil.checkSignature(signature, timestamp, nonce)) {
                log.debug("#########################  success  ##########################");
                out.print(echostr);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {            if (out != null) {
                out.close();
            }
        }
    }

}

这个类有个路由,等下在微信公众平台配置时就填写这个路由。

完成以上两个类,把程序重新部署到阿里云上。

2、微信测试号申请:

①、访问微信测试号申请

②、微信扫码登录公众平台,然后就会出现如下界面,并做相关配置:

webp

图片发自简书App


还有一处需要配置,如下图:


webp



作者:贪挽懒月
链接:https://www.jianshu.com/p/ef4ac23dfefa


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP