Yii Framework框架開發(fā)微信公眾平臺(tái)示例
本文實(shí)例講述了Yii Framework框架開發(fā)微信公眾平臺(tái)。分享給大家供大家參考,具體如下:
1. 先到微信公眾平臺(tái)注冊(cè)帳號(hào)
http://mp.weixin.qq.com
2. 下載demo
微信公眾平臺(tái)提供了一個(gè)十分“樸素”的demo,說(shuō)明如何調(diào)用消息接口的。代碼真的很樸素,具體內(nèi)容可到官網(wǎng)下載。
3. 按照Yii的規(guī)則,做一個(gè)extension。
這里命名為 weixin,目錄結(jié)構(gòu)如下:
▾ extensions/
▾ weixin/
Weixin.php*
Weixin.php代碼內(nèi)容:
<?php
/**
* WeixinCallback
*
* @package
* @version $id$
* @copyright 1997-2005 The PHP Group
* @author davidhhuan@126.com
* {@link <a rel="external nofollow" target="_blank">http://www.sharefamily.net</a>}
*/
class Weixin
{
//$_GET參數(shù)
public $signature;
public $timestamp;
public $nonce;
public $echostr;
//
public $token;
public $debug = false;
public $msg = array();
public $setFlag = false;
/**
* __construct
*
* @param mixed $params
* @access public
* @return void
*/
public function __construct($params)
{
foreach ($params as $k1 => $v1)
{
if (property_exists($this, $k1))
{
$this->$k1 = $v1;
}
}
}
/**
* valid
*
* @access public
* @return void
*/
public function valid()
{
//valid signature , option
if($this->checkSignature()){
echo $this->echostr;
Yii::app()->end();
}
}
/**
* 獲得用戶發(fā)過(guò)來(lái)的消息(消息內(nèi)容和消息類型 )
*
* @access public
* @return void
*/
public function init()
{
$postStr = empty($GLOBALS["HTTP_RAW_POST_DATA"]) ? '' : $GLOBALS["HTTP_RAW_POST_DATA"];
if ($this->debug)
{
$this->log($postStr);
}
if (!empty($postStr)) {
$this->msg = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
}
}
/**
* makeEvent
*
* @access public
* @return void
*/
public function makeEvent()
{
}
/**
* 回復(fù)文本消息
*
* @param string $text
* @access public
* @return void
*/
public function makeText($text='')
{
$createTime = time();
$funcFlag = $this->setFlag ? 1 : 0;
$textTpl = "<xml>
<ToUserName><![CDATA[{$this->msg->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg->ToUserName}]]></FromUserName>
<CreateTime>{$createTime}</CreateTime>
<MsgType><![CDATA[text]]></MsgType>
<Content><![CDATA[%s]]></Content>
<FuncFlag>%s</FuncFlag>
</xml>";
return sprintf($textTpl,$text,$funcFlag);
}
/**
* 根據(jù)數(shù)組參數(shù)回復(fù)圖文消息
*
* @param array $newsData
* @access public
* @return void
*/
public function makeNews($newsData=array())
{
$createTime = time();
$funcFlag = $this->setFlag ? 1 : 0;
$newTplHeader = "<xml>
<ToUserName><![CDATA[{$this->msg->FromUserName}]]></ToUserName>
<FromUserName><![CDATA[{$this->msg->ToUserName}]]></FromUserName>
<CreateTime>{$createTime}</CreateTime>
<MsgType><![CDATA[news]]></MsgType>
<ArticleCount>%s</ArticleCount><Articles>";
$newTplItem = "<item>
<Title><![CDATA[%s]]></Title>
<Description><![CDATA[%s]]></Description>
<PicUrl><![CDATA[%s]]></PicUrl>
<Url><![CDATA[%s]]></Url>
</item>";
$newTplFoot = "</Articles>
<FuncFlag>%s</FuncFlag>
</xml>";
$content = '';
$itemsCount = count($newsData['items']);
//微信公眾平臺(tái)圖文回復(fù)的消息一次最多10條
$itemsCount = $itemsCount < 10 ? $itemsCount : 10;
if ($itemsCount) {
foreach ($newsData['items'] as $key => $item) {
if ($key<=9) {
$content .= sprintf($newTplItem,$item['title'],$item['description'],$item['picurl'],$item['url']);
}
}
}
$header = sprintf($newTplHeader,$itemsCount);
$footer = sprintf($newTplFoot,$funcFlag);
return $header . $content . $footer;
}
/**
* reply
*
* @param mixed $data
* @access public
* @return void
*/
public function reply($data)
{
if ($this->debug)
{
$this->log($data);
}
echo $data;
}
/**
* checkSignature
*
* @access private
* @return void
*/
private function checkSignature()
{
$tmpArr = array($this->token, $this->timestamp, $this->nonce);
sort($tmpArr);
$tmpStr = implode( $tmpArr );
$tmpStr = sha1( $tmpStr );
if( $tmpStr == $this->signature ){
return true;
}else{
return false;
}
}
/**
* log
*
* @access private
* @return void
*/
private function log($log)
{
if ($this->debug)
{
file_put_contents(Yii::getPathOfAlias('application').'/runtime/weixin_log.txt', var_export($log, true)."\n\r", FILE_APPEND);
}
}
}
使用方法,這里舉例在SiteController里面
/**
* actionIndex
*
* @access public
* @return void
*/
public function actionIndex()
{
$weixin = new Weixin($_GET);
$weixin->token = $this->_weixinToken;
//$weixin->debug = true;
//網(wǎng)址接入時(shí)使用
if (isset($_GET['echostr']))
{
$weixin->valid();
}
$weixin->init();
$reply = '';
$msgType = empty($weixin->msg->MsgType) ? '' : strtolower($weixin->msg->MsgType);
switch ($msgType)
{
case 'text':
//你要處理文本消息代碼
break;
case 'image':
//你要處理圖文消息代碼
break;
case 'location':
//你要處理位置消息代碼
break;
case 'link':
//你要處理鏈接消息代碼
break;
case 'event':
//你要處理事件消息代碼
break;
default:
//無(wú)效消息情況下的處理方式
break;
}
$weixin->reply($reply);
}
至此,基本的邏輯都實(shí)現(xiàn)了
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php面向?qū)ο蟪绦蛟O(shè)計(jì)入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫(kù)操作入門教程》及《php常見數(shù)據(jù)庫(kù)操作技巧匯總》
希望本文所述對(duì)大家基于Yii框架的PHP程序設(shè)計(jì)有所幫助。
- 記錄Yii2框架開發(fā)微信公眾號(hào)遇到的問(wèn)題及解決方法
- 使用YII2框架實(shí)現(xiàn)微信公眾號(hào)中表單提交功能
- 完美利用Yii2微信后臺(tái)開發(fā)的系列總結(jié)
- Yii PHP Framework實(shí)用入門教程(詳細(xì)介紹)
- YII Framework框架使用YIIC快速創(chuàng)建YII應(yīng)用之migrate用法實(shí)例詳解
- YII Framework框架教程之使用YIIC快速創(chuàng)建YII應(yīng)用詳解
- Yii Framework框架獲取分類下面的所有子類方法
- YiiFramework入門知識(shí)點(diǎn)總結(jié)(圖文教程)
- YII Framework框架教程之緩存用法詳解
- YII Framework框架教程之國(guó)際化實(shí)現(xiàn)方法
- YII Framework框架教程之安全方案詳解
相關(guān)文章
php判斷手機(jī)訪問(wèn)還是電腦訪問(wèn)示例分享
這篇文章主要介紹了網(wǎng)站判斷是手機(jī)訪問(wèn)還是電腦訪問(wèn),然后顯示不同的信息,大家參考使用吧2014-01-01
php compact 通過(guò)變量創(chuàng)建數(shù)組
php compact函數(shù)用于創(chuàng)建數(shù)組,該函數(shù)創(chuàng)建數(shù)組比較特殊,compact函數(shù)參數(shù)將接受一個(gè)或多個(gè)變量,然后將變量的名稱作為該創(chuàng)建數(shù)組的索引,變量值作為該創(chuàng)建數(shù)組的值,然后返回創(chuàng)建完成的數(shù)組。本文章向大家講解compact函數(shù)的基本語(yǔ)法及使用實(shí)例。需要的碼農(nóng)可以參考一下。2016-11-11
微信公眾號(hào)之主動(dòng)給用戶發(fā)送消息功能
這篇文章主要介紹了微信公眾號(hào)之主動(dòng)給用戶發(fā)送消息,需要的朋友可以參考下2019-06-06
Laravel4中的Validator驗(yàn)證擴(kuò)展用法詳解
這篇文章主要介紹了Laravel4中的Validator驗(yàn)證擴(kuò)展用法,實(shí)例分析了Laravel4中的Validator驗(yàn)證器的具體實(shí)現(xiàn)步驟與相關(guān)操作技巧,需要的朋友可以參考下2016-07-07
php生成N個(gè)不重復(fù)的隨機(jī)數(shù)實(shí)例
使用php生成N個(gè)不重復(fù)的隨機(jī)數(shù)的實(shí)例方法2013-11-11
CodeIgniter中實(shí)現(xiàn)泛域名解析
這篇文章主要介紹了CodeIgniter中實(shí)現(xiàn)泛域名解析的方法,需要的朋友可以參考下2014-07-07

