使用 PayPal-Php-SDK 创建发票失败,并显示“无法反序列化 java 实例.“错误


Creating an Invoice with Paypal-Php-SDK fails with "Can not deserialize instance of java..." error

我正在尝试使用 PayPal-php-Sdk 创建发票,一切都很好,但是当我尝试设置账单信息时出现问题,出现此错误:

{"name":"VALIDATION_ERROR","message":"Invalid request - see details.","debug_id":"2d34973f0cfef","details":[{"field":"billing_info","issue":"Can not deserialize instance of java.util.ArrayList out of START_OBJECT token at line:1, column:2"}]}exception 'PayPal'Exception'PayPalConnectionException' with message 'Got Http response code 400 when accessing https://api.sandbox.paypal.com/v1/invoicing/invoices.' in /var/www/admin/data/www/****/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php:176
Stack trace:
#0 /var/www/admin/data/www/****/vendor/paypal/rest-api-sdk-php/lib/PayPal/Transport/PayPalRestCall.php(74): PayPal'Core'PayPalHttpConnection->execute('{"billing_info"...')
#1 /var/www/admin/data/www/****/vendor/paypal/rest-api-sdk-php/lib/PayPal/Common/PayPalResourceModel.php(103): PayPal'Transport'PayPalRestCall->execute(Array, '/v1/invoicing/i...', 'POST', '{"billing_info"...', NULL)
#2 /var/www/admin/data/www/****/vendor/paypal/rest-api-sdk-php/lib/PayPal/Api/Invoice.php(736): PayPal'Common'PayPalResourceModel::executeCall('/v1/invoicing/i...', 'POST', '{"billing_info"...', NULL, Object(PayPal'Rest'ApiContext), NULL)
#3 var/www/admin/data/www/****/application/controllers/store.php(487): PayPal'Api'Invoice->create(Object(PayPal'Rest'ApiContext))
#4 [internal function]: Store->payment()
#5 /var/www/admin/data/www/****/system/core/CodeIgniter.php(359): call_user_func_array(Array, Array)
#6 /var/www/admin/data/www/****/index.php(202): require_once('/var/www/admin/...')
#7 {main}

这是我使用的代码:

$client_id = "****";
$secret = "****";
$apiContext = new ApiContext(new OAuthTokenCredential(
$client_id, $secret));
$merchantInfo = new PayPal'Api'MerchantInfo();
$merchantInfo->setEmail("****");
$merchantInfo->setWebsite("****");
$billingInfo = new PayPal'Api'BillingInfo();
$billingInfo->setEmail("****");
$invoice = new PayPal'Api'Invoice();
$invoice->setMerchantInfo($merchantInfo);
$invoice->setBillingInfo($billingInfo);
try
{
    $invoice->create($apiContext);
} catch (PayPal'Exception'PayPalConnectionException $ex) {
    echo $ex->getData();
    die($ex);
} catch (Exception $ex) {
    die($ex);
}

以下是我从PayPal支持中得到的:

将这两行更改为:

$invoice->setMerchantInfo(array($merchantInfo));
$invoice->setBillingInfo(array($billingInfo));

帐单信息和商家信息都接收对象数组,而不是直接接收对象。

这很奇怪,但是当我仅为帐单信息更改此内容时,它开始起作用,因此对我来说正确的代码是:

$invoice->setMerchantInfo($merchantInfo);
$invoice->setBillingInfo(array($billingInfo));