Проверка учетных данных API пользователя - Rails, ActiveMerchant и PayPal Express Gateway - PullRequest
4 голосов
/ 04 февраля 2009

Я создаю рыночное приложение, которое использует PayPal Express. У меня есть форма для продавцов, чтобы ввести свои учетные данные API PayPal, но мне нужен способ проверить их, сделав какой-то вызов PayPal.

Я использую PaypalExpressGateway в ActiveMerchant и не вижу ничего, кроме стандартных элементов управления покупками. Есть ли какая-либо нулевая операция, которая может быть использована?

Любая помощь будет принята с благодарностью!

Ответы [ 7 ]

2 голосов
/ 20 января 2011

Я использую для этой цели операцию TransactionSearch . Указав STARTDATE=2100-01-01 00:00:00, это в основном приводит к неработоспособности.

Он проверит учетные данные для вас, не требуя дополнительного ввода от продавца.

1 голос
/ 06 февраля 2011

В API также есть вызов GetBalance. Пример кода

Похоже, самый простой (и самый быстрый?) Способ.

1 голос
/ 23 января 2011

Хорошо, через 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.

1 голос
/ 17 декабря 2009

Из соображений безопасности невозможно проверить, является ли электронная почта действительной учетной записью PayPal. Вы всегда можете сделать небольшую транзакцию, а затем аннулировать ее, если действительно требуется действительность счета.

1 голос
/ 11 февраля 2009

У меня нет ответа лично. Но я знаю, что Райан Бейтс из Railscasts.com недавно посвятил шесть (!) Эпизодов, в частности, ActiveMerchant и Paypal. Проверьте эпизоды # 141 - # 146 на railscasts.com .

0 голосов
/ 13 мая 2014

Правильно, поэтому, если вы хотите проверить учетные данные пользователя с помощью ActiveMerchant, используйте метод транзакции_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})
0 голосов
/ 26 января 2010

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

...