关闭

微信/易信公共平台开发(一):开发了一个简单易用的PHP类(提供源码),十几行代码搞定一个公众号

标签: 微信公共平台PHP
7391人阅读 评论(0) 收藏 举报
分类:

 

这两天学习了一下微信公共平台和易信公共平台的开发 (易信与微信协议是基本一样的)(PS:没听说过易信?你out了?)

 

公共平台开发原理这里就不讲了,如果是初次接触的同学,建议先看 David_Tang 的系列文章 微信公众平台开发 (写的不错!)

 

我看了腾讯的例程和网上几个例程,觉得这些例程都有一个问题: 代码复杂,不能重用,不容易维护。这主要是因为这些例程都是将微信平台协议与处理过程耦合在一起。

 

于是产生一个想法,写一个通用的类,   将微信平台通信协议全部封装起来,可重用。

以后写一个公众号,写几句完成处理过程,就搞定了!

 

结果如下:

 

开发语言: PHP 5.X

源码下载地址: http://download.csdn.net/detail/c80486/6357467

类名:WeChat

WeChat类定义在文件jostudio.wechat.php中, 此处只讲其使用。(感兴趣的同学,可以看源代码注释)

 

用这个类实现的一个公众号,例程文件 wx.php 

 

<?php
//包含类文件
include_once 'jostudio.wechat.php';

//创建一个WeChat类的实例,TOKEN为 "XXXXXX", 回调函数名称为"onMessage",回调函数是用于处理消息的函数
$object = new WeChat("XXXXXX", "onMessage");
$object->process();  //处理消息


//处理消息的回调函数
function onMessage(WeChat $object, $messageType, $content, $arg1, $arg2) { 
 
 //根据不同的消息类型,分别处理
 switch ($messageType) {
  case "subscribe":   //当用户关注
   $object->sendText("欢迎您! 请输入任意文字,输入news则返回图文信息 "); //发送欢迎文字
   break;
   
  case "unsubscribe": //当用户取消关注
   break;
     
  case "text":        //当收到一个文本消息
   if (trim($content)=="news") { //如果收到的文字是 "news",则返回图文信息
    $baseUrl = 'http://www.jostudio.org/wx/news/';
    
    $url = $baseUrl.'news.php?id=1';
    $pictureUrl = $baseUrl.'img1.jpg';
    $object->addNews('标题1','描述1', $url, $pictureUrl); //添加一条图文信息
    
    $url = $baseUrl.'news.php?id=2';
    $pictureUrl = $baseUrl.'img2.jpg';
    $object->addNews('标题1','描述1', $url, $pictureUrl); //再添加一条图文信息
    
    $object->sendNews(); //发送图文信息
   } else
     $object->sendText("您输入的是:".$content); //发送文字
   break;
   
  case "image":        //当收到一个图片
   $object->sendText("您发了一张图:".$content);
   break;
  
  case "location":     //当收到一个地理位置信息
   $object->sendText($content."\r\n纬度:".$arg1."\r\n经度".$arg2);
   break;
  
  case "click":    //当用户点击菜单
   $object->sendText("菜单Key:".$content);
   break;     
   
  default:
   break;
 }  
}
?>

 

 

主程序只有二行.

第一行,创建一个WeChat类的实例,创建时需要两个参数:第一个是TOKEN值(开通公众号时,你输入的TOKEN值);第二个是回调函数名称,当有消息到来时,这个回调函数会被调用。

第二行,执行process()方法处理消息: $object->process(); 

 

 

最后,需要定义一个回调函数,形如:

function onMessage(WeChat $object, $messageType, $content, $arg1, $arg2)

 

当有消息到来时,这个回调函数会被调用,接收和处理消息的过程就写在这个函数中。

 

回调函数必须有五个参数,均在调用时由WeChat类传入参数值。

  第一个参数是WeChat的实例$object

        第二个参数messageType, 是消息类型(文本型), 不同的消息类型取值如下:

     subscribe 当有用户关注时

                    unsubscribe 当用户取消关注时

                    text                   用户发来文本

     click                 用户点击了菜单 (指公众号的自定义菜单)

                    image              用户发来图片

                    location            用户发来地理位置

      后三个参数$content, $arg1, $arg2, 是消息的内容。 不同的消息类型,有不同的内容。

     subscribe,unsubscribe消息: $content 为用户的OpenID(不同于微信号)

                    text消息: $content 为文本内容

     click消息: $content 为菜单项的key值

                    image消息: $content 为图片的URL

                    location消息: $content 为地理位置名称,$arg1为地理位置纬度, $arg2为地理位置经度

 

上述例程onMessage()函数,演示了接收和处理各种消息类型

 

根据目前微信平台的定义,公众号只能向用户发送两类信息:

一类是文字(使用WeChat类的  sendText()方法)

     例如:当有用户关注时(subscribe事件),  向用户发送欢迎文字

    $object->sendText("欢迎您! 请输入任意文字,输入news则返回图文信息 ");

另一类是图文信息(使用WeChat类的  sendNews()方法)

图文信息可以是一条或多条新闻形式的信息。

上述例程中,当用户发送文字 "news“”时,向用户回发图文信息

使用sendNews()方法前,需先使用addNews()方法逐条添加信息

     $object->addNews($title, $description, $url, $pictureUrl);

     $title 是标题,$description是内容, $url是链接地址, $pictureUrl是图片的URL

 

上述例程把各类型的信息交互过程均演示了一次:用户发来文字则回复文字,发来“news”则回复图文信息, 发来图片则显示图片URL,  发来位置信息则显示经度纬度。

由于使用了WeChat类,封装了平台通信,开发者可以更专注内容互动,代码更清晰、好维护,甚至不需要了解平台,就可以开发公众号了.

 

WeChat类和例程, 不仅支持微信公众平台,也支持易信公众平台.

 

OK, 介绍到这里了,看看效果。

我用这个例程分别建立了一个微信公众号和一个易信公众号,名称均为“智能科技”, 分别扫描以下二维码可以加一下。

 

微信公众号:智能科技

 

易信公众号:智能科技

 

 

界面效果1:欢迎信息、图文信息

 

界面效果2:发送图片信息、位置信息及其响应

 

 


小结: 使用WeChat类, 让公共平台开发变得更简单、易行

 

 

 

最后说一下易信与微信的一些区别:

经测试,易信公共平台比微信更开放一些。易信允许开发者接收音频、音乐、视频信息,下发音乐信息。

微信区分订阅号和服务号,订阅号不能自定义菜单。目前易信不区分订阅号和服务号,均能自定义菜单。(有关菜单的操作下篇文章说明)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:442664次
    • 积分:4871
    • 等级:
    • 排名:第6204名
    • 原创:63篇
    • 转载:0篇
    • 译文:0篇
    • 评论:109条
    最新评论