贝宝:PHP SDK错误传入的JSON请求未映射到API请求

Ank*_*hah 5 php sdk paypal payment-gateway payment-method

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

通过PHP SDK引用的PayPal REST API返回“传入的JSON请求未映射到API请求”

在继续/sf/ask/2787892271/

根据已经可用的交易ID,需要获取付款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;
Run Code Online (Sandbox Code Playgroud)

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

{"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
                                )

                        )

                )

        )

)
Run Code Online (Sandbox Code Playgroud)

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

贝宝技术支持的回复

与开发团队进行讨论和测试后,他们确认您无法使用TransactionId来检索PaymentId。PaymentId是在初始REST API调用时生成的。这仅发生在REST API中。

可以在REST API执行付款,Classic API [NVP / SOAP] DoEC API或正常按钮付款完成后生成交易ID。反向搜索以查找付款ID永远不会起作用。

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

需要实现:付款完成后,将被暂停。X天后,将对其进行处理。处理后,金额将从客户帐户中扣除。

小智 0

首先,您使用以下命令进行付款创建请求

$payment = new Payment();
    $payment->setIntent("sale")
    ->setPayer($payer)
    ->setRedirectUrls($redirectUrls)
    ->setTransactions(array($transaction));    
$payment->create($apiContext);
Run Code Online (Sandbox Code Playgroud)
  1. 在创建响应中,您将获得“批准网址”,此批准网址用于用户在那里付款。

  2. 然后您将通过“$redirectUrls”中发送的网址收到来自 paypal 的通知。

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

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