您好,欢迎访问一九零五行业门户网

使用PHP进行微信公众平台开发的示例

这篇文章主要介绍了使用php进行微信公众平台开发的示例,包括基本的微信平台api调用和xml处理等,需要的朋友可以参考下
1. sae 数据库的连接。
需要主机名和端口,以后的使用是一样的。
@ $db = new mysqli(sae_mysql_host_m.':'.sae_mysql_port,sae_mysql_user,sae_mysql_pass,'你的应用名');
2.xml 的处理。
微信发送的消息格式都是 xml 格式,你返回的消息也必须是 xml 格式。从 xml 里提取数据,用 simplexml,强大又容易使用。包装成 xml 消息呢?把消息模板保存为字符串,然后用 sprintf 进行格式化输出。
解析微信服务器 post 的数据:
//---------- 接 收 数 据 ---------- //$poststr = $globals[http_raw_post_data]; //获取post数据//用simplexml解析post过来的xml数据 $postobj = simplexml_load_string($poststr,'simplexmlelement',libxml_nocdata);$fromusername = $postobj->fromusername; //获取发送方帐号(openid) $tousername = $postobj->tousername; //获取接收方账号 $msgtype = $postobj->msgtype; //消息内容
返回文本消息:
function sendtext($to, $from, $content, $time) {//返回消息模板$texttpl = %s0;//格式化消息模板$msgtype = text;$time = time();$resultstr = sprintf($texttpl,$to,$from,$time,$msgtype,$content);echo $resultstr; }
3. api 接口的调用。
网上有很多 api 接口,如百度翻译,有道翻译,天气预报等,对接口的调用可以直接用 file_get_contents ,也可以用 curl 的方式进行抓取,然后根据返回数据的格式进行数据解析,一般都是 xml 格式或者 json 格式,处理时用 simplexml 和 json_decode 是很方便的。对于抓取 api 内容,用重新封装的函数:
function my_get_file_contents($url){if(function_exists('file_get_contents')){$file_contents = file_get_contents($url);}else{//初始化一个curl对象$ch = curl_init();$timeout = 5;//设置需要抓取的urlcurl_setopt ($ch, curlopt_url, $url);//设置curl 参数,要求结果保存到字符串中还是输出到屏幕上curl_setopt ($ch, curlopt_returntransfer, 1);//在发起连接前等待的时间,如果设置为0,则无限等待curl_setopt ($ch, curlopt_connecttimeout, $timeout);//运行curl,请求网页$file_contents = curl_exec($ch);//关闭url请求curl_close($ch);}return $file_contents; }百度翻译 api 的调用如下:function baidudic($word,$from=auto,$to=auto){//首先对要翻译的文字进行 urlencode 处理$word_code=urlencode($word);//注册的api key$appid=yourapikey;//生成翻译api的url get地址$baidu_url = http://openapi.baidu.com/public/2.0/bmt/translate?client_id=.$appid.&q=.$word_code.&from=.$from.&to=.$to;$text=json_decode(my_get_file_contents($baidu_url));$text = $text->trans_result;return $text[0]->dst; }
4.对 “附近” 的经纬度的计算。
用如下模型,计算正方形的经纬度。采用 haversin 公式。
//$earth_radius = 6371;//地球半径,,平均半径为6371km /** *计算某个经纬度的周围某段距离的正方形的四个点 * *@param lng float 经度 *@param lat float 纬度 *@param distance float 该点所在圆的半径,该圆与此正方形内切,默认值为0.5千米 *@return array 正方形的四个点的经纬度坐标 */ function returnsquarepoint($lng, $lat,$distance = 0.5){$earth_radius = 6371;$dlng = 2 * asin(sin($distance / (2 * $earth_radius)) / cos(deg2rad($lat)));$dlng = rad2deg($dlng);$dlat = $distance/$earth_radius;$dlat = rad2deg($dlat);return array('left-top'=>array('lat'=>$lat + $dlat,'lng'=>$lng-$dlng),'right-top'=>array('lat'=>$lat + $dlat, 'lng'=>$lng + $dlng),'left-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng - $dlng),'right-bottom'=>array('lat'=>$lat - $dlat, 'lng'=>$lng + $dlng)); }将查询结果按时间降序排列,message 为数据库中的一个表,location_x 为维度,location_y 为经度://使用此函数计算得到结果后,带入sql查询。$squares = returnsquarepoint($lng, $lat);$query = select * from message where location_x != 0 andlocation_x > .$squares['right-bottom']['lat']. and location_x .$squares['left-top']['lng']. and location_y
5. 对字符串的检查。
限定为 6-20个字母,符合则返回 true ,否则返回 false,采用正则表达式进行匹配:
function inputcheck($word) {if(preg_match(/^[0-9a-za-z]{6,20}$/,$word)){return true;}return false; }
6.对含中文的字符串取子串时,用 mb_substr 进行截取
7.检测中英文混合的字符串长度
;//结果:22echo mb_strlen($str,utf8).
; //结果:12$strlen = (strlen($str)+mb_strlen($str,utf8))/2;echo $strlen;//结果:17 ?>
8. 检测是否含有中文
; //if (preg_match(/^[.chr(0xa1).-.chr(0xff).]+$/, $str)) { //只能在gb2312情况下使用 //if (preg_match(/^[\x7f-\xff]+$/, $str)) { //兼容gb2312,utf-8 //判断字符串是否全是中文 if (preg_match(/[\x7f-\xff]/, $str)) { //判断字符串中是否有中文 echo 正确输入; } else { echo 错误输入; } ?>
其它类似信息

推荐信息