<?php
namespace app\api\controller;
use app\common\controller\Api;
/**
* @title Version 版本接口
* @description 接口说明
*/
class Version extends Api
{
public function _initialize()
{
parent::_initialize();
}
/**
* @title 获取新版本
* @description 接口说明
* @param name:version type:string require:1 desc:版本号
* @param name:type type:int require:1 desc:类型0用户端1商家端2代理商端
* @param name:system type:string require:1 desc:系统android/ios
* @return is_upgrade:是否新版本
* @return upgrade_url:更新链接
* @return upgrade_version:更新版本号
* @return desc:更新的描述
* @author 开发者
* @url /api/Version/getVersion
* @method get
*
*/
public function getVersion()
{
$version = $this->request->get('version');
$type = $this->request->get('type', 1);
$system = $this->request->get('system', 'android');
$VersionModel = new \app\common\model\Version();
if (empty($version)) {
$this->error('请传入版本号');
}
$message = '暂无更新';
$upgrade_version = '';
$upgrade_url = '';
$is_upgrade = 0;
$desc = '';
$version_list = $VersionModel->where('type', $type)->column('version');
// echo $VersionModel->getLastSql();exit;
$version_sort = self::sortVersion($version_list, false);
$version_sort = self::comparisonVersion($version, $version_sort);
if (!empty($version_sort)) {
$versionInfo = $VersionModel->where(['type' => $type, 'version' => $version_sort[0]])->find();
switch ($type) {
case 1:
// 用户端
if (!empty($system) && $system == 'android') {
$upgrade_url = $versionInfo['upgrade_url'];
$upgrade_version = $versionInfo['version'];
$desc = $versionInfo['desc'];
if ($version != $versionInfo['version']) {
$message = '用户端有更新';
$is_upgrade = 1;
}
} else {
// 1197227551 众驾租车
$result = self::get_curl('https://itunes.apple.com/cn/lookup', ['id' => '1197227551']);
$result_array = json_decode(trim($result), true);
if (!empty($result_array) && !empty($result_array['results'][0]['version'])
&& $result_array['results'][0]['version'] != $version
&& $result_array['results'][0]['version'] >= $version) {
$message = '用户端有更新';
$upgrade_url = $result_array['results'][0]['trackViewUrl'];
$upgrade_version = $result_array['results'][0]['version'];
$is_upgrade = 1;
$desc = $result_array['results'][0]['releaseNotes'];
}
}
break;
case 2:
// 商家端
if (!empty($system) && $system == 'android') {
$upgrade_url = $versionInfo['upgrade_url'];
$upgrade_version = $versionInfo['version'];
$desc = $versionInfo['desc'];
if ($version != $versionInfo['version']) {
$message = '商家端有更新';
$is_upgrade = 1;
}
} else {
// 1197227551 众驾租车
$result = self::get_curl('https://itunes.apple.com/cn/lookup', ['id' => '1197227551']);
$result_array = json_decode(trim($result), true);
if (!empty($result_array) && !empty($result_array['results'][0]['version'])
&& $result_array['results'][0]['version'] != $version
&& $result_array['results'][0]['version'] >= $version) {
$message = '商家端有更新';
$upgrade_url = $result_array['results'][0]['trackViewUrl'];
$upgrade_version = $result_array['results'][0]['version'];
$is_upgrade = 1;
$desc = $result_array['results'][0]['releaseNotes'];
}
}
break;
default:
break;
}
}
$data = [
'is_upgrade' => $is_upgrade,
'upgrade_url' => $upgrade_url,
'upgrade_version' => $upgrade_version,
'desc' => $desc
];
// write_log($data);
$this->success($message, $data);
}
public function get_curl($url = '', $data = [])
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);// 跳过证书检查
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);// 从证书中检查SSL加密算法是否存在
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_AUTOREFERER, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
if (curl_errno($ch)) {
write_log(' 提交参数信息 ch:' . json_encode(curl_error($ch)));
return curl_error($ch);
}
curl_close($ch);
return $result;
}
/**
* 比对版本号
* @param string $version
* @param array $versions
* @return mixed
*/
function comparisonVersion($version = '', $versions = [])
{
foreach ($versions as $key => $value) {
$result = version_compare($version, $value);
if ($result == '-1') {// 当前版本比系统版本低
return $value;
} else if ($result == '0') {// 当前版本与系统版本一致
continue;
} else if ($result == '1') {// 当前版本比系统版本高
continue;
}
}
}
/**
* 排序版本号
* @param $versions
* @param bool $sort_rule
* @return mixed
*/
function sortVersion($versions, $sort_rule = true)
{
foreach ($versions as $key => $value) {
$firstArr = explode('.', $value);
$firstArrCount = count($firstArr);
for ($i = 0; $i < $firstArrCount; $i++) {
$firstArr[$i] = str_pad($firstArr[$i], 2, 0, STR_PAD_LEFT);
}
$versions[$key] = implode('.', $firstArr);
}
if ($sort_rule) {
sort($versions);
} else {
rsort($versions);
}
foreach ($versions as $key => $value) {
$firstArr = explode('.', $value);
$firstArrCount = count($firstArr);
for ($i = 0; $i < $firstArrCount; $i++) {
$firstArr[$i] = intval($firstArr[$i]);
}
$versions[$key] = implode('.', $firstArr);
}
return $versions;
}
}