• 技术文章 >php教程 >php手册

    微信公众号开发之微信公共平台消息回复类

    2016-05-25 16:39:16原创1062
    微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,下面给各位分享一个。

    初次接触的时候写的一些,有点乱…也没去整理…

    ps—最近都不想工作了,各种烦,午饭也没吃,就是想表达一下我过的不好。—请忽略个人情绪往下看。

    
                      
                      
                      %s
                      
                      
                      %d
                      ";
            $resultStr = sprintf($xmlText, $object->FromUserName, $object->ToUserName, time() , $content, $flag);
            echo $resultStr;
            exit();
        }
        /*
         *图片消息回复
         *@param array object
         *@param string url
         *@return string
        */
        public function resImage($object, $media_id) {
            $xmlImage = "";
            $xmlImage.= "";
            $xmlImage.= "";
            $xmlImage.= "%s";
            $xmlImage.= "";
            $xmlImage.= "";
            $xmlImage.= "";
            $resultStr = sprintf($xmlImage, $object->FromUserName, $object->ToUserName, time() , $media_id);
            echo $resultStr;
            exit();
        }
        /*
         *图文消息回复
         *@param array object
         *@param array newsData 二维数组 必须包含[Title][Description][PicUrl][Url]字段
         *@return string
        */
        public function resNews($object, $newsData = array()) {
            $CreateTime = time();
            $FuncFlag = 0;
            $newTplHeader = "
            FromUserName}]]>
            ToUserName}]]>
            {$CreateTime}
            
            
            %s";
            $newTplItem = "
          <![CDATA[%s]]>
          
          
          
          ";
            $newTplFoot = "
          %s
          ";
            $Content = '';
            $itemsCount = count($newsData);
            $itemsCount = $itemsCount < 10 ? $itemsCount : 10; //微信公众平台图文回复的消息一次最多10条
            if ($itemsCount) {
                foreach ($newsData as $key => $item) {
                    if ($key <= 9) {
                        $Content.= sprintf($newTplItem, $item['Title'], $item['Description'], $item['PicUrl'], $item['Url']);
                    }
                }
            }
            $header = sprintf($newTplHeader, 0, $itemsCount);
            $footer = sprintf($newTplFoot, $FuncFlag);
            echo $header . $Content . $footer;
            exit();
        }
        /*
         *音乐消息回复
         *@param array object
         *@param array musicContent 二维数组 包含[Title][Description][MusicUrl][HQMusicUrl]字段
         *@return string
        */
        public function resMusic($object, $musicContent = array()) {
            $xmlMusic = "
                        
                        
                        %s
                        
                        
         <![CDATA[%s]]>
                        
                        
                        
                        
                        ";
            if (empty($musicContent[0]['HQMusicUrl'])) {
                $musicContent[0]['HQMusicUrl'] = $musicContent[0]['MusicUrl'];
            }
            $resultStr = sprintf($xmlMusic, $object->FromUserName, $object->ToUserName, time() , $musicContent[0]['Title'], $musicContent[0]['Description'], $musicContent[0]['MusicUrl'], $musicContent[0]['HQMusicUrl']);
            echo $resultStr;
            exit();
        }
        /*
         *上传多媒体文件接口
         *@param
         *@param array mediaArr filename、filelength、content-type
         *@return object
        */
        public function uploadMedia($accessToken, $type = 'image', $mediaArr) {
            $url = "http://file.api.weixin.qq.com/cgi-bin/media/upload?access_token=" . $accessToken . "&type=" . $type;
            $doPost = self::curlPost($mediaArr, $url);
            return $doPost;
        }
        /*
         *GPS,谷歌坐标转换成百度坐标
         *@param lnt
         *@param lat
         *@return array
        */
        public function mapApi($lng, $lat, $type) {
            $map = array();
            if ($type == 'gps') {
                $url = "http://map.yanue.net/gpsApi.php?lat=" . $lat . "&lng=" . $lng;
                $res = json_decode(file_get_contents($url));
                $map['lng'] = $res->baidu->lng;
                $map['lat'] = $res->baidu->lat;
            }
            if ($type == 'google') {
                $url = "http://api.map.baidu.com/ag/coord/convert?from=2&to=4&mode=1&x=" . $lng . "&y=" . $lat;
                $res = json_decode(file_get_contents($url));
                $map['lng'] = base64_decode($res[0]->x);
                $map['lat'] = base64_decode($res[0]->y);
            }
            return $map;
        }
        /**************************************************************
         *
         *  使用特定function对数组中所有元素做处理
         *  @param  string  &$array     要处理的字符串
         *  @param  string  $function   要执行的函数
         *  @return boolean $apply_to_keys_also     是否也应用到key上
         *  @access public
         *
         *************************************************************/
        public function arrayRecursive(&$array, $function, $apply_to_keys_also = false) {
            static $recursive_counter = 0;
            if (++$recursive_counter > 1000) {
                die('possible deep recursion attack');
            }
            foreach ($array as $key => $value) {
                if (is_array($value)) {
                    self::arrayRecursive($array[$key], $function, $apply_to_keys_also);
                } else {
                    $array[$key] = $function($value);
                }
                if ($apply_to_keys_also && is_string($key)) {
                    $new_key = $function($key);
                    if ($new_key != $key) {
                        $array[$new_key] = $array[$key];
                        unset($array[$key]);
                    }
                }
            }
            $recursive_counter--;
        }
        /**************************************************************
         *
         *  将数组转换为JSON字符串(兼容中文)
         *  @param  array   $array      要转换的数组
         *  @return string      转换得到的json字符串
         *  @access public
         *
         *************************************************************/
        public function JSON($array) {
            self::arrayRecursive($array, 'urlencode', true);
            $json = json_encode($array);
            return urldecode($json);
        }
        /*
         *创建菜单
         *
        */
        public function creatMenu($shop_id, $data) {
            $jsonArray = self::JSON($data);
            $AccessToken = self::accessToken($weiXin[0]['key'], $weiXin[0]['secret']);
            $MENU_URL = "https://api.weixin.qq.com/cgi-bin/menu/create?access_token=" . $AccessToken;
            return self::curlPost($jsonArray, $MENU_URL);
        }
        /*
         *客服消息回复
         *@param array jsonArray Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}}
         *@return string
        */
        public function customService($jsonArray, $hash) {
            if (empty($jsonArray)) {
                return false;
            }
            $db = M();
            $sql = "select * from bbc_wechats where hash='" . $hash . "'";
            $weChast = $db->query($sql);
            $AccessToken = self::accessToken($weChast[0]['key'], $weChast[0]['secret']);
            $TokenUrl = "https://api.weixin.qq.com/cgi-bin/message/custom/send?access_token=" . $AccessToken;
            $CustomRes = self::curlPost($jsonArray, $TokenUrl);
            return $CustomRes;
        }
        /*
        
        *获取access_token
        *@return objectStr
        */
        public function accessToken($appid, $secret) {
            $access_token = BBCcache::getCache('accesstoken' . $appid);
            if ($access_token) {
                $AccessTokenRet = $access_token;
            } else {
                $TookenUrl = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$appid}&secret={$secret}";
                $AccessTokenRes = @file_get_contents($TookenUrl);
                $AccessToken = json_decode($AccessTokenRes);
                $AccessTokenRet = $AccessToken->access_token;
                BBCcache::setCache('accesstoken' . $appid, $AccessToken->access_token, 3600);
            }
            return $AccessTokenRet;
        }
        /*
         *向远程接口POST数据
         *@data Array {"touser":"OPENID","msgtype":"text","text":{"content":"Hello World"}}
         *@return objectArray
        */
        public function curlPost($data, $url) {
            $ch = curl_init();
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
            curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
            curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            $info = curl_exec($ch);
            if (curl_errno($ch)) {
                echo 'Errno' . curl_error($ch);
            }
            curl_close($ch);
            return json_decode($info);
        }
        //根据经纬度计算距离和方向
        function getRadian($d) {
            return $d * M_PI / 180;
        }
        function getDistance($lat1, $lng1, $lat2, $lng2) {
            $EARTH_RADIUS = 6378.137; //地球半径
            $lat1 = getRadian($lat1);
            $lat2 = getRadian($lat2);
            $a = $lat1 - $lat2;
            $b = getRadian($lng1) - getRadian($lng2);
            $v = 2 * asin(sqrt(pow(sin($a / 2) , 2) + cos($lat1) * cos($lat2) * pow(sin($b / 2) , 2)));
            $v = round($EARTH_RADIUS * $v * 10000) / 10000;
            return $v;
        }
    }
    ?>


    教程网址:

    欢迎收藏∩_∩但请保留本文链接。

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:foreach select curl_setopt
    上一篇:PHP异步调用socket简单实例 下一篇:iis防止php ddos占完网络带宽与服务器资源解决方法
    千万级数据并发解决方案

    相关文章推荐

    • 第一节--面向对象编程--ClassesandObjectsinPHP51• ZendOptimizer配置指南• BluePage通用分页类助开发者提高开发效率• 基于DB2及PHP的应用系统跨平台迁移详细步骤(二)• 在PHP中利用XML技术构造远程服务(1)
    1/1

    PHP中文网