springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证

综合笔者多年的微信公众号以及微信产品开发经验,本篇内容把微信公众号测试账户的接口配置过程分享给广大开发者朋友,开发语言是Java,采用目前流行的springmvc框架开发。

开发前必读以及准备工作:

1、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请开发者前往微信开放平台接入。

2、在申请到认证公众号之前,开发者可以先通过测试号申请系统,快速申请一个接口测试账号,立即开始接口测试开发。

微信公众号测试账号官方申请链接:http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login微信扫描关注后登录

登录进来后即可看到申请的微信公众号测试账号信息以及appID和appsecret

一、接口开发

请求方式:http get请求(只能用get方式)

@Controller
@RequestMapping(value = "msg")
public class WeChatActionController {
    /**
     * 微信消息接收和token验证
     * @param request
     * @param response
     * @throws IOException
     */
    @RequestMapping("/weChatToken")
    public void weChat(HttpServletRequest request, HttpServletResponse response) throws IOException {
        boolean isGet = request.getMethod().toLowerCase().equals("get");
        if (isGet) {
            // 微信加密签名
            String signature = request.getParameter("signature");
            // 时间戳
            String timestamp = request.getParameter("timestamp");
            // 随机数
            String nonce = request.getParameter("nonce");
            // 随机字符串
            String echostr = request.getParameter("echostr");
            // 通过检验signature对请求进行校验,若校验成功则原样返回echostr,表示接入成功,否则接入失败
            if (signature != null && CheckoutUtil.checkSignature(signature, timestamp, nonce)) {
                try {
                    PrintWriter print = response.getWriter();
                    print.write(echostr);
                    print.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

 检验微信加密签名信息的工具类

public class CheckoutUtil {

    // 与测试账号接口配置信息中的Token要一致
    private static String token = "999";

    /**
     * 验证签名
     * @param signature
     * @param timestamp
     * @param nonce
     * @return
     */
    public static boolean checkSignature(String signature, String timestamp, String nonce) {
        String[] arr = new String[] { token, timestamp, nonce };
         Arrays.sort(arr);// 将token、timestamp、nonce三个参数进行字典序排序
        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 = byteToHex(digest );
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        // 将sha1加密后的字符串可与signature对比,标识该请求来源于微信
        return tmpStr != null ? tmpStr.equals(signature) : false;
    }

    //十六进制字节数组转为字符串
    private static String byteToHex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash) {
            formatter.format("%02x", b);
        }
        String result = formatter.toString();
        formatter.close();
        return result;
    }
}

二、配置接口信息

点击接口配置信息右侧的修改,填写接口的url和Token(任意填写都可以)提交。这个url用于服务端验证此处配置的Token

点击提交,显示Token验证成功,至此微信公众号测试账号接口配置以及Token验证已经完成,接着为了拥有微信更多的JS接口调用权限,继续按照下面过程配置JS安全接口域名。

三、配置JS接口安全域名

JS接口安全域名右侧的修改,填入上面配置的域名信息(注意是域名,不带http,不带www,例如:baidu.com)

四、配置网页授权

填写安全域名(跟上面的一样,填写域名信息,不带http,不带www)

更多JavaEE资料请关注下面公众号,欢迎广大开发者朋友一起交流。笔者电话(微信):18629374628 

发布了81 篇原创文章 · 获赞 125 · 访问量 20万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览