背景

因当前开发功能需要用微信绑定第三方网站的用户表,然而微信订阅号没有 网页授权获取用户基本信息 的权限,于是就想到利用微信自动回复功能实现,点击自动回复的超链接跳转到第三方网站,这种方式有可能不当或者有其他更好的方式实现此功能,欢迎留言或者加QQ指出,具体实现如下:

步骤

// 在这里就不提微信接入及其他问题,只记录如何利用自动回复打开笫三方网站获取用户信息
// 因为在用户关注或者在给公众号文字消息的时候可以获取到用户的openid
// 于是就可以利用自动回复的功能
define("TOKEN", "token");
$echoStr = $_GET["echostr"];
//如果有$echoStr说明是对接
if (!empty($echoStr)) {
    //对接规则
    $signature = $_GET["signature"];
    $timestamp = $_GET["timestamp"];
    $nonce = $_GET["nonce"];
    $token = TOKEN;
    $tmpArr = array($token, $timestamp, $nonce);
    sort($tmpArr, SORT_STRING);
    $tmpStr = implode( $tmpArr );
    $tmpStr = sha1( $tmpStr );
    if( $tmpStr == $signature ){
        echo $echoStr;
    }else{
        echo "";
        exit;
    }
}else{
    responseMsg();
}

//用于回复用户消息
function responseMsg(){
    $postStr = $GLOBALS["HTTP_RAW_POST_DATA"];
    if (!empty($postStr)){
        $postObj = simplexml_load_string($postStr, 'SimpleXMLElement', LIBXML_NOCDATA);
        $fromUsername = $postObj->FromUserName;
        $toUsername = $postObj->ToUserName;
        $MsgT = $postObj->MsgType;
        $time = time();
        //如果用户发的text类型
        if($MsgT=="text"){
            $key = trim($postObj->Content);
            $fromUsername = $postObj->FromUserName;
            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        </xml>"; 
            $msgType = "text";
            $answer = "<a href='http://www.baidu.com?openid=%s'>点击跳转</a>";
            // 如果有占位符就替换成openid
            $contentStr = strpos($answer, '%s') ? sprintf($answer,$fromUsername) : $answer;
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
            exit;
        }

        //如果用户发的event(事件)类型
        if($MsgT=="event"){
            $Event = $postObj->Event;
            if ($Event==subscribe) {
               $contentStr = "欢迎关注";
            }else{
                $contentStr = "希望您下次关注,但您收不到此条消息了";
            }

            $textTpl = "<xml>
                        <ToUserName><![CDATA[%s]]></ToUserName>
                        <FromUserName><![CDATA[%s]]></FromUserName>
                        <CreateTime>%s</CreateTime>
                        <MsgType><![CDATA[%s]]></MsgType>
                        <Content><![CDATA[%s]]></Content>
                        </xml>"; 
            $Title = $postObj->Title;
            $Description = $postObj->Description;
            $Url = $postObj->Url;
            $msgType = 'text';
            $resultStr = sprintf($textTpl, $fromUsername, $toUsername, $time, $msgType, $contentStr);
            echo $resultStr;
            exit;
        }
    }else{
        echo "";
        exit;
    }
}

结果

点击自动回复超链接就可以把openid带到第三方网站,然后就可以利用openid查到用户的信息

标签: php

添加新评论