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


Posted in PHP onAugust 21, 2015

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 = "<xml> 
  <ToUserName><![CDATA[%s]]></ToUserName> 
  <FromUserName><![CDATA[%s]]></FromUserName> 
  <CreateTime>%s</CreateTime> 
  <MsgType><![CDATA[%s]]></MsgType> 
  <Content><![CDATA[%s]]></Content> 
  <FuncFlag>0</FuncFlag> 
  </xml>"; 
 
  //格式化消息模板 
  $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; 
 
    //设置需要抓取的URL 
    curl_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 公式。

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

//$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 and  
      location_X > ".$squares['right-bottom']['lat']." and location_X< ".$squares['left-top']['lat']  
      ."and location_Y > ".$squares['left-top']['lng']." and location_Y< ".$squares['right-bottom']['lng']  
       ."order by time desc";

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 进行截取 http://www.php.net/manual/zh/function.mb-substr.php

7.检测中英文混合的字符串长度

<?php  
  $str = "三知sunchis开发网";  
  echo strlen($str)."<br>";        //结果:22  
  echo mb_strlen($str,"UTF8")."<br>";   //结果:12  
  $strlen = (strlen($str)+mb_strlen($str,"UTF8"))/2;  
  echo $strlen;              //结果:17  
?>

8. 检测是否含有中文

<? 
$str = "测试中文"; 
echo $str; 
echo "<hr>"; 
//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 "错误输入"; 
} 
?>

双字节字符编码范围
1. GBK (GB2312/GB18030)
\x00-\xff GBK双字节编码范围
\x20-\x7f   ASCII
\xa1-\xff    中文 gb2312
\x80-\xff    中文 gbk

2. UTF-8 (Unicode)
\u4e00-\u9fa5    中文
\x3130-\x318F    韩文
\xAC00-\xD7A3   韩文
\u0800-\u4e00   日文

9. Jquery Mobile 的使用
    官网:http://blog.jquerymobile.com/
    原来自己写手机网页,真是无比痛苦,CSS 调试各种烦,跨平台也很不好,后来发现了这个库,果然简单了好多,而且界面看起来漂亮多了。
    不过也引入了一些新的问题,比如页面内 CSS 和 Javascript 的加载,因为 Jquery Mobile 默认是使用 Ajax 加载页面的,并不会刷新整个 html ,而是请求一个 page 而已,所以对于多个 page 的页面不会完全加载,对于 head 里面的 CSS 和 Javascript 也不会加载,所以一个方法是在链接的属性里设置 ajax=false,指明不通过 Ajax 加载页面,另一个是把 CSS 和 Javascript 的加载放在 page 里面。在这里就不具体谈了。

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

10. 移动 Web 调试
    一开始每次调试个页面都要手机连接 WIFI 去刷新,简直不能忍!后来终于学乖了...
    推荐这个网站:http://www.responsinator.com/?url=  把自己的网页 url 放在顶端的输入框里面然后“Go”,你就可以看到自己网页在各个平台下了显示效果,连 Kindle 都有..
    当然,开发者必备的谷歌也可以为我们代理成手机浏览器,按 F12 进入开发者模式然后点击右下角的 setting 的图标,可以在 Overrides 里面设置 User Agent 和 Device metrics,效果同样不错。

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

PHP 相关文章推荐
php下使用SMTP发邮件的代码
Jan 10 PHP
PHP读取txt文件的内容并赋值给数组的代码
Nov 03 PHP
解析PHP处理换行符的问题 \r\n
Jun 13 PHP
PHP array_multisort() 函数的深入解析
Jun 20 PHP
PHP怎么实现网站保存快捷方式方便用户随时浏览
Aug 15 PHP
php foreach正序倒序输出示例代码
Jul 01 PHP
php中字符查找函数strpos、strrchr与strpbrk用法
Nov 18 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
Yii2简单实现多语言配置的方法
Jul 23 PHP
php 7新特性之类型申明详解
Jun 06 PHP
laravel实现批量更新多条记录的方法示例
Oct 22 PHP
php把文件设置为插件的技巧方法
Feb 03 PHP
PHP的Yii框架的基本使用示例
Aug 21 #PHP
PHP的Yii框架使用中的一些错误解决方法与建议
Aug 21 #PHP
win7系统配置php+Apache+mysql环境的方法
Aug 21 #PHP
php生成图片验证码-附五种验证码
Aug 19 #PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
Aug 18 #PHP
深入探究PHP的多进程编程方法
Aug 18 #PHP
使用PHP和JavaScript判断请求是否来自微信内浏览器
Aug 18 #PHP
You might like
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
使用配置类定义Codeigniter全局变量
2014/06/12 PHP
JS DOM 操作实现代码
2010/08/01 Javascript
js和jquery对dom节点的操作(创建/追加)
2013/04/21 Javascript
用js实现控件的隐藏及style.visibility的使用
2013/06/14 Javascript
实现只能输入数字的input不用replace方法
2013/09/12 Javascript
jquery Tab效果和动态加载的简单实例
2013/12/11 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
Jquery日历插件制作简单日历
2015/10/28 Javascript
Vue.js第二天学习笔记(vue-router)
2016/12/01 Javascript
JavaScript中如何判断一个值的类型
2017/09/15 Javascript
vue实现购物车加减
2020/05/30 Javascript
python三元运算符实现方法
2013/12/17 Python
在Python中操作字典之setdefault()方法的使用
2015/05/21 Python
python如何在终端里面显示一张图片
2016/08/17 Python
浅谈numpy中linspace的用法 (等差数列创建函数)
2017/06/07 Python
对Tensorflow中权值和feature map的可视化详解
2018/06/14 Python
python的xpath获取div标签内html内容,实现innerhtml功能的方法
2019/01/02 Python
ubuntu上安装python的实例方法
2019/09/30 Python
python矩阵运算,转置,逆运算,共轭矩阵实例
2020/05/11 Python
Pandas把dataframe或series转换成list的方法
2020/06/14 Python
纯css3实现效果超级炫的checkbox复选框和radio单选框
2014/09/01 HTML / CSS
俄罗斯街头服装品牌:Black Star Wear
2017/03/01 全球购物
发现世界上最好的珠宝设计师:JewelStreet
2017/12/17 全球购物
Tripadvisor新西兰:阅读评论,比较价格和酒店预订
2018/02/10 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
语文教育专业求职信
2014/06/28 职场文书
2014年药剂科工作总结
2014/11/26 职场文书
出国留学英文自荐信
2015/03/25 职场文书
小学开学典礼新闻稿
2015/07/17 职场文书
环保建议书作文400字
2015/09/14 职场文书
升学宴家长答谢词
2015/09/29 职场文书
2016年教师党员承诺书范文
2016/03/24 职场文书
2019入党申请书格式
2019/06/25 职场文书
python之PySide2安装使用及QT Designer UI设计案例教程
2021/07/26 Python