2013-01-28 4 views
0

현재 PayPal의 Express Checkout 및 ActiveMerchant를 통해 PayPal 결제를 허용하는 Ruby-on-Rails 웹 응용 프로그램을 작성 중입니다. 나는 고객/구매자가 검증 된 또는 확인되지 않은 PayPal 계정 중 하나를 사용하여 지불했는지 여부를 판단하기위한 ActiveMerchant의 지원에 대한 여러 조사를 수행했지만 유용한 가이드를 찾는 데는 운이 없다.PayPal Express Checkout 고객/구매자의 계정 상태 (확인 됨/확인되지 않음)를 확인하는 ActiveMerchant의 지원

ActiveMerchant는 현재 잘 문서화되어 있지 않으므로 전혀 도움이되지 않습니다.

다음은 현재 내 프로젝트에서 사용중인 관련 코드입니다. PaymentsController # purchase에서 EXPRESS_GATEWAY.purchase 메소드 호출에 의해 반환 된 ActiveMerchant::Billing::PaypalExpressResponse 객체의 #params['protection_eligibility']#params['protection_eligibility_type'] 메소드를 일시적으로 사용하여 PayPal 고객/구매자가 확인 된/확인되지 않은 PayPal 계정이 있는지 평가합니다. 나중에 이것이 고객의 계정 상태를 알기위한 신뢰할 수있는 근거가 아니라는 사실을 알게되었습니다.

Ruby-on-Rails의 ActiveMerchant를 사용하거나 Rails의 다른 대안을 사용하여 PayPal 고객/구매자가 확인/확인되지 않은 계정을 가지고 있는지 여부를 아는 사람이 나에게 지혜를 줄 수 있기를 바랍니다.

# config/environments/development.rb 
config.after_initialize do 
    ActiveMerchant::Billing::Base.mode = :test 
    paypal_options = { 
     # credentials removed for this StackOverflow question 
     :login => "", 
     :password => "", 
     :signature => "" 
    } 
    ::EXPRESS_GATEWAY = ActiveMerchant::Billing::PaypalExpressGateway.new(paypal_options) 
end 

# app/models/payment.rb 
class Payment < ActiveRecord::Base 
    # ... 
    PAYPAL_CREDIT_TO_PRICE = { 
     # prices in cents(US) 
     1 => 75_00, 
     4 => 200_00, 
     12 => 550_00 
    } 
    STATUSES = ["pending", "complete", "failed"] 
    TYPES  = ["paypal", "paypal-verified", "paypal-unverified", "wiretransfer", "creditcard"] 
    # ... 
end 

# app/controllers/payments_controller.rb 
class PaymentsController < ApplicationController 
    # ... 
    def checkout 
    session[:credits_qty] = params[:credit_qty].to_i 

    total_as_cents = Payment::PAYPAL_CREDIT_TO_PRICE[session[:credits_qty]] 
    setup_purchase_params = { 
     :allow_guest_checkout => true, 
     :ip => request.remote_ip, 
     :return_url => url_for(:action => 'purchase', :only_path => false), 
     :cancel_return_url => url_for(:controller => 'payments', :action => 'new', :only_path => false), 
     :items => [{ 
         :name => pluralize(session[:credits_qty], "Credit"), 
         :number => 1, 
         :quantity => 1, 
         :amount => Payment::PAYPAL_CREDIT_TO_PRICE[session[:credits_qty]] 
        }] 
    } 

    setup_response = EXPRESS_GATEWAY.setup_purchase(total_as_cents, setup_purchase_params) 
    redirect_to EXPRESS_GATEWAY.redirect_url_for(setup_response.token) 
    end 

    def purchase 
    if params[:token].nil? or params[:PayerID].nil? 
     redirect_to new_payment_url, :notice => I18n.t('flash.payment.paypal.error') 
     return 
    end 

    total_as_cents = Payment::PAYPAL_CREDIT_TO_PRICE[session[:credits_qty]] 
    purchase_params = { 
     :ip => request.remote_ip, 
     :token => params[:token], 
     :payer_id => params[:PayerID], 
     :items => [{ 
         :name => pluralize(session[:credits_qty], "Credit"), 
         :number => 1, 
         :quantity => 1, 
         :amount => Payment::PAYPAL_CREDIT_TO_PRICE[session[:credits_qty]] 
        }] 
    } 

    purchase = EXPRESS_GATEWAY.purchase total_as_cents, purchase_params 
    if purchase.success? 
     payment = current_user.payments.new 
     payment.paypal_params = params 
     payment.credits = session[:credits_qty] 
     payment.amount = Payment::PAYPAL_CREDIT_TO_PRICE[session[:credits_qty]] 
     payment.currency = "USD" 
     payment.status = "complete" 
     if(purchase.params["receipt_id"] && (purchase.params["success_page_redirect_requested"] == "true")) 
     payment.payment_type = "creditcard" 
     else 
     if purchase.params['protection_eligibility'] == 'Eligible' && purchase.params['protection_eligibility_type'] == 'ItemNotReceivedEligible,UnauthorizedPaymentEligible' 
      payment.payment_type = 'paypal-verified' 
     else 
      payment.payment_type = 'paypal-unverified' 
     end 
     end 
     payment.ip_address = request.remote_ip.to_s 
     payment.save! 

     SiteMailer.paypal_payment(payment).deliver 
     SiteMailer.notice_payment(payment).deliver 

     notice = I18n.t('flash.payment.status.thanks') 
     redirect_to profile_url, :notice => notice 
    else 
     notice = I18n.t('flash.payment.status.failed', :message => purchase.message) 
     redirect_to new_payment_url, :notice => notice 
    end 
    end 
    # ... 
