微信公众平台API调用的方法
2013-06-30 14:55:04;  来源: 沙湖王;  作者:;  评论:0 点击:

微信不用说,大家都知道,微博兴起之后面临的最大挑战就是微信了。微信的公众账号,说白了,就是广播账号,能一次性给很多人发消息。目前,...

 微信不用说,大家都知道,微博兴起之后面临的最大挑战就是微信了。微信的公众账号,说白了,就是广播账号,能一次性给很多人发消息。目前,微信公众账号需要有500个收听者以上才能够申请认证。

 今天这里说的微信公众账号的API调用,可能熟悉的人还不多。说白了,就是一个接口,你可以用这个接口做一些自动回复的东西。比如,有人做了个“你问我答”的公众账号,然后你知道发给问题过去,比如问苍井空是谁,然后微信就会把这条信息发送到该账号设置的那个服务器接口上,该服务器接口通过调用百度知道和百度百科的API,找到问题的答案,然后发回给微信,微信再发给提问者。

  通过上面的说明,估计大家现在都明白了些了吧。说白了,就是通过这个API调用,你能做更高级智能的自动回复功能。

http://mp.weixin.qq.com 你可以通过这个链接进入到微信公众平台去。当然了,做这些事情,你还需要申请个公众账号,这个我就不细说了。登录之后,在设置菜单里,可以看到,微信提供了多种的自动回复功能。

1其中,公众号手机助手是用来设置将这个微信公众账号和你的私人微信账号关联的。因为公众账号好像是不能通过手机客户端登录的,为了能够实时接受信息,你就需要设置一个关联的账号了。

被添加自动回复,设置了之后,只要有人关注了你这个账号,那么你就会立刻给它发一条信息。

消息自动回复,则是简单重复的一段内容的回复。可以设置文字,图片,语音和图文信息的回复。不过所有的回复都会是一样的。

关键字自动回复,就是我们要使用的API了。它包含了API的部分,也包含了简单的规则设置。

2这里只能二选一,你可以选择使用消息接口,也可以选择提交一些规则。比如你可以添加几条规则,只要遇到某个关键词,就回复某条内容。我们这里主要讲的,就是消息接口的使用。所以,点击“调用公众平台消息接口”,来到如下的界面:

3这里比较让人糊涂的,就是URL和Token这两项的设置了。URL,就是你自己服务器上,你设置好的接收微信发过来信息的URL。比如我申请了一个域名是www.example.com,然后我给我的这个接收接口的URL是:www.example.com/get 。上图中的URL就是填后面的这个了。然后Token的话,你可以自己想一个,随便都可以,但是记住后面会用到它的。

 有两点是需要严格注意的:URL必须以http://开头,且目前只支持80端口。token必须是英文或者数字,长度在3到32个字符之间。

上面的东西,你可以不用那么着急填先,因为你要先让你服务器的那个get接口做好准确,能够和微信实现通信验证才可以。所以,现在就要去看文档了。仔细看上图的右上角,那里可以查看案例,查看案例里有个链接是到微信接口文档的:

微信公众平台API调用的方法点击之后,就可以看到如下的文档了:

微信公众平台API调用的方法这里主要介绍了微信的验证过程,以及消息发送和接收的格式。说个比较蛋疼的事情,微信的这个接口写得很差劲,它用的是XML做数据传送的,进行JAXB转换的时候特别麻烦,因为它用到了CDATA。

 微信公众平台API调用的方法上面这段介绍的网站介入的流程,就是说怎么让你的接口和微信之间建立信任关系。这段文档介绍得非常不明确,整整浪费了我两天的时间才搞明白了。

上面总共提到了5个参数,分别是signature,timestamp,nonce,echostr,token。这五个参数,前面的四个都是微信自己发给我们的,只有token是我们自己设计的,在代码中,记得要使用和我们在API调用里填写的token一样。这里,signature其实是一段加密过的字符,它是微信用token,timestamp,nonce这三个参数进行sha1加密后的字符串。我们的代码里,也是要对这三个参数进行sha1加密,然后和signature进行比对,一致的话,就表示可信的,然后把echostr这个随机字符串返回给微信,信任就建立了。下面是sevlet里面简单的一个doGet方法实现这个接口接入:

 

protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        String signature = request.getParameter("signature");
        String timestamp = request.getParameter("timestamp");
        String nonce = request.getParameter("nonce");
        String echostr = request.getParameter("echostr");
      
        String token = "123";
        
        String[] array = {token, timestamp, nonce};
        Arrays.sort(array);//按照字母进行排序
        String result = "";
		//将排序后的三个字符串,拼成一个字符串
        for (String i : array) {
            result += i;
        }
        String ret = "";
        try {
		
		//对拼成的字符串进行sha1加密
            ret = SHAsum(result.getBytes());
			
			//将加密之后的字符串,与signature进行比对,如果一致的话,表示你的这个接口就是微信里设置的那个接口
			//双方就会认为对方是可信的
			//这里,signature其实是一段加密过的字符,它是微信用token,timestamp,nonce这三个参数进行sha1加密后的字符串,和我们上面进行的过程是一样的
			//所以,只要我们自己加密后的密文,和signature是一样的,就表示双方是可信的。
            if (ret.equalsIgnoreCase(signature)) {
                PrintWriter wt = response.getWriter();
                wt.print(echostr);
                wt.close();
            }
        } catch (NoSuchAlgorithmException ex) {
           
        } finally {
            
        }

    }

	//实现sha1加密的方法,估计java里面有现成的,你可以自己找找
    public static String SHAsum(byte[] convertme) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-1");
        return byteArray2Hex(md.digest(convertme));
    }

    private static String byteArray2Hex(final byte[] hash) {
        Formatter formatter = new Formatter();
        for (byte b : hash) {
            formatter.format("%02x", b);
        }
        return formatter.toString();
    }

 

设置好这个方法,然后调整好服务器之后,就可以回到微信公众平台上的接口设置那里,设置好,然后点击提交。微信就会进行验证,一般都会显示验证成功了的。

微信现在的这个接口,可以转发听众发过来的三类信息:文字,图片,位置信息。下面是从微信转发过来的文字信息的格式:

8文字信息里面的CDATA这个标签,纯粹是没事找事。而且,还是第一次见人把XML的根元素设置为xml的。所以,你做的时候,可以不去考虑这个CDATA(但是图文信息就要注意了)。

9上面是回复文字信息的xml格式,FuncFlag就是可以表示该信息为星号信息,暂时我也不明白有什么用,估计是可以用来表示信息的重要性吧。回复信息的xml格式,CDATA也是可以不要的,你可以这样写也没有关系: <Content>content</Content>。所以说他们这个接口做得很有问题。本来用JSON格式多方便呀。

  1上面是微信发过来的地理信息格式,微信有个发送你当前地理位置的功能的(可能很多人还不知道)。但是确切来说,还不是特别准确,误差有时候会达到一两千米的。

微信公众平台API调用的方法上面这个则是图片信息发过来时的格式。

现在微信的接口就只支持两种信息的回复:文字信息和图文信息。所谓的图文信息,关注过某些公众账号的人可能知道,就是图片和文字混合的信息,这种信息发过来的时候,通过微信只能看个个缩略的,要看全文就需要跳转到一个新的页面去了。微信是内置了浏览器的。下面的就是简单的图文信息缩略图:

QQ截图20130108224718下面来看看图文信息回复是需要的格式:

11微信公众平台API调用的方法我主要对其中几个要特别注意的地方进行一下说明:item就是一篇文章,一条图文信息里面是可以有多片文章的。Title和Description,一个是标题,一个是内容。PicUrl就是图片的链接,Url就是你这几篇图文信息所在的Url(微信只会做个缩略的,要看完整的,还是需要跳转到你的这个Url上。)这里有个最最重要的,其他地方的CDATA这个标签你都可以省略掉,唯独这两个Url的CDATA不能省略掉,否则,微信就会不识别你的信息了。就是这个地方,整整搞了我两天时间。

现在,你就用你自己的web开发知识,尽情得去做吧。

本文属转载文章,并不能保证完全正确,只供学习交流参考,版权归原作者所有。如果您认为有侵犯权利等不和法行为,请联系我们及时改正。http://www.zhuitaiyang.com/html/api/201.html

相关热词搜索:公众 平台 调用

上一篇:微信公众平台API开发接口(三)
下一篇:腾讯与百度开放平台思路对比

收藏
回到顶部