Это мой код:
$gateway = GatewayFactory::create('PayPal_Express');
$gateway->setUsername('name');
$gateway->setPassword('pass');
$gateway->setSignature('sig');
$gateway->setTestMode(true);
$resp = $gateway->purchase(
array(
'cancelUrl' => 'mysite/',
'returnUrl' => 'mysite/success',
'description' => "mysite item",
'amount' => $amount, //final amount
'currency' => 'EUR'
)
)->send();
if ($resp->isSuccessful()) {
// payment was successful: update database
// never reached
$a = new database('database');
$a->write database;
$dbp = null; die;
print_r($resp);
} elseif ($resp->isRedirect()) {
// redirect to offsite payment gateway
$resp->redirect();
} else {
echo $resp->getMessage();
header('Location: mysite/error');
exit;
}
Как я могу получить информацию о транзакции после перенаправления?
Как адаптировать этот код для кредитной карты на PayPal?
Из ваших комментариев я бы предположил, что вы не переходите к успешной стадии оплаты.
Имея это в виду, давайте посмотрим на поток экспресс-оплаты и сравним его с вызовом API DoDirectPayment
===============
Вызов API-интерфейса SetExpressCheckout — корзина объявляет детали оформления заказа и возвращает «токен экспресс-проверки». Маркер идентифицирует сеанс оформления заказа, который магазин запросил у PayPal.
Покупатель перенаправляется на URL-адрес Express Checkout, а токен добавляется к URL-адресу перенаправления. https://www.sandbox.paypal.com/cgi-bin/webscr?cmd=_express-checkout&маркер = EC-6C677292NP7377708
(если вы пропустите шаг 5, вы должны добавить параметр useraction = commit в URL перенаправления)
Покупатель входит в систему и утверждает платеж
Покупатель перенаправляется обратно на URL-адрес возврата, объявленный в вызове API SetExpressCheckout, с идентификатором PayerID и токеном, добавленным к URL-адресу возврата в качестве параметров HTTP GET.
5. Интеграция инициирует вызов API GetExpressCheckoutDetails, извлекает информацию о доставке и отображает последний обзор и дополнительные расходы по доставке для покупателя.
===============
Для платежей с помощью кредитной карты через API DoDirectPayment запрос и ответ API NVP должны выглядеть следующим образом — это должно быть довольно простым.
Request:
VERSION = 109.0
METHOD = DoDirectPayment
PAYMENTACTION = Sale
IPADDRESS = 192.168.0.1
AMT = 0.01
CREDITCARDTYPE = Visa
ACCT = xxxxxxxx6840
EXPDATE = 102020
CVV2 = 123
FIRSTNAME = John
LASTNAME = Test
STREET = 12312 Port Grace Blvd
CITY = La Vista
STATE = NE
COUNTRYCODE = US
ZIP = 68128
CURRENCYCODE = USD
Response:
TIMESTAMP=2015-01-20T16:00:27Z
CORRELATIONID=180513f33ad52
ACK=Success
VERSION=109.0
BUILD=14726230
AMT=0.01
CURRENCYCODE=USD
AVSCODE=X
CVV2MATCH=M
TRANSACTIONID=0PA61839GE498951M}
===============
Судя по вашим комментариям в коде, вы предполагаете, что транзакция завершается после выполнения шага 4.
Поскольку я не вижу кода для инициирования вызова API DoExpressCheckoutPayment, вам необходимо убедиться, что выполняется хотя бы шаг 6.
https://devtools-paypal.com/integrationwizard/ имеет отдельный пример кода, который может помочь.
Однако использование интеграции на основе SDK избавит вас от многих проблем:
https://devtools-paypal.com/guide/expresscheckout/php?interactive=ON&ENV = песочница
…
Если вы хотите получить детали платежа на более позднем этапе, вы можете запустить вызов API GetTransactionDetails для идентификатора транзакции, возвращенного в вызове API DoDirectPayment или в вызовах DoExpressCheckoutPayment.
Вы можете использовать мгновенное уведомление о платеже, чтобы получать уведомления о только что завершенной транзакции. IPN это рекомендуемый путь.