Arhn - архитектура программирования

Ошибка Paypal Adaptivepayments при запросе с cURL

Я создаю простое веб-приложение на php, которое использует adaptivePayments/Pay API PayPal, я сделал несколько тестов с помощью POSTMAN, и все работает нормально, я делаю первоначальный запрос и получаю свой payKey, также с этим payKey Я могу проверить статус транзакции с помощью /AdaptivePayments/PaymentDetails API, проблема в том, что когда я пытаюсь сделать запрос через php-код:

    $endpoint = 'https://svcs.sandbox.paypal.com/AdaptivePayments/Pay';

    $payload['actionType']                       = "PAY";
    $payload['clientDetails']['applicationId']   = "APP-80W284485P519543T";
    $payload['clientDetails']['ipAddress']       = "xxx.xxx.xxx.xxx";
    $payload['currencyCode']                     = "USD";
    $payload['feesPayer']                        = "EACHRECEIVER";
    $payload['memo']                             = "Transaction";
    $payload['receiverList']['receiver']         = $receivers;
    $payload['requestEnvelope']['errorLanguage'] = "en_US";
    $payload['returnUrl']                        = "URL";
    $payload['cancelUrl']                        = "URL";

    $json = json_encode($payload);

    $ch = curl_init($endpoint);

    curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
    curl_setopt($ch, CURLOPT_POSTFIELDS, $json);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, array(
        'X-PAYPAL-SECURITY-USERID: ACCOUNT',
        'X-PAYPAL-SECURITY-PASSWORD: PASSWORD',
        'X-PAYPAL-SECURITY-SIGNATURE: SIGNATURE',
        'X-PAYPAL-REQUEST-DATA-FORMAT: JSON',
        'X-PAYPAL-RESPONSE-DATA-FORMAT: JSON',
        'X-PAYPAL-APPLICATION-ID: APP-80W284485P519543T',
        'Content-Type: application/json',
        'Content-Length: ' . strlen($json)
    ));

    $result = curl_exec($ch);

$receivers — это PHP-массив, содержащий информацию об электронных письмах и суммах платежей, примерно так:

Array
(
    [0] => Array
        (
            [amount] => 19.8
            [email] => [email protected]
            [primary] => 
        )


    [1] => Array
        (
            [amount] => 20.7
            [email] => [email protected]
            [primary] => 
        )


    [2] => Array
        (
            [amount] => 45
            [email] => [email protected]
            [primary] => 1
        )
    )

Я не получаю никаких ошибок, я даже получаю payKey, который я использую для создания html-кнопки, чтобы пользователь мог оплатить свои товары, проблема в том, что когда я проверяю статус платежа /AdaptivePayments/PaymentDetails, я получаю:

{
    "responseEnvelope": {
        "timestamp": "2015-08-06T23:59:23.075-07:00",
        "ack": "Success",
        "correlationId": "bab22ca0bd887",
        "build": "17603431"
    },
    "cancelUrl": "https://23410a33.ngrok.com/universal-bank-of-souls/",
    "currencyCode": "USD",
    "paymentInfoList": null,
    "returnUrl": "https://23410a33.ngrok.com/universal-bank-of-souls/",
    "status": "CREATED",
    "payKey": "AP-8ML17897XK803351A",
    "actionType": "PAY",
    "feesPayer": "EACHRECEIVER",
    "sender": {
        "useCredentials": "false"
    }
}

по какой-то странной причине paymentInfoList имеет значение null, поэтому пользователь видит ошибку (ошибку транзакции) в момент нажатия кнопки PayPal.

Как я уже говорил, если я совершу транзакцию с помощью POSTMAN, а затем проверю статус, я получу правильный ответ:

{
    "responseEnvelope": {
        "timestamp": "2015-08-07T00:14:08.510-07:00",
        "ack": "Success",
        "correlationId": "b9049ba0d4cf1",
        "build": "17603431"
    },
    "cancelUrl": "URL",
    "currencyCode": "USD",
    "memo": "Bank of souls payment",
    "paymentInfoList": {
        "paymentInfo": [
            {
                "receiver": {
                    "amount": "123.30",
                    "email": "[email protected]",
                    "primary": "false",
                    "paymentType": "SERVICE",
                    "accountId": "SLKM4ZQ5FMSHG"
                },
                "pendingRefund": "false"
            },
            {
                "receiver": {
                    "amount": "510.30",
                    "email": "[email protected]",
                    "primary": "false",
                    "paymentType": "SERVICE",
                    "accountId": "8PUDR7LSRS4MJ"
                },
                "pendingRefund": "false"
            },
            {
                "receiver": {
                    "amount": "704.00",
                    "email": "[email protected]",
                    "primary": "true",
                    "paymentType": "SERVICE",
                    "accountId": "E29BAQX7C7P3N"
                },
                "pendingRefund": "false"
            }
        ]
    },
    "returnUrl": "URL",
    "status": "CREATED",
    "payKey": "AP-9MU4806743660523S",
    "actionType": "PAY",
    "feesPayer": "EACHRECEIVER",
    "reverseAllParallelPaymentsOnError": "false",
    "sender": {
        "useCredentials": "false"
    }
}

(paymentInfoList на самом деле содержит json-объект с товаром, но это делает запрос вручную с помощью POSTMAN)

Может ли это быть проблемой PHP? некоторые идеи по отладке соединения curl мне очень помогут.

PD: я отлаживал это весь день, я даже печатаю переменную $json (я получаю формат json) и копирую/вставляю прямо в почтальон и его работу, но по какой-то причине тот же запрос с использованием curl не отправляет $ информация приемников.


  • Похоже, транзакция просто не завершена. Вот почему он все еще показывает СОЗДАН. После того, как вы получите PayKey, вы должны перенаправить пользователя в PayPal, чтобы он мог войти в систему и завершить платеж (если вы не используете ключ предварительного одобрения, но я не вижу, что вы используете). Вы выполняете перенаправление и фактически завершаете Оплата? 08.08.2015

Ответы:


1

Решено, я делал запросы (создавал заказ и запрашивал информацию о заказе), используя два разных учетных данных API, также кажется, что PayPal скрывает товары заказа при получении учетных данных API, отличных от оригиналов, однако по-прежнему показывает состояние заказа (СОЗДАТЬ, ЗАВЕРШИТЬ и т. д.)

15.08.2015
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..