Получил Http-код ответа 400 при доступе к https://api.paypal.com/v1/payments/payment/ - PullRequest
1 голос
/ 05 августа 2020

Я пытаюсь использовать PayPal- PHP -SDK для интеграции PayPal с настраиваемой темой электронной коммерции WordPress, и получаю сообщение об ошибке:

Получен код ответа Http 400 при доступе к https://api.paypal.com/v1/payments/payment/...

Эта ошибка появляется только тогда, когда I which to live, она отлично работает в режиме песочницы.

На стороне клиента I Я использую checkout. js и перенаправляю его в файл PHP, где я пытаюсь использовать PayPal- PHP -SDK для выполнения платежа, и я получаю сообщение об ошибке, в котором читается код:

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

Ниже приведен пример кода Я использую

JavaScript

paypal.Button.render({
env: 'production',

client: {
    sandbox: 'sandbox_id',
    production: 'production_id'
},

locale: 'en_US',

style: {
    color: 'blue',
    size: 'responsive',
},

commit: true,

payment: function (data, actions) {
    return actions.payment.create({
        payment: {
            redirect_urls: {
                return_url: site_url + '/execute-payment'
            },

            transactions: [{
                amount: {
                    total: '0.01',
                    currency: 'NZD',
                    details: {
                        subtotal: '0.01',
                        shipping: '0.00',
                        tax: '0.00',
                        insurance: '0.00'
                    }
                },
                description: "TEST",
                invoice_number: json.invoice_number ? json.invoice_number : "",
                item_list: {
                    items: items_ ? items_ : "",
                    shipping_address: {
                        "recipient_name": json.recipient_name ? json.recipient_name : "",
                        "line1": json.line1 ? json.line1 : "",
                        "line2": json.line2 ? json.line2 : "",
                        "city": json.city ? json.city : "",
                        "country_code": json.country_code ? json.country_code : "",
                        "postal_code": json.postal_code ? json.postal_code : "",
                        "phone": json.phone ? json.phone : "",
                        "state": json.state ? json.state : ""
                    }
                }
            }],
            "note_to_payer": "Contact us for any questions on your order.",
        }
    });
},

onAuthorize: function (data, actions) {

    console.log('::Authorized: ');

    return actions.redirect();

},

onCancel: function (data, actions) {
    
    console.log('::Canceled: ');

    /* window.location = "/paypal/cancel/"; */

},

onError: function (error) {

    console.log('::Error: ', error)

}
}, '#paypal_container');

PHP

# live client id
$live_cid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';
# live secret id
$live_sid = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';

$apiContext = new \PayPal\Rest\ApiContext(
    new \PayPal\Auth\OAuthTokenCredential(
        $live_cid,
        $live_sid
    )
);

$apiContext->setConfig(
    array(
        'log.LogEnabled' => true,
        'log.FileName' => 'PayPal.log',
        'log.LogLevel' => 'DEBUG',
        'mode' => 'live'
    )
);

# die(var_dump($apiContext));

# redirect here via link: https://example.com/execute-payment/?paymentId=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&token=xxxxxxxxxxxxxxxxxx&PayerID=xxxxxxxxxxxxxx
# die(var_dump("<br><br>" . "paymentId: " . $_GET['paymentId'] . "<br>" . "PayerID: " . $_GET['PayerID']));

$paymentId = $_GET['paymentId'];
$payment = Payment::get($paymentId, $apiContext);

$execution = new PaymentExecution();
$execution->setPayerId($_GET['PayerID']);

$transaction = new Transaction();
$amount = new Amount();
$details = new Details();

$details->setShipping(0.00)
        ->setTax(0.00)
        ->setSubtotal(0.01);

$amount->setCurrency('NZD');
$amount->setTotal(0.01);
$amount->setDetails($details);
$transaction->setAmount($amount);

$execution->addTransaction($transaction);

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

# I get the error after trying to execute the payment

$paymentId = $result->id;
$PayerID = $result->payer->payer_info->payer_id;

die(var_dump($result));

Ошибка

