金融科技系统/whmcs-php-api

用于与WHMCS接口的PHP API

v0.1.2 2022-10-26 07:04 UTC

This package is auto-updated.

Last update: 2024-09-29 13:02:58 UTC


README

GitHub release (latest by date) Tests GitHub

一个专为独立运行或作为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。至少需要两个步骤。

  1. 编写API调用代码
  2. 将权限注入到数据库中

编写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咨询服务。