#PHP##小程序##微信小程序##抖音##抖音小程序#
/**
* 微信公众号联合登录
* @return array|int
* @throws DataNotFoundException
* @throws DbException
* @throws LogicException
* @throws ModelNotFoundException
*/public function openid(): array{
$code = $this->request->param('code', ''); if (empty($code)) throw new LogicException("code必传");
$secret = Config::get('business.wechat.secret');
$appid = Config::get('business.wechat.appid');
$url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=" . $appid . "&secret=" . $secret . "&code=" . $code . "&grant_type=authorization_code";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$content = curl_exec($ch);
$status = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status == 404) { return $status;
}
curl_close($ch);
$errcode = json_decode($content, true); if (isset($errcode['errcode'])) { throw new LogicException($errcode['errmsg']);
} //Log::info('errcode:' . $content); if (isset($errcode['openid']) && isset($errcode['access_token'])) {
$info = $this->getUserInfo($errcode['openid'], $errcode['access_token']); //Log::info('info:' . json_encode($info, true));
$unionid = $info['unionid'];
$nickname = $info['nickname'];
$headimgurl = $info['headimgurl'];
$clientSecret = $this->request->param('clientSecret', ''); return $this->userInfoService->login( 'mobile',
$clientSecret, 'driving-test-web', 'oauth',
$errcode['openid'], '', $this->request->deviceId, $this->request->deviceToken, $this->request->ip(),
$errcode['openid'],
$nickname,
$headimgurl,
$unionid
);
} throw new LogicException('获取失败');
}/**
* 微信小程序获取openid
* @return array|int
* @throws DataNotFoundException
* @throws DbException
* @throws LogicException
* @throws ModelNotFoundException
*/public function smallOpenid(){
$code = $this->request->param('code', '');
$nickname = $this->request->param('nickname', '');
$headimgurl = $this->request->param('headimgurl', ''); if (empty($code)) throw new LogicException("code必传");
$secret = Config::get('business.wechat.small_secret');
$appid = Config::get('business.wechat.small_appid');
$url = "https://api.weixin.qq.com/sns/jscode2session?appid=" . $appid . "&secret=" . $secret . "&js_code=" . $code . "&grant_type=authorization_code";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$content = curl_exec($ch);
$status = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status == 404) { return $status;
}
curl_close($ch);
$result = json_decode($content, true); if (isset($result['errcode'])) { throw new LogicException($result['errmsg']);
} //return $result['openid'];
$clientSecret = $this->request->param('clientSecret', ''); return $this->userInfoService->login( 'mobile',
$clientSecret, 'driving-test-wechat', 'oauth',
$result['openid'], '', $this->request->deviceId, $this->request->deviceToken, $this->request->ip(),
$result['openid'],
$nickname,
$headimgurl,
$result['unionid']
);
}/**
* 头条获取openid
* @return array|int
* @throws DataNotFoundException
* @throws DbException
* @throws LogicException
* @throws ModelNotFoundException
*/public function toutiaoOpenid(){
$code = $this->request->param('code', '');
$nickname = $this->request->param('nickname', '');
$headimgurl = $this->request->param('headimgurl', ''); if (empty($code)) throw new LogicException("code必传");
$secret = Config::get('business.toutiao.secret');
$appid = Config::get('business.toutiao.app_id');
$url = "https://developer.toutiao.com/api/apps/jscode2session?appid=" . $appid . "&secret=" . $secret . "&code=" . $code;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30);
$content = curl_exec($ch);
$status = (int)curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status == 404) { return $status;
}
curl_close($ch);
$result = json_decode($content, true); if ($result['error'] != 0) { throw new LogicException($result['errcode'] . ':' . $result['errmsg']);
} //return $result['openid']; //Log::info('字节小程序openid:' . $result['openid'].';unionid:'.$result['unionid']);
$clientSecret = $this->request->param('clientSecret', ''); return $this->userInfoService->login( 'mobile',
$clientSecret, 'driving-test-tiktok', 'oauth',
$result['openid'], '', $this->request->deviceId, $this->request->deviceToken, $this->request->ip(),
$result['openid'],
$nickname,
$headimgurl,
$result['unionid']
);
}/**
* 获取用户信息
* @param string $openid 调用【网页授权获取用户信息】接口获取到用户在该公众号下的Openid
* @return string
*/public function getUserInfo($openid, $access_token){
$response = self::curlGet('https://api.weixin.qq.com/sns/userinfo?access_token=' . $access_token . '&openid=' . $openid . '&lang=zh_CN'); return json_decode($response, true);
}public static function curlGet($url = '', $options = array()){
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 30); if (!empty($options)) {
curl_setopt_array($ch, $options);
} //https请求 不验证证书和host
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
$data = curl_exec($ch);
curl_close($ch); return $data;
}