Проверка учетных данных пользователя API - Rails, ActiveMerchant и PayPal Express Gateway

StackOverflow https://stackoverflow.com/questions/509021

Вопрос

Я создаю приложение 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

и здесь:
https://cms.paypal.com/us/cgi-bin/?&cmd=_render-content&content_ID=developer/e_howto_api_nvp_r_AddressVerify

Правильно, поэтому, если вы хотите проверить учетные данные пользователя с помощью ActiveMerchant, используйте метод transaction_search на шлюзе

https://github.com/Shopify/active_merchant/blob/cb72e0f9c58f57b1293e6e976229b26cfbfee6a8/lib/active_merchant/billing/gateways/paypal/paypal_common_api.rb

Этот пример вернет результат успешного выполнения (обязательно укажите свои тестовые учетные данные).

@username = ''
@password = ''
@signature = ''
gateway = ActiveMerchant::Billing::PaypalExpressGateway.new(
  login:      @username,
  password:   @password,
  signature:  @signature,
  test:       true
)

gateway.transaction_search({start_date: DateTime.now})
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top