SpeedPHP微信介面擴充

來源:互聯網
上載者:User
這個擴充實現了SP和微信公眾平台的對接,1.0版暫時只實現了最簡單的功能:綁定,收資訊,回複資訊。 

擴充配置方法: 

$spConfig = array( 
    'mode' => 'debug' 
    //擴充配置 
    , 'ext' => array( 
        //微信擴充設定 
        'spWeiXin' => array( 
            'TOKEN' => 'weixin' //微信通訊密鑰,後台設定 
        ) 
    ) 
);
 
 然後在controll的方法裡面執行: 
$wx = spClass('spWeiXin'); 
        $msg = $wx->run();

    就行了,如果是綁定那麼會直接輸出微信指定顯示的echostr,程式中止執行。如果是收到資訊,那麼$msg就是收到的資訊的數組,鍵名對照微信官方文檔就成。

 

<?php /** * <b>SpeedPHP微信介面擴充</b> * <p>2013年8月15日 08:51:23</p> * @author Lee(leeldy[AT]163.com) * @version 1.0 */class spWeiXin {     //微信通訊密鑰    private $token;    //微信公眾帳號ID    private $publicuserid;    //資訊接受者    private $touserid;     public function __construct() {        $params = spExt('spWeiXin');        //擷取配置參數        if (empty($params['TOKEN'])) {            spError('微信公眾帳號通訊密鑰未設定!');        }        $this->token = $params['TOKEN'];    }     /**     * 綁定微信介面     * @return stringfalse     */    public function bind() {         //隨機字串        $echoStr = $_GET["echostr"];        //微信加密簽名        $signature = $_GET["signature"];        //簽章時間戳        $timestamp = $_GET["timestamp"];        //加密隨機數        $nonce = $_GET["nonce"];         /*         * 加密/校正流程:          1. 將token、timestamp、nonce三個參數進行字典序排序          2. 將三個參數字串拼接成一個字串進行sha1加密          3. 開發人員獲得加密後的字串可與signature對比,標識該請求來源於微信         */        $tmpArr = array($this->token, $timestamp, $nonce);        sort($tmpArr);        $_signature = sha1(implode($tmpArr));         if ($_signature != $signature) {            //簽名不正確,返回false            $echoStr = false;        }         return $echoStr;    }     /**     * 接收訊息,返回訊息數組     * @return array     */    public function receive() {        $raw = $this->php_fix_raw_query();        $msg = false;        if (!empty($raw)) {            $msg = (array) simplexml_load_string($GLOBALS['HTTP_RAW_POST_DATA'], 'SimpleXMLElement', LIBXML_NOCDATA);            $this->publicuserid = $msg['ToUserName'];            $this->touserid = $msg['FromUserName'];        }         return $msg;    }     /**     * 擷取 POST 提交的未經處理資料     * @author robotreply at gmail dot com (24-Jul-2009 08:17)     * @return string     */    private function php_fix_raw_query() {         // Try globals array        //試圖從全域變數中擷取        if (isset($GLOBALS["HTTP_RAW_POST_DATA"])) {            return $GLOBALS["HTTP_RAW_POST_DATA"];        }        // Try globals variable        //試圖從全域變數中擷取        if (isset($HTTP_RAW_POST_DATA)) {            return $HTTP_RAW_POST_DATA;        }         $post = '';        // Try stream        //試圖從流中擷取        if (!function_exists('file_get_contents')) {            //php://input is not available with enctype="multipart/form-data".            $fp = fopen("php://input", "r");            if ($fp) {                while (!feof($fp)) {                    $post = fread($fp, 1024);                }                 fclose($fp);            }        } else {            $post = file_get_contents("php://input");        }         return $post;    }     /**     * <b>回複簡訊</b>     * <p>對於每一個POST請求,開發人員在響應包中返回特定xml結構</p>     * <p>對該訊息進行響應(現支援回複文本、圖文、語音、視頻、音樂和對收到的訊息進行星標操作)</p>     * <p>微信伺服器在五秒內收不到響應會斷掉串連。</p>     * @param string $Content  回複的訊息內容     * @return stringfalse     */    public function replyText($Content) {        $msg = false;         if (!empty($Content)) {            //CreateTime 訊息建立時間            $CreateTime = time();             $msg = <<<XML<xml>    <ToUserName><![CDATA[{$this->touserid}]]></ToUserName>    <FromUserName><![CDATA[{$this->publicuserid}]]></FromUserName>    <CreateTime>{$CreateTime}</CreateTime>    <MsgType><![CDATA[text]]></MsgType>    <Content><![CDATA[{$Content}]]></Content></xml>XML;        }         return $msg;    }     /**     * <b>回複音樂訊息</b>     * @param string $Title 標題     * @param string $Description 描述     * @param string $MusicUrl 音樂連結     * @param string $HQMusicUrl 高品質音樂連結,WIFI環境優先使用該連結播放音樂     * @return stringfalse     */    public function replyMusic($Title, $Description, $MusicUrl, $HQMusicUrl) {        $msg = false;         if (!empty($MusicUrl)) {            //CreateTime 訊息建立時間            $CreateTime = time();             $msg = <<<XML<xml>    <ToUserName><![CDATA[{$this->touserid}]]></ToUserName>    <FromUserName><![CDATA[{$this->publicuserid}]]></FromUserName>    <CreateTime>{$CreateTime}</CreateTime>    <MsgType><![CDATA[music]]></MsgType>    <Music>        <Title><![CDATA[{$Title}]]></Title>        <Description><![CDATA[{$Description}]]></Description>        <MusicUrl><![CDATA[{$MusicUrl}]]></MusicUrl>        <HQMusicUrl><![CDATA[{$HQMusicUrl}]]></HQMusicUrl>    </Music></xml>XML;        }         return $msg;    }     /**     * 回複圖文訊息     * @param type $Articles 文章列表 array(array(Title,PicUrl,Url))     * @return stringfalse     */    public function replyNews($Articles) {        $msg = false;         $articlesStr = '';        //圖文訊息個數,限制為10條以內        $ArticleCount = 0;        foreach ($Articles as $_art) {            if (!empty($_art['Title']) && !empty($_art['PicUrl']) && !empty($_art['Url'])) {                $ArticleCount++;                $articlesStr .= "    <item>        <Title><![CDATA[{$_art['Title']}]]></Title>        <Description><![CDATA[{$_art['Description']}]]></Description>        <PicUrl><![CDATA[{$_art['PicUrl']}]]></PicUrl>        <Url><![CDATA[{$_art['Url']}]]></Url>    </item>";            }        }         if (!empty($ArticleCount)) {            //CreateTime 訊息建立時間            $CreateTime = time();             $msg = <<<XML<xml>    <ToUserName><![CDATA[{$this->touserid}]]></ToUserName>    <FromUserName><![CDATA[{$this->publicuserid}]]></FromUserName>    <CreateTime>{$CreateTime}</CreateTime>    <MsgType><![CDATA[news]]></MsgType>    <ArticleCount>{$ArticleCount}</ArticleCount>    <Articles>{$articlesStr}    </Articles></xml>XML;        }         return $msg;    }     /**     * 運行     * @return type     */    function run() {        //微信伺服器每次請求都會將signature,timestamp,nonce三個參數GET到介面        //只能通過是否存在echostr來判斷是否是介面綁定動作        if (isset($_GET['echostr'])) {            //綁定            exit($this->bind());        } else {            //收到資訊            return $this->receive();        }    } } ?>


相關文章

Beyond APAC's No.1 Cloud

19.6% IaaS Market Share in Asia Pacific - Gartner IT Service report, 2018

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。