文章目录

一页代码实现微信基本回复和点击事件功能,部署上去sae或者bae,妥妥的基本免费的服务器

不懂代码都基本每个人都可以做自己的微信公众号了羡慕

\

<?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[&quot;signature&quot;];
    $timestamp = $_GET[&quot;timestamp&quot;];
    $nonce = $_GET[&quot;nonce&quot;];

    $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[&quot;HTTP_RAW_POST_DATA&quot;];
if (!empty($postStr)){
    $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
    $RX_TYPE = trim($postObj-&gt;MsgType);

    switch ($RX_TYPE)
    {
        case &quot;text&quot;:
            $resultStr = $this-&gt;receiveText($postObj);
            break;
        case &quot;image&quot;:
            $resultStr = $this-&gt;receiveImage($postObj);
            break;
        case &quot;location&quot;:
            $resultStr = $this-&gt;receiveLocation($postObj);
            break;
        case &quot;voice&quot;:
            $resultStr = $this-&gt;receiveVoice($postObj);
            break;
        case &quot;video&quot;:
            $resultStr = $this-&gt;receiveVideo($postObj);
            break;
        case &quot;link&quot;:
            $resultStr = $this-&gt;receiveLink($postObj);
            break;
        case &quot;event&quot;:
            $resultStr = $this-&gt;receiveEvent($postObj);
            break;
        default:
            $resultStr = &quot;unknow msg type: &quot;.$RX_TYPE;
            break;
    }
    echo $resultStr;
}else {
    echo &quot;&quot;;
    exit;
}
}

//接收文本消息
private function receiveText($object)
{
    $keyword = trim($object-&gt;Content);
    $url = &quot;http://api100.duapp.com/movie/?appkey=DIY_miaomiao&amp;name=&quot;.$keyword;
    $output = file_get_contents($url,$keyword);
    $contentStr = json_decode($output, true);
    if (is_array($contentStr)){
        $resultStr = $this-&gt;transmitNews($object, $contentStr);
    }else{
        $resultStr = $this-&gt;transmitText($object, $contentStr);
    }
    return $resultStr;
}

//接收事件,关注等
private function receiveEvent($object)
{
    $contentStr = &quot;&quot;;
    switch ($object-&gt;Event)
    {
        case &quot;subscribe&quot;:
            $contentStr = &quot;你关注了我&quot;;    //关注后回复内容
            break;
        case &quot;unsubscribe&quot;:
            $contentStr = &quot;&quot;;
            break;
        case &quot;CLICK&quot;:
            $contentStr =  $this-&gt;receiveClick($object);    //点击事件
            break;
        default:
            $contentStr = &quot;receive a new event: &quot;.$object-&gt;Event;
            break;
    }

    return $contentStr;
}

//接收图片
private function receiveImage($object)
{
    $contentStr = &quot;你发送的是图片,地址为:&quot;.$object-&gt;PicUrl;
    $resultStr = $this-&gt;transmitText($object, $contentStr);
    return $resultStr;
}

//接收语音
private function receiveVoice($object)
{
    $contentStr = &quot;你发送的是语音,媒体ID为:&quot;.$object-&gt;MediaId;
    $resultStr = $this-&gt;transmitText($object, $contentStr);
    return $resultStr;
}

//接收视频
private function receiveVideo($object)
{
    $contentStr = &quot;你发送的是视频,媒体ID为:&quot;.$object-&gt;MediaId;
    $resultStr = $this-&gt;transmitText($object, $contentStr);
    return $resultStr;
}

//位置消息
private function receiveLocation($object)
{
    $contentStr = &quot;你发送的是位置,纬度为:&quot;.$object-&gt;Location_X.&quot;;经度为:&quot;.$object-&gt;Location_Y.&quot;;缩放级别为:&quot;.$object-&gt;Scale.&quot;;位置为:&quot;.$object-&gt;Label;
    $resultStr = $this-&gt;transmitText($object, $contentStr);
    return $resultStr;
}

//链接消息
private function receiveLink($object)
{
    $contentStr = &quot;你发送的是链接,标题为:&quot;.$object-&gt;Title.&quot;;内容为:&quot;.$object-&gt;Description.&quot;;链接地址为:&quot;.$object-&gt;Url;
    $resultStr = $this-&gt;transmitText($object, $contentStr);
    return $resultStr;
}

 //点击菜单消息
    private function receiveClick($object)
    {
         switch ($object->EventKey)
         {
             case "1":
             $contentStr = "猫咪酱个性DIY服装,
我们专业定制个性【班服,情侣装,亲子装等,有长短T恤,卫衣,长短裤】
来图印制即可,给你温馨可爱的TA,
有事可直接留言微信";
             break;
            
             case "2":

             $contentStr = "你点击了菜单: ".$object->EventKey;
             break;
            
             case "3":
             $contentStr = "是傻逼";
             break;
            
             default:
             $contentStr = "你点击了菜单: ".$object->EventKey;
             break;
         }
       
       
        //两种回复
        if (is_array($contentStr)){
            $resultStr = $this->transmitNews($object, $contentStr);
        }else{
            $resultStr = $this->transmitText($object, $contentStr);
        }
        return  $resultStr;
    }
   
   
   
   
   
   
   
   
   
   
   
   
   
    //回复文本消息
    private function transmitText($object, $content)
    {
        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[text]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        </xml>";
        $resultStr = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $resultStr;
    }

   
   
   
   
   
    //回复图文
    private function transmitNews($object, $arr_item)
    {
        if(!is_array($arr_item))
            return;

        $itemTpl = "    <item>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <PicUrl><![CDATA[%s]]></PicUrl>
        <Url><![CDATA[%s]]></Url>
     </item>";
        $item_str = "";
        foreach ($arr_item as $item)
            $item_str .= sprintf($itemTpl, $item[‘Title’], $item[‘Description’], $item[‘PicUrl’], $item[‘Url’]);

        $newsTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[]]></Content>
        <ArticleCount>%s</ArticleCount>
        <Articles>
        $item_str</Articles>
        </xml>";

        $resultStr = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));
        return $resultStr;
    }
   
   
    //音乐消息
    private function transmitMusic($object, $musicArray, $flag = 0)
    {
        $itemTpl = "<Music>
        <Title><![CDATA[%s]]></Title>
        <Description><![CDATA[%s]]></Description>
        <MusicUrl><![CDATA[%s]]></MusicUrl>
        <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
        </Music>";

        $item_str = sprintf($itemTpl, $musicArray[‘Title’], $musicArray[‘Description’], $musicArray[‘MusicUrl’], $musicArray[‘HQMusicUrl’]);

        $textTpl = "<xml>
        <ToUserName><![CDATA[%s]]></ToUserName>
        <FromUserName><![CDATA[%s]]></FromUserName>
        <CreateTime>%s</CreateTime>
        <MsgType><![CDATA[music]]></MsgType>
        $item_str
        <FuncFlag>%d</FuncFlag>
        </xml>";

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

文章目录