`
snake_hand
  • 浏览: 577284 次
社区版块
存档分类
最新评论

微信公众平台申请消息接口

 
阅读更多

微信公众平台的高级功能为我们提供了“编辑模式”和“开发模式”两种高级功能。在“编辑模式”下,可以通过简单的界面编辑,来设置自动回复,或公众号底部自定义菜单等功能。但是,如果你还想自定义更加自由灵活的功能,就需要用开发者模式了。在此模式下,开发者可以通过公众平台提供的接口,实现自动回复、获取订阅者、自定义菜单消息等功能。甚至像小黄鸡这样的自动对话系统,都是在开发模式下完成的。

好了,进入正题。要进入开发模式,首先需要申请消息接口。消息接口就是你的服务器上处理微信消息的地址,以后你的收听者给你发送的微信消息都会被转发到这个地址上进行处理。接口申请的大致过程是这样的。

首先,你需要一个绑定了域名的服务器,然后填写一个处理接口申请的url地址和你自己的token(因为是你自己填写的,所以该token可以用于确认接口申请是你发出的而不是别人冒充的)。

然后,微信服务器将发送GET请求到你填写的URL上,并且带上四个参数:

参数 描述
signature 微信加密签名
timestamp 时间戳
nonce 随机数
echostr 随机字符串

最后,就是你(开发者)需要做的的处理,即通过检验signature对请求进行校验(下面有校验方式)。若确认此次GET请求来自微信服务器,请原样返回echostr参数内容,则接入生效,否则接入失败。

signature结合了开发者填写的token参数和请求中的timestamp参数、nonce参数。

加密/校验流程:

    1. 将token、timestamp、nonce三个参数进行字典序排序
    2. 将三个参数字符串拼接成一个字符串进行sha1加密
    3. 开发者获得加密后的字符串可与signature对比,标识该请求来源于微信
参见官方文档:http://mp.weixin.qq.com/wiki/index.php?title=%E6%B6%88%E6%81%AF%E6%8E%A5%E5%8F%A3%E6%8C%87%E5%8D%97 中的“2 申请消息接口”
  
代码实现很简单。新建一个action用于处理微信服务器发过来的接口确认请求,假设命名为InterfaceConfirm
public class InterfaceConfirm extends ActionSupport {}

以下是该action的execute()方法实现


@Override
    public String execute() throws Exception {
        // 获取请求和响应
        HttpServletRequest request = ServletActionContext.getRequest();
        HttpServletResponse response = ServletActionContext.getResponse();
        //获取请求参数
        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostring = request.getParameter("echostr");
        String token = "***";    //你自己填写的token
        //对请求参数和自己的token进行排序,并连接排序后的结果为一个字符串
        String[] strSet = new String[]{token, timestamp, nonce};
        java.util.Arrays.sort(strSet);
        String total = "";
        for (String string : strSet) {
            total = total + string;
        }
        //SHA-1加密实例
        MessageDigest sha1 = MessageDigest.getInstance("SHA-1");
        sha1.update(total.getBytes());
        byte[] codedBytes = sha1.digest();
        String codedString = new BigInteger(1, codedBytes).toString(16);//将加密后的字节数组转换成字符串。参见http://hi.baidu.com/aotori/item/c94813c4f15caa60f6c95d4a
        if (codedString.equals(signature)) { //将加密的结果与请求参数中的signature比对,如果相同,原样返回echostr参数内容
            OutputStream os = response.getOutputStream();
            BufferedWriter resBr = new BufferedWriter(new OutputStreamWriter(os));
            resBr.write(echostring);
            resBr.flush();
            resBr.close();
        }
        return SUCCESS;
    }

接着配置一下这个action,并将配置的路径填写到第二张图中的URL里面,最后点击“提交”,如果参数响应正确,会提示成功,并跳转到成功提示页,“你已成为开发者”!!

PS:其实以上验证过程还可以更简单,就是不加验证,直接返回echostr内容,如果你想这样做的话。因为这会带来一个安全问题,就是任何另外一个开发者,只要知道你这个action的地址,再随便填写一个token都可以通过接口申请验证。这样的话,任何发送到另外一个开发者的公众账号上的消息,实际上都会被微信服务器转发到你的服务器上。更进一步的后果就不得而知了。

 
分享到:
评论

相关推荐

    微信公众平台申请消息接口验证工具

    NULL 博文链接:https://setting.iteye.com/blog/1921010

    微信公众平台开发最佳实践 源代码

    微信公众平台开发最佳实践的源代码,没有加密。微信公众平台开发最佳实践讲的很详细,图文并茂。 其目录如下: 前 言 第1章 微信公众平台介绍 1 1.1 微信及其两大平台 1 1.2 微信公众平台 2 1.2.1 功能 2 1.2.2...

    php微信公众平台助手build2013.1.1

    微信助手的安装 解压之后将 wxapi 上传到你的网站目录下,例如 //cms.ayhome.org/wxapi/index.php , 就是你的 微信回调URL地址,请将之填写到你的微信公众平台账号的,消息接口当中. 申请微信公众平台 微信公众平台官方...

    微信公众平台开发最佳实践 源码及书箱

    第1章 微信公众平台介绍 1 1.1 微信及其两大平台 1 1.2 微信公众平台 2 1.2.1 功能 2 1.2.2 管理 5 1.2.3 服务 6 1.2.4 统计 7 1.2.5 设置 9 第2章 获取服务器资源 11 2.1 新浪SAE 11 2.1.1 申请账号 11 ...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

    书名:《微信公众平台应用开发:方法、技巧与案例》(机械工业出版社.柳峰) PDF格式扫描版,全书分为9章,共245页。2014年1月出版。 内容简介 该书系统讲解了微信公众平台应用开发的流程、方法和技巧,并配有若干...

    微信公众平台封装类

    微信公众平台封装类:申请公众号,调用本类推送消息

    微信公众平台服务号API开发接口

    微信公众平台服务号API开发接口 目录: 简介 1 申请消息接口 1 接收用户消息 5 文本消息 5 语音消息 8 视频消息 9 地理位置消息 9 链接消息 10 消息回复 11 回复图片消息 14 回复语音消息 15 回复视频消息 16 回复...

    微信公众平台开发接口.net

    公众平台信息接口为开发者提供了一种新的消息处理方式,只有申请成为开发者后,你才能使用公众平台的开发功能,在这里你需要填写一个URL和一个Token,这两项信息也需要你拥有自己的服务器(外网服务器)资源,其中的...

    微信公众平台 发送模板消息(Java接口开发)

    微信公众平台技术文档:模板消息接口 一、概述 模板消息仅用于公众号向用户发送重要的服务通知,只能用于符合其要求的服务场景中,如信用卡刷卡通知,商品购买成功通知等。不支持广告等营销类消息以及其它所有可能对...

    首发 php版-微信公众平台接口回复代码(返回天气的实例)

    微信公众平台开通自定义回复,站长可以自定义回复内容。功能非常强大。 这段代码是写了一个回复城市名称,自动回复天气预报的接口。 代码的部分配置文件 //这里是你申请是写的 token define("TOKEN", "weixin"); $...

    微信公众平台开发入门教程(SAE方倍工作室)

    创建新浪云计算平台应用启用微信公众平台开发模式基础接口消息及事件微信公众平台PHP SDK微信公众平台开发模式原理开发天气预报功能第一章 申请服务器资源 创建新浪云计算应用 申请账号 我们使用SAE新浪云计算平台...

    python项目开发实战_微信机器人-Flask+爬虫+微信公众平台接口实现_编程案例实例详解课程教程.pdf

    微信公众平台是运营者通过公众号为微信用户提供资讯和服务的平台。现提供“服务号”“订阅号”“企业号”和“小程序”4种类型的账号功能。其中,订阅号是为媒体和个人提供一种新的信息传播方式,构建与读者之间更好的...

    php版微信公众平台接口开发之智能回复开发教程

    下面我将给大家简单讲解下微信公众平台开发接口。 先去 微信公众平台 申请账号,然后按照提示一步步。在选择订阅号和服务号上,个人只能申请订阅号,而且局限于基础功能;而企业两者都可以申请。订阅号和服务号的...

    .net MVC权限管理工作流微信公众平台开发系统

    一、设计数据表 1.数据表主键设置为nvarchar(36) 2.必须包含Title字段(作为表单标题) ...四、.Net微信公众平台开发 WeiXinController.cs中封装了微信开发接口 在线浏览:http://qxw1194750243.my3w.com/Home

    微信公众帐号开发教程第3篇-开发模式启用及接口配置

    微信公众帐号开发教程第3篇-开发模式启用及接口配置

    微信公众平台PHP开发包wechat-php-sdk.zip

    微信公众平台 PHP 开发包,细化了微信的各项接口操作。调用官方API,具有更灵活的消息分类响应方式,支持链式调用操作 。 主要功能 接入验证 (初级权限) 自动回复(文本、图片、语音、视频、音乐、图文...

    微信扫码支付接口开发总结

    appid:appid是微信公众账号或开放平台APP的唯一标识,可在微信公众平台-->开发-->基本配置里面查看,商户的微信支付审核通过邮件中也会包含该字段值。 mch_id:微信支付商户号。商户申请微信支付后,由微信...

    项目源码-SpringBoot整合微信模板消息实现每日给女友发送早安问候语和天气预报.zip

    1、微信公众平台申请账号及微信开放接口的调用。 2、百度地图天气API接口的调用。 3、天行数据API接口的调用。 运行环境 jdk8+tomcat9+IntelliJ IDEA+maven 项目技术(必填) springboot+微信api+百度地图api+...

    微信OAuth2.0网页授权接口

    weixin_token 微信公众账号接口配置信息的Token wx_webauth_callback_url OAuth2.0授权后跳转到的默认页面 wx_webauth_expire OAuth2.0授权Token过期时间默认6500 配置好config.php后在微信公号后台设置index....

Global site tag (gtag.js) - Google Analytics