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

Posted

技术标签:

【中文标题】通过 PHP SDK 的 PayPal REST API 返回“传入的 JSON 请求未映射到 API 请求”【英文标题】:PayPal REST API through PHP SDK return "Incoming JSON request does not map to API request" 【发布时间】:2015-03-11 07:28:42 【问题描述】:

我正在尝试通过 php SDK(沙盒环境)使用 PayPal REST API 创建和执行付款,如下所示。付款创建($payment->create)工作正常,但付款执行($payment->execute)返回"Incoming JSON request does not map to API request"。 JSON 请求是由 SDK 创建的,那么可能是什么问题? 提前致谢。

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

$item = new Item();
$item->setName('Any name')
     ->setCurrency('EUR')
     ->setQuantity(1)
     ->setPrice(0.99);

$itemList = new ItemList();
$itemList->setItems(array($item));

$details = new Details();
$details->setTax(0)
        ->setSubtotal(0.99);

$amount = new Amount();
$amount->setCurrency('EUR')
       ->setTotal(0.99)
       ->setDetails($details);

$transaction = new Transaction();
$transaction->setAmount($amount)
            ->setItemList($itemList)
            ->setDescription('Any description')
            ->setInvoiceNumber(uniqid());

$redirectUrls = new RedirectUrls();
$redirectUrls->setReturnUrl(BASE_URL.'/payment/?success=true')
             ->setCancelUrl(BASE_URL.'/payment/?success=false');

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

try 
    $payment->create($apiContext);

    $execution = new PaymentExecution();
    $result = $payment->execute($execution, $apiContext);

 catch (Exception $ex) 
    //Function for extract the error message,
    //the error message can be showing with
    //a simple var_dump($ex)
    $exception = self::getException($ex); 

【问题讨论】:

在 Google 上的快速搜索表明,此错误通常是由您发送的 json 无效引起的。确保您已阅读文档,并且您提供的所有内容都是他们所期望的。 【参考方案1】:

我不是 PHP 开发人员 (.Net),因此根据阅读以上内容,在您的代码中检查此部分:

$execution = new PaymentExecution();
$result = $payment->execute($execution, $apiContext);

您正在发送PaymentExecution没有payer_idPayment.Id,您将在用户批准后获得您创建的 paypal 付款请求。

也就是说,我没有看到那部分(尽管如上所述,不是 PHP 开发人员),所以我可能是错的。步骤是:

    创建付款

    进入审批流程 -> 用户被重定向到 Paypal 并批准您在 #1 中创建的付款 -> 并被重定向回您的网站(returnUrl)

    一个。 PayerID 将在此过程中的查询字符串中

    b. paymentId 也将在此过程中的查询字符串中

    用户从 PayPal 重定向回您的站点后(您的 returnUrl - Execute 一个新的 Payment,将其 id 设置为您获得的那个(#2b),发送 PaymentExecution 并将其 PayerID 设置为您获得的内容 (#2a)

在 c# 中(您需要将其转换为 PHP):

    var _payment = new Payment  id = the_payment_id_you_obtained ;
    var _payExec = new PaymentExecution  payer_id = the_payer_id_you_obtained ;

    var _response = _payment.Execute(context, _payExec);

第...

【讨论】:

是的,这肯定是问题所在,它缺乏付款的批准。谢谢!【参考方案2】:

够了

$payment->setIntent('authorize')

而不是

$payment->setIntent('sale')

并消除执行

$execution = new PaymentExecution(); $result = $payment->execute($execution, $apiContext);

那么,之后

$payment->create

我使用了来自

的“href”
$payment->links

进行重定向。一切都很顺利。谢谢大家。

【讨论】:

以上是关于通过 PHP SDK 的 PayPal REST API 返回“传入的 JSON 请求未映射到 API 请求”的主要内容,如果未能解决你的问题,请参考以下文章

使用 Paypal php rest SDK 汇款

带有 Laravel 4 的 PayPal rest-api-sdk-php

如何使用 PayPal REST API 和 PayPal PHP SDK 保存 PayPal 帐户以备将来付款

与 Paypal 的 PHP REST SDK 的支付协议

Laravel Guest-checkout is not working in paypal using "paypal/rest-api-sdk-php": "*&q

贝宝 sdk '类 'PayPal\Rest\ApiContext' 未找到'