Неустранимая ошибка: Uncaught PayPal \ Exception \ PayPalConnectionException: Получен код ответа Http 400 при доступе к https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxx/execute. в / mnt / stor10-wc1-ord1 / 825767/984521 / www.example.com/web/content/newww/wp-content/themes/example/framework/paypal/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php: 207 Трассировка стека: # 0 / mnt / stor10-wc1-ord1 / 825767/984521 / www.example.com/web/content/newww/wp-content/themes/example/framework/paypal/vendor/paypal/rest-api-sdk-php/lib/PayPal/Transport/PayPalRestCall.php (78): PayPal \ Core \ PayPalHttpConnection- > execute ('{"payer_id": "66 ...') # 1 / mnt / stor10-wc1-ord1 / 825767/984521 / www.example.com/web/content/newww/wp-content/themes/example/framework/paypal/vendor/paypal/rest-api-sdk-php/lib/PayPal/Common/PayPalResourceModel.php (104): PayPal \ Transport \ PayPalRestCall-> execute (Array, ' / v1 / payments / pa ... ',' POST ',' {"payer_id": "66 ... ', Array) # 2 / mnt / stor10-wc1-ord1 / 825767/984521 / www.example.com in / mnt / stor10-wc1-ord1 / 825767/984521 / www.example.com/web/content/newww/wp-content/themes/example/framework/paypal/vendor/paypal/rest-api-sdk-php/lib/PayPal/Core/PayPalHttpConnection.php в строке 207

Приведенный выше код является частью старого кода, который был на веб-сайте, я просто пытаюсь это сделать работай. Он работал нормально, пока мы не изменили идентификатор клиента и секретный идентификатор. Платеж создается нормально, но проблема возникает, когда я выполняю платеж

PayPal.log

[05-08-2020 08:51:12] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.paypal.com/v1/oauth2/token
[05-08-2020 08:51:13] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 200
[05-08-2020 08:51:13] PayPal\Core\PayPalHttpConnection : INFO: GET https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[05-08-2020 08:51:14] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 200
[05-08-2020 08:51:14] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/execute
[05-08-2020 08:51:14] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 404
[05-08-2020 08:51:14] PayPal\Core\PayPalHttpConnection : ERROR: Got Http response code 404 when accessing https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/execute. {"name":"INVALID_RESOURCE_ID","message":"Requested resource ID was not found.","information_link":"https://developer.paypal.com/docs/api/payments/#errors","debug_id":"acba76cd232a5"}


[05-08-2020 08:55:31] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.paypal.com/v1/oauth2/token
[05-08-2020 08:55:33] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 200
[05-08-2020 08:55:34] PayPal\Core\PayPalHttpConnection : INFO: GET https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
[05-08-2020 08:55:36] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 200
[05-08-2020 08:55:40] PayPal\Core\PayPalHttpConnection : INFO: POST https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/execute
[05-08-2020 08:55:42] PayPal\Core\PayPalHttpConnection : INFO: Response Status  : 404
[05-08-2020 08:55:42] PayPal\Core\PayPalHttpConnection : ERROR: Got Http response code 404 when accessing https://api.paypal.com/v1/payments/payment/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/execute. {"name":"INVALID_RESOURCE_ID","message":"Requested resource ID was not found.","information_link":"https://developer.paypal.com/docs/api/payments/#errors","debug_id":"3c22c723fa27a"}

Я определенно что-то делаю с этим не так.

1 Ответ

1 голос
/ 05 августа 2020

Трудно догадаться, что именно не так с вызовом execute, не видя полного тела ответа API и заголовков, включая PayPal-Debug-ID.

400 ошибок обычно связаны с неправильными учетными данными или парными учетными данными с неправильной средой, но это менее вероятно, если ваше создание платежа и вызовы oauth2 работают нормально

Более важный вопрос: почему вы вообще используете устаревший SDK V1, который больше не поддерживается? Вам следует полностью изменить свою интеграцию на текущий V2 PHP SDK, описанный здесь: https://developer.paypal.com/docs/api/rest-sdks/

На данный момент лучший интерфейс для его сопряжения - https://developer.paypal.com/demo/checkout/# / pattern / server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...