微擎中使用微信之门接口,让订阅号也能直接以网页的方式获取OpenID

746 查看

开发微擎模块的时候 常会遇到一个问题:
只有服务号才能直接在网页上获取OpenID
如果是订阅号就只能从对话消息中获取OpenID然后传到网页,
虽然微擎有个功能叫做“借用oAuth权限”,
但是有时候连借都没地方借,怎么办呢?
还好这是个互联网时代,有需求,就会有服务。
微信之门”就是为此而生的,转发一下他们的简介:

微信打开的网页,是无法持久存贮 cookies 的,你知道吗? 那么如何辨识唯一用户呢?
是的,使用微信服务号!服务号拥有高级接口,可以给让网站通过微信的OAuth2授权, 获得用户的 OpenID, 从而辨别一个唯一用户。
那么,没有微信服务号呢? 这就是微信之门诞生的原因。

其它使用说明可以到微信之门官网查看。

我要写的是怎么在微擎模块中使用微信之门的接口,
在你的xxxModuleSite类(也就是addons/xxx/site.php文件)添加一个构造函数 代码如下:

function __construct()
{
    global $_W, $_GPC;
    if (empty($_W['openid'])) {
        if (empty($_SESSION['openid'])) {
            if ($_GPC['wgateid']) {
                $_W['openid'] = $_SESSION['openid'] = $_GPC['wgateid'];
            } else {
                $thisUrl = urlencode('http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
                $gateUrl = "http://www.weixingate.com/gate.php?back=$thisUrl&force=1&info=none";
                header('Location: ' . $gateUrl);
                exit;
            }
        } else {
            $_W['openid'] = $_SESSION['openid'];
        }
    }
}

好吧,代码一出 说什么都显得多余,
这逻辑简单到小朋友都看得懂,就不多做解释了,
事实上还可以调用一下验证接口,检查一下传回来的的wgateid,如何有需要的话……