微信公众号java后端开发记录(一):公众号后台设置

·微信公众号后端开发文档:

https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1421140842

·开始一些必须设置解读:

登陆公众号后台,进行开发者设置===》https://mp.weixin.qq.com/

1.网页授权域名设置

微信公众号java后端开发记录(一):公众号后台设置_第1张图片

具体设置

微信公众号java后端开发记录(一):公众号后台设置_第2张图片

2.ip白名单配置(白名单来源的ip才可获得access_token)

access_token是公众号的全局唯一接口调用凭据,公众号调用各接口时都需使用access_token。开发者需要进行妥善保存。access_token的存储至少要保留512个字符空间。access_token的有效期目前为2个小时,需定时刷新,重复获取将导致上次获取的access_token失效。

 

微信公众号java后端开发记录(一):公众号后台设置_第3张图片

3.服务器配置(可做自定义回复、跳转)

微信公众号java后端开发记录(一):公众号后台设置_第4张图片

·后端接入指南原理:

开发者提交信息后,微信服务器将发送GET请求到填写的服务器地址URL上,GET请求携带参数如下表所示:

参数   描述
signature     微信加密签名,signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。
timestamp     时间戳
nonce      随机数
echostr     随机字符串


开发者通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。加密/校验流程如下:

1)将token、timestamp、nonce三个参数进行字典序排序

2)将三个参数字符串拼接成一个字符串进行sha1加密

3)开发者获得加密后的字符串可与signature对比,标识该请求来源于微信

意思是说:对微信服务器发过来消息忠token、timestamp、nonce三个参数进行加密处理,然后加密得到的字符串与signature微信加密签名相比较,如果相等则返回echostr随机字符串。

·下面是后端提供回调接口:

@Slf4j
@Api(tags = {"微信回调API"})
@Controller
@RequestMapping("/plutoadmin/wechat")
public class WechatController {

    //公众号授权验签
    @ApiOperation(value = "公众号授权验签", notes = "公众号授权验签")
    @RequestMapping(value = "/getWechatPublicAuthorization", method = RequestMethod.GET)
    @ResponseBody
    public String getWechatPublicAuthorizationHttpServletRequest(String signature, String timestamp, String nonce, String echostr) {
        if (WxPublicCheckSignature.checkSignature(signature, timestamp, nonce)) {
            // 如果校验成功,将得到的随机字符串原路返回
            log.info("验签字符串:{}", echostr);
            return echostr;
        }
        return "验签错误";
    }
}

验签工具类(网上很多此类代码):

/**
 * @author hanyy
 * @Description: 公众号后台验签
 * @date 2019/8/21 18:18
 */
public class WxPublicCheckSignature {
    public static final String tooken = "Alan"; //开发者自行定义Token

    public static boolean checkSignature(String signature, String timestamp, String nonce) {

        //1.定义数组存放tooken,timestamp,nonce
        String[] arr = {tooken, timestamp, nonce};
        //2.对数组进行排序
        Arrays.sort(arr);
        //3.生成字符串
        StringBuffer sb = new StringBuffer();
        for (String s : arr) {
            sb.append(s);
        }

        //4.sha1加密,网上均有现成代码
        String temp = getSha(sb.toString());
        //5.将加密后的字符串,与微信传来的加密签名比较,返回结果
        return temp.equals(signature);
    }

    public static String getSha(String str) {

        if (str == null || str.length() == 0) {
            return null;
        }

        char hexDigits[] = {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
                'a', 'b', 'c', 'd', 'e', 'f'};
        try {
            MessageDigest mdTemp = MessageDigest.getInstance("SHA1");
            mdTemp.update(str.getBytes("UTF-8"));
            byte[] md = mdTemp.digest();
            int j = md.length;
            char buf[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                buf[k++] = hexDigits[byte0 >>> 4 & 0xf];
                buf[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(buf);
        } catch (Exception e) {
            // TODO: handle exception
            return null;
        }
    }
}

➡接口编写完成后,将验签接口填入url,注意token要填写后端验签工具类中定义的token,否则无法验签完成

➡点击提交,若正常提交,则回调验签成功,服务器配置成功~

➡常见错误:token验证失败 这就是微信回调验签失败,检查一下后端代码。

➡注意:点击右侧启用后会提示自定义菜单会失效,所以目前暂未启用。

微信公众号java后端开发记录(一):公众号后台设置_第5张图片

 

4.推送消息模板设置

根据业务需要去模板库搜索,消息模板格式无法自定义,只可以改模板内容

微信公众号java后端开发记录(一):公众号后台设置_第6张图片

申请好模板,把模板id配置到后端配置文件里,防止模板变更,一个模板对应一个唯一模板id。

你可能感兴趣的:(wechat)