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

2021-12-29 00:00:00 api rest sdk php paypal

我正在尝试通过 PHP SDK(沙盒环境)使用 PayPal REST API 创建和执行付款,如下所示.付款创建 ($payment->create) 工作正常,但付款执行 ($payment->execute) 返回 "传入的 JSON 请求未映射到 API 请求".JSON 请求是由 SDK 创建的,那么会出现什么问题呢?提前致谢.

I'm trying to create and execute a payment with PayPal REST API through PHP SDK (sandbox environment) like showing below. The payment creation ($payment->create) work fine but the payment execution ($payment->execute) return "Incoming JSON request does not map to API request". The JSON request is created by the SDK, then what can be the problem? Thanks in advance.

$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); 
}

推荐答案

放够了

$payment->setIntent('authorize')

代替

$payment->setIntent('sale')

并消除执行

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

然后,之后

$payment->create

我使用了来自

$payment->links

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

to do the redirect. Everything went perfectly. Thank you all.

相关文章