当前位置 主页 > 服务器问题 > win服务器问题汇总 >

    PHP开发之用微信远程遥控服务器

    栏目:win服务器问题汇总 时间:2019-10-10 14:23

     摘要

    微信公众好的开发很火,小程序更火。于是也凑个热闹,尝试了一把。

    大致的功能还是有的,不过是不全,很多地方我没有进行处理。不过对于纯文本方式的交流,已经没有问题啦。

    命令

    音乐

    环境搭建

    下面大致的讲讲微信公众号的原理吧。可能我理解的有些不到位,如果有些许不当,欢迎批评指教。

    客户端发送给微信平台请求,微信平台将请求转发给私服,交给程序处理之后,获取到私服的处理结果,然后反馈给客户端。

    当然,这其中起到核心作用的自然是“微信公众平台”啦。相当于提供了一个舞台,一个能让各位能人异士展现出各自的特色的平台。其实,不仅微信如此,阿里同样是这样,如此各大电商才能一展手脚不是。

    开启配置

    这第一步,就是先申请一个微信开发者账号,个人的话选择订阅号就足够了。网上相关的资料很多,也很详细,我就不多说了。咱们直奔主题好了。

    首先登陆开发者账号成功后,开启服务器端的设置即可,如下图

    开启配置

    开启完成,根据自己服务器的情况进行一下设置即可。

    URL就是你的私服用于处理请求数据的地址 TOKEN就是一个令牌,随便设置。不过记住待会自己的代码上会用到。 至于密钥嘛,没什么较大的作用,暂且可以先不用管。

    按需设置

    按需设置

    设置完,就可以启用了。这就好比家里的电线全部装修好了,现在要使用,按下开关一样。如下图

    启用服务器配置

    启用服务器配置

    服务器环境

    关于服务器这块,官网上讲解的也是很详细的啦。

    https://mp.weixin.qq.com/wiki

    我们还可以下载官方的demo来模拟。

    官方样本

    官方样本

    代码也很简单。基本上学过了PHP基本语法的都能够看得懂。

    <?php
    /**
     * wechat php test
     */
    //define your token
    define("TOKEN", "weixin");
    $wechatObj = new wechatCallbackapiTest();
    $wechatObj->valid();
    class wechatCallbackapiTest
    {
     public function valid()
     {
     $echoStr = $_GET["echostr"];
     //valid signature , option
     if($this->checkSignature()){
     echo $echoStr;
     exit;
     }
     }
     public function responseMsg()
     {
     //get post data, May be due to the different environments
     $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
     //extract post data
     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);
     $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
     $fromUsername = $postObj->FromUserName;
     $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>"; 
     if(!empty( $keyword ))
     {
      $msgType = "text";
      $contentStr = "Welcome to wechat world!";
      $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
      echo $resultStr;
     }else{
      echo "Input something...";
     }
     }else {
     echo "";
     exit;
     }
     }
     private function checkSignature()
     {
     // you must define TOKEN by yourself
     if (!defined("TOKEN")) {
     throw new Exception('TOKEN is not defined!');
     }
     $signature = $_GET["signature"];
     $timestamp = $_GET["timestamp"];
     $nonce = $_GET["nonce"];
     $token = TOKEN;
     $tmpArr = array($token, $timestamp, $nonce);
     // use SORT_STRING rule
     sort($tmpArr, SORT_STRING);
     $tmpStr = implode( $tmpArr );
     $tmpStr = sha1( $tmpStr );
     if( $tmpStr == $signature ){
     return true;
     }else{
     return false;
     }
     }
    }
    ?>