微信开发的几个小功能

三个功能:

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)
    {
    }
}

?>
时间: 2024-12-17 07:52:05

微信开发的几个小功能的相关文章

开发用到的小功能、功能、网站等

平时用到的比较好的工具或网站,收藏以备使用. 网站: 1.验证json.加密等开发实用的小功能集合: http://www.bejson.com/ 2.JavaScript离线代码检查工具——JSLintMate http://ace.acejoy.com/thread-4450-1-1.html (出处: ACE Developer) 3.json 自动生成测试数据网页: http://beta.json-generator.com/NkflPxI7b

django+sae微信开发-简单的鹦鹉学舌功能

转自个人博客:http://ningning.today/2015/02/09/python/django-sae%E5%BE%AE%E4%BF%A1%E5%BC%80%E5%8F%91%EF%BC%8D%E7%AE%80%E5%8D%95%E7%9A%84%E9%B9%A6%E9%B9%89%E5%AD%A6%E8%88%8C%E5%8A%9F%E8%83%BD/ 网上已经有一些优秀的教程了,但是大多数基于web.py,最近学了点django,就用django写个简单的demo. 准备工作 基

Swift / Objective_C / Xcode实际开发中可能遇到的小功能小技巧总结

一:Swift3.0为视图添加旋转动画,效果如下: 代码实现: //创建动画 let anim = CABasicAnimation(keyPath: "transform.rotation") //设置相关属性 anim.toValue = 2 * M_PI anim.repeatCount = MAXFLOAT anim.duration = 15 //完成之后不移除,testView被释放,动画随着一起删除 anim.isRemovedOnCompletion = false t

微信开发项目中的小代码

1,获取微信用户昵称,若昵称有表情会显示乱码,怎么存入数据库? 表情是用文本表示的,你要么把表情文本去掉,要么显示是将表情文本还原为图片.如果是字符集编解码的问题,那是另一回事. 参考代码: $userInfo['nickname'] = str_replace(array("'", "\\"), array(''), $userInfo['nickname']); 2,客户端判断是否微信浏览器. function is_weixn(){ var ua = navi

iOS 开发中的一些小功能

1.本地通知,应用按HOME退出到后台,10秒后本地发起通知.(类似于push通知) UILocalNotification *notification=[[UILocalNotification alloc] init]; if (notification!=nil) { NSLog(@">> support local notification"); NSDate *now=[NSDate new]; notification.fireDate=[now addTime

微信开发(2)---微信小程序开发实战part1

微信开发现在来说,简单可以概括为两部分,微信公众号和微信小程序. 微信公众号的技术已经非常成熟.分为服务号和订阅号.简单的.可以弄一个个人订阅号,在编辑模式下就可以实现推送图文.自动回复.自定义菜单的常用功能.切换至开发模式,可以搭服务器,使用php语言及各种成熟接口完成自己想要实现的功能,相对而言非常方便.大家对公众号感兴趣的可以自己去注册个个人订阅号探索一下,微信公众平台跳转: https://mp.weixin.qq.com/ 再来说微信小程序,16年初上线示例,到现在技术已经基本趋于成熟

【微信公众平台开发】封装获取天气预报功能

微信公众平台小功能多点,可以增加用户的粘性,不会感觉你微信没内容,就把你给取消关注了.所以得折腾各种有的没的东西. 个人封装天气预报功能代码如下(说明下:网上有很多此类代码,但是要自己理解,就得实际折腾) <?php header('Content-Type:text/html;charset=utf-8'); class WeChatMsgType { private $toUserName; private $fromUserName; private $xmlModle; private

微信开发(1)---微信防撤回功能实现

手里负责的项目都是微信端开发,微信小程序,以及公众号相关,所以最近在看微信开发的书. 今天碰巧看到一篇知乎讲如何实现微信防撤回功能,所以自己去实现了下,颇为好玩. 微信防撤回功能轻松实现~ 先贴上知乎原帖: https://zhuanlan.zhihu.com/p/25689314?utm_source=zhihu&utm_medium=social 实现思路,将接收到的消息都存进一个字典(msg_dict),接收到撤回通知时,提取撤回消息的id,从字典中进行比对,然后发送.保存.那么字典能放得

微信开发调试小工具进化→微信用户发送信息模拟器发布!——这标题起真是好数码暴龙的说

直接说正题吧.最近在做微信第三方服务器.在模拟用户发过来的请求方面,网上流传着一个“微信开发调试小工具”,谁做都不知道了.反正我觉得那个东西看起来挺不爽的,因为其信息发送类型不是很全面,于是我就把它反编译过来自己重写一个了. 我复用了它原本项目的一个类和几个方法 .与原版相比,功能改进如下: 1涵盖了迄今为止所有的信息类型和事件类型(具体的参见微信官方文档里面的接收信息节点); 2对于所有参数都有相关的提示信息 3参数的所属范围除了少数外都用groupbox圈了起来,更加直观地看到了各类信息之间