-
微信公众号开发之微信公共平台消息回复类
微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的demo文件进行修改的,下面给各位分享一个.
初次接触的时候写的一些,有点乱…也没去整理…最近都不想工作了,各种烦,午饭也没吃,就是想表达一下我过的不好,–请忽略个人情绪往下看,代码如下:
- <?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='';
- $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="<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(emptyempty($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(emptyempty($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)));//开源软件:phpfensi.com
- $v = round($EARTH_RADIUS * $v * 10000) / 10000;
- return $v;
- }
- }
- ?>
出处:http://www.phpfensi.com/php/20140921/5883.html
栏目列表
最新更新
nodejs爬虫
Python正则表达式完全指南
爬取豆瓣Top250图书数据
shp 地图文件批量添加字段
爬虫小试牛刀(爬取学校通知公告)
【python基础】函数-初识函数
【python基础】函数-返回值
HTTP请求:requests模块基础使用必知必会
Python初学者友好丨详解参数传递类型
如何有效管理爬虫流量?
SQL SERVER中递归
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
这是目前我见过最好的跨域解决方案!
减少回流与重绘
减少回流与重绘
如何使用KrpanoToolJS在浏览器切图
performance.now() 与 Date.now() 对比
一款纯 JS 实现的轻量化图片编辑器
关于开发 VS Code 插件遇到的 workbench.scm.
前端设计模式——观察者模式
前端设计模式——中介者模式
创建型-原型模式