金融科技系统 / whmcs-php-api
用于与WHMCS接口的PHP API
Requires
- php: ^8.0|^8.1
- guzzlehttp/guzzle: ^7.5
- spatie/ray: ^1.30
- symfony/dotenv: ^5.3
Requires (Dev)
- orchestra/testbench: ^6.20
- pestphp/pest: ^1.20
- phpunit/phpunit: ^9.5
README
一个专为独立运行或作为Laravel应用程序一部分设计的WHMCS API
要求
- PHP 8.1
- WHMCS
为什么需要这个包?
WHMCS已经有了一个广泛的API。为什么还需要构建另一个API?原因很简单
WHMCS API代码示例依赖于CURL。模拟CURL是可能的,但很复杂。相反,Laravel已经有了美丽的HTTP测试和Http::fake模拟。使用Laravel(在这种情况下,Pest)可以极大地加快应用开发。本质上,你可以摆脱针对开发服务器的测试。即使你不使用Laravel,该框架的测试能力意味着可以编写更复杂且更安全的软件。
用法
WHMCS API权限
- 你需要允许连接到WHMCS的计算机的IP地址
- 你需要设置API权限
所需API权限列表
- addclient
- getclientsdetails
- getclientsdomains
- 你正在开发的API调用自定义列表
自定义API调用
WHMCS移除了添加自定义API调用的能力,但通过一些修改可以使其再次工作。
自定义API调用的一个例子是按电话号码获取客户。让我们称这个为getclientbyphonenumber
。至少需要两个步骤。
- 编写API调用代码
- 将权限注入到数据库中
编写API调用代码
首先,你需要编写API函数并在此保存: includes/api/getclientbyphoneumber.php
<?php use WHMCS\Database\Capsule; if (!defined("WHMCS")) die("This file cannot be accessed directly"); try { $client = Capsule::table('tblclients') ->where("phonenumber", $_REQUEST['phonenumber']) ->first(); if ($client) { $apiresults = [ "result" => "success", "message" => "ok", 'clientid' => $client->id, ]; } else { $apiresults = [ "result" => "error", "message" => "not found", ]; } } catch (Exception $e) { $apiresults = ["result" => "error", "message" => $e->getMessage()]; }
然后,要使用自定义API调用 getclientbyphonenumber
,你需要手动更新 tblapi_roles
来添加它。记住,每次更改都要更新它,因为UI会覆盖自定义API调用。
{"addclient":1,"getclientsdetails":1,"getclientbyphonenumber":1}
如果你还没有添加PHP文件,你会得到API函数未找到
框架无关的PHP
<?php use FintechSystems\WhmcsApi\WhmcsApi; require 'vendor/autoload.php'; $dotenv = Dotenv\Dotenv::createImmutable(__DIR__); $dotenv->load(); $server = [ 'url' => env('WHMCS_URL'), 'api_identifier' => env('WHMCS_API_IDENTIFIER'), 'api_secret' => env('WHMCS_API_SECRET'), ]; $api = new WhmcsApi($server); $result = $api->getClients();
Laravel安装
发布配置文件
php artisan vendor:publish --tag=whmcs-config
变更日志
有关最近更改的更多信息,请参阅CHANGELOG
功能
设置服务器
提供在Facade初始化之外连接到次要WHMCS服务器的功能
Whmcs::setServer([ 'url' => env('WHMCS_URL2'), 'api_secret' => env('WHMCS_API_SECRET2'), 'api_identifier' => env('WHMCS_API_IDENTIFIER2'), ])
更改包
更改包
框架无关的PHP
$newServiceId = 5; $api = new WhmcsApi; $api->changePackage($newServiceId);
Laravel应用
更改服务器
由于我们使用的是在调用时实例化的Facade,因此我们需要其他方法来在连接到其他服务器时调用构造函数。
public function setServer($server) { $this->url = $server['url']; $this->api_identifier = $server['api_identifier']; $this->api_secret = $server['api_secret']; }
$newServiceId = 5; WhmcsApi::changePackage($newServiceId);
结果
将新包应用于服务。如果该包与API相关联,则将调用API。
测试
./vendor/bin/pest
如果你要运行单个测试,请将->only();
附加到每个测试。
要测试自定义API操作,请使用以下脚本
sh .scp updateclientaddon.php;./vendor/bin/pest
`.scp`文件应该包含复制命令,例如
#!/bin/bash echo "Present Working Directory:" pwd echo "Copying $1 to WHMCS install directory" cp includes/api/$1 ../whmcs/includes/api echo "Done." ls -la ../whmcs/includes/api/$1
API操作没有错误但不起作用
如果你没有观察服务器日志文件,将很难调试API操作。只有一些异常,例如模型问题,会被Try Catch块捕获。因此,请帮助跟踪你的服务器日志文件。例如,如果你使用Laravel的Valet的NGinx服务器,请这样做
tail -f ~/.valet/Log/nginx-error.log
无效IP 127.0.0.1
如果你得到Invalid IP 127.0.0.1
,这意味着你没有允许WHMCS API从localhost访问。
导航至此: https://whmcs.test/admin/configgeneral.php 并确保将 127.0.0.1
添加到API IP访问限制中。
无效或缺少凭证
如果你收到 无效或缺少凭证
的错误,这意味着你没有添加API角色和API凭证。在测试之前,这两个都必须要添加。同时,请确保将它们添加到你的 .env
文件中
WHMCS_API_IDENTIFIER=
WHMCS_API_SECRET=
无效权限:API操作 "addclient" 不允许
如果你收到 无效权限:API操作 "addclient" 不允许
的错误,这意味着尽管你已经添加了API角色和凭证,但你的角色设置不正确,无法进行API调用。请重新检查角色和所需的子部分,看看你需要在哪里勾选复选框以允许此API调用。
存储文件夹示例
storage
文件夹包含API响应示例,也用于测试期间的缓存。
本地编辑
对于本地编辑,请将以下内容添加到 composer.json
"repositories" : [ { "type": "path", "url": "../whmcs-php-api" } ],
然后在 require
部分
"fintech-systems/whmcs-php-api": "dev-main",
然后这样做以创建符号链接
composer require fintech-systems/whmcs-php-api:dev-main
许可协议
MIT
作者
eugene (at) vander.host
https://vander.host
+27 82 309-6710 我可以提供WHMCS咨询服务。