温馨提示
  • 欢迎您光临共享屋素材网,本站所有资源均来自网络或用户自主上传,本站所有素材仅交流学习用途,请勿商用。
  • 微信公众号开发——接入指南

    要进行公众号开发,首先第一步肯定是要把公众号接入到你的项目中,那么今天就来演示一下接入过程。

    公众平台配置

    进入微信公众平台,输入公众号的账号密码进行登录,选择左侧菜单靠下方位置的基本配置,然后点击修改配置。

    此时需要填入URL、Token、EncodingAESKey和选择消息加解密方式。

    URL:后台接入验证的脚本文件链接,这个链接要能访问到你项目中验证微信接入的逻辑代码的方法,以http://或https://开头。

    Token:自定义字符串,要和代码中的Token一致。必须为英文或数字,长度为3-32字符。

    EncodingAESKey:消息加密密钥,如果消息加解密方式选择安全模式,那么公众号和服务器进行的消息交互都需要加解密,这个起到秘钥的作用。点击后面的随机生成即可。

    消息加解密方式:明文模式下,微信和服务器之间交互的消息不加密和解密。兼容模式下,加解密的操作可有可无。安全模式下,必须有加解密的业务代码,有关这部分的操作后面在讲解消息接收的文章时会有说明。

    下面是一个填写好的示例图:

    此时先不要点击提交,我们还需要在项目中进行配置。

    项目验证代码

    这里以Thinkphp框架进行演示,进入到Home模块Index控制器index方法(刚才公众平台填写的URL路径),代码如下:

    class IndexController extends ComController
    {
        public function index()
        {
            define("TOKEN", "acier");
            define("AppID", "wx4abf8a686084d2fd");
            define("EncodingAESKey", "cMhGxj3Bq1Y9vcG93ef1pCWH4AUh2E3zXpLNHiF74CI");
            $this->logger(' http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'].(empty($_SERVER['QUERY_STRING'])?"":("?".$_SERVER['QUERY_STRING'])));
            $this->valid();
        }
    
        //验证签名
        public function valid()
        {
            $echoStr = $_GET["echostr"];
            $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){
                echo $echoStr;
                exit;
            }
        }
    
        //日志记录
        private function logger($log_content)
        {
            if(isset($_SERVER['HTTP_APPNAME'])){   //SAE
                sae_set_display_errors(false);
                sae_debug($log_content);
                sae_set_display_errors(true);
            }else if($_SERVER['REMOTE_ADDR'] != "127.0.0.1"){ //LOCAL
                $max_size = 500000;
                $log_filename = "log.xml";
                if(file_exists($log_filename) and (abs(filesize($log_filename)) > $max_size)){unlink($log_filename);}
                file_put_contents($log_filename, date('Y-m-d H:i:s').$log_content."\r\n", FILE_APPEND);
            }
        }
    }
    

    此时返回到微信公众平台后台,当点击提交按钮后,微信服务器将发送GET请求到填写的服务器地址URL上,并携带signature、timestamp、nonce、echostr四个参数,按照官方示例代码,将token、timestamp、nonce三个参数进行字典序排序,然后将三个参数字符串拼接成一个字符串进行sha1加密,最后开发者获得加密后的字符串可与signature对比,若对比成功,原样返回echostr参数内容,则接入生效,成为开发者成功,否则接入失败。

    另外,当微信发过来消息时,logger方法会生成一个log.txt文件,将当前访问域名,当前执行脚本和GET传输时?后面的值获取到,并写入项目根目录,方面我们查阅。

    $_SERVER[‘HTTP_HOST’]:网站的域名。

    $_SERVER[“PHP_SELF”]:当前正在执行脚本的文件名。

    $_SERVER[“QUERY_STRING”]:获取GET传输?后面的值。

    微信接入的原理,主要是对signature请求进行校验,确认此次GET请求来自微信服务器,那么我们发现即使代码中不进行参数的字典排序等一系列操作,只要接收到echostr参数,不作任何处理并直接返回给微信服务器,这样也能成功接入。

    登录开启无限免费下载