php - 使用 Paypal-Php-SDK 创建发票失败并出现 "Can not deserialize instance of java..."错误

标签 php paypal paypal-sandbox paypal-rest-sdk

我正在尝试使用 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 支持收到的信息:

Change these two lines to this:

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

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

Both billing info and merchant info takes in array of objects, not an object directly.

这很奇怪,但是当我只为账单信息更改它时它开始工作,所以对我来说正确的代码是:

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

关于php - 使用 Paypal-Php-SDK 创建发票失败并出现 "Can not deserialize instance of java..."错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30933469/

相关文章:

php - 如何将行数组传递给 PDO 以插入它们?

PHP 脚本未在浏览器上运行

paypal - 通过 Paypal 向我的客户收取随机金额

php - PayPal IPN 已验证握手但 IPN 无效

php - Mysql 从服务器占用 63 GB

php - x 时间后刷新 ajax 获取的内容

php - curl 命令行到 PHP curl

magento - 如何在 Magento 中明智地显示运输方式客户组?

php - Paypal 数字商品和显示购买

php - paypal IPN突然失效(无HTTP响应)