基于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)
上一篇 2025年11月21日 下午3:01
下一篇 2025年11月21日 下午3:22


相关推荐

  • 321_MediaType Media Type 是什么

    321_MediaType Media Type 是什么MediaType是什么MediaType在网络协议的消息头里面叫做Content-Type使用两部分的标识符来确定一个类型所以我们用的时候其实就是为了表明我们传的东西是什么类型比如application/json:JSON格式的数据,在RFC4627中定义application/javascript:JavaScript,在RFC4329中定义但是…

    2022年5月9日
    83
  • Django(22)Django执行SQL语句「建议收藏」

    Django(22)Django执行SQL语句「建议收藏」前言Django在查询数据时,大多数查询都能使用ORM提供的API方法,但对于一些复杂的查询可能难以使用ORM的API方法实现,因此Django引入了SQL语句的执行方法,有以下三种执行方式ext

    2022年7月29日
    6
  • java的entryset_EntrySet的用法

    java的entryset_EntrySet的用法版权声明 本文为博主原创文章 遵循 CC4 0BY SA 版权协议 转载请附上原文出处链接和本声明 本文链接 https blog csdn net nuoshueihe article details packageedu smc test 2 3 importjava util HashMap 4 importjava util Iterator 5 impor

    2026年3月16日
    2
  • vue子组件向父组件传值的三种方式_vue父页面传值到子页面

    vue子组件向父组件传值的三种方式_vue父页面传值到子页面1.用于子组件触发事件传递给父组件子组件:rowEvent里面也可以带参数事件treeData是携带的参数rowEvent(){this.$emit(‘rowEvent’,’treeData’’);},父组件:在父组件绑定自定义事件直接可以获取到rowEvents(obj){console.log(obj)},2.用ref(常用于不触发的事件)子组件定义个…

    2025年8月31日
    7
  • 直接学 Vue 3 吧 —— 对话 Vue.js 作者尤雨溪[通俗易懂]

    直接学 Vue 3 吧 —— 对话 Vue.js 作者尤雨溪[通俗易懂]《程序员》于2000年创刊,其理念为技术改变世界,创新驱动中国。2021年,《程序员》2.0全新起航,首期以「开发者的黄金十年」为主题,以音视频、图文专栏等丰富的多媒体形式为载体,立足当下,放眼未来,为读者带来全方位的技术和产业解读。本文为《程序员》2.0第一期内容,在UNIX开发者BrianW.Kernighan之后,我们采访到Vue.js的作者尤雨溪,与其共谈精彩程序人生、共论顶级开源项目的成功之道。从复杂的jQuery插件化开发到模块化及组件化,现代前端技术在迭代.

    2022年4月29日
    101
  • 猫眼电影MySQL数据库怎么写_猫眼电影 后台开发 面经

    猫眼电影MySQL数据库怎么写_猫眼电影 后台开发 面经一面 7 月 201h10min 1 对 springboot 的理解 2 springboot 想要开发一个 web 应用需要做哪些配置 3 输入一个 https 的网址 整个过程是什么样的 详细讲一下 https 和 http 的区别 对称加密和非对称加密分别加密的哪些内容 4 讲一下三次握手 syn 洪泛攻击怎么处理 5 讲一下 HashMap 1 7 和 1 8 做了哪些改动 有什么区别 为什么要做这样的改动 详细讲一下 1

    2026年3月19日
    2

发表回复

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

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