acl-solution / rh-dependency
私有依赖项
Requires
- php: >=7.4
- cache/adapter-common: ^1.0
- guzzlehttp/guzzle: ^6.3||^7.0
- ipinfo/ipinfo: 2.2.0
- league/flysystem: ^1.0
- psr/cache: ^1.0 || ^2.0
- psr/simple-cache: ^1.0
README
私有依赖项
安装
此包通过Composer安装。您可以使用以下命令将其添加到项目中。
composer require acl-solution/rh-dependency composer update
WHMCS使用
此API客户端通过简单的OO包装封装了WHMCS。
首先,您需要使用您的WHMCS安装详情创建一个客户端实例
$api = new \ACL\RH\Dependency\Provider('https://example.com/whmcs/installation/url/', 'myusername', 'mypassword');
注意URL末尾的/
。用户名和密码是具有“API访问”权限的用户凭据。您可以使用主管理员用户,但出于安全考虑,建议为每个项目创建一个特殊的API用户。
创建客户端后,您可以开始发送请求。方法对应于WHMCS API中的操作名称,其他属性可以以数组形式提交。
例如,要执行“AcceptOrder”操作,可以使用以下代码。
try { $result = $api->acceptOrder([ 'orderid' => 123, 'serverid' => 456, //... ]); } catch (\HansAdema\WhmcsSdk\RequestException $e) { echo "Error connecting to WHMCS: ".$e->getMessage(); } catch (\HansAdema\WhmcsSdk\ResponseException $e) { echo "There was an issue with your API call: ".$e->getMessage(); }
请注意,这里使用了两种不同类型的异常。当连接到您的WHMCS安装有问题时,将使用RequestException
,例如,因为安装已关闭或凭据不正确。当API结果不成功时,将抛出ResponseException
,例如,由于缺少或无效的方法参数。
快速入门
require_once __DIR__ . '/vendor/autoload.php'; use ipinfo\ipinfo\IPinfo; $access_token = '123456789abc'; $client = new IPinfo($access_token); $ip_address = '216.239.36.21'; $details = $client->getDetails($ip_address); $details->city; // Emeryville $details->loc; // 37.8342,-122.2900
使用
IPinfo->getDetails()
方法接受一个IP地址作为可选的、位置参数。如果没有指定IP地址,API将返回请求的IP地址的数据。
$client = new IPinfo(); $ip_address = '216.239.36.21'; $details = $client->getDetails($ip_address); $details->city; // Emeryville $details->loc; // 37.8342,-122.2900
身份验证
IPinfo库可以使用您的IPinfo API令牌进行身份验证,该令牌作为位置参数传递。它也可以在没有身份验证令牌的情况下工作,但功能更为有限。
$access_token = '123456789abc'; $client = new IPinfo($access_token);
详细信息数据
IPinfo->getDetails()
将返回一个包含所有列出的字段(IPinfo开发者文档中有一些小的添加)的Details
对象。可以直接访问属性。
$details->hostname; // cpe-104-175-221-247.socal.res.rr.com
国家名称
Details->country_name
将返回国家名称,如countries.json
文件提供。有关更改该文件以用于非英语语言的说明,请参阅下面。Details->country
将仍然返回国家代码。
$details->country; // US $details->country_name; // United States
经纬度
Details->latitude
和Details->longitude
将分别以字符串形式返回纬度和经度。Details->loc
将仍然返回包含两个值的复合字符串。
$details->loc; // 34.0293,-118.3570 $details->latitude; // 34.0293 $details->longitude; // -118.3570
访问所有属性
Details->all
将返回所有详细信息数据作为字典。
$details->all; /* { 'asn': { 'asn': 'AS20001', 'domain': 'twcable.com', 'name': 'Time Warner Cable Internet LLC', 'route': '104.172.0.0/14', 'type': 'isp'}, 'city': 'Los Angeles', 'company': { 'domain': 'twcable.com', 'name': 'Time Warner Cable Internet LLC', 'type': 'isp'}, 'country': 'US', 'country_name': 'United States', 'hostname': 'cpe-104-175-221-247.socal.res.rr.com', 'ip': '104.175.221.247', 'loc': '34.0293,-118.3570', 'latitude': '34.0293', 'longitude': '-118.3570', 'phone': '323', 'postal': '90016', 'region': 'California' } */
缓存
默认通过sabre/cache库提供内存中缓存Details
数据。已添加LRU(最近最少使用)缓存失效功能到默认TTL(生存时间)。这意味着值将被缓存指定的时间段;如果缓存的最大大小达到,则将根据需要使缓存值失效,从最旧的缓存值开始。
修改缓存选项
默认缓存TTL和最大大小可以通过在$settings
参数数组中设置值来更改。
- 默认最大缓存大小:4096(建议使用2的倍数以提高效率)
- 默认TTL:24小时(以秒为单位)
$access_token = '123456789abc'; $settings = ['cache_maxsize' => 30, 'cache_ttl' => 128]; $client = new IPinfo($access_token, $settings);
使用不同的缓存
可以通过创建一个继承自CacheInterface类的子类来使用自定义缓存,并将这个类通过cache
关键字参数传递给处理对象。请注意,这被称为策略模式。
$access_token = '123456789abc'; $settings = ['cache' => $my_fancy_custom_cache]; $client = new IPinfo($access_token, $settings);
禁用缓存
您可以通过在设置中传递一个cache_disabled
键来禁用缓存。
$access_token = '123456789abc'; $settings = ['cache_disabled' => true]; $client = new IPinfo($access_token, $settings);
覆盖HTTP客户端选项
IPinfo客户端构造函数接受一个timeout
键,它是请求的超时时间(秒)。
为了提供全面灵活性,接受一个guzzle_opts
键,该键接受一个关联数组,该数组在Guzzle请求选项中有描述。这里设置的选项将覆盖IPinfo客户端内部设置的任何自定义设置,包括头信息。
批量操作
一次查找一个IP可能会很慢。虽然可以在客户端并发执行,但IPinfo支持一个批量端点,允许您将IP分组在一起,并让我们为您批量获取这些IP的详细信息。
$access_token = '123456789abc'; $client = new IPinfo($access_token); $ips = ['1.1.1.1', '8.8.8.8', '1.2.3.4/country']; $results = $client->getBatchDetails($ips); echo $results['1.2.3.4/country']; // AU var_dump($results['1.1.1.1']); var_dump($results['8.8.8.8']);
输入大小没有限制,因为接口会在后台为您分块操作。
有关更多信息和使用限制,请参阅官方文档。
国际化
在查找IP地址时,响应对象包含一个Details->country_name
属性,该属性包含基于美国英语的国家名称。通过在创建IPinfo
对象时设置countries_file
关键字参数,可以返回其他语言的国家名称。
文件必须是具有以下结构的.json
文件
{ "BD": "Bangladesh", "BE": "Belgium", "BF": "Burkina Faso", "BG": "Bulgaria" ... }
可用方法
本库中可用的方法
- 获取用户IP
Ip::get();
返回 (string|false) → 用户IP或false
- 验证IP
Ip::validate($ip);
返回 (boolean)
快速入门
使用Composer与该库结合
require __DIR__ . '/vendor/autoload.php'; use ACL\RH\Dependency\Ip;
使用
该库的使用示例
- 获取用户IP
Ip::get();
- 验证IP
$ip = Ip::get(); Ip::validate($ip);