基于php的微信公众平台开发入门实例

基于php的微信公众平台开发入门实例作者 zbtree 这篇文章主要介绍了基于 php 的微信公众平台开发入门 实例分析了微信公众平台从注册 配置方法及接口代码的实现技巧 深入浅出 希望可以帮助大家快速入门 CSDN 学院开设了系列直播 微信公众号开发实战 即将直播 每周 1 小时 共计三周 独家体系 全程直播互动答疑 源码可以直接共享哦 查看 点我微信公众平台提供的接口很简单 先看看消息交互流程 说的通俗一些 用户使用微

作者:zbtree 这篇文章主要介绍了基于php的微信公众平台开发入门,实例分析了微信公众平台从注册、配置方法及接口代码的实现技巧,深入浅出。希望可以帮助大家快速入门。

CSDN学院开设了系列直播《微信公众号开发实战》即将直播,每周1小时,共计三周,独家体系,全程直播互动答疑,源码可以直接共享哦!查看:点我

微信公众平台提供的接口很简单,先看看消息交互流程:

图片描述

说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。

下面写个实例,开发微信智能聊天机器人:

  1. 注册微信公众平台账号
    微信公众平台:
    https://mp.weixin..com/
    注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。


  2. 申请服务器/虚拟主机
    没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
  3. 开启开发者模式
    微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
  4. 填写接口配置信息
    同样是在“高级功能”菜单中配置,需要配置两项参数:
    URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.YoonPer.com/weixin/index.php”为例。
    TOKEN: 随意填写,用于生成签名,以“YoonPer”为例。
    填写完把下面代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,最后点击“提交”完成验证。



<?php define("TOKEN", "YoonPer"); //TOKEN值 $wechatObj = new wechat(); $wechatObj->valid(); class wechat { 
     public function valid() { 
     $echoStr = $_GET["echostr"]; if($this->checkSignature()){ echo $echoStr; exit; } } private function checkSignature() { 
     $signature = $_GET["signature"]; $timestamp = $_GET["timestamp"]; $nonce = $_GET["nonce"]; $token = TOKEN; $tmpArr = array($token, $timestamp, $nonce); sort($tmpArr); $tmpStr = implode( $tmpArr ); $tmpStr = sha1( $tmpStr ); if( $tmpStr == $signature ) { return true; } else { return false; } } } ?>
  1. 开发微信公众平台功能
    OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:

当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:

<xml> <!--开发者微信号--> <ToUserName><![CDATA[toUser]]></ToUserName> <!--发送方帐号(OpenID)--> <FromUserName><![CDATA[fromUser]]></FromUserName> <!--消息创建时间 (整型)--> <CreateTime></CreateTime> <!--消息类别 (text文本消息)--> <MsgType><![CDATA1]></MsgType> <!--消息内容--> <Content><![CDATA[content]]></Content> <!--消息ID (64位整型)--> <MsgId>23456</MsgId> </xml>

开发者在处理完消息后需要返回数据给微信服务器:

<xml> <!--接收方帐号(OpenID)--> <ToUserName><![CDATA[toUser]]></ToUserName> <!--开发者微信号--> <FromUserName><![CDATA[fromUser]]></FromUserName> <!--消息创建时间 (整型)--> <CreateTime></CreateTime> <!--消息类别 (text文本消息)--> <MsgType><![CDATA1]></MsgType> <!--回复消息内容--> <Content><![CDATA[content]]></Content> <!--星标操作(位0x0001被标志时 星标刚收到的消息)--> <FuncFlag>0</FuncFlag> </xml>

除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。

来看看官方提供的一个PHP示例,我做了一些精简:

<?php /*------------------------------------------------- | index.php [ 微信公众平台接口 ] +-------------------------------------------------- | Author: LimYoonPer +------------------------------------------------*/ $wechatObj = new wechat(); $wechatObj->responseMsg(); class wechat { 
     public function responseMsg() { 
     //---------- 接 收 数 据 ---------- // $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; //获取接收方账号 $keyword = trim($postObj->Content); //获取消息内容 $time = 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"; //消息类型 include('simsimi.php'); $contentStr = simsimi($keyword); //返回消息内容 //格式化消息模板 $resultStr = sprintf($textTpl,$fromUsername,$toUsername,$time,$msgType,$contentStr); echo $resultStr; //输出结果 } } ?>

把代码保存为index.php并上传至http://www.YoonPer.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。

SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码:

<?php /*------------------------------------------------- | simsimi.php [ 智能聊天(simsimi) ] +-------------------------------------------------- | Author: LimYoonPer +------------------------------------------------*/ function simsimi ($keyword) { $keyword = urlencode($keyword); //----------- 获取COOKIE ----------// $url = "http://www.simsimi.com/"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_HEADER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); $content = curl_exec($ch); list($header, $body) = explode("\r\n\r\n", $content); preg_match_all("/set\-cookie:([^\r\n]*);/iU", $header, $matches); $cookie = implode(';', $matches[1]).";simsimi_uid=1;"; curl_close($ch); //----------- 抓 取 回 复 ----------// $url = "http://www.simsimi.com/func/reqN?lc=ch&ft=0.0&req=$keyword&fl=http%3A%2F%2Fwww.simsimi.com%2Ftalk.htm"; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_COOKIE, $cookie); $content = json_decode(curl_exec($ch), 1); curl_close($ch); if ( $content['result'] == '200' ) { return $content['sentence_resp']; } else { return '我还不会回答这个问题...'; } } ?>

把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~

图片描述

图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/231787.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Java中所有的关键字及用法

    Java中所有的关键字及用法基本数据类型:int:int基本数据类型,内存空间占8位取值范围-128~127inti=10;floatfloat基本数据类型,内存空间占32位取值范围-2^31~-2^31-1floatf=10.0f;longlong基本数据类型内存空间占64位取值范围-2^63~-2^63-1longl=10l;shortshort基本数据类型内存空间占16位取值范围-2^15~-2^15-1s…

    2022年7月7日
    35
  • java创建文件和目录

    java创建文件和目录创建文件和目录的关键技术点如下:1、File类的createNewFile根据抽象路径创建一个新的空文件,当抽象路径制定的文件存在时,创建失败2、File类的mkdir方法根据抽象路径创建目录3、File类的mkdirs方法根据抽象路径创建目录,包括创建必需但不存在的父目录4、File类的createTempFile方法创建临时文件,可以制定临时文件的文件名前

    2022年6月18日
    27
  • navicat激活码2021【2021免费激活】

    (navicat激活码2021)JetBrains旗下有多款编译器工具(如:IntelliJ、WebStorm、PyCharm等)在各编程领域几乎都占据了垄断地位。建立在开源IntelliJ平台之上,过去15年以来,JetBrains一直在不断发展和完善这个平台。这个平台可以针对您的开发工作流进行微调并且能够提供…

    2022年3月21日
    46
  • pycharm语法提示_python怎么调用自己的函数

    pycharm语法提示_python怎么调用自己的函数参考博客:https://www.cnblogs.com/wendj/archive/2018/09/21/9685012.html第三步:鼠标放到函数名,按住ctrl即可查看

    2022年8月25日
    7
  • 谷歌(google)广告尺寸大小列表

    谷歌(google)广告尺寸大小列表

    2021年11月17日
    55
  • MySQL 添加索引,删除索引及其用法[通俗易懂]

    MySQL 添加索引,删除索引及其用法[通俗易懂]原文:https://www.cnblogs.com/zz-tt/p/6609828.html一.索引的作用一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。在数据量和访问量不大的情况下,mysql访问是非常快的,是否加索引对访问影响…

    2022年6月2日
    42

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号