Windfly`s Blog-一个注重技术分享的博客
  1. 首页
  2. 解决方案
  3. 内容

PHP服务端判断微信访问

  1. 服务端判断http请求的ua

/**
 * 判断是否微信浏览器
 *
 */
public static function isWechat(){
    $user_agent = strtolower($_SERVER['HTTP_USER_AGENT']);
 
    if (strpos($user_agent, 'micromessenger')){//微信浏览器
        return true;
    } else {
        return false;
    }
}
缺点:

需要微信客户端发来的请求有micromessenger的微信标识,但是部分手机的Webview无法直接修改 UserAgent是不允许微信客户端修改http的ua,比如windowphone;当然也有可能部分手机微信客户端发生异常,没有成功修改http的ua,所以这种服务端去通过ua来判断请求是否来自微信的方式不一定成功识别。

2.针对1出现的缺点,我们可以通过微信在浏览器内置的对象进行判断

微信的JS API建立在客户端浏览器内置JS对象WeixinJSBridge上。然而WeixinJSBridge并不是WebView一打开就有了,客户端需要初始化这个对象,当这个对象准备好的时候,客户端会抛出事件"WeixinJSBridgeReady"。因此,WeixinJSBridge存在与否可以作为判断是否微信浏览器的一种办法。

document.addEventListener('WeixinJSBridgeReady', function onBridgeReady() {
    // code...
    alert('wechat');
});

3. 授权判断

1,2两种方案并不能100%正确识别微信客户端,因为ua,header和navigator是可以模拟或者修改的。在一些不是很重要的场景,我们可以通过1,2来实现,但是如果要严格判断的话,我们要通过oauth授权来判断。(oauth授权需要微信认证)或者第三方授权 weixingate

  php 微信
分享到

作者  :  windfly

本文由 windfly 原创,未经作者许可禁止转载!转载若许可请注明来自 Windfly`s Blog



评论列表