Проверка учетных данных пользователя API - Rails, ActiveMerchant и PayPal Express Gateway
-
21-08-2019 - |
Вопрос
Я создаю приложение marketplace, которое использует PayPal Express.У меня есть форма для продавцов для ввода своих учетных данных API PayPal, но мне нужен способ подтвердить их, сделав какой-то вызов PayPal.
Я использую PaypalExpressGateway в ActiveMerchant, и я не вижу ничего, кроме стандартных элементов управления покупками.Есть ли какая-либо нулевая операция, которую можно использовать?
Мы были бы очень признательны за любую помощь!
Решение
По соображениям безопасности нет способа проверить, является ли электронное письмо действительной учетной записью PayPal.Вы всегда можете совершить небольшую транзакцию, а затем аннулировать ее, если действительно требуется срок действия учетной записи.
Другие советы
Я использую Поиск транзакций операция для этой цели.Указав STARTDATE=2100-01-01 00:00:00
по сути, это приводит к отказу от операции.
Это подтвердит ваши учетные данные, не требуя каких-либо дополнительных данных от продавца.
Лично у меня нет ответа.Но я знаю, что Райан Бейтс из Railscasts.com недавно посвятил шесть (!) эпизодов ActiveMerchant и Paypal в частности.Ознакомьтесь с эпизодами с # 141 по # 146 на railscasts.com.
Хорошо, через 4 часа...
module ActiveMerchant #:nodoc: module Billing #:nodoc: class PaypalExpressGateway < Gateway def get_balance(options = {}) commit 'GetBalance', build_get_balance_request(options) end private def build_get_balance_request(options) xml = Builder::XmlMarkup.new :indent => 2 xml.tag! 'GetBalanceReq', 'xmlns' => PAYPAL_NAMESPACE do xml.tag! 'GetBalanceRequest', 'xmlns:n2' => EBAY_NAMESPACE do xml.tag! 'n2:Version', API_VERSION xml.tag! 'n2:ReturnAllCurrencies', '1' end end xml.target! end end end end class SellerMerchantValidator < ActiveModel::Validator def validate(record) paypal_attrs = ['paypal_api_username', 'paypal_api_password', 'paypal_api_signature'] if record.paypal_merchant? && (record.changed - paypal_attrs).size < record.changed.size # one of paypal_attrs changed response = record.gateway.get_balance unless response.params['balance'].present? record.errors[:base] << "Please check the PayPal details and make sure all three are entered correctly." end end end end
Спасибо Нилсу за идею проверить TransactionSearch.
Пожалуйста, дайте мне знать, если есть лучший способ проверить, изменилось ли какое-либо поле api.
В API также есть вызов getBalance.Несколько примеров кода
Похоже, это самый простой (и быстрый?) способ.
У PayPal действительно есть AddressVerify
API.Он подтверждает, совпадают ли почтовый адрес и почтовый индекс с данными указанного владельца учетной записи PayPal.На самом деле, прямо сейчас я нахожусь в процессе внедрения этого на нашем веб-сайте.
Подробнее об этом вы можете прочитать здесь:
https://www.x.com/docs/DOC-1162#id0862M0QH02L
Правильно, поэтому, если вы хотите проверить учетные данные пользователя с помощью ActiveMerchant, используйте метод transaction_search на шлюзе
Этот пример вернет результат успешного выполнения (обязательно укажите свои тестовые учетные данные).
@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
login: @username,
password: @password,
signature: @signature,
test: true
)
gateway.transaction_search({start_date: DateTime.now})