php微信公眾平臺開發(fā)類實例
更新時間:2015年04月01日 10:01:03 作者:xialeistudio
這篇文章主要介紹了php微信公眾平臺開發(fā)類,實例分析了針對微信消息的響應(yīng)、回復(fù)、編碼等相關(guān)技巧,非常具有實用價值,需要的朋友可以參考下
本文實例講述了php微信公眾平臺開發(fā)類。分享給大家供大家參考。具體分析如下:
ThinkWechat.php類文件如下:
<?php
class Wechat {
/**
* 微信推送過來的數(shù)據(jù)或響應(yīng)數(shù)據(jù)
* @var array
*/
private $data = array();
/**
* 構(gòu)造方法,用于實例化微信SDK
* @param string $token 微信開放平臺設(shè)置的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){
}
}
}
/**
* 獲取微信推送的數(shù)據(jù)
* @return array 轉(zhuǎn)換為數(shù)組后的數(shù)據(jù)
*/
public function request(){
return $this->data;
}
/**
* * 響應(yīng)微信發(fā)送的信息(自動回復(fù))
* @param string $to 接收用戶名
* @param string $from 發(fā)送者用戶名
* @param array $content 回復(fù)信息,文本信息為string類型
* @param string $type 消息類型
* @param string $flag 是否新標(biāo)剛接受到的信息
* @return string XML字符串
*/
public function response($content, $type = 'text', $flag = 0){
/* 基礎(chǔ)數(shù)據(jù) */
$this->data = array(
'ToUserName' => $this->data['FromUserName'],
'FromUserName' => $this->data['ToUserName'],
'CreateTime' => time(),
'MsgType' => $type,
);
/* 添加類型數(shù)據(jù) */
$this->$type($content);
/* 添加狀態(tài) */
$this->data['FuncFlag'] = $flag;
/* 轉(zhuǎn)換數(shù)據(jù)為XML */
$xml = new SimpleXMLElement('<xml></xml>');
$this->data2xml($xml, $this->data);
exit($xml->asXML());
}
/**
* 回復(fù)文本信息
* @param string $content 要回復(fù)的信息
*/
private function text($content){
$this->data['Content'] = $content;
}
/**
* 回復(fù)音樂信息
* @param string $content 要回復(fù)的音樂
*/
private function music($music){
list(
$music['Title'],
$music['Description'],
$music['MusicUrl'],
$music['HQMusicUrl']
) = $music;
$this->data['Music'] = $music;
}
/**
* 回復(fù)圖文信息
* @param string $news 要回復(fù)的圖文內(nèi)容
*/
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調(diào)新聞
}
$this->data['ArticleCount'] = count($articles);
$this->data['Articles'] = $articles;
}
/**
* 數(shù)據(jù)XML編碼
* @param object $xml XML對象
* @param mixed $data 數(shù)據(jù)
* @param string $item 數(shù)字索引時的節(jié)點名稱
* @return string
*/
private function data2xml($xml, $data, $item = 'item') {
foreach ($data as $key => $value) {
/* 指定默認的數(shù)字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));
}
}
}
}
/**
* 對數(shù)據(jù)進行簽名認證,確保是微信發(fā)送的數(shù)據(jù)
* @param string $token 微信開放平臺設(shè)置的TOKEN
* @return boolean true-簽名正確,false-簽名錯誤
*/
private function auth($token){
if(empty($_GET['signature'])) return;
/* 獲取數(shù)據(jù) */
$data = array($_GET['timestamp'], $_GET['nonce'], $token);
$sign = $_GET['signature'];
/* 對數(shù)據(jù)進行字典排序 */
sort($data,SORT_STRING);
/* 生成簽名 */
$signature = sha1(implode($data));
return $signature === $sign;
}
}
希望本文所述對大家的php程序設(shè)計有所幫助。
您可能感興趣的文章:
- php實現(xiàn)微信公眾平臺賬號自定義菜單類
- php實現(xiàn)微信公眾平臺賬號自定義菜單類
- Java微信公眾平臺開發(fā)(3) 接收消息的分類及實體的創(chuàng)建
- PHP封裝的微信公眾平臺接口開發(fā)操作類完整示例
- Java微信公眾平臺開發(fā)(4) 回復(fù)消息的分類及實體的創(chuàng)建
- 微信公眾號開發(fā)之微信公共平臺消息回復(fù)類實例
- PHP微信開發(fā)之二維碼生成類
- Java微信二次開發(fā)(三) Java微信各類型消息封裝
- PHP 微信支付類 demo
- PHP微信API接口類
- 微信公眾平臺開發(fā)教程⑥ 微信開發(fā)集成類的使用圖文詳解
相關(guān)文章
解決文件名解壓后亂碼的問題 將文件名進行轉(zhuǎn)碼的代碼
中文win32下,文件名使用GBK編碼 Linux下,文件名使用UTF-8編碼 解決文件名解壓后亂碼的問題,使用將文件名進行轉(zhuǎn)碼2012-01-01
PHP+Swoole實現(xiàn)web版的shell客戶端詳解
這篇文章主要為大家詳細介紹了如何利用PHP+Swoole實現(xiàn)web版的shell客戶端,文中的示例代碼講解詳細,感興趣的小伙伴可以嘗試一下2022-07-07

