微信公众平台开发接口PHP SDK

以前没接触过微信公众平台开发,前几天刚找到实习公司就要求我做一个微信公众平台的应用,于是乎开始学习微信公众平台开发接口的调用,看开发文档之后还是不知道从何入手,只好上网找入门资料,终于在方倍工作室找到了完整的SDK,理解了思路之后其实也挺简单的,无非就是进行用户、微信服务器、开发者服务器三者之间的通信。下面是我参考方倍工作室SDK之后之间写的一个SDK,主要是响应文本消息和CLICK按钮消息,获取用户基本信息,当然并没有包含所有的消息类型和事件。更完整的SDK请参考方倍工作室,链接:http://www.cnblogs.com/txw1958/p/weixin-php-sdk.html。

$token = ‘qiduoyun‘;

$appid = 公众号appid;

$appsecret = 公众号appsecret;

$wechat = new Wechat($token,$appid,$appsecret);

if(!isset($_GET[‘echostr‘])) {
  $wechat->responseMsg();
} else {
  $wechat->valid();
}

class Wechat
{
  private $token;
  private $appid;
  private $appsecret;

  public function __construct($token,$appid,$appsecret)
  {
    $this->token = $token;
    $this->appid = $appid;
    $this->appsecret = $appsecret;
  }

  //验证消息真实性
  public function valid()
  {
    $echostr = $_GET[‘echostr‘];
    if($this->checkSignature()) {
    echo $echostr;
    exit;
    }
  }

  //验证签名
  private function checkSignature()
  {
    $token = $this->token;
    $timestamp = $_GET[‘timestamp‘];
    $nonce = $_GET[‘nonce‘];
    $signature = $_GET[‘signature‘];

    $tmpArr = array($token,$timestamp,$nonce);
    sort($tmpArr,SORT_STRING);
    $tmpStr = implode($tmpArr);
    $tmpStr = sha1($tmpStr);

    if($tmpStr == $signature) {
    return true;
    } else {
    return false;
    }
  }

  //获取access_token
  private function get_access_token($appid,$appsecret)
  {
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=" .
    $appid . "&secret=" . $appsecret;
    $output = file_get_contents($url);
    $jsoninfo = json_decode($output,true);
    $access_token = $jsoninfo[‘access_token‘];
    return $access_token;
  }

  //响应消息
  public function responseMsg()
  {
    $postStr = $GLOBALS[‘HTTP_RAW_POST_DATA‘];
    if(!empty($postStr)) {
      $postObj = simplexml_load_string($postStr,‘SimpleXMLElement‘,LIBXML_NOCDATA);
      $RX_TYPE = trim($postObj->MsgType);
      switch($RX_TYPE)
      {
       case ‘text‘:
        $result = $this->receiveText($postObj);
        break;
      case ‘event‘:
        $result = $this->receiveEvent($postObj);
        break;
      default:
        $result = "unknown message type: " . $RX_TYPE;
        break;
      }
      echo $result;
    } else {
      echo ‘‘;
      exit;
    }
  }

  //接收文本消息
  private function receiveText($object)
  {
    switch($object->Content)
    {
    case ‘猜猜我是谁‘: //发送单图文消息:用户基本信息

      //获取access_token
      $access_token = $this->get_access_token($this->appid,$this->appsecret);

      //获取用户信息
      $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" .
      $access_token . "&openid=" . $object->FromUserName . "&lang=zh_CN";
      $output = file_get_contents($url);
      $jsoninfo = json_decode($output,true);

      if($jsoninfo[‘sex‘] == 1) {
        $sex = "男";
      } else if($jsoninfo[‘sex‘] == 2) {
        $sex = "女";
      } else {
        $sex = "未知";
      }
      $content = array();
      $content[] = array(‘Title‘ => "我知道你是谁!",‘Description‘ => "昵称:" . $jsoninfo[‘nickname‘] .
        "\r\n" . "性别:" . $sex . "\r\n" . "国家:" . $jsoninfo[‘country‘] . "\r\n" . "省份:" .
        $jsoninfo[‘province‘] . "\r\n" . "城市:" . $jsoninfo[‘city‘],‘PicUrl‘ => $jsoninfo[‘headimgurl‘],
        ‘Url‘ => ‘‘);
      break;
    default:
      $content = ‘您发送的消息有误!‘;
      break;
    }
    if(is_array($content)) {
      if(isset($content[0][‘PicUrl‘])) {
        $result = $this->transmitInfo($object,$content);
      }
    } else {
      $result = $this->transmitText($object,$content);
    }
    return $result;
  }

