PHP语言开发微信公众平台(订阅号)之开启开发者模式(3)
(1)打开上一篇我们从花生壳官网获得的外网网址就会看到localhost根目录下的文件(这里不再赘述php环境的搭建)。注:因为外网网址在能联网时,访问外网网址的任何人都能看到根目录下的所有文件,不仅能看还能执行,故博主推荐实现内网穿透后不要把重要文件放在localhost目录下,毕竟小心驶得万年船。
(2)在localhost根目录新建一个wx文件夹,在文件夹里面新建一个api.php打开新建的api.php并将以下代码复制进去(如下代码中都有相当详细的注释,在此不再解释以下代码)
1 <?php 2 /** 3 * wechat php test 4 */ 5 header('Content-type:text'); 6 //define your token 7 //定义TOKEN密钥 8 define("TOKEN", "weixin"); 9 //实例化微信对象 10 $wechatObj = new wechatCallbackapiTest(); 11 //验证成功后注释掉valid方法 12 $wechatObj->valid(); 13 //开启自动回复功能 14 $wechatObj->responseMsg(); 15 //定义类文件 16 class wechatCallbackapiTest 17 { 18 //实现valid验证方法:实现对接微信公众平台 19 public function valid() 20 { 21 //通过GET请求接收随机字符串 22 $echoStr = $_GET["echostr"]; 23 //调用checkSignature方法进行用户(开发者)数字签名验证 24 //valid signature , option 25 if($this->checkSignature()){ 26 //如果成功,则返回接收到的随机字符串 27 echo $echoStr; 28 //并退出 29 exit; 30 } 31 } 32 33 public function responseMsg() 34 { 35 //get post data, May be due to the different environments 36 //接收用户端(客户)发送过来的XML数据 37 $postStr = $GLOBALS["HTTP_RAW_POST_DATA"]; 38 39 //extract post data 40 //判断XML数据是否为空 41 if (!empty($postStr)){ 42 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection, 43 the best way is to check the validity of xml by yourself */ 44 libxml_disable_entity_loader(true); 45 //通过simplexml进行xml解析 PHP中有两大类可以完成对XML的解析,1.PHP的Dom模型2.通过simplexml模型 46 $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA); 47 //手机端 48 $fromUsername = $postObj->FromUserName; 49 //微信公众平台 50 $toUsername = $postObj->ToUserName; 51 //接收用户发送的关键词 52 $keyword = trim($postObj->Content); 53 //时间戳 54 $time = time(); 55 //文本发送模板 56 $textTpl = "<xml> 57 <ToUserName><![CDATA[%s]]></ToUserName> 58 <FromUserName><![CDATA[%s]]></FromUserName> 59 <CreateTime>%s</CreateTime> 60 <MsgType><![CDATA[%s]]></MsgType> 61 <Content><![CDATA[%s]]></Content> 62 <FuncFlag>0</FuncFlag> 63 </xml>"; 64 //判断用户发送关键词是否为空 65 if(!empty( $keyword )) 66 { 67 //回复类型,如果为"text",代表文本类型 68 $msgType = "text"; 69 //回复内容 70 $contentStr = "Welcome to wechat world!"; 71 //格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串) 72 $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr); 73 //把XML数据返回给手机端 74 echo $resultStr; 75 } 76 //如果用户发送的关键词为空,则返回下列字符串 77 else{ 78 echo "Input something..."; 79 } 80 81 }else { 82 echo ""; 83 exit; 84 } 85 } 86 87 //定义checkSignature方法 88 private function checkSignature() 89 { 90 // you must define TOKEN by yourself 91 92 //判断TOKEN密钥是否定义 93 if (!defined("TOKEN")) { 94 //如果没有定义则抛出异常,返回'TOKEN is not defined!'字符串 95 throw new Exception('TOKEN is not defined!'); 96 } 97 //接收微信加密签名 98 $signature = $_GET["signature"]; 99 //接收时间戳信息 100 $timestamp = $_GET["timestamp"]; 101 //接收随机数 102 $nonce = $_GET["nonce"]; 103 //把TOKEN常量赋值给$token变量 104 $token = TOKEN; 105 //把相关参数组装为数组(密钥文件、时间戳、随机数) 106 $tmpArr = array($token, $timestamp, $nonce); 107 // use SORT_STRING rule 108 //通过字典法进行排序 109 sort($tmpArr, SORT_STRING); 110 //把排序后的数组转化为字符串 111 $tmpStr = implode( $tmpArr ); 112 //通过哈希算法对字符串进行加密操作 113 $tmpStr = sha1( $tmpStr ); 114 //与加密签名进行对比 115 if( $tmpStr == $signature ){ 116 return true; 117 }else{ 118 return false; 119 } 120 } 121 } 122 123 ?>
(3)打开微信公众平台"开发"菜单中的"基本配置"项,并点击"修改配置"
(4)1.进入修改配置页面填写配置信息。这里假设获得的域名为ww,baidu.com,url处填写我们上一篇获得的域名并详细到第二步我们创建的php文件,例:http://www.baidu.com/wx/api.php
2.token处填写我们第二步创建的php文件的第8行定义的token
3.第三项随机生成,第四项根据业务需要选择
4.最后点击提交按钮
(5)提交后,页面顶端会有提示,显示提交成功,则为提交成功;若显示其他,则为提交不成功
(6)此时,服务器配置旁边会显示"已启用"字样。至此微信公众平台的开发者模式已开启,今后我们就可以通过修改api.php文件来修改公众号的功能了(注:验证成功后请注释掉api.php文件中的第十二行,因为valid方法仅仅具有验证功能,如果不注释,每运行一遍此文件,就会调一次验证方法,但是验证通过后,不需要再调用此方法){好吧,确实有点绕
反正验证通过后注释掉就行了}
注:未经允许,禁止转载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!