微信公众号开发——接入指南

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

公众平台配置

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

此时需要填入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参数,不作任何处理并直接返回给微信服务器,这样也能成功接入。

发表评论

发表回复

沙发空缺中,还不快抢~