   //接收事件推送
  private function receiveEvent($object)
  {
    $content = "";
    switch($object->Event)
    {
    case ‘subscribe‘:
      $content = "欢迎关注*****!";
      break;
    case ‘unsubscribe‘:
      $content = "取消关注";
      break;
    case ‘CLICK‘:
      switch($object->EventKey)
      {
      case ‘我是谁‘:
        //获取access_token
        $access_token = $this->get_access_token($this->appid,$this->appsecret);

        //获取用户信息
        $url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=" .
        $access_token . "&openid=" . $object->FromUserName . "&lang=zh_CN";
        $output = file_get_contents($url);
        $jsoninfo = json_decode($output,true);

        if($jsoninfo[‘sex‘] == 1) {
          $sex = "男";
        } else if($jsoninfo[‘sex‘] == 2) {
          $sex = "女";
        } else {
          $sex = "未知";
        }
        $content = array();
        $content[] = array(‘Title‘ => "我知道你是谁!",‘Description‘ => "昵称:" . $jsoninfo[‘nickname‘] .
          "\r\n" . "性别:" . $sex . "\r\n" . "国家:" . $jsoninfo[‘country‘] . "\r\n" . "省份:" .
          $jsoninfo[‘province‘] . "\r\n" . "城市:" . $jsoninfo[‘city‘],‘PicUrl‘ => $jsoninfo[‘headimgurl‘],
          ‘Url‘ => ‘‘);
        break;
      default:
        $content = "该按钮暂时尚未添加事件!";
        break;
        }
    break;
    default:
      $content = "对不起,目前暂不受理此事件!";
      break;
    }
    if(is_array($content)) {
      if(isset($content[0][‘PicUrl‘])) {
        $result = $this->transmitInfo($object,$content);
      }
    } else {
      $result = $this->transmitText($object,$content);
    }
    return $result;
  }

  //发送文本消息
  private function transmitText($object,$content)
  {
    $textTpl = "<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[text]]></MsgType>
          <Content><![CDATA[%s]]></Content>
          </xml>";
      $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
    return $result;
  }

  //发送单图文消息:用户基本信息
  private function transmitInfo($object,$infoArray)
  {
    if(!is_array($infoArray)) {
      return;
        }
    $itemTpl = "<item>
          <Title><![CDATA[%s]]></Title>
          <Description><![CDATA[%s]]></Description>
          <PicUrl><![CDATA[%s]]></PicUrl>
          <Url><![CDATA[%s]]></Url>
          </item> ";
    $item_str = "";
    foreach ($infoArray as $item){
      $item_str .= sprintf($itemTpl, $item[‘Title‘], $item[‘Description‘], $item[‘PicUrl‘],
      $item[‘Url‘]);
    }
    $infoTpl = "<xml>
          <ToUserName><![CDATA[%s]]></ToUserName>
          <FromUserName><![CDATA[%s]]></FromUserName>
          <CreateTime>%s</CreateTime>
          <MsgType><![CDATA[news]]></MsgType>
          <Content><![CDATA[]]></Content>
          <ArticleCount>%s</ArticleCount>
          <Articles> $item_str</Articles>
          </xml>";
    $result = sprintf($infoTpl, $object->FromUserName, $object->ToUserName, time(),
    count($infoArray));
    return $result;
  }
}

时间: 2024-12-08 19:14:52

微信公众平台开发接口PHP SDK的相关文章

微信公众平台开发接口PHP SDK完整版

原文:微信公众平台开发接口PHP SDK完整版 官方提供的SDK只有一个文本消息功能,我们将所有消息的消息类型及事件响应都整理了进来,并且加入日志记录,代码如下: 更新日志: 2013-01-01 版本1.02014-03-15 增加图片.视频.语音的内容回复2014-04-09 增加菜单链接事件2014-04-10 修改文本回复的判定方法2014-05-20 增加高级群发消息通知事件2014-05-26 增加多客服消息及多客服的判定方法2014-05-27 修改自动回复判定方式2014-06-

