微信公众账号---开发者模式下的几个小功能

参考:http://www.cnblogs.com/txw1958/p/wechat-tutorial.html

 

微信公众账号,coolshuangzg,

三个功能:

1.查人品,回复RP名字,如RP张三  2.笑话,则回复笑话+日期,如:笑话20140319 3.看天气,回复城市名称,如TQ北京

什么也不说,只上代码,index.php

<?php
define("TOKEN", "weixin");

$wechatObj = new wechatCallbackapiTest();
if (!isset($_GET['echostr'])) {
    $wechatObj->responseMsg();
}else{
    $wechatObj->valid();
}

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)){
            $this->logger("R ".$postStr);
            $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
            $RX_TYPE = trim($postObj->MsgType);

            switch ($RX_TYPE)
            {
                case "event":
                    $result = $this->receiveEvent($postObj);
                    break;
                case "text":
                    $result = $this->receiveText($postObj);
                    break;
                case "image":
                    $result = $this->receiveImage($postObj);
                    break;
            }
            $this->logger("T ".$result);
            echo $result;
        }else {
            echo "";
            exit;
        }
    }
     private function receiveImage($object){
        $apicallurl = urlencode("http://api2.sinaapp.com/recognize/picture/?appkey=0020120430&appsecert=fa6095e123cd28fd&reqtype=text&keyword=".$object->PicUrl);
        $pictureJsonInfo = file_get_contents($apicallurl);
        $pictureInfo = json_decode($pictureJsonInfo, true);
        $contentStr = $pictureInfo['text']['content'];
        $resultStr = $this->transmitText($object, $contentStr);
        return $resultStr;
    }
    
    private function receiveEvent($object)
    {
        $content = "";
        switch ($object->Event)
        {
            case "subscribe":
                $content = "欢迎关注酷爽中国 帮助:1.查人品,回复RP名字,如RP张三  2.笑话,则回复笑话+日期,如:笑话20140319 3.看天气,回复城市名称,如TQ北京";
                break;
            case "unsubscribe":
                $content = "取消关注";
                break;
        }
        $result = $this->transmitText($object, $content);
        return $result;
    }
  
    private function receiveText($object)
    {
        $keyword = trim($object->Content);
        $result="";
        if (preg_match('/^笑话[0-9]{8}$/',$keyword)){
            include("jokes.php");
        	$content = showContents($keyword);
            $result = $this->transmitText($object, $content);
        }elseif ($keyword == 'help' ||$keyword == '帮助') {
            $content = "帮助:1.查人品,回复RP名字,如RP张三  2.笑话,则回复笑话+日期,如:笑话20140319 3.看天气,回复城市名称,如TQ北京";
            $result = $this->transmitText($object, $content);
		}elseif(preg_match('/^(TQ)|(tq)[\x{4e00}-\x{9fa5}]+$/iu',$keyword)){
            include("weather.php");
            $a = substr($keyword,2,strlen($keyword));
            $cityName = fromNameToCode($a);
            if ($cityName==''){
                $content = "帮助:1.查人品,回复RP名字,如RP张三  2.笑话,则回复笑话+日期,如:笑话20140319 3.看天气,回复城市名称,如TQ北京";
            	$result = $this->transmitText($object, $content);
            }else{
                $content = getWeatherInfo($a);
                $result = $this->transmitNews($object, $content);
            }
        }elseif(preg_match('/^RP[\x{4e00}-\x{9fa5}a-zA-Z0-9]+$/iu',$keyword)){
            $a = substr($keyword,2,strlen($keyword));
            $content=$this->getMoralInfo($a);
            $result = $this->transmitText($object, $content);
    	}else {
             $content = "帮助:1.查人品,回复RP名字,如RP张三  2.笑话,则回复笑话+日期,如:笑话20140319 3.看天气,回复城市名称,如TQ北京";
             $result = $this->transmitText($object, $content);
        }        
        return $result;
    }
   
    
    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>";
        $result = sprintf($textTpl, $object->FromUserName, $object->ToUserName, time(), $content);
        return $result;
    }
    private function getUnicodeFromUTF8($word) {   
  //获取其字符的内部数组表示,所以本文件应用utf-8编码!   
  if (is_array( $word))   
     $arr = $word;   
  else     
     $arr = str_split($word);   
  //此时,$arr应类似array(228, 189, 160)   
  //定义一个空字符串存储   
   $bin_str = '';   
  //转成数字再转成二进制字符串,最后联合起来。   
   foreach ($arr as $value)   
     $bin_str .= decbin(ord($value));   
  //此时,$bin_str应类似111001001011110110100000,如果是汉字"你"   
  //正则截取   
   $bin_str = preg_replace('/^.{4}(.{4}).{2}(.{6}).{2}(.{6})$/','$1$2$3', $bin_str);   
  //此时, $bin_str应类似0100111101100000,如果是汉字"你"   
  return bindec($bin_str); //返回类似20320, 汉字"你"   
  //return dechex(bindec($bin_str)); //如想返回十六进制4f60,用这句   
}
    private function getMoralInfo($name){
        $name = str_replace("+", "", $name);
        $f = mb_substr($name,0,1,'utf-8');
        $s = mb_substr($name,1,1,'utf-8');
        $w = mb_substr($name,2,1,'utf-8');
        $x = mb_substr($name,3,1,'utf-8');
        $n=($this->getUnicodeFromUTF8($f) + $this->getUnicodeFromUTF8($s) + $this->getUnicodeFromUTF8($w) + $this->getUnicodeFromUTF8($x)) % 100;
        $addd='';
        if(empty($name)){
            $addd="大哥不要玩我啊,名字都没有你想算什么!";
    
        } else if ($n <= 0) {
            $addd ="你一定不是人吧?怎么一点人品都没有?!";
        } else if($n > 0 && $n <= 5) {
            $addd ="算了,跟你没什么人品好谈的...";
        } else if($n > 5 && $n <= 10) {
            $addd ="是我不好...不应该跟你谈人品问题的...";
        } else if($n > 10 && $n <= 15) {
            $addd ="杀过人没有?放过火没有?你应该无恶不做吧?";
        } else if($n > 15 && $n <= 20) {
            $addd ="你貌似应该三岁就偷----看隔壁大妈洗澡的吧..."; 
        } else if($n > 20 && $n <= 25) {
            $addd ="你的人品之低下实在让人惊讶啊..."; 
        } else if($n > 25 && $n <= 30) {
            $addd ="你的人品太差了。你应该有干坏事的嗜好吧?";
        } else if($n > 30 && $n <= 35) {
            $addd ="你的人品真差!肯定经常做偷鸡摸狗的事...";
        } else if($n > 35 && $n <= 40) {
            $addd ="你拥有如此差的人品请经常祈求佛祖保佑你吧...";
        } else if($n > 40 && $n <= 45) {
            $addd ="老实交待..那些论坛上面经常出现的偷---拍照是不是你的杰作?"; 
        } else if($n > 45 && $n <= 50) {
            $addd ="你随地大小便之类的事没少干吧?";
        } else if($n > 50 && $n <= 55) {
            $addd ="你的人品太差了..稍不小心就会去干坏事了吧?"; 
        } else if($n > 55 && $n <= 60) {
            $addd ="你的人品很差了..要时刻克制住做坏事的冲动哦.."; 
        } else if($n > 60 && $n <= 65) {
            $addd ="你的人品比较差了..要好好的约束自己啊.."; 
        } else if($n > 65 && $n <= 70) {
            $addd ="你的人品勉勉强强..要自己好自为之.."; 
        } else if($n > 70 && $n <= 75) {
            $addd ="有你这样的人品算是不错了..";
        } else if($n > 75 && $n <= 80) {
            $addd ="你有较好的人品..继续保持.."; 
        } else if($n > 80 && $n <= 85) {
            $addd ="你的人品不错..应该一表人才吧?";
        } else if($n > 85 && $n <= 90) {
            $addd ="你的人品真好..做好事应该是你的爱好吧.."; 
        } else if($n > 90 && $n <= 95) {
            $addd ="你的人品太好了..你就是当代活雷锋啊...";
        } else if($n > 95 && $n <= 99) {
            $addd ="你是世人的榜样!";
        } else if($n > 100 && $n < 105) {
            $addd ="天啦!你不是人!你是神!!!"; 
        }else if($n > 105 && $n < 999) {
            $addd="你的人品已经过 100 人品计算器已经甘愿认输,3秒后人品计算器将自杀啊";
        } else if($n > 999) {
            $addd ="你的人品竟然负溢出了...我对你无语.."; 
        }
        return $name."的人品分数为:".$n."\n".$addd;
}

    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>";

        $result = sprintf($newsTpl, $object->FromUserName, $object->ToUserName, time(), count($arr_item));
        return $result;
    }
    
    private function logger($log_content)
    {
    }
}

?>

 

weather.php

<?php
function fromNameToCode($name)
{
    $mysql_host = SAE_MYSQL_HOST_M;
    $mysql_host_s = SAE_MYSQL_HOST_S;
    $mysql_port = SAE_MYSQL_PORT;
    $mysql_user = SAE_MYSQL_USER;
    $mysql_password = SAE_MYSQL_PASS;
    $mysql_database = SAE_MYSQL_DB;

    $mysql_table = "weather";
    $mysql_state = "SELECT * FROM ".$mysql_table." WHERE `cityName` = '".$name."'";
    
    $con = mysql_connect($mysql_host.':'.$mysql_port, $mysql_user, $mysql_password, true);
    if (!$con){
        die('Could not connect: ' . mysql_error());
    }
    mysql_query("SET NAMES 'UTF8'");
    mysql_select_db($mysql_database, $con);
    $result = mysql_query($mysql_state);
    $cityCode = "";
    while($row = mysql_fetch_array($result))
    {
        $cityCode = $row['cityCode']; 
        break;
    }
    mysql_close($con);
    return $cityCode;
}



function httpRequest($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    if ($output === FALSE){
        return "cURL Error: ". curl_error($ch);
    }
    return $output;
}



function getWeatherInfo($cityName)
{
    $cityCode = fromNameToCode($cityName);
    
    if ($cityCode == "")
    {
        return "错误的城市名或者此城市不在数据库中!";
    }
    
    //获取实时天气
    $url = "http://www.weather.com.cn/data/sk/".$cityCode.".html";
    $output = httpRequest($url);
    $weather = json_decode($output, true); 
    $info = $weather['weatherinfo'];

    $weatherArray = array();
    $weatherArray[] = array("Title"=>$info['city']."天气预报", "Description"=>"", "PicUrl"=>"", "Url" =>"");
    if ((int)$cityCode < 101340000){
        $result = "实况 温度:".$info['temp']."℃ 湿度:".$info['SD']." 风速:".$info['WD'].$info['WSE']."级";
        $weatherArray[] = array("Title"=>str_replace("%", "﹪", $result), "Description"=>"", "PicUrl"=>"", "Url" =>"");
    }

    //获取六日天气
    $url = "http://m.weather.com.cn/data/".$cityCode.".html";
    $output = httpRequest($url);
    $weather = json_decode($output, true); 
    $info = $weather['weatherinfo'];

    if (!empty($info['index_d'])){
        $weatherArray[] = array("Title" =>$info['index_d'], "Description" =>"", "PicUrl" =>"", "Url" =>"");
    }

    $weekArray = array("日","一","二","三","四","五","六");
    $maxlength = 3;
    for ($i = 1; $i <= $maxlength; $i++) {
        $offset = strtotime("+".($i-1)." day");
        $subTitle = date("m月d日",$offset)." 周".$weekArray[date('w',$offset)]." ".$info['temp'.$i]." ".$info['weather'.$i]." ".$info['wind'.$i];
        $weatherArray[] = array("Title" =>$subTitle, "Description" =>"", "PicUrl" =>"http://discuz.comli.com/weixin/weather/"."d".sprintf("%02u",$info['img'.(($i *2)-1)]).".jpg", "Url" =>"");
    }

    return $weatherArray;
}
?>

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值