Paypal:PHP SDK 错误传入 JSON 请求未映射到 API 请求

Posted

技术标签:

【中文标题】Paypal:PHP SDK 错误传入 JSON 请求未映射到 API 请求【英文标题】:Paypal: PHP SDK Error Incoming JSON request does not map to API request 【发布时间】:2017-02-13 08:12:42 【问题描述】:

我正在使用 php Paypal SDK:https://github.com/paypal/PayPal-PHP-SDK

推荐PayPal REST API through PHP SDK return "Incoming JSON request does not map to API request"

继续https://***.com/questions/39827032/paypal-how-to-get-payment-id-on-basis-of-transaction-id

基于已有的Transaction Id,需要获取Payment Id

我试过下面的代码

require __DIR__ . '/bootstrap.php';

use PayPal\Api\Amount;
use PayPal\Api\Details;
use PayPal\Api\Item;
use PayPal\Api\ItemList;
use PayPal\Api\CreditCard;
use PayPal\Api\Payer;
use PayPal\Api\Payment;
use PayPal\Api\FundingInstrument;
use PayPal\Api\Transaction;
// Extra Code
use PayPal\Api\PaymentDetail;

$payer = new Payer();
$payer->setPaymentMethod('paypal');

$transaction = new PaymentDetail(
        '
          "method" : "CASH",
          "date" : "2014-07-06 03:30:00 PST",
          "note" : "Cash received."
        '
);

$transaction->setTransactionId("3NT32794KF4824703");

$payment = new Payment();
$payment->setIntent("sale")
        ->setPayer($payer)
        ->setTransactions(array($transaction));

// For Sample Purposes Only.
$request = clone $payment;

try 
    $payment->create($apiContext);
 catch (\PayPal\Exception\PayPalConnectionException $ex) 
    echo $ex->getData();


echo "<pre>";
print_r($payment);
exit;

当我运行上面的代码时,它会给出以下错误

"name":"MALFORMED_REQUEST","message":"Incoming JSON request does not map to API request","information_link":"https://developer.paypal.com/webapps/developer/docs/api/#MALFORMED_REQUEST","debug_id":"aa8bfa2a41f1f"

PayPal\Api\Payment Object
(
    [_propMap:PayPal\Common\PayPalModel:private] => Array
        (
            [intent] => sale
            [payer] => PayPal\Api\Payer Object
                (
                    [_propMap:PayPal\Common\PayPalModel:private] => Array
                        (
                            [payment_method] => paypal
                        )

                )

            [transactions] => Array
                (
                    [0] => PayPal\Api\PaymentDetail Object
                        (
                            [_propMap:PayPal\Common\PayPalModel:private] => Array
                                (
                                    [method] => CASH
                                    [date] => 2014-07-06 03:30:00 PST
                                    [note] => Cash received.
                                    [transaction_id] => 3NT32794KF4824703
                                )

                        )

                )

        )

)

如何解决上述错误?请指导

Paypal 技术支持的回应

在与开发团队讨论和测试后,他们确认 您不能使用 TransactionId 来检索 PaymentId。 PaymentId 是 在初始 REST API 调用时生成。这发生在 REST API 上 仅限。

交易id可以在REST API执行支付后生成, 经典 API [NVP/SOAP] DoEC API 或普通按钮支付完成。 反向搜索以找到付款 ID 永远不会起作用。

就目前而言,您唯一的解决方法是记录每个 REST API 请求无论是否失败都跟踪 PaymentId。

需要实现:一旦付款完成,它将保持暂停。 X 天后,它将被处理。处理后金额将从客户的帐户中扣除。

【问题讨论】:

那么传入的 JSON Request 的内容是什么? 【参考方案1】:

首先您使用

进行付款创建请求
$payment = new Payment();
    $payment->setIntent("sale")
    ->setPayer($payer)
    ->setRedirectUrls($redirectUrls)
    ->setTransactions(array($transaction));    
$payment->create($apiContext);

    在创建响应时,您将获得“apporval url”,此批准 url 用于用户在那里付款。

    然后,您将通过 "$redirectUrls" 中发送的 url 收到来自 paypal 的通知。

    在这里,您将获得“付款 ID”和“付款人 ID”,用于执行付款。

    $execution = new PaymentExecution();
    $execution->setPayerId($da['PayerID']);
    $apiContext=$this->apicontext();
    $res = $payment->execute($execution, $apiContext);
    

【讨论】:

嗨@Akagesab 感谢您的回复。我们是否有可供下载的代码? 获取 API 上下文:github.com/paypal/PayPal-PHP-SDK/blob/master/sample/… 创建请求:github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/… 响应处理:github.com/paypal/PayPal-PHP-SDK/blob/master/sample/payments/…

以上是关于Paypal:PHP SDK 错误传入 JSON 请求未映射到 API 请求的主要内容,如果未能解决你的问题,请参考以下文章

PHP PayPal 错误 - MALFORMED_REQUEST - 传入的 JSON 请求未映射到 API 请求

支付宝错误 400

PayPal REST API 格式错误的 JSON 错误

使用 paypal/rest-api-sdk-php 的 laravel paypal 集成错误

交易更新期间的 Paypal PHP SDK HTTP 错误

PayPal PHP SDK错误 - 项目金额必须添加到指定的金额小计