微信公众平台开发接口PHP SDK完整版-方倍工作室

<?php /* 方倍工作室 http://www.fangbei.org/ CopyRight 2015 All Rights Reserved */ define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest(); if (!isset($_GET['echostr'])) { $wechatObj->responseMsg(); }else{ $wechatObj->va

微信公众平台开发接口PHP SDK完整版(转载)

<?php/*    方倍工作室 http://www.fangbei.org/    CopyRight 2015 All Rights Reserved*/ define("TOKEN", "weixin"); $wechatObj = new wechatCallbackapiTest();if (!isset($_GET['echostr'])) {    $wechatObj->responseMsg();}else{    $wechatOb

.Net实现微信公众平台开发接口(二) 之 “获取access_token”

access_token是公众号的全局唯一票据,公众号调用各接口时都需使用access_token. 接口调用请求说明 http请求方式: GET https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET 参数说明 参数 是否必须 说明 grant_type 是 获取access_token填写client_credential appid 是 第三方用

.Net实现微信公众平台开发接口(三) 之 “信息回复”

对于每一个POST请求,开发者在响应包(Get)中返回特定XML结构,对该消息进行响应(现支持回复文本.图片.图文.语音.视频.音乐).请注意,回复图片等多媒体消息时需要预先上传多媒体文件到微信服务器,只支持认证服务号. 今天说说下面三个 1.关注回复 2.自动回复 3.关键字回复 一.关注回复

微信公众平台开发(97) 图文消息

关键字:微信公众平台 开发模式 图文消息作者:方倍工作室原文:http://www.cnblogs.com/txw1958/p/weixin-97-news.html 在这篇微信公众平台开发教程中,我们将介绍如何灵活的使用图文消息功能.我们将只介绍被动回复消息中的图文消息,发送客服消息及高级群发消息接口的发送的图文消息与本文介绍的图文消息的各情况基本一致. 本文分为以下四个部分: 图文消息的定义 图文消息的实现 图文消息的类型 图文消息的回复 一.图文消息的定义 在微信公众平台消息中,发送被动响

微信公众平台开发教程--方培工作室,PHP语言版本

准备工作 微信公众平台的注册 介绍如何注册一个微信公众账号. 入门教程 微信公众平台开发入门教程 内容:1.申请SAE作为服务器; 2.启用开发模式; 3.微信公众平台PHP SDK; 4.接收发送消息类型解析; 5.微信公众平台开发模式原理; 6.快速开发天气预报功能. 入门教程是下面所有教程的基础. 基础接口 微信公众平台开发(2) 天气预报 介绍了使用中国天气网气象数据,实现微信上的天气预报功能. 微信公众平台开发(3) 中英翻译 介绍了使用有道翻译的接口,在微信公众平台上,开发中英互译的

微信公众平台开发最佳实践(第2版)

<微信公众平台开发最佳实践 第2版>微信公众平台开发经典之作全新改版,精心挑选最经典的商业项目开发,成千上万人次微信公众平台开发者从中受益 前言 出版说明 自从方倍工作室在博客园推出微信公众平台开发系列教程后,受到广大微信开发人员及爱好者的热情关注,相关文章的日访问量高达2万人次,而<微信公众平台开发入门教程>的阅读量超过50万,博客访问量总计超过500万,成为微信公众平台开发更新最快,传播最广.受众最多.资料最全的博客,很多博文被许多有影响力的网站转载,并被各大搜索引擎收录且排名

微信公众账号开发接口实现 - java servlet

原文:微信公众账号开发接口实现 - java servlet 源代码下载地址:http://www.zuidaima.com/share/1550463697898496.htm 微信公众平台开发接口验证token.收取.回复消息实现 其实只需要两个类:DeiponseMessage.java.Wechat.java 项目截图 缺少的jar包下载列表: http://mirrors.ibiblio.org/pub/mirrors/maven2/commons-beanutils/commons-