程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> PHP綜合 >> php微信公眾平台開發類實例

php微信公眾平台開發類實例

編輯:PHP綜合

本文實例講述了php微信公眾平台開發類。分享給大家供大家參考。具體分析如下:

ThinkWechat.php類文件如下:

<?php
class Wechat {
  /**
   * 微信推送過來的數據或響應數據
   * @var array
   */
  private $data = array();
  /**
   * 構造方法,用於實例化微信SDK
   * @param string $token 微信開放平台設置的TOKEN
   */
  public function __construct($token) {
    $this->auth($token) || exit;
    if(!empty($_GET['echostr'])){
      exit($_GET['echostr']);
    } else {
      try
      {
        $xml = file_get_contents("php://input");
        $xml = new SimpleXMLElement($xml);
        $xml || exit;
        foreach ($xml as $key => $value) {
          $this->data[$key] = strval($value);
        }
      }catch(Exception $e){
      }
    }
  }
  /**
   * 獲取微信推送的數據
   * @return array 轉換為數組後的數據
   */
  public function request(){
    return $this->data;
  }
  /**
   * * 響應微信發送的信息(自動回復)
   * @param string $to   接收用戶名
   * @param string $from  發送者用戶名
   * @param array $content 回復信息,文本信息為string類型
   * @param string $type  消息類型
   * @param string $flag  是否新標剛接受到的信息
   * @return string     XML字符串
   */
  public function response($content, $type = 'text', $flag = 0){
    /* 基礎數據 */
    $this->data = array(
      'ToUserName'  => $this->data['FromUserName'],
      'FromUserName' => $this->data['ToUserName'],
      'CreateTime'  => time(),
      'MsgType'   => $type,
    );
    /* 添加類型數據 */
    $this->$type($content);
    /* 添加狀態 */
    $this->data['FuncFlag'] = $flag;
    /* 轉換數據為XML */
    $xml = new SimpleXMLElement('<xml></xml>');
    $this->data2xml($xml, $this->data);
    exit($xml->asXML());
  }
  /**
   * 回復文本信息
   * @param string $content 要回復的信息
   */
  private function text($content){
    $this->data['Content'] = $content;
  }
  /**
   * 回復音樂信息
   * @param string $content 要回復的音樂
   */
  private function music($music){
    list(
      $music['Title'], 
      $music['Description'], 
      $music['MusicUrl'], 
      $music['HQMusicUrl']
    ) = $music;
    $this->data['Music'] = $music;
  }
  /**
   * 回復圖文信息
   * @param string $news 要回復的圖文內容
   */
  private function news($news){
    $articles = array();
    foreach ($news as $key => $value) {
      list(
        $articles[$key]['Title'],
        $articles[$key]['Description'],
        $articles[$key]['PicUrl'],
        $articles[$key]['Url']
      ) = $value;
      if($key >= 9) { break; } //最多只允許10調新聞
    }
    $this->data['ArticleCount'] = count($articles);
    $this->data['Articles'] = $articles;
  }
  /**
   * 數據XML編碼
   * @param object $xml XML對象
   * @param mixed $data 數據
   * @param string $item 數字索引時的節點名稱
   * @return string
   */
  private function data2xml($xml, $data, $item = 'item') {
    foreach ($data as $key => $value) {
      /* 指定默認的數字key */
      is_numeric($key) && $key = $item;
      /* 添加子元素 */
      if(is_array($value) || is_object($value)){
        $child = $xml->addChild($key);
        $this->data2xml($child, $value, $item);
      } else {
        if(is_numeric($value)){
          $child = $xml->addChild($key, $value);
        } else {
          $child = $xml->addChild($key);
          $node = dom_import_simplexml($child);
          $node->appendChild($node->ownerDocument->createCDATASection($value));
        }
      }
    }
  }
  /**
   * 對數據進行簽名認證,確保是微信發送的數據
   * @param string $token 微信開放平台設置的TOKEN
   * @return boolean    true-簽名正確,false-簽名錯誤
   */
  private function auth($token){
    if(empty($_GET['signature'])) return;
    /* 獲取數據 */
    $data = array($_GET['timestamp'], $_GET['nonce'], $token);
    $sign = $_GET['signature'];
    /* 對數據進行字典排序 */
    sort($data,SORT_STRING);
    /* 生成簽名 */
    $signature = sha1(implode($data));
    return $signature === $sign;
  }
}

希望本文所述對大家的php程序設計有所幫助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved