`

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

 
阅读更多

参考: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
分享到:
评论

相关推荐

    使用Delphi Xe8 开发微信功能 -- (一)微信支付商户平台之对账单下载

    为了实现Delphi Xe8 下载微信支付商户平台的对账单功能,我们需要完成以下几个步骤: 1. **获取必要的配置信息**:包括公众账号ID (`api_id`)、商户号 (`mch_id`) 和API密钥 (`api_key`)。 2. **构建请求参数**:...

    微信公众平台开发 实例 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

    对于开发者而言,微信小程序的开发流程主要包括以下几个步骤: ### 1. 注册并创建小程序 - 在微信公众平台(mp.weixin.qq.com)注册账号。 - 创建一个新的小程序项目,获取AppID,这是每个小程序的唯一标识。 ### ...

    微信手机号筛选开通.rar

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

    微信小程序开发技术.docx

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

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

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

    微信小程序开发.docx

    如果你想制作一个小程序但不了解编程,可以考虑以下几个步骤: 1. 确定小程序功能和设计需求:在开始创建小程序之前,需要明确小程序的目的和功能。这将有助于你确定小程序所需的页面数量、交互设计和功能模块等...

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

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

    微信公众号智能绑定实例

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

    微信支付app公众版demo

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

    Android仿微信底部菜单栏+顶部菜单栏(附源码)

    源代码可能会包含以下几个关键部分: - `activity_main.xml`:布局文件,包含`BottomNavigationView`和`Toolbar`。 - `MainActivity.java`:Activity类,处理菜单栏的逻辑。 - `MenuFragment.java`:Fragment类,...

    新版微信商城

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

    uni-app微信支付.zip

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

    小程序开发教程.docx

    小程序开发教程可以大致分为以下几个步骤,以微信小程序为例进行说明: 一、准备工作 注册小程序账号: 访问微信公众平台(https://mp.weixin.qq.com/),点击“立即注册”,选择“小程序”进行注册。 填写相关信息...

    仿微信APP源码登录注册

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

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

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

    微信小程序文字显示换行问题

    此外,由于微信小程序本身具有一定的封闭性,开发者不能直接访问DOM,这意味着在处理换行以及样式应用上不能完全套用传统web开发的思维模式。因此,在开发微信小程序时,我们需要更加细致地学习和掌握其框架下的特定...

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

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

Global site tag (gtag.js) - Google Analytics