end 
+0

정확히 무엇 당신 질문입니까? –

+1

Hello Beerlington, 내 질문은, ActiveMerchant는 PayPal Express Checout 지불이 검증 된/확인되지 않은 PayPal 계정에 의해 수행되었음을 나타내는 기능이 있습니까? – ebcagadas

답변

3

PayPal의 paypal-sdk-merchant gem을 사용하여 ActiveMerchant가 지불 한 사람의 상태를 확인하는 데 도움을 줄 수 없었습니다. 즉, 검증 된/확인되지 않은 PayPal 계정입니다 .paypal-sdk-

  • 이 번들
  • 레일 설치 '페이팔-SDK-상인'https://github.com/paypal/merchant-sdk-ruby

    • 보석에 상인은 페이팔 생성 : SDK : 나는 설정 그리고

    를 설치 자신의 샘플 https://github.com/paypal/merchant-sdk-ruby#samples. 샘플을 설정 한 후 Rails 앱의/samples로 이동하면 PayPal의 API에서 필요한 기능을 수행 할 수있는 많은 코드 생성기를 찾을 수 있습니다. config/paypal.yml을 설정하는 것을 잊지 마십시오. 필자는 사용자 이름, 비밀번호 및 서명 (PayPal 샌드 박스 (특히 테스트 판매자 계정)에서 얻을 수 있음)을 구성하고 내 경우에는 app_id를 제거했습니다.

    나는 페이팔의 샘플 (/ 샘플)를 사용하여 (/ 확인되지 않은 확인) 페이팔 지불의 계정 상태를 얻기 위해 다음 코드를 얻어 내 응용 프로그램에서 모델의 클래스 메소드에 배치 :

    def self.get_paypal_payer_status(transaction_id) 
        require 'paypal-sdk-merchant' 
        api = PayPal::SDK::Merchant::API.new 
    
        get_transaction_details = api.build_get_transaction_details({ 
        :Version => "94.0", 
        :TransactionID => transaction_id 
        }) 
        get_transaction_details_response = api.get_transaction_details(get_transaction_details) 
    
        get_transaction_details_response.payment_transaction_details.payer_info.payer_status 
    end 
    
  • 0

    그래서 내가 그 특정 당신에게 말할 수 ActiveMerchant에 익숙하지 않은 해요,하지만 어떤 익스프레스 체크 아웃 구현과 당신의 값을 가진 PAYERSTATUS 매개 변수를 포함합니다 지불 정보를 얻기 위해 GetExpressCheckoutDetails을 사용할 수 있습니다 "확인 됨"또는 "확인되지 않음".

    이것은 선택 사항이지만 ActiveMerchant가 아마도 그것을 포함하고 있다고 가정하므로 해당 내용을 추적하고 이에 따라 해당 매개 변수를 가져와야합니다.

    또는 Instant Payment Notification (IPN)을 사용하여 거래 정보를받을 수 있으며 여기에도 payer_status 매개 변수가 반환됩니다.

    +0

    안녕하세요 앤드류, 당신의 대답은 나를 PayPal의 개발자 페이지에서 파고 들었습니다. 거기서 그들의 새로운 PayPal SDK를 발견했습니다. 거기에서 ActiveMerchant가했던 일을 도왔던 PayPal의 paypal-sdk-merchant 보석에 대해 배웠습니다. 도와 줄 수 없어요. 당신의 리드를 가져 주셔서 감사합니다! – ebcagadas