实现微信分享springboot后端demo

2019-05-23  本文已影响0人  挡不住的柳Willow

前言

微信的开发文档写的像一坨屎,并且只有php的demo,非常不友好

api简介

前端通过jsapi调用微信接口之前,都需要初始化,主要需要appId, timestamp, noceStr, signature,其中appId是静态的,由公众号后台提前配置好,timestamp, noceStr, signature都是动态的,一般通过java后端通过接口来提供,因此本文的重点就是后端如何处理获取并返回timestamp, noceStr, signature

image.png

主要流程

/**
* WxRequest是一个包含了微信传过来的四个参数的实体类,返回true表示验证成功
**/
public boolean valid(WxRequest request){
        String signature = request.getSignature();
        String timestamp = request.getTimestamp();
        String nonce = request.getNonce();
        String echostr = request.getEchostr();
        
        String token = "你在配置页面填写的Token";

        String[] arr = new String[]{token, timestamp, nonce};
        Arrays.sort(arr);
        // 2. 将三个参数字符串拼接成一个字符串进行sha1加密
        StringBuilder content = new StringBuilder();
        for (String anArr : arr) {
            content.append(anArr);
        }

        MessageDigest md = MessageDigest.getInstance("SHA-1");
        byte[] digest = md.digest(content.toString().getBytes());
        tmpStr = byteToStr(digest);
        return tmpStr != null && tmpStr.equals(signature.toUpperCase());
}


private static String byteToStr(byte[] byteArray) {
        StringBuilder strDigest = new StringBuilder();
        for (byte aByteArray : byteArray) {
            strDigest.append(byteToHexStr(aByteArray));
        }
        return strDigest.toString();
    }

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];
        return new String(tempArr);
    }
上一篇 下一篇

猜你喜欢

热点阅读