PayPal Express Checkout с Omnipay не отображает заказ в учетной записи Sandbox

Я использовал сценарий оформления заказа Omnipay PayPal_Express на своем сайте, и все работает нормально, когда я оплачиваю заказ, за ​​исключением того, что заказ не отображается в учетной записи PayPal Sandbox.

Это видно, когда я использую тот же скрипт для PayPal_Pro.

Мой код выглядит следующим образом:

use Omnipay\Omnipay;

// PayPal Express:

if(isset($_POST['paypalexpress'])) {

$gateway = GatewayFactory::create('PayPal_Express');
$gateway->setUsername('{myusername}');
$gateway->setPassword('{mypassword}');
$gateway->setSignature('{mysignauture}');
$gateway->setTestMode(true);

$response = $gateway->purchase(
array(
    'cancelUrl'=>'http://www.mysite.com/?cancelled',
    'returnUrl'=>'http://www.mysite.com/?success',
    'amount' =>  "12.99",
    'currency' => 'GBP',
    'Description' => 'Test Purchase for 12.99'
    )

 )->send();

$response->redirect();
}

Я создал две тестовые учетные записи в своей песочнице, одну для вышеуказанного API, а другую я использую для оплаты. Я попытался оплатить с помощью данных тестовой карты и логина, но детали заказа не отображаются в учетной записи.

Кто-нибудь может помочь?


person Pete Naylor    schedule 26.02.2014    source источник


Ответы (1)


Похоже, вы пропустили часть completePurchase(), когда Paypal возвращается к вашему returnUrl. Мой код предполагает, что у вас есть детали заказа в переменной $order, но это может выглядеть примерно так:

if(isset($_GET['success'])) {
    $response = $gateway->completePurchase(array(
        'transactionId' => $order->transaction,
        'transactionReference' => $order->reference,
        'amount' => $order->total,
        'currency' => $order->currency,
    ))->send();

    if ( ! $response->isSuccessful())
    {
        throw new Exception($response->getMessage());
    }
}

Дайте мне знать, если вам нужна помощь в получении информации о заказе по возвращении. Его можно сохранить в сеансе перед перенаправлением или в базе данных. Если вы еще этого не сделали, взгляните на пример кода: https://github.com/omnipay/example/blob/master/index.php

person beech    schedule 05.03.2014
comment
Спасибо за это, я считаю, что transactionId - это токен от PayPal, но что такое transactionReference. Хотя я передал уникальный ключ в transactionReference, и он отлично работает, но мне просто нужно быть уверенным. Вы можете уточнить? Спасибо. - person Shina; 09.03.2014
comment
Привет Шина. Это ссылка, возвращенная Paypal. После отправки запроса на покупку, но перед перенаправлением вы вызываете $response->getTransactionReference(), чтобы получить ссылку. - person beech; 09.03.2014
comment
Спасибо, бук, теперь я заметил, что мой токен совпадает с $response->getTransactionReference(). Итак, что такое идентификатор транзакции? мой случайный ключ? - person Shina; 10.03.2014
comment
Да, вам не следует устанавливать свою собственную ссылку, я думаю, что у вас есть идентификатор и ссылка не в ту сторону. Однако идентификатор может быть любым уникальным, который вам нравится. - person beech; 10.03.2014
comment
Спасибо за разъяснения, я получил тот же ответ от разработчика. - person Shina; 10.03.2014
comment
К вашему сведению, вы не должны хранить информацию в сеансе при совершении покупки через PayPal Express. Paypal уничтожит сессию. Лучше хранить информацию в базе данных, а затем ссылаться на нее с идентификатором при возврате. - person Lynx; 12.09.2014