首页 php教程 php手册 微信公众号开发之微信公共平台消息回复类

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

May 25, 2016 pm 04:39 PM
foreach select

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

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

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

<?php
/**
 * 微信公共平台消息回复类
 *
 *
 */
class BBCweixin {
    private $APPID = "******";
    private $APPSECRET = "******";
    /*
     *文本消息回复
     *@param array object
     *@param string content
     *@return string
    */
    public function resText($object, $content, $flag = 0) {
        $xmlText = "<xml>
                  <ToUserName><![CDATA[%s]]></ToUserName>
                  <FromUserName><![CDATA[%s]]></FromUserName>
                  <CreateTime>%s</CreateTime>
                  <MsgType><![CDATA[text]]></MsgType>
                  <Content><![CDATA[%s]]></Content>
                  <FuncFlag>%d</FuncFlag>
                  </xml>";
        $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 = "<xml>";
        $xmlImage.= "<ToUserName><![CDATA[%s]]></ToUserName>";
        $xmlImage.= "<FromUserName><![CDATA[%s]]></FromUserName>";
        $xmlImage.= "<CreateTime>%s</CreateTime>";
        $xmlImage.= "<MsgType><![CDATA[image]]></MsgType>";
        $xmlImage.= "<Image><MediaId><![CDATA[%s]]></MediaId></Image>";
        $xmlImage.= "</xml>";
        $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 = "<xml>
        <ToUserName><![CDATA[{$object->FromUserName}]]></ToUserName>
        <FromUserName><![CDATA[{$object->ToUserName}]]></FromUserName>
        <CreateTime>{$CreateTime}</CreateTime>
        <MsgType><![CDATA[news]]></MsgType>
        <Content><![CDATA[%s]]></Content>
        <ArticleCount>%s</ArticleCount><Articles>";
        $newTplItem = "<item>
      <Title><![CDATA[%s]]></Title>
      <Description><![CDATA[%s]]></Description>
      <PicUrl><![CDATA[%s]]></PicUrl>
      <Url><![CDATA[%s]]></Url>
      </item>";
        $newTplFoot = "</Articles>
      <FuncFlag>%s</FuncFlag>
      </xml>";
        $Content = &#39;&#39;;
        $itemsCount = count($newsData);
        $itemsCount = $itemsCount < 10 ? $itemsCount : 10; //微信公众平台图文回复的消息一次最多10条
        if ($itemsCount) {
            foreach ($newsData as $key => $item) {
                if ($key <= 9) {
                    $Content.= sprintf($newTplItem, $item[&#39;Title&#39;], $item[&#39;Description&#39;], $item[&#39;PicUrl&#39;], $item[&#39;Url&#39;]);
                }
            }
        }
        $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 = "<xml>
                    <ToUserName><![CDATA[%s]]></ToUserName>
                    <FromUserName><![CDATA[%s]]></FromUserName>
                    <CreateTime>%s</CreateTime>
                    <MsgType><![CDATA[music]]></MsgType>
                    <Music>
     <Title><![CDATA[%s]]></Title>
                    <Description><![CDATA[%s]]></Description>
                    <MusicUrl><![CDATA[%s]]></MusicUrl>
                    <HQMusicUrl><![CDATA[%s]]></HQMusicUrl>
                    </Music>
                    </xml>";
        if (empty($musicContent[0][&#39;HQMusicUrl&#39;])) {
            $musicContent[0][&#39;HQMusicUrl&#39;] = $musicContent[0][&#39;MusicUrl&#39;];
        }
        $resultStr = sprintf($xmlMusic, $object->FromUserName, $object->ToUserName, time() , $musicContent[0][&#39;Title&#39;], $musicContent[0][&#39;Description&#39;], $musicContent[0][&#39;MusicUrl&#39;], $musicContent[0][&#39;HQMusicUrl&#39;]);
        echo $resultStr;
        exit();
    }
    /*
     *上传多媒体文件接口
     *@param
     *@param array mediaArr filename、filelength、content-type
     *@return object
    */
    public function uploadMedia($accessToken, $type = &#39;image&#39;, $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 == &#39;gps&#39;) {
            $url = "http://map.yanue.net/gpsApi.php?lat=" . $lat . "&lng=" . $lng;
            $res = json_decode(file_get_contents($url));
            $map[&#39;lng&#39;] = $res->baidu->lng;
            $map[&#39;lat&#39;] = $res->baidu->lat;
        }
        if ($type == &#39;google&#39;) {
            $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[&#39;lng&#39;] = base64_decode($res[0]->x);
            $map[&#39;lat&#39;] = 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(&#39;possible deep recursion attack&#39;);
        }
        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, &#39;urlencode&#39;, true);
        $json = json_encode($array);
        return urldecode($json);
    }
    /*
     *创建菜单
     *
    */
    public function creatMenu($shop_id, $data) {
        $jsonArray = self::JSON($data);
        $AccessToken = self::accessToken($weiXin[0][&#39;key&#39;], $weiXin[0][&#39;secret&#39;]);
        $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=&#39;" . $hash . "&#39;";
        $weChast = $db->query($sql);
        $AccessToken = self::accessToken($weChast[0][&#39;key&#39;], $weChast[0][&#39;secret&#39;]);
        $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(&#39;accesstoken&#39; . $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(&#39;accesstoken&#39; . $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, &#39;Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)&#39;);
        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 &#39;Errno&#39; . 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

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么? Java ArrayList遍历时使用foreach和iterator删除元素的区别是什么? Apr 27, 2023 pm 03:40 PM

一、Iterator和foreach的区别多态差别(foreach底层就是Iterator)Iterator是一个接口类型,他不关心集合或者数组的类型;for和foreach都需要先知道集合的类型,甚至是集合内元素的类型;1.为啥说foreach底层就是Iterator编写的代码:反编译代码:二、foreach与iterator时remove的区别先来看阿里java开发手册但1的时候不会报错,2的时候就会报错(java.util.ConcurrentModificationException)首

php如何判断foreach循环到第几个 php如何判断foreach循环到第几个 Jul 10, 2023 pm 02:18 PM

​php判断foreach循环到第几个的步骤:1、创建一个“$fruits”的数组;2、创建一个计数器变量“$counter”初始值为0;3、使用“foreach”循环遍历数组,并在循环体中增加计数器变量的值,再输出每个元素和它们的索引;4、在“foreach”循环体外输出计数器变量的值,以确认循环到了第几个元素。

PHP返回一个键值翻转后的数组 PHP返回一个键值翻转后的数组 Mar 21, 2024 pm 02:10 PM

这篇文章将为大家详细讲解有关PHP返回一个键值翻转后的数组,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。PHP键值翻转数组键值翻转是一种对数组进行的操作,它将数组中的键和值进行交换,生成一个新的数组,其中原始键作为值,原始值作为键。实现方法在php中,可以通过以下方法对数组进行键值翻转:array_flip()函数:array_flip()函数专门用于键值翻转操作。它接收一个数组作为参数,并返回一个新的数组,其中键和值已交换。$original_array=[

jquery如何隐藏select元素 jquery如何隐藏select元素 Aug 15, 2023 pm 01:56 PM

jquery隐藏select元素的方法:1、hide()方法,在HTML页面中引入jQuery库,可以使用不同选择器来隐藏select元素,ID选择器将selectId替换为你实际使用的select元素的ID;2、css()方法,使用ID选择器选择需要隐藏的select元素,使用css()方法将display属性设置为none,并将selectId替换为select元素的ID。

使用golang进行Select Channels Go并发式编程的异步处理方法 使用golang进行Select Channels Go并发式编程的异步处理方法 Sep 28, 2023 pm 05:27 PM

使用golang进行SelectChannelsGo并发式编程的异步处理方法引言:并发式编程是现代软件开发中的一个重要领域,它可以有效地提高应用程序的性能和响应能力。在Go语言中,使用Channels和Select语句可以简单而高效地实现并发编程。本文将介绍如何使用golang进行SelectChannelsGo并发式编程的异步处理方法,并提供具体的

jQuery中如何实现select元素的改变事件绑定 jQuery中如何实现select元素的改变事件绑定 Feb 23, 2024 pm 01:12 PM

jQuery是一个流行的JavaScript库,可以用来简化DOM操作、事件处理、动画效果等。在web开发中,经常会遇到需要对select元素进行改变事件绑定的情况。本文将介绍如何使用jQuery实现对select元素改变事件的绑定,并提供具体的代码示例。首先,我们需要使用标签来创建一个包含选项的下拉菜单:

linux要用select的原因是什么 linux要用select的原因是什么 May 19, 2023 pm 03:07 PM

因为select可以使开发者在同时等待多个文件缓冲区,可减少IO等待的时间,能够提高进程的IO效率。select()函数是IO多路复用的函数,允许程序监视多个文件描述符,等待所监视的一个或者多个文件描述符变为“准备好”的状态;所谓的”准备好“状态是指:文件描述符不再是阻塞状态,可以用于某类IO操作了,包括可读,可写,发生异常三种。select是一个计算机函数,位于头文件#include。该函数用于监视文件描述符的变化情况——读写或是异常。1.select函数介绍select函数是IO多路复用的函

PHP返回数组中的当前元素 PHP返回数组中的当前元素 Mar 21, 2024 pm 12:36 PM

这篇文章将为大家详细讲解有关PHP返回数组中的当前元素,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。获取PHP数组中的当前元素php为访问和操作数组提供了多种方法,其中包括获取数组中的当前元素。以下介绍几种常用的技术:1.current()函数current()函数返回数组内部指针当前指向的元素。指针最初指向数组的第一个元素。使用以下语法:$currentElement=current($array);2.key()函数key()函数返回数组内部指针当前指向元

See all articles