1. 程式人生 > >使用PHP判斷是否為微信、支付寶等移動裝置訪問程式碼

使用PHP判斷是否為微信、支付寶等移動裝置訪問程式碼

     在開發過程中經常遇到根據不同的裝置顯示不同的資料或者在頁面樣式上做不同的佈局,另外在做支付介面的時候也可能會判斷當前是什麼裝置訪問,例如判斷如果是微信內建瀏覽器訪問則只啟用微信支付功能,如果是支付寶內建瀏覽器訪問也是類似的處理方式,那麼如何判斷當前訪問的裝置呢,通常使用的方式是通過請求頭資訊中的HTTP_USER_AGENT來判斷,例如微信訪問在USER_AGENT中就會帶有MicroMessenger,支付寶訪問就會含有AlipayClient,當然還有其他細節,下面給出PHP程式碼。


/**
 * 是否移動端訪問訪問
 *
 * @return bool
 */
function isMobileClient()
{
 // 如果有HTTP_X_WAP_PROFILE則一定是移動裝置
if (isset($_SERVER['HTTP_X_WAP_PROFILE'])) {
       return true;
}

//如果via資訊含有wap則一定是移動裝置,部分服務商會遮蔽該資訊
if (isset($_SERVER['HTTP_VIA'])) {
     //找不到為flase,否則為true
     return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false;
}

//判斷手機發送的客戶端標誌
if (isset($_SERVER['HTTP_USER_AGENT'])) {
  $clientkeywords = [
    'nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp',
    'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu',
    'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi',
    'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile','alipay'
  ];

// 從HTTP_USER_AGENT中查詢手機瀏覽器的關鍵字
   if (preg_match("/(".implode('|', $clientkeywords).")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) {
         return true;
   }
}

//協議法,因為有可能不準確,放到最後判斷
  if (isset($_SERVER['HTTP_ACCEPT'])) {
   // 如果只支援wml並且不支援html那一定是移動裝置
   // 如果支援wml和html但是wml在html之前則是移動裝置
   if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) {
        return true;
   }
}

   return false;

​

判斷是否是微信或者支付寶內建瀏覽器訪問就比較簡單了。

/**
 * 判斷是否微信內建瀏覽器訪問
 * @return bool
 */
function isWxClient()
{
    return strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false;
}

/**
 * 判斷是否支付寶內建瀏覽器訪問
 * @return bool
 */
function isAliClient()
{
    return strpos($_SERVER['HTTP_USER_AGENT'], 'Alipay') !== false;
}