ホームページ  >  記事  >  php教程  >  WeChat パブリック プラットフォーム開発入門 - PHP、テキスト、グラフィックス、クリック イベントへの自動返信を実現

WeChat パブリック プラットフォーム開発入門 - PHP、テキスト、グラフィックス、クリック イベントへの自動返信を実現

WBOY
WBOYオリジナル
2016-06-21 08:48:141359ブラウズ

1 ページのコードで WeChat の基本的な返信機能とクリック イベント機能を実装し、それを sae または bae にデプロイし、完全で基本的に無料のサーバーとなります

コードが理解できなくても、基本的には誰でも自分の WeChat 公式アカウントを作成できます

<!--?php

define("TOKEN", "mzh");        //换成你的token
$wechatObj = new wechatCallbackapiTest();
if (isset($_GET['echostr'])) {     //验证微信
    $wechatObj--->valid();
}else{                     //回复消息
    $wechatObj->responseMsg();
}

class wechatCallbackapiTest
{
    public function valid()
    {
        $echoStr = $_GET["echostr"];
        if($this->checkSignature()){
            echo $echoStr;
            exit;
        }
    }

    private function checkSignature()
    {
        $signature = $_GET["signature"];
        $timestamp = $_GET["timestamp"];
        $nonce = $_GET["nonce"];

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

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

    //回复消息
    public function responseMsg()
	{
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    if (!empty($postStr)){
        $postObj = simplexml_load_string($postStr, &#39;SimpleXMLElement&#39;, LIBXML_NOCDATA);
        $RX_TYPE = trim($postObj->MsgType);

        switch ($RX_TYPE)
        {
            case "text":
                $resultStr = $this->receiveText($postObj);
                break;
            case "image":
                $resultStr = $this->receiveImage($postObj);
                break;
            case "location":
                $resultStr = $this->receiveLocation($postObj);
                break;
            case "voice":
                $resultStr = $this->receiveVoice($postObj);
                break;
            case "video":
                $resultStr = $this->receiveVideo($postObj);
                break;
            case "link":
                $resultStr = $this->receiveLink($postObj);
                break;
            case "event":
                $resultStr = $this->receiveEvent($postObj);
                break;
            default:
                $resultStr = "unknow msg type: ".$RX_TYPE;
                break;
        }
        echo $resultStr;
    }else {
        echo "";
        exit;
    }
	}
    
    //接收文本消息
    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        $url = "http://api100.duapp.com/movie/?appkey=DIY_miaomiao&name=".$keyword;
        $output = file_get_contents($url,$keyword);
        $contentStr = json_decode($output, true);
        if (is_array($contentStr)){
            $resultStr = $this->transmitNews($object, $contentStr);
        }else{
            $resultStr = $this->transmitText($object, $contentStr);
        }
        return $resultStr;
    }

    
    //接收事件,关注等
    private function receiveEvent($object)
    {
        $contentStr = "";
        switch ($object->Event)
        {
            case "subscribe":
                $contentStr = "你关注了我";    //关注后回复内容
                break;
            case "unsubscribe":
                $contentStr = "";
                break;
            case "CLICK":
                $contentStr =  $this->receiveClick($object);    //点击事件
                break;
            default:
                $contentStr = "receive a new event: ".$object->Event;
                break;
        }
        
        return $contentStr;
    }
    
    //接收图片
    private function receiveImage($object)
    {
        $contentStr = "你发送的是图片,地址为:".$object->PicUrl;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    
    //接收语音
    private function receiveVoice($object)
    {
        $contentStr = "你发送的是语音,媒体ID为:".$object->MediaId;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    //接收视频
    private function receiveVideo($object)
    {
        $contentStr = "你发送的是视频,媒体ID为:".$object->MediaId;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    //位置消息
    private function receiveLocation($object)
    {
        $contentStr = "你发送的是位置,纬度为:".$object->Location_X.";经度为:".$object->Location_Y.";缩放级别为:".$object->Scale.";位置为:".$object->Label;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    //链接消息
    private function receiveLink($object)
    {
        $contentStr = "你发送的是链接,标题为:".$object->Title.";内容为:".$object->Description.";链接地址为:".$object->Url;
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    
  

//メニュー メッセージをクリック private function acceptClick($object) { switch ($object->EventKey) { case "1": $contentStr = "猫江のパーソナライズされた DIY 服、私たちはパーソナライズされた [クラスの制服、カップル服、親子服など、長短Tシャツ、スウェットシャツ、ロングパンツなど】写真を印刷するだけで、温かく素敵なTAをプレゼントします。何かあれば、WeChatに直接メッセージを残すことができます"; ブレーク; case "2": $contentStr = "メニューをクリックします: ".$object->EventKey; ブレーク; case "3": $contentStr = "バカですね"; ブレーク; デフォルト: $contentStr = "メニューをクリックしました: ".$object->EventKey } //2 つの応答 if (is_array($contentStr)){ $resultStr = $this->transmitNews($object, $contentStr); { $resultStr = $this->transmitText($object, $contentStr); } return $resultStr } // テキストメッセージを返信する private function transferText($object, $content) { $textTpl = " %s "; $resultStr = sprintf($textTpl, $object->FromUserName, $ object->ToUserName, time(), $content); return $resultStr;

//画像とテキストを返信プライベート関数transmitNews($object, $arr_item) { if(!is_array($arr_item)) return;

$itemTpl = "

"; $item_str = ""; foreach ($arr_item as $item) $item_str .= sprintf($itemTpl, $item['タイトル'], $item['説明'], $item['PicUrl'], $item['Url']);

$newsTpl = "

%s %s $item_str ";

$resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item)); return $resultStr; //音楽メッセージプライベート関数transmitMusic($)オブジェクト、$musicArray、$flag = 0) { $itemTpl = "

";

$item_str = sprintf($itemTpl, $musicArray['タイトル'], $musicArray['説明'], $musicArray['MusicUrl'], $musicArray['HQMusicUrl']);

$textTpl = "

%s $item_str %d " ;

$resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $flag); return $resultStr;



声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。