PHP中识别客户端环境一般是通过请求头USER_AGENT来实现
判断是否为微信客户端
通过UESR_AGENT中是否包含MicroMessenger关键词来识别。
微信小程序环境
1.通过UESR_AGENT中是否包含miniprogram关键词来识别,此方式仅安卓手机可用,苹果手机UESR_AGENT中不返回miniprogram关键词。
2.通过判断请求来源Referer域名来识别,小程序中所有请求来源referer格式固定为 servicewechat.com/{appid}/{ve… ,其中{appid} 为小程序的 appid,{version} 为小程序的版本号,版本号为 0 表示为开发版、体验版以及审核版本,版本号为 devtools 表示为开发者工具,其余为正式版本;
如果想识别开发环境还是线上环境,也可以通过版本号来识别。
可以参考此小程序官方文档:developers.weixin.qq.com/miniprogram…
3.通过前端返回客户端信息,前端每次请求都携带当前客户端环境如:xxx.com?client=wechat
示例代码
//获取用户客户端
public function getUserClient()
{
$user_agent = strtolower($this->request()->getHeader('user-agent')[0] ?? '');
//微信客户端
if (!empty($user_agent) && strpos($user_agent, strtolower('MicroMessenger')) !== false) {
$referer = $this->request()->getHeaderLine('referer');
if (strpos($user_agent, "miniprogram") || strpos($referer, "servicewechat.com")) {
$client = '小程序';
} else {
$client = 'H5';
}
} else if (strpos($user_agent, "uni-app") || strpos($user_agent, strtolower('Html5Plus'))) { //判断是否为APP
if (strpos($user_agent, strtolower('Android')) !== false) {
$client = '安卓APP';
} else {
$client = '苹果APP';
}
} else {
$client = 'H5';
}
return $client;
}