WHMCS 自定义函数 - 条纹支付网关错误
WHMCS custom function - Stripe payment gateway error
我正在尝试通过创建文件 addstripecard.php
在 WHMCS 中添加自定义函数,这个想法是基于给定的客户令牌(类似于 cus_1GPkTFJEegxX3y3c123456
),然后尝试附加它到一张卡片。从 API.
访问自定义函数
首先,我尝试使用以下命令访问 Stripe 库:
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
PS:代码取自https://github.com/WHMCSCare/WHMCS-7.8.0-decoded/blob/e7446479de49a28c8801d4c0c95f4cae22dcff33/modules/gateways/stripe/lib/StripeController.php
但是,在 运行 上面的命令之后,我得到了这个错误信息:
FastCGI sent in stderr: "PHP message: [WHMCS Application] ERROR: TypeError: Argument 2 passed to WHMCS\Api\ApplicationSupport\Http\ResponseFactory::factory() must be of the type array, string given,
called in /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Route/Middleware/HandleProcessor.php on line 0
and defined in /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Http/ResponseFactory.php:0
Stack trace: #0 /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Route/Middleware/HandleProcessor.php(0): WHMCS\Api\ApplicationSupport\Http\ResponseFactory::factory(Object(WHMCS\Api\ApplicationSupport\Http\ServerRequest), '{"legacyGateway...') #1 /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Route/Middleware/Strategy/DelegatingMiddlewareTrait.php(0): WHMCS\Api\ApplicationSupport\Route\Middleware\HandleProcessor->_process(Object(WHMCS\Api\ApplicationSupport\Http\ServerRequest), Object(Middlewares\Utils\Delegate)) #2 /www/dat" while reading response header from upstream, client: 172.81.129.13,
server: xxxxxx.xxx.net,
request: "POST /billing/includes/api.php HTTP/1.1",
upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:",
host: "xxxxxx.xxx"
完整代码:
<?php
if (!defined("WHMCS")) {
die("This file cannot be access directly!");
}
function addStripeCard()
{
// card parameters
$cardNumber = $_POST['cardnumber'];
$cardExpiryDate = $_POST['cardexpirydate'];
$remoteToken = $_POST['remotetoken'];
$billingContactId = $_POST['billingcontactid'];
$description = $_POST['description'];
$cardType = $_POST['cardtype'];
$cardStartDate = $_POST['cardstartdate'];
$cardIssueNumber = $_POST['cardissuenumber'];
$clientId = $_POST['clientid'];
try {
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
return json_encode($gateway);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
return $error;
}
}
try {
$data = addStripeCard();
$apiresults = $data;
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
$apiresults = $error;
}
有人知道发生了什么事吗?我试过谷歌搜索很多次,但找不到任何答案。
我找到了答案。
向客户端返回响应时,我们至少应遵循以下格式:
$apiresults = array('result' => $result, 'message' => $message);
可以扩展为:
$apiresults = array('result' => $result, 'message' => $message, 'data' => $data);
所以我将上面的代码修改为:
<?php
if (!defined("WHMCS")) {
die("This file cannot be access directly!");
}
function addStripeCard()
{
// card parameters
$cardNumber = $_POST['cardnumber'];
$cardExpiryDate = $_POST['cardexpirydate'];
$remoteToken = $_POST['remotetoken'];
$billingContactId = $_POST['billingcontactid'];
$description = $_POST['description'];
$cardType = $_POST['cardtype'];
$cardStartDate = $_POST['cardstartdate'];
$cardIssueNumber = $_POST['cardissuenumber'];
$clientId = $_POST['clientid'];
try {
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
return json_encode($gateway);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
return $error;
}
}
try {
$data = addStripeCard();
$apiresults = array('result' => 'success', 'message' => 'success message', 'data' => $data);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
$apiresults = $error;
}
错误消失后,访问自定义函数的 API 端点收到 200
响应。
我正在尝试通过创建文件 addstripecard.php
在 WHMCS 中添加自定义函数,这个想法是基于给定的客户令牌(类似于 cus_1GPkTFJEegxX3y3c123456
),然后尝试附加它到一张卡片。从 API.
首先,我尝试使用以下命令访问 Stripe 库:
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
PS:代码取自https://github.com/WHMCSCare/WHMCS-7.8.0-decoded/blob/e7446479de49a28c8801d4c0c95f4cae22dcff33/modules/gateways/stripe/lib/StripeController.php
但是,在 运行 上面的命令之后,我得到了这个错误信息:
FastCGI sent in stderr: "PHP message: [WHMCS Application] ERROR: TypeError: Argument 2 passed to WHMCS\Api\ApplicationSupport\Http\ResponseFactory::factory() must be of the type array, string given,
called in /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Route/Middleware/HandleProcessor.php on line 0
and defined in /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Http/ResponseFactory.php:0
Stack trace: #0 /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Api/ApplicationSupport/Route/Middleware/HandleProcessor.php(0): WHMCS\Api\ApplicationSupport\Http\ResponseFactory::factory(Object(WHMCS\Api\ApplicationSupport\Http\ServerRequest), '{"legacyGateway...') #1 /www/xxxxxx.xxx/billing/vendor/whmcs/whmcs-foundation/lib/Route/Middleware/Strategy/DelegatingMiddlewareTrait.php(0): WHMCS\Api\ApplicationSupport\Route\Middleware\HandleProcessor->_process(Object(WHMCS\Api\ApplicationSupport\Http\ServerRequest), Object(Middlewares\Utils\Delegate)) #2 /www/dat" while reading response header from upstream, client: 172.81.129.13,
server: xxxxxx.xxx.net,
request: "POST /billing/includes/api.php HTTP/1.1",
upstream: "fastcgi://unix:/run/php/php7.0-fpm.sock:",
host: "xxxxxx.xxx"
完整代码:
<?php
if (!defined("WHMCS")) {
die("This file cannot be access directly!");
}
function addStripeCard()
{
// card parameters
$cardNumber = $_POST['cardnumber'];
$cardExpiryDate = $_POST['cardexpirydate'];
$remoteToken = $_POST['remotetoken'];
$billingContactId = $_POST['billingcontactid'];
$description = $_POST['description'];
$cardType = $_POST['cardtype'];
$cardStartDate = $_POST['cardstartdate'];
$cardIssueNumber = $_POST['cardissuenumber'];
$clientId = $_POST['clientid'];
try {
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
return json_encode($gateway);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
return $error;
}
}
try {
$data = addStripeCard();
$apiresults = $data;
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
$apiresults = $error;
}
有人知道发生了什么事吗?我试过谷歌搜索很多次,但找不到任何答案。
我找到了答案。
向客户端返回响应时,我们至少应遵循以下格式:
$apiresults = array('result' => $result, 'message' => $message);
可以扩展为:
$apiresults = array('result' => $result, 'message' => $message, 'data' => $data);
所以我将上面的代码修改为:
<?php
if (!defined("WHMCS")) {
die("This file cannot be access directly!");
}
function addStripeCard()
{
// card parameters
$cardNumber = $_POST['cardnumber'];
$cardExpiryDate = $_POST['cardexpirydate'];
$remoteToken = $_POST['remotetoken'];
$billingContactId = $_POST['billingcontactid'];
$description = $_POST['description'];
$cardType = $_POST['cardtype'];
$cardStartDate = $_POST['cardstartdate'];
$cardIssueNumber = $_POST['cardissuenumber'];
$clientId = $_POST['clientid'];
try {
$gateway = new \WHMCS\Module\Gateway();
$gateway->load("stripe");
return json_encode($gateway);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
return $error;
}
}
try {
$data = addStripeCard();
$apiresults = array('result' => 'success', 'message' => 'success message', 'data' => $data);
} catch (Exception $e) {
$error = [
'result' => 'error',
'message' => $e->getMessage(),
'file' => $e->getFile(),
'line' => $e->getLine(),
];
$apiresults = $error;
}
错误消失后,访问自定义函数的 API 端点收到 200
响应。