문제

페이팔 결제에 이 보석을 사용하고 있습니다 https://github.com/tc/paypal_adaptive

나는 이 보석에 대해 매우 혼란스럽고 혼란스럽습니다.문서화가 잘 안 되어 있어서 ipn 응답 시 페이팔에서 데이터를 얻는 방법을 이해하기 어렵습니다.

이 질문이 같은 문제를 겪고 있는 더 많은 사람들에게 도움이 되기를 바랍니다.

내 단계는 다음과 같습니다

내 페이팔로 요청을 보냅니다. orders_controller.rb preapproval_지불 방법을 사용합니다.

def preapproval_payment
preapproval_request = PaypalAdaptive::Request.new
data = {
  "returnUrl" => response_paypal_user_orders_url(current_user),
  "cancelUrl"=>  cancel_payment_gift_url(@gift),
  "requestEnvelope" => {"errorLanguage" => "en_US"},
  "senderEmail" => "gift_1342711309_per@gmail.com",
  "startingDate" => Time.now,
  "endingDate" => Time.now + (60*60*24) * 30,
  "currencyCode"=>"USD",
  "maxAmountPerPayment" => "@gift.price",
  "ipnNotificationUrl" => ipn_notification_url,
  "ip" => request.remote_ip
  }
    preapproval_response = preapproval_request.preapproval(data)
    puts data
  if preapproval_response.success?
    redirect_to preapproval_response.preapproval_paypal_payment_url
  else
    redirect_to gift_url(@gift), alert: t(".something_was_wrong")
  end
end

다음은 명령에서 내 로그 콘솔에 있는 내 요청 데이터입니다. puts data :

{"returnUrl"=>"http://localhost:3000/en/u/maserranocaceres/orders/response_paypal", "cancelUrl"=>"http://localhost:3000/en/gifts/gift-1/cancel_payment", "requestEnvelope"=>{"errorLanguage"=>"en_US"}, "senderEmail"=>"gift_1342711309_per@gmail.com", "startingDate"=>2012-07-29 13:05:49 +0200, "endingDate"=>2012-08-28 13:05:49 +0200, "currencyCode"=>"USD", "maxAmountPerPayment"=>9, "ipnNotificationUrl"=>"http://localhost:3000/ipn_notification?locale=en", "ip"=>"127.0.0.1"}

페이팔 페이지로 리디렉션되어 페이팔 결제가 성공적으로 이루어졌습니다 :D.

결제가 성공적으로 완료되면 다음 페이지로 이동됩니다.

http://localhost:3000/en/u/maserranocaceres/orders/response_paypal

나는 가지고있다 response_paypal 행동 orders_controller.rb.GET 액션이고 이 액션에 대한 코드는 다음과 같습니다.

def response_paypal
  respond_to do |format|
       format.html { redirect_to user_orders_url(current_user), :alert => "works fine return url"}
    end
 end

지금까지는 모든 것이 잘 작동합니다.

이제 필요한 것은 페이팔로부터 받은 데이터를 가져오고 결제가 성공적으로 처리되면 내 데이터베이스에 새 주문을 저장하는 것입니다.

이 목적을 위해 나는 다음과 같은 파일을 만듭니다. lib/paypal_ipn.rb 그리고 이 파일에 다음의 내용을 추가합니다. https://github.com/tc/paypal_adaptive/blob/master/templates/paypal_ipn.rb

# Allow the metal piece to run in isolation
require(File.dirname(__FILE__) + "/../../config/environment") unless defined?(Rails)

class PaypalIpn
  def self.call(env)
    if env["PATH_INFO"] =~ /^\/paypal_ipn/
      request = Rack::Request.new(env)
      params = request.params
      ipn = PaypalAdaptive::IpnNotification.new
      ipn.send_back(env['rack.request.form_vars'])
      if ipn.verified?
        #mark transaction as completed in your DB
        output = "Verified."
      else
        output = "Not Verified."
      end

      [200, {"Content-Type" => "text/html"}, [output]]
    else
      [404, {"Content-Type" => "text/html"}, ["Not Found"]]
    end
  end

end

경로.rb 나는 다음을 추가한다:

match "/ipn_notification" => PaypalIpn

내 두 가지 문제는 다음과 같습니다

ㅏ) 결제한 후에 이 파일이 실행되는 것을 볼 수 없으며 페이팔에서 얻은 데이터를 내 콘솔에서도 볼 수 없습니다.

비) 내 요청에 포함된 개체 ID를 페이팔로 보내고 싶습니다. @gift 나중에 회복할 수 있도록 paypal_ipn.rb 내 데이터베이스를 저장합니다.

내가 뭘 잘못하고 있으며 어떻게 이러한 문제를 해결할 수 있습니까?

감사합니다

도움이 되었습니까?

해결책

해당 gem을 사용해본 적은 없지만 이전에 PayPal IPN을 사용한 적이 있습니다.확인해야 할 사항은 다음과 같습니다.

  1. IPN을 사용하도록 PayPal 계정을 설정했습니까?이 기능이 작동하려면 계정에서 이 설정을 활성화해야 합니다.

  2. 결제 과정에서 ipn_notification_url을 전달할 때 "/ipn_notification" 경로와 일치하는지 확인하셨나요?

  3. 이 기능이 작동하려면 PayPal이 이 앱을 실행하는 서버와 직접 통신할 수 있어야 합니다.이는 일반적으로 동적 DNS 등을 사용하여 로컬 컴퓨터에 사용자 정의 설정이 없는 한 PayPal이 앱과 통신할 수 있도록 실제로 이 코드를 서버에 배포해야 함을 의미합니다.즉, 이것이 실행 중이라면 http://localhost:3000, 이것은 작동하지 않습니다.

두 번째 질문인 @gift를 복구하여 데이터베이스에 지불된 사실을 기록하는 방법에 답하기 위해 이 gem으로 어떻게 해야 할지 잘 모르겠지만 ActiveMerchant를 사용하여 어떻게 하는지 알려드리겠습니다. - 아마 꽤 비슷할 거예요.

  1. PayPal에 대한 결제 요청 시 송장 번호를 전달할 수 있습니다.나는 그 필드가 "송장"이라고 불린다고 생각합니다.여기서는 선물의 ID를 전달합니다.

  2. PayPal이 IPN을 통해 앱에 주문 결제가 완료되었음을 알리면 인보이스 번호를 다시 전달합니다.이 인보이스 번호를 사용하여 @gift를 검색하면 필요한 작업을 수행할 수 있습니다.

ActiveMerchant gem을 사용하여 작업 중인 PayPal 코드의 관련 부분은 다음과 같습니다. https://gist.github.com/3198178

행운을 빌어요!

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top