微信公众号开发相关配置(一)

386 阅读2分钟

突然接到一个需求,要对网站接入服务号,第一次接触说真的不知无从下手,然后无脑的去看了服务号的开发文档(微信官方文档),最后完成了,确实文档坑太多,今天记录一下,里面提供了测试的环境,自己配置完后就可以使用很多的高级接口,下面我们先从测试号的配置开始。

申请测试公众号

按照文档使用微信登录就可以得到一个测试的公众号,可以看到里面有appid和appsecret,这些配置将来要使用来获取access_token的

image.png

接下来,最容易掉坑里的配置来了,微信服务器回调的接口,也就是你接收微信服务器的接口配置,URL就是填写回调的接口,Token可以随便填,但是。。。。,回调接口里和这里的Token配置一定要一样,不然的话Token检验就会不通过,导致返回 {"errcode":-106,"errmsg":"token check fail"}

image.png

接收微信服务器的回调接口PHP示例代码

//获得参数 signature nonce token timestamp echostr
$nonce     = $_GET['nonce'];
$token     = 'testToken';
$timestamp = $_GET['timestamp'];
$echostr   = $_GET['echostr'];
$signature = $_GET['signature'];
//形成数组,然后按字典序排序
$array = array();
$array = array($nonce, $timestamp, $token);
sort($array);
//拼接成字符串,sha1加密 ,然后与signature进行校验
$str = sha1(implode('',$array));
if ($str == $signature && $echostr) {
    //第一次接入weixin api接口的时候
    echo $echostr;
    exit;
}else{
    reponseMsg(); // 响应给微信服务器的信息
}

reponseMsg() 这个函数是响应给微信服务器的信息,然后微信服务器会通过响应的信息推送给微信用户,可以看开发文档里接收普通消息推送和接收事件推送,只要给它返回模板就行,接下来看看返回的responseMsg() 里的代码

扫描二维码事件带参数的PHP示例代码

// 接收事件推送并回复
function reponseMsg()
{
    //1.获取到微信推送过来post数据(xml格式)
    $postArr = $GLOBALS['HTTP_RAW_POST_DATA'];//php7以上不能用
//    $postArr = file_get_contents("php://input");
    //2.处理消息类型,并设置回复类型和内容
    $postObj = simplexml_load_string($postArr);
    //判断该数据包是否是订阅的事件推送
    if (strtolower($postObj->MsgType) == 'event') {
        //回复用户消息(纯文本格式)
        $toUser   = $postObj->FromUserName;
        $fromUser = $postObj->ToUserName;
        $eventkey = $postObj->EventKey;
        $time     = time();
        $msgType  = 'text';
        $eventkey = str_replace('qrscene_','',$eventkey);
        //todo
        $result = true; //根据场景来判断,这里因为场景不一样就不判断了
        //如果是关注 subscribe 事件
        if (strtolower($postObj->Event == 'subscribe')) {
            //回复用户消息(纯文本格式)
            //$content  = '欢迎关注我们的微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;
            if ($result){
                $content  = '欢迎关注测试的微信公众账号,这是我的场景值' . $eventkey;
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                         </xml>";
                $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
                echo $info;
            }

        }else if (strtolower($postObj->Event == 'SCAN')){
            //$content  = '欢迎关注我们的微信公众账号'.$postObj->FromUserName.'-'.$postObj->ToUserName;
            if ($result) {
                $content  = '我已经关注过测试的微信公众账号了,这是我的场景值' . $eventkey;
                $template = "<xml>
                            <ToUserName><![CDATA[%s]]></ToUserName>
                            <FromUserName><![CDATA[%s]]></FromUserName>
                            <CreateTime>%s</CreateTime>
                            <MsgType><![CDATA[%s]]></MsgType>
                            <Content><![CDATA[%s]]></Content>
                         </xml>";
                $info     = sprintf($template, $toUser, $fromUser, $time, $msgType, $content);
                echo $info;
            }
        }
    }
}

新手上路,公众号开发大致就是这样,不是在调接口的路上就是在调接口的路上,坑很多,下次遇到在记录吧,下一文在写如何生成带参数的二维码