Подтвердите идентификатор PayPal Pay, полученный компанией Android на сайте Magento

Мы делаем Android-приложение для нашего сайта Magento 1.9. На нашем сайте мы уже успешно интегрировали Paypal.

В приложении клиент может осуществлять платежи, и, используя SDK Paypal, мы получаем идентификатор транзакции в приложении. Команда Android передаст идентификатор транзакции Magento, а в Magento нам нужно подтвердить платеж.

Наша команда Android нуждается в API со стороны Magento.

Как мы можем это сделать?


Мы получаем идентификатор транзакции из paypal sdk после завершения заказа.

Пожалуйста, посетите github link и найдите "сервер для проверки" (используя CTRL + F).

В ссылке они упомянули, что нам нужно проверить с сервером, так как я могу проверить сервер после оплаты через приложение?


Команда Paypal отправила нам образец запроса:

$apiContext = new ApiContext(new OAuthTokenCredential(
        "<CLIENT_ID>", "<CLIENT_SECRET>"));

$payment = Payment::get('PAY-5YK922393D847794YKER7MUI', $apiContext);

Говорят, мы должны отправить запрос в PayPal, используя приведенный выше пример кода.

Как только мы пройдем pay id, PayPal ответит с полной информацией о платеже.

как использовать вышеуказанный код на нашем сайте?

Команда Paypal предоставила нам код github.

Говорят, что я должен использовать целую SDK для получения реквизитов платежа. Как использовать его в Magento?

Ответы

Ответ 1

Следующие пояснения основаны на прецеденте, в котором вы используете PayPal (Express Checkout или Payment Pro) в своем интернет-магазине Magento, но дополнительно интегрируете Mobile Native SDK в свой клиентский APP (вместо использования exsing Magento PayPal, встроенный в веб-просмотр в APP).

  • Проверка платежа (после того, как ваш клиент APP получил payment-id в ответе), важно для предотвращения мошенничества. Mobile APP взаимодействует с серверами PayPal самостоятельно, и вы не хотите доставлять товар/услугу при ответе на мобильный API (который легко реплицируется) без проверки сервера (вашего сервера Magento) против фактического содержимого платежа.

  • По-видимому, Magento не приходит с этой частью кодов в модуле PayPal, и вам нужно реализовать свои собственные, но вам необязательно будет импортировать весь RESTful SDK только для одного вида оплаты - вызов API. Все основано на запросах JSON и разборе JSON, оно работает до тех пор, пока вы следуете схеме PayPal RESTful payload ЗДЕСЬ и инициируйте запрос с помощью curl.

  • Контрольный список платежей после получения вашего сервера данных также можно найти ЗДЕСЬ.

Дополнительная передовая практика для реализации на сервере:

  • Сохранять идентификатор платежа, например. id": "PAY-564191241M8701234KL57LXI" в вашей базе данных вместе с вводом данных заказа;
  • Храните debug-id в объекте error (если есть ответ об ошибке) из ответа API проверки (поиска платежей) в вашу базу данных для дальнейшего устранения проблемы с поддержкой PayPal.

Примеры API-тестов с помощью команд curl будут выглядеть так:

Шаг # 1 - Получение маркера доступа для аутентификации

curl -v https://api.sandbox.paypal.com/v1/oauth2/token \
  -H "Accept: application/json" \
  -H "Accept-Language: en_US" \
  -u "<your sandbox APP client>:<your sandbox APP secret>" \
  -d "grant_type=client_credentials"

Разберите ответ образца и получите токен доступа:

{
  "scope": "https://api.paypal.com/v1/payments/.* https://api.paypal.com/v1/vault/credit-card https://api.paypal.com/v1/vault/credit-card/.*",
  "access_token": "<Your-Access-Token-for-further-calls>",
  "token_type": "Bearer",
  "app_id": "APP-6XR95014SS315863X",
  "expires_in": 28800
}

Шаг # 2 - Выполнение поискового вызова с помощью токена доступа и идентификатора платежа (возвращенный вами APP, например PAY-123456789)

curl https://api.sandbox.paypal.com/v1/payments/payment/PAY-123456789 \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer <the access token from Step#1>"

И вы получите ответ, подобный этому, который содержит данные о платежах, которые вы бы сравнили и подтвердили с информацией о заказе в базе данных

{
  "proof_of_payment": {
    "adaptive_payment": {
      "pay_key": "AP-70M68096ML426802W",
      "payment_exec_status": "COMPLETED",
      "timestamp": "2013-02-20T00:26:25Z",
      "app_id": "APP-91B933855X481767M"
    }
  },
  "payment": {
    "short_description": "Hipster t-shirt",
    "amount": "9.95",
    "currency_code": "USD"
  },
  "client": {
    "platform": "iOS",
    "paypal_sdk_version": "1.0.0",
    "environment": "live",
    "product_name": "PayPal iOS SDK"
  }
}

Ответ 2

UPDATE:

Здесь Документы PayPal о том, как это сделать.

Чтобы проверить платеж, ответьте на следующие вопросы:

  • Подтверждено ли подтверждение оплаты?
  • Я получаю платеж?
  • Правильно ли указаны количество и валюта?
  • Был ли ранее использован платеж?

Сведения о платеже по идентификатору платежа можно получить с помощью REST API:

curl https://api.sandbox.paypal.com/v1/payments/payment/PAY-5YK922393D847794YKER7MUI \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer accessToken"

Вы сказали, что у вас уже есть веб-сайт Magento, интегрированный с PayPal. Это означает, что IPN включен и работает. Когда новый платеж происходит из приложения Android, IPN должен срабатывать, и вы должны получить эту продажу, записанную в Magento.

Я не понимаю, почему вы должны отправлять данные транзакций с Android на Magento? Если вы хотите узнать, сколько продаж вы получили от Android, вы можете использовать настраиваемые поля, доступные в PayPal.