微信公众号开发代码我在网上看到了有不少,其实都是大同小义了都是参考官方给出的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 = ''; $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 (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; } } ?>
教程网址:
欢迎收藏∩_∩但请保留本文链接。

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

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

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

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

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

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

1、SQL语句中的关键词对大小写不敏感,SELECT等效于SELECT,FROM等效于from。2、从users表中选择所有列的,可以用符号*代替列的名称。语法--这是注释--从FEOM指定的[表中],查询出[所有的]数据.*表示[所有列]SELECT*FROM--通过从FROM从指定的[表中],查询出指定列名称(字段)的数据SELECT列名称FROM表名称实例--注意:多个列之间,使用英文的逗号来分隔selectusername,passwordfrom

区别:1、for通过索引来循环遍历每一个数据元素,而forEach通过JS底层程序来循环遍历数组的数据元素;2、for可以通过break关键词来终止循环的执行,而forEach不可以;3、for可以通过控制循环变量的数值来控制循环的执行,而forEach不行;4、for在循环外可以调用循环变量,而forEach在循环外不能调用循环变量;5、for的执行效率要高于forEach。


热AI工具

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

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

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

SublimeText3汉化版
中文版,非常好用

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

EditPlus 中文破解版
体积小,语法高亮,不支持代码提示功能

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

适用于 Eclipse 的 SAP NetWeaver 服务器适配器
将Eclipse与SAP NetWeaver应用服务器集成。