2009-02-03 10 views
4

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

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

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

ответ

1

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

1

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

0

У PayPal есть API AddressVerify. Он подтверждает, соответствуют ли почтовый адрес и почтовый код указанному владельцу учетной записи 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

2

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

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

1

Ok, после 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 

Благодаря Neils за идею, чтобы проверить TransactionSearch.

Пожалуйста, дайте мне знать, если есть лучший способ проверить, изменилось ли какое-либо из полей api.

1

Существует также вызов GetBalance в API. Some sample code

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

0

правого, так что если вы хотите, чтобы проверить учетные данные пользователя, используя 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}) 

 Смежные вопросы

  • Нет связанных вопросов^_^