微信公众平台Php版php开发(转)
http://www.1990c.com/?p=932
近在做微信公众平台开发,一口气写了二十几个功能,挺有意思的~
今天来分享一下开发经验~
微信公众平台提供的接口很简单,先看看消息交互流程:
说的通俗一些,用户使用微信发送消息 -> 微信将数据发送给开发者 -> 开发者处理消息并返回数据至微信 -> 微信把返回数据发送给用户,期间数据交互通过XML完成,就这么简单。
下面写个实例,开发微信智能聊天机器人:
1. 注册微信公众平台账号
微信公众平台:
https://mp.weixin.qq.com/
注: 目前一张身份证只能注册两个账号,账号名称关乎加V认证,请慎重注册。
2. 申请服务器/虚拟主机
没有服务器/虚拟主机的童鞋可以使用BAE和SAE,不多介绍。
3. 开启开发者模式
微信公众平台有两个模式,一个是编辑模式(傻瓜模式),简单但功能单一。另一个是开发者模式,可以通过开发实现复杂功能。两个模式互斥,显而易见,登录微信公众平台并通过“高级功能”菜单开启开发者模式。
4. 填写接口配置信息
同样是在“高级功能”菜单中配置,需要配置两项参数:
URL: 开发者应用访问地址,目前仅支持80端口,以“http://www.1990c.com/weixin/index.php”为例。
TOKEN: 随意填写,用于生成签名,以“1990c”为例。
填写完把下面代码保存为index.php并上传至http://www.1990c.com/weixin/目录,最后点击“提交”完成验证。
01 |
02 | define("TOKEN", "1990c"); //TOKEN值 |
03 | $wechatObj = new wechat(); |
04 | $wechatObj->valid(); |
05 | class wechat { |
06 | public function valid() { |
07 | $echoStr = $_GET["echostr"]; |
08 | if($this->checkSignature()){ |
09 | echo $echoStr; |
10 | exit; |
11 | } |
12 | } |
13 |
14 | private function checkSignature() { |
15 | $signature = $_GET["signature"]; |
16 | $timestamp = $_GET["timestamp"]; |
17 | $nonce = $_GET["nonce"]; |
18 | $token = TOKEN; |
19 | $tmpArr = array($token, $timestamp, $nonce); |
20 | sort($tmpArr); |
21 | $tmpStr = implode( $tmpArr ); |
22 | $tmpStr = sha1( $tmpStr ); |
23 | if( $tmpStr == $signature ) { |
24 | return true; |
25 | } else { |
26 | return false; |
27 | } |
28 | } |
29 | } |
30 | ?> |
这玩意儿就是微信公众平台校验URL是否正确接入,研究代码没有实质性意义,验证完即可删除文件,就不详细说明了,有兴趣的童鞋可以查看官方文档。
微信公众平台API文档:
http://mp.weixin.qq.com/wiki/index.php
5. 开发微信公众平台功能
OK,上面提到了,微信公众平台与开发者之间的数据交互是通过XML完成的,既然用到XML,当然得遵循规范,所以在着手开发之前先看看官方接口文档提供的XML规范,以文本消息为例:
当用户向微信公众账号发送消息时,微信服务器会POST给开发者一些数据:
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
开发者在处理完消息后需要返回数据给微信服务器:
01 |
02 |
03 |
04 |
05 |
06 |
07 |
08 |
09 |
10 |
11 |
12 |
13 |
14 |
除文本消息外,微信公众平台还支持用户发送图片消息、地理位置消息、链接消息、事件推送,而开发者还可以向微信公众平台回复音乐消息和图文消息,各类消息XML规范也可以参见官方文档。
来看看官方提供的一个PHP示例,我做了一些精简:
01 |
02 | $wechatObj = new wechat(); |
03 | $wechatObj->responseMsg(); |
04 | class wechat { |
05 | public function responseMsg() { |
06 |
07 | //---------- 接 收 数 据 ---------- // |
08 |
09 | $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; //获取POST数据 |
10 |
11 | //用SimpleXML解析POST过来的XML数据 |
12 | $postObj = simplexml_load_string($postStr,'SimpleXMLElement',LIBXML_NOCDATA); |
13 |
14 | $fromUsername = $postObj->FromUserName; //获取发送方帐号(OpenID) |
15 | $toUsername = $postObj->ToUserName; //获取接收方账号 |
16 | $keyword = trim($postObj->Content); //获取消息内容 |
17 | $time = time(); //获取当前时间戳 |
18 |
19 |
20 | //---------- 返 回 数 据 ---------- // |
21 |
22 | //返回消息模板 |
23 | $textTpl = " |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | "; |
31 |
32 | $msgType = "text"; //消息类型 |
33 | $contentStr = 'http://www.1990c.com'; //返回消息内容 |
34 |
35 | //格式化消息模板 |
36 | $resultStr = sprintf($textTpl,$fromUsername,$toUsername, |
37 | $time,$msgType,$contentStr); |
38 | echo $resultStr; //输出结果 |
39 | } |
40 | } |
41 | ?> |
把代码保存为index.php并上传至http://www.1990c.com/weixin/目录,如果刚才没删除该文件,则直接覆盖。
现在用户通过微信公众平台发送任何消息公众账号均会返回一条内容为“http://www.1990c.com”的消息。
接下来需要做的就是根据用户消息动态返回结果~
SimSimi(小黄鸡)是目前比较火的聊天机器人,我用CURL开发了一个免费的SimSimi(小黄鸡)接口,传入关键词会返回文本回复,这部分不是本文重点,就不多说明,直接上代码:
01 |
02 | function SimSimi($keyword) { |
03 |
04 | //----------- 获取COOKIE ----------// |
05 | $url = "http://www.simsimi.com/"; |
06 | $ch = curl_init($url); |
07 | curl_setopt($ch, CURLOPT_HEADER,1); |
08 | curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); |
09 | $content = curl_exec($ch); |
10 | list($header, $body) = explode("\r\n\r\n", $content); |
11 | preg_match("/set\-cookie:([^\r\n]*);/iU", $header, $matches); |
12 | $cookie = $matches[1]; |
13 | curl_close($ch); |
14 |
15 | //----------- 抓 取 回 复 ----------// |
16 | $url = "http://www.simsimi.com/func/req?lc=ch&msg=$keyword"; |
17 | $ch = curl_init($url); |
18 | curl_setopt($ch, CURLOPT_REFERER, "http://www.simsimi.com/talk.htm?lc=ch"); |
19 | curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); |
20 | curl_setopt($ch, CURLOPT_COOKIE, $cookie); |
21 | $content = json_decode(curl_exec($ch),1); |
22 | curl_close($ch); |
23 |
24 | if($content['result']=='100') { |
25 | $content['response']; |
26 | return $content['response']; |
27 | } else { |
28 | return '我还不会回答这个问题...'; |
29 | } |
30 | } |
31 | ?> |
把上面两段代码整合在一起就大功告成了,需要说明一点,微信服务器在5秒内收不到响应会断掉连接,通过此接口有可能会超时,且SimSimi已经屏蔽了BAE和SAE上的抓取请求,推荐使用SimSimi官方收费API,速度比较快~
最后附上微信公众平台智能聊天机器人源码:
微信公众平台智能聊天机器人源码下载:
http://www.1990c.com/wp-content/uploads/2013/05/40.rar

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

在PHP中,應使用password_hash和password_verify函數實現安全的密碼哈希處理,不應使用MD5或SHA1。1)password_hash生成包含鹽值的哈希,增強安全性。 2)password_verify驗證密碼,通過比較哈希值確保安全。 3)MD5和SHA1易受攻擊且缺乏鹽值,不適合現代密碼安全。

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python各有優劣,選擇取決於項目需求和個人偏好。 1.PHP適合快速開發和維護大型Web應用。 2.Python在數據科學和機器學習領域佔據主導地位。

在PHP中使用預處理語句和PDO可以有效防範SQL注入攻擊。 1)使用PDO連接數據庫並設置錯誤模式。 2)通過prepare方法創建預處理語句,使用佔位符和execute方法傳遞數據。 3)處理查詢結果並確保代碼的安全性和性能。

PHP在數據庫操作和服務器端邏輯處理中使用MySQLi和PDO擴展進行數據庫交互,並通過會話管理等功能處理服務器端邏輯。 1)使用MySQLi或PDO連接數據庫,執行SQL查詢。 2)通過會話管理等功能處理HTTP請求和用戶狀態。 3)使用事務確保數據庫操作的原子性。 4)防止SQL注入,使用異常處理和關閉連接來調試。 5)通過索引和緩存優化性能,編寫可讀性高的代碼並進行錯誤處理。

PHP用於構建動態網站,其核心功能包括:1.生成動態內容,通過與數據庫對接實時生成網頁;2.處理用戶交互和表單提交,驗證輸入並響應操作;3.管理會話和用戶認證,提供個性化體驗;4.優化性能和遵循最佳實踐,提升網站效率和安全性。

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。
