2013-10-31 3 views
0

페이팔 익스프레스 결제를 paypal-express 보석을 사용하여 구현하려고합니다. 그러나 혼란 스럽습니다. 여기 Paypal-Express gem Rails 통합

내가 적절한 요청을 할 수있는 방법 트랜잭션 컨트롤러의 작성 방법

 elsif params[:purchase][:payment_method] == "Paypal" 
      #paypal payment 
      request = Paypal::Express::Request.new(
       :username => "xxxxxxxxxxxxxxxxx", 
       :password => "xxxxxxxxxxxxxxxx", 
       :signature => "xxxxxxxxxxxxxxxx" 
       ) 
       payment_request = Paypal::Payment::Request.new(
        :currency_code => "#{@current_user.currency}", # if nil, PayPal use USD as default 
        :description => "Purchase of SMS", # item description 
        :quantity  => 1,  # item quantity 
        :amount  => "#{@total}", # item value 
       ) 
       response = request.setup(
        payment_request, 
        success_url, 
       cancel_url 
       ) 
       transaction.tracking_id = response.token 
       transaction.save 
       response.redirect_uri 

그리고 성공 방법

def success 
    token = params[:token] 
    payer_id = params[:payer_id] 
    request = Paypal::Express::Request.new(
        :username => "xxxxxxxxxxxxxxx", 
        :password => "xxxxxxxxxxxxxxx", 
        :signature => "xxxxxxxxxxxxxxx" 
        ) 
    response = request.details(token) 
    transaction = Transaction.find_by_tracking_id(token) 
    transaction.merchant_reference = payer_id 
    transaction.status = "Completed" 
    transaction.save 
    user = User.find(transaction.user_id) 
     user.balance = (user.balance+response.amount.to_i) 
     user.save() 
     response = request.checkout!(
     token, 
     payer_id, 
     payment_request 
     ) 
     flash[:notice] = 'Payment Transaction Completed' 
     user_home_path(@current_user) 
    end 

및 취소 방법

def cancel 
     flash[:warn] = 'Payment Request Canceled' 
     user_home_path(@current_user)  
    end 

코드입니다 create 메소드에서 토큰을 응답으로 가져 와서 저장하면 s에서 사용할 수 있습니다. 특정 트랜잭션을 검색하는 uccess 메소드

또한 성공 방법에서 적절한 DoExpressCheckoutPayment을 어떻게 실행할 수 있습니까?

미리 감사드립니다.

답변

0

나는 paypal-express 보석을 한번도 사용하지 않았기 때문에 create 메소드가 response.token (맨 아래의 세 번째 줄 : transaction.tracking_id = response.token)을 어떻게 사용하는지 혼란 스럽다. 그 임무는 그 과정 초기에 느낀다.

귀하의 질문은 보석과 관련이 없으며 귀하의 신청서와 관련이 없습니다. 기본 질문은 "두 개 이상의 작업간에 데이터를 유지하는 방법은 무엇입니까?" 내가 보았을 때 두 가지 접근법이 있습니다.

먼저, response.token 또는 transaction.tracking_id를 세션에 넣을 수 있습니다. 지불하는 사용자가 귀하의 웹 사이트를 방문 할 때마다 일부가 아니라면이 방법이 효과가 없을 수 있습니다.

둘째, DB 추적 모델을 토대로 주문 추적을 위해 토큰/tracking_id를 저장할 수 있습니다. 이렇게하면 token/tracking_id를 기반으로 활성 주문을 찾아보고 Paypal 응답에 대한 응용 프로그램의 컨텍스트를 가질 수 있습니다.

+0

그 라인은 단지 도박이었습니다. 단지 혼란스런 상태로 코드를 복사했습니다. – acacia

+0

@acacia이 보석을 작동시킬 수 있었습니까? – pwz2000

+0

@ pwz2000, 오래전에 일 했어. 오래 전에 NVP classic API를 사용 했어. – acacia