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

时间:2015-01-13 10:55:18

标签: php api rest paypal sdk

我正在尝试通过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); 
}

2 个答案:

答案 0 :(得分:0)

我不是PHP开发人员(.Net),因此根据上述内容,请在代码中查看此部分:

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

您正在发送新的 PaymentExecution payer_idPayment.Id,您将在之后获取 / em>用户批准您创建的paypal付款请求。

那就是说,我没有看到那部分(虽然如上所述,不是PHP开发者)所以我可能错了。步骤是:

  1. 创建付款

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

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

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

  3. 用户从PayPal(您的returnUrl - ExecutePayment重定向回您的网站后,将其设置为{{ 1}}到你获得的那个(#2b),将id的{​​{1}}设置发送到你获得的内容(#2a)

  4. 在c#中(你需要将它转换为PHP):

    PaymentExecution

    ... H个

答案 1 :(得分:0)

这已经足够了

$payment->setIntent('authorize')

而不是

$payment->setIntent('sale')

并取消执行

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

然后,

之后
$payment->create

我使用了

中的“href”
$payment->links

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