微信公众号开发(一)微信验证开发者服务器接口

微信验证开发者服务器接口

微信验证开发者服务器接口

  • 如图所示,开发者可填写自己服务器的验证token的接口地址,以及自定义的token(博主申请的测试号,使用natapp来进行内网穿透)
  • 目的:帮助微信服务器和开发者服务器互相识别,以防恶意攻击
  • 流程图如下(不知道博客园怎么显示md流程图,有知道的仁兄告知):(取自微信公众平台技术文档)
    
    
    st=>start: 开启服务
    ipop1=>inputoutput: 接收到数据【不确定是谁发来的】
    op1=>operation: 尝试提取出signature字段,timestamp字段,nonce字段,echostr字段
    cd1=>condition: 字段均提取成功?
    op2=>operation: token赋值为基本配置中的信息
    op3=>operation: token,timestamp,nonce字段排序得到字符串list
    op4=>operation: 哈希算法加密list得到hashcode
    cd2=>condition: hashcode == signature?
    op5=>operation: 确定该数据源是微信后台
    ipop2=>inputoutput: 把echostr返回给微信后台,供微信后台认证Token
    ed=>end: 继续其他服务
    op6=>operation: 确定该数据源不是微信后台
    ipop3=>inputoutput: 不处理
    st->ipop1->op1->cd1->op2->op3->op4->cd2->op5->ipop2->ed
    cd1(yes)->op2
    cd1(no)->op6->ipop3->ed
    cd2(yes)->op5
    cd2(no)->op6

  • java代码实现如下:
    @GetMapping("/getToken")
    @ResponseBody
    public String getToken(TokenDTO tokenDTO, HttpServletResponse response){
        if ((StringUtils.isBlank(tokenDTO.getSignature()) || StringUtils.isBlank(tokenDTO.getTimestamp()) || StringUtils.isBlank(tokenDTO.getNonce()) || StringUtils.isBlank(tokenDTO.getEchostr()))) {
            return "";
        }
        String[] arr = new String[]{tokenDTO.getTimestamp(), WeixinConstant.token, tokenDTO.getNonce()};
        Arrays.sort(arr);
        StringBuffer sb = new StringBuffer();
        sb.append(arr[0]).append(arr[1]).append(arr[2]);
        String hash = null;
        try {
            hash = new String(Hex.encodeHex(MessageDigest.getInstance("SHA-1").
                    digest(sb.toString().getBytes(Constant.charset))));
        } catch (UnsupportedEncodingException | NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return (StringUtils.isNoneBlank(hash) && hash.equals(tokenDTO.getSignature()))
                ? tokenDTO.getEchostr() : "";
    }

原文地址:https://www.cnblogs.com/tswhq/p/8157795.html

时间: 2024-10-11 21:09:30

微信公众号开发(一)微信验证开发者服务器接口的相关文章

微信公众号开发 (微信网页开发)

微信支付搞完之后,也开始了微信其他功能,不得不说,微信写得接口都比较齐全和标准,附上微信公众号开发文档链接,仔细阅读,必须严格按照其规则,才能调用微信的接口. 最近做了一个手机端调用微信接口打开摄像头进行扫描二维码功能和调用上传下载图片的接口,注意,在微信公众号配置要注意,[开发]-[接口权限] 查看对应的接口权限是开通了没有?最主要的是,还要在[公众号设置]-[功能设置]-[JS接口安全域名]配置,切记,一定是备案过的,一级二级都可以. 附上图片: 配置完此项之后,还有个地方需要配置的,需要特

.NET微信公众号开发-初始微信公众号

一.前言 微信公众号是开发者或商家在微信公众平台上申请的应用账号,该帐号与QQ账号互通,通过公众号,商家可在微信平台上实现和特定群体的文字.图片.语音.视频的全方位沟通.互动 .形成了一种主流的线上线下微信互动营销方式. 二.开发准备 在开发以前,公司给你把一些资料准备好,这时候你只需要登录微信公众平台https://mp.weixin.qq.com.启动我们的开发者模式 这些工作都准备好了就可以开始我们的编码工作了. 三.开始编码 第一步:我们要做的就是创建菜单.菜单分为一级菜单,二级菜单,官

微信公众号开发教程 微信小程序

PHP微信公众平台开发高级篇 http://www.imooc.com/u/197650/courses?sort=publish 微信小程序教程 .链接:http://pan.baidu.com/s/1slmAwDf 密码:ciry

【笔记——微信】微信公众号开发之微信验证

以上是整个流程 所需配置包括: 1.在微信公共号设置页面填写自己服务器的地址,具体到接收请求的地址. 2.在接受请求的地址进行验证. 具体实现:(Tomcat 作为服务器,jsp技术实现) 微信会要求对填写的地址进行验证,很简单,他会发送一个get请求到填写的地址,获取他,并按照官方说明进行返回,这一步骤也是为了自己的服务器安全,可以区别改请求是否来自微信官方服务器. 1 protected void doGet(HttpServletRequest req, HttpServletRespon

微信公众号开发系列-微信企业号开发相关参数

微信企业号出来之后,本人也抱着前面开发订阅号和服务号的经验来探究了一番,这里整理了下再开发企业号时候碰到的一些接口参数.企业号开发文档详见http://qydev.weixin.qq.com/wiki/index.php?title=首页 1.创建自定义菜单参数解释: 菜单管理的创建操作,官方定义如下所示. 请求说明 Https请求方式: POST https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_TOKEN&

微信公众号开发之微信支付

前几天因为公司项目需求,要做一个用微信在线充值的功能,就是在微信的浏览器里面点击一个网页调起微信支付,现在大致来说一下微信支付之公众号支付的开发流程: 首先你的公众号必须是认证服务号,要开通了微信支付的权限:在开发写代码之前我们要把支付相关的一些信息设置做好,以利于后续操作,开通之后微信那边就会给你发一封邮件,里面包含了你公众号商户平台的后台登陆相关的一些信息,登陆商户平台之后在->账户设置->API安全里面设置密钥,这个在后面会用到: 账户参数说明 邮件中参数 API参数名 详细说明 APP

微信公众号开发系列-微信企业号开发相关參数

微信企业号出来之后,本人也抱着前面开发订阅号和服务号的经验来探究了一番,这里整理了下再开发企业号时候碰到的一些接口參数.企业号开发文档详见http://qydev.weixin.qq.com/wiki/index.php?title=首页 1.创建自己定义菜单參数解释: 菜单管理的创建操作.官方定义例如以下所看到的. 请求说明 Https请求方式: POST https://qyapi.weixin.qq.com/cgi-bin/menu/create?access_token=ACCESS_T

微信公众号开发,微信手机端一直提示该公众号暂时无法提供服务,请稍候再试

遇到这个问题,一直在找原因,百度了很多,排除了防火墙,以及策略的问题,还有微信服务器屏蔽了IP. 之前的项目都是相同的代码,但是这次是另外一个项目,部署到客户那边,微信的消息管理,无法接收消息.(即微信服务器无法POST到配置好的URL上) 后面发现在客户的服务器上面,用域名和外网的IP无法访问,而在外网却可以用域名访问,而外网IP的也不能访问,当时一脸懵逼,好在经过公司的小伙伴一眼就看出了可能是代理服务器的问题.用cmd命令查看了下,发现是经过多层才能访问得到. 运行cmd,输入tracert

java微信公众号开发,token验证

import java.io.IOException; import java.util.Arrays; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.binjoo.utils.SH