当前位置: 首页 > 知识库问答 >
问题:

Paypal: PHP SDK错误传入的JSON请求没有映射到API请求

封俊艾
2023-03-14

我用的是PHP Paypal SDK:https://github.com/paypal/PayPal-PHP-SDK

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

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

根据已经可用的交易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;

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

{"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天后,它将被处理。处理后,金额将从客户的账户中扣除。

共有1个答案

马权
2023-03-14

首先,您使用进行付款创建请求

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

>

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

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

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

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

  •  类似资料:
    • 带有消息“访问https://api.sandbox.paypal.com/v1/payments/payments/payment时获得Http响应代码400”的异常“PayPal\exception\PaypalConnectionException”。“在/var/www/html/vendor/paypal/rest-api-sdk-php/lib/paypal/core/paypalht

    • 我试图通过PHP SDK(沙箱环境)创建并执行一个与PayPal REST API的支付,如下所示。支付创建()工作良好,但支付执行()返回。JSON请求是由SDK创建的,那么会有什么问题呢?提前道谢。

    • 从控制器返回Html页面时获取此错误 org.springframework.web.servlet.页未找到noHandler已找到警告:没有找到HTTP请求与URI[/SpringMVCDemo/WEB-INF/response.html]在DispatcherServlet名称调度器映射 放在哪里response.html? 这是我的密码

    • 我写了一个spring boot项目。它有三个文件。 appconfig.java HelloController.java 当我尝试运行它时,它出现了错误“没有为名为'DispatcherServlet中URI[/springc1_01/]的HTTP请求找到映射”。这是因为服务器没有找到控制器还是其他原因?THX.

    • 很抱歉再次问这种问题,但我无法通过查看其他线程和Spring doc来解决我的问题。 我正在使用maven的3.1.0.RELEASE,并尝试使用注释和java配置。 以下是我的web.xml: 这是我的档案web-application-config.xml. 我有两个类。第一个配置视图解析器 第二个定义我的控制器: 根据我的配置,我想一切都应该指向我的home()函数。然而,事实并非如此,以下

    • 这是我的控制器,它将请求映射到以下url