`

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

 
阅读更多

参考: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;
}
?>

 

 

1
0
分享到:
评论

相关推荐

    微信公众平台开发 实例 java 开发资料

    在“微信公众平台开发 实例 java 开发资料”中,我们可以学习到以下几个核心知识点: 1. **微信公众平台基础**:了解微信公众平台的基本架构和工作原理,包括订阅号、服务号和企业号的区别,以及它们各自的功能和...

    微信公众平台应用开发:方法、技巧与案例.(机械工业.柳峰)

     8.2.1 公众账号无响应的几种情况 202  8.2.2 计算字符串所占字节数 202  8.3 应用开发最佳实践 204  8.3.1 解析消息创建时间 204  8.3.2 换行符的使用 205  8.3.3 网页超链接的使用 206  8.3.4 隐藏...

    基于php的微信公众平台开发入门实例

    最近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~ 今天来分享一下开发经验~ 微信公众平台提供的接口很简单,先看看消息交互流程: 说的通俗一些,用户使用微信发送消息 -&gt; 微信将数据发送给...

    微信小程序开发技术.docx

    微信小程序的特点包括技术架构、功能和性能、用户体验和分发和推广等几个方面。微信小程序的应用场景非常广泛,涵盖了电商、餐饮、教育、旅游等多个领域。 微信小程序的开发流程主要包括注册开发者帐号、安装开发者...

    微信小程序php网页版入门,包括基本的微信小程序认证等样例代码

    微信小程序是一种轻量级的应用开发平台,由腾讯公司推出,主要应用于移动端,提供丰富的API和组件,使得开发者能够快速构建功能丰富的应用。PHP则是一种广泛使用的服务器端脚本语言,常用于网页开发。将微信小程序与...

    微信手机号筛选开通.rar

    标题“微信手机号筛选开通.rar”所指的是一项技术任务,其目标是自动化地检测一系列手机号码是否已经注册并启用了微信账号。这个压缩包文件很可能包含一个或多个程序、脚本或者工具,用于批量处理手机号码,以确定...

    菜谱微信小程序源码 外卖广告推广教程

    3、打开微信开发者工具添加小程序-把解压的源码添加进去-appid改成自己小程序的 4、在pages/index/index.js文件搜流量主广告改成自己的广告ID 5、到微信公众平台登陆自己的小程序-开发管理-开发设置-服务器域名...

    微信公众号智能绑定实例

    (持久化可以应对多个微信公众帐号操作) 4.模拟微信公众号成功登录; 此处有时候因网络原因需要重试几次。 5.设置开发模式,服务器回调; 成功建立连接,启用开发模式此处模拟提交URL和Token。 6.完成步骤5后,在...

    微信支付app公众版demo

    微信支付App公众版Demo是一个供开发者学习和参考的实例,用于理解并实现微信支付功能在移动端的应用。这个Demo包含了完整的代码、配置文件以及调用流程,对于开发者来说,是掌握微信支付API接口的重要资源。 首先,...

    新版微信商城

    新版微信商城安装即可使用第一步:登录微信公众账号,进入开发者模式,申请成为开发者,然后会出现 同时进入商家后台 把商家后台红线位置的URL和Token填入微信公众平台对应位置,提交,则微信公众平台与商家后台...

    uni-app微信支付.zip

    首先,集成uni-app微信支付需要了解以下几个核心概念: 1. **uni-app框架**:由DCloud(即数字天堂)开发,支持Vue.js语法,提供丰富的组件和API,实现跨平台开发。uni-app通过编译将同一份代码转换为不同平台的原生...

    仿微信APP源码登录注册

    5. **发现界面**:可能包括附近的人、推荐好友、公众账号、话题讨论等功能,增加用户的互动性。 6. **个人设置**:用户修改个人信息、隐私设置、通知设置、账户安全等,是用户个性化体验的重要部分。 7. **添加好友*...

    利用微信公众帐号实现一个简单的足球活动报名系统,基于Python 的Web.py and Mysql.zip

    MySQL内部包含几个特殊的系统数据库,如: information_schema:提供关于所有数据库、表、列、索引等元数据信息,是查询数据库结构的标准接口。 mysql:存储MySQL自身的系统信息,如用户权限、服务器配置、事件...

    基于微信小程序的智能寄存柜系统的研究.zip

    智能寄存柜系统的功能设计通常包括以下几个方面: 1. 用户注册与登录:用户可以通过微信小程序快速注册并登录,利用微信账号体系实现一键授权,简化用户操作流程。 2. 寄存操作:用户在找到可用的寄存柜后,通过小...

    基于微信小程序的失物招领平台.zip

    在当前的数字化时代,微信小程序已经成为了移动应用领域的一个重要组成部分。...通过深入理解这个项目,开发者可以进一步提升小程序开发技能,同时也能了解到如何运用技术服务于社会,提升公众的生活质量。

    Python-监听附近网络WiFi设备通过邮件和微信进行消息推送

    这个项目可能涉及到以下几个关键知识点: 1. **Python编程基础**:Python是一种高级、易读性强的编程语言,广泛用于网络编程、数据分析和自动化任务。在这个项目中,开发者需要掌握Python的基本语法,包括变量、...

    微信群管理机器人系统网站源码.zip

    1. **微信API接口**:此系统基于微信提供的公众平台接口(微信开发者文档)进行开发,通过这些接口可以实现与微信服务器的交互,如发送消息、接收消息、管理群聊成员等操作。 2. **微信Webhook**:为了实现实时通信...

    基于微信小程序的食品鉴别讨论平台.rar

    在数字化时代的今天,微信小程序因其便捷性与高效性,已经成为众多企业和开发者首选的交互平台。本项目“基于微信小程序的食品鉴别讨论平台”旨在利用这一技术优势,为消费者提供一个可以交流、学习和分享食品安全...

    大圣挪车小程序1.3.5+前端

    【大圣挪车小程序1.3.5+前端】是一个专为解决挪车问题而设计的微信小程序应用,其版本号1.3.5表明该软件已经历了多次迭代优化,旨在提供更稳定、功能更丰富的用户体验。在这个版本中,前端部分是用户交互的核心,...

    Apicloud (前端)支付宝支付与微信支付

    微信支付还需要一个公众账号或小程序账号,以及对应的AppSecret。 2. **生成预付单**:调用`API.wechat.payUnifiedOrder`方法生成预付单,提供必要的订单信息和商户信息。微信服务器会返回一个预付单号,这是后续...

Global site tag (gtag.js) - Google Analytics