设为首页 收藏本站
查看: 1977|回复: 0

[经验分享] PHP语言开发微信公众平台(订阅号)之开启开发者模式(3)

[复制链接]

尚未签到

发表于 2017-12-30 22:52:46 | 显示全部楼层 |阅读模式
<?php  

/**  

* wechat php test  

*/  
('Content-type:text');
  
//define your token
  
//定义TOKEN密钥
  
("TOKEN", "weixin");
  
//实例化微信对象
  
$wechatObj = new wechatCallbackapiTest();
  
//验证成功后注释掉valid方法
  
$wechatObj->valid();
  
//开启自动回复功能
  
$wechatObj->responseMsg();
  
//定义类文件

  
>  
{
  
     //实现valid验证方法:实现对接微信公众平台
  
     public function valid()
  
     {
  
         //通过GET请求接收随机字符串
  
         $echoStr = $_GET["echostr"];
  
         //调用checkSignature方法进行用户(开发者)数字签名验证
  
         //valid signature , option
  
         if($this->checkSignature()){
  
             //如果成功,则返回接收到的随机字符串
  
             echo $echoStr;
  
             //并退出
  
             exit;
  
         }
  
     }
  

  
     public function responseMsg()
  
     {
  
         //get post data, May be due to the different environments
  
         //接收用户端(客户)发送过来的XML数据
  
         $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
  

  
           //extract post data
  
         //判断XML数据是否为空
  
         if (!empty($postStr)){
  
                 /* libxml_disable_entity_loader is to prevent XML eXternal Entity Injection,
  
                    the best way is to check the validity of xml by yourself */
  
                 libxml_disable_entity_loader(true);
  
                 //通过simplexml进行xml解析     PHP中有两大类可以完成对XML的解析,1.PHP的Dom模型2.通过simplexml模型
  
                   $postObj = ($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
  
                 //手机端
  
                 $fromUsername = $postObj->FromUserName;
  
                 //微信公众平台
  
                 $toUsername = $postObj->ToUserName;
  
                 //接收用户发送的关键词
  
                 $keyword = ($postObj->Content);
  
                 //时间戳
  
                 $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>";
  
                 //判断用户发送关键词是否为空
  
                 if(!empty( $keyword ))
  
                 {
  
                     //回复类型,如果为"text",代表文本类型
  
                       $msgType = "text";
  
                     //回复内容
  
                     $contentStr = "Welcome to wechat world!";
  
                     //格式化字符串(对xml进行格式化操作,把里面相关的变量格式化成字符串)
  
                     $resultStr = ($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
  
                     //把XML数据返回给手机端
  
                     echo $resultStr;
  
                 }
  
                 //如果用户发送的关键词为空,则返回下列字符串
  
                 else{
  
                     echo "Input something...";
  
                 }
  

  
         }else {
  
             echo "";
  
             exit;
  
         }
  
     }
  

  
     //定义checkSignature方法
  
     private function checkSignature()
  
     {
  
         // you must define TOKEN by yourself
  

  
         //判断TOKEN密钥是否定义
  
         if (!("TOKEN")) {
  
             //如果没有定义则抛出异常,返回'TOKEN is not defined!'字符串
  
             throw new Exception('TOKEN is not defined!');
  
         }
  
         //接收微信加密签名
  
         $signature = $_GET["signature"];
  
         //接收时间戳信息
  
         $timestamp = $_GET["timestamp"];
  
         //接收随机数
  
         $nonce = $_GET["nonce"];
  
         //把TOKEN常量赋值给$token变量
  
         $token = TOKEN;
  
         //把相关参数组装为数组(密钥文件、时间戳、随机数)
  
         $tmpArr = array($token, $timestamp, $nonce);
  
         // use SORT_STRING rule
  
         //通过字典法进行排序
  
         ($tmpArr, SORT_STRING);
  
         //把排序后的数组转化为字符串
  
         $tmpStr = ( $tmpArr );
  
         //通过哈希算法对字符串进行加密操作
  
         $tmpStr = ( $tmpStr );
  
         //与加密签名进行对比
  
         if( $tmpStr == $signature ){
  
             return true;
  
         }else{
  
             return false;
  
         }
  
     }
  
}
  

  
?>

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-430149-1-1.html 上篇帖子: php 实现简单购物车功能(2) 下篇帖子: PHP 基于 Jenkins ansible 动态选择版本进行自动化部署与回滚(第二版)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表