SAE 上使用PHP搭建微信公众号后台

准备阶段

SAE准备

SAE的应用平台提供了一个语言环境。比如提供了PHP环境的应用即可运行PHP代码。当然环境中也可以放HTML和CSS,将要展示的页面命名为index.html即可。

SAE的申请略过。创建一个PHP5.6空应用,代码管理中打开git。本地文件就可以通过Git命令上传到SAE上了。具体命令SAE页面有写。

应用有个地址,记下来,需要填到微信中。

微信准备

申请微信公众号略过。在后台的开发项中修改配置。其中:

URL:填刚刚SAE中创建的应用地址

Token:自己想填什么都可以

EncodingAESKey:可以随机生成的加密密钥

加解密方式:一开始建议明文,熟悉了之后可以使用密文模式

之后需要在SAE的应用端验证一下这个地址可用才能启用开发者模式。

参考微信官方文档:http://mp.weixin.qq.com/wiki/8/f9a0b8382e0b77d87b3bcc1ce6fbc104.html ,直接把PHP示例代码下载下来,代码里的TOKEN填刚刚配置中填的,文件名修改为index.php。

接着通过Git上传到SAE中。

确定上传完成后即可点击微信后台中的启用,如果SAE上正常运行了刚刚上传的php的话就能够启用成功。

开始写后台

官方代码

刚刚下载的示例代码不仅有验证函数,还有一个用于响应公众号用户消息的函数responseMsg()。我们先试着用示例代码写一些功能。

将刚刚修改的本地index.php文件中的$wechatObj->valid();注释掉,在下面添加一行$wechatObj->responseMsg(); 再次上传修改 git commit,git push。如果代码正常上传的话你给这个公众号发消息应该都能收到回复了。

写一个获取天气的功能

通过API获取天气信息并返回

网上搜索得到一个简单的天气查询网址:http://mobile.weather.com.cn/data/sk/101340101.html 和 http://mobile.weather.com.cn/data/sk/101340101.html ,其中101340101表示weather.com.cn使用的城市编码,所有对应编码可见参考资料2。这里我们将参考资料2的所有对应编码保存到本地weathercode.xml中。

更新:weather.com.cn的接口无法使用了。使用http://www.heweather.com代替。(先在官网申请账户,API https://api.heweather.com/x3/weather?cityid=城市ID&key=你的认证key)

此处我们选择使用cURL的方式获取网页返回,因为这种方式比较方便且SAE官方声明支持cURL(http://www.sinacloud.com/doc/sae/php/fetchurl.html?highlight=curl)

根据参考资料5的示例代码可以写出获取台北天气的代码如下:

//$wt = curl_init("http://mobile.weather.com.cn/data/sk/101340101.html"); $wt = curl_init("https://api.heweather.com/x3/weather?cityid=CN101340101&key=你的认证key

curl_setopt($wt,CURLOPT_RETURNTRANSFER,1);

$weatherjson = curl_exec($wt);

curl_close($wt);

?>

要获取指定城市的天气需要读取xml。但读取xml较麻烦(见参考资料6),于是将weathercode.xml手动转换为json格式。读取文件并转换为数组的代码如下:

$jsoncontent = file_get_contents('weathercode.json');

$weatherarray = json_decode($jsoncontent);

对于获取的json由于层数太多使用PHP处理太复杂,直接使用正则表达式获取需要的内容:

实现功能的完整的代码部分如下:

if(!empty( $keyword ))

{

if(strpos($keyword,"天气")!==false)

{

//get weather by user input

$location = str_ireplace("天气", "",$keyword);

$jsoncontent = file_get_contents('weathercode.json');

$locationarray = json_decode($jsoncontent, true);

$locationcode = $locationarray[$location];

$cncode = "CN" . $locationcode;

//weather can't use,use heweather instead

//$wt = curl_init("http://mobile.weather.com.cn/data/sk/$locationcode.html");

$wt = curl_init("https://api.heweather.com/x3/weather?cityid=$cncode&key=你的认证key");

curl_setopt($wt,CURLOPT_RETURNTRANSFER,1);

//curl_setopt($wt,CURLOPT_REFERER,'http://mobile.weather.com.cn/');

$weatherjson = curl_exec($wt);

//the limit of word

//$weatherarray = json_decode($weatherjson);

//$weathernow = $weatherarray->{'HeWeather data service 3.0'};

curl_close($wt);

preg_match("/\"now\":({.*?{.*?}.*?}.*?})/",$weatherjson,$matches);

$weathernow = $matches[1];

$msgType = "text";

$contentStr = $weathernow;

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

echo $resultStr;

}

格式化返回的数据

返回的数据类似于:

"now":{"cond":{"code":"101","txt":"多云"},"fl":"11","hum":"46","pcpn":"0","pres":"1021","tmp":"12","vis":"10","wind":{"deg":"120","dir":"东风","sc":"3-4","spd":"11"}}

根据官方API说明,通过正则获取内容,即可获得格式化的内容。

添加对错误城市的处理

有些时候用户会输入不存在的城市天气查询,这样返回的结果比较不好看。可以加一个判断部分,在输入不存在的城市时提示检查输入:

if($locationcode) {

……

}

else {

$contentStr = "没有找到这个城市哦~ 请确认城市或区名。示例1: 南京天气; 示例2: 海淀天气";

$resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);

echo $resultStr;

这样天气查询的代码就算完成了~

参考资料:

《中国天气网 天气预报API 国家气象局 根据城市名称抓取城市ID,XML格式、JSON格式、图片代码》http://www.wjxfpf.com/2015/10/69618.html

《中国天气网天气预报API接口城市代码,XML格式,数据具体到县、区级别》http://www.wjxfpf.com/2015/10/279028.html

《【荐】怎么用PHP发送HTTP请求(POST请求、GET请求)?》http://www.php-note.com/article/detail/161

《curl网站开发指南》http://www.ruanyifeng.com/blog/2011/09/curl.html

《PHP官方手册》http://php.net/manual/zh/book.curl.php

《PHP通过SimpleXML访问xml文档》http://blog.csdn.net/guoguo1980/article/details/2436318

《json_decode》http://us3.php.net/manual/zh/function.json-decode.php

《PHP创建和解析JSON数据的方法》http://www.crazyant.net/920.html

《在PHP语言中使用JSON》http://www.ruanyifeng.com/blog/2011/01/json_in_php.html

《PHP高级特性一之正则表达式用法》http://cuiqingcai.com/1186.html

sae微信公众平台php,SAE 上使用PHP搭建微信公众号后台相关推荐

  1. 第一篇:微信公众平台开发实战Java版之了解微信公众平台基础知识以及资料准备...

    相信很多人或多或少听说了微信公众平台的火热.但是开发还是有一点门槛,鉴于挺多朋友问我怎么开发,问多了,自己平时也进行以下总结. 所以下面给大家分享一下我的经验: 第一部分   介绍微信公众号的一些简单 ...

  2. 转载收藏之用 - 微信公众平台开发教程(三):微信公众平台开发验证

    要对接微信公众平台的"开发模式",即对接到自己的网站程序,必须在注册成功之后(见Senparc.Weixin.MP SDK 微信公众平台开发教程(一):微信公众平台注册),等待官方 ...

  3. 微信公共平台接入之:网页授权(微信授权,微信access_token获取,获取微信用户信息),微信开发者工具使用,微信公众平台测试号申请接入

    1.微信公众平台文档入口 微信公众平台入口地址:https://mp.weixin.qq.com/,截图: 进入之后的文档地址: https://mp.weixin.qq.com/wiki?t=res ...

  4. 一个公众号可以绑定几个小程序_微信开放平台可以绑定几个小程序和公众号?...

    微信开放平台可以绑定几个小程序和公众号?How many small programs and official accounts can be bound to the WeChat open pl ...

  5. 微信开放平台绑定各移动应用、网站应用、公众号、小程序、第三方的个数

    微信开放平台绑定各移动应用.网站应用.公众号.小程序.第三方的个数 目前没有在微信的文档中找到过具体的数字,只能真正的登录到后台,并且已经认证了的才能看的到.认证需要300元/年. 很多人都不知道具体 ...

  6. 滨州学院CSDN高校俱乐部第二次公开课——微信公众平台开发SAE使用

    2013年10月12日晚上7点至9点,俱乐部成员及爱好微信应用技术的同学们在6#408举行了滨州学院CSDN高校俱乐部的第二次公开课.主讲人:曹栋. 他首先介绍了今天讲课的主要内容,什么是公众平台,微 ...

  7. 【微信公众平台】SAE接入

    一.你得有一个公众号. 注册公众号,填写相关信息,等待审核. 审核通过之后,登陆界面,进入开发模式,配置相关接口信息. 二.进入开发模式,配置接口信息. 需要填写服务器的URL: 填写验证信息的TOK ...

  8. python开发微信订阅号如何申请_基于Python的微信公众平台二次开发(Python常用框架、订阅号开发、公众号开发)...

    1.1.课程的背景 微信公众平台的火热程度已经不用多言,无论是个人还是企业,政府还是商家,都已经开始搭建微信公众平台,微信的作用已经被各界人士认可.微信公众平台的技术需求市场缺口巨大.同时python ...

  9. 微信公众平台消息接口开发(34)微信墙之表白墙/婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙...

    微信公众平台开发模式 微信 公众平台 消息接口 开发模式 企业微信公众平台 微信墙 婚礼墙/晚会墙/会议墙/晒单墙/照片墙/历史墙 历史上的今天 作者:方倍工作室   原文: http://www.c ...

最新文章

  1. Python3中装饰器@typing.overload的使用
  2. [Android应用]《花界》V1.0 正式版隆重发布!
  3. oracle 修改表
  4. IntelliJ IDEA内存优化最佳实践(转)
  5. 在印度8年的华为工程师,有很多话想说。
  6. Jensen不等式及其证明
  7. CentOS 系统添加网卡
  8. 摄像头分辨率怎么调整_网络监控摄像头怎么选择 网络监控摄像头选择方法【介绍】...
  9. Android系统(62)-----Android 7.1 新特性之 Shortcuts 介绍
  10. Eclipse Windows环境配置
  11. cPanel设置自定义404错误页
  12. bzoj 1034: [ZJOI2008]泡泡堂BNB(贪心)
  13. 2个Python入门级的实战项目
  14. 【Python成长之路】卡萨帝冰箱能买吗?让数据来说话!
  15. (计算机组成原理)第三章存储系统-第六节2:页式/段式虚拟存储器
  16. python中英文对齐_Python中英文对齐终极解决方案
  17. html正方体旋转效果,纯CSS3超酷3D旋转立方体动画特效
  18. 怎么制作linux光盘镜像,linux光盘镜像文件制作攻略
  19. Airpods连接到windows10没有声音(其他办法都试过最后这样才行)
  20. (七)区别like和rlike

热门文章

  1. 晶体管 开关电路 原理
  2. 深度 | 硬件不给力,如何穷玩深度神经网络?
  3. 10 年 bloger 告诉你要不要写博客,又该如何优雅地写博客?
  4. 为何亚马逊的员工说,“亚马逊公司该解体了”,到底发生了什么?
  5. 学会EMC设计,大部分EMC整改问题可避免
  6. 【深度学习】入门深度学习,看三位顶级大牛Yann LeCun、Yoshua Bengio和Geoffrey Hinton的综述
  7. 2007年微型计算机内容,2007年4月自学考试自考全国电力系统微型计算机继电保护历年试卷试题真题...
  8. Django实战: 开发网页计数器统计页面浏览次数
  9. pandas循环写入多个sheet
  10. ITIL Foundation笔记(摘录)