2012-09-30 18 views
7

Tôi đang sử dụng paypal-recurring gem để xử lý thanh toán định kỳ trong ứng dụng Rails. Phần lớn mã của tôi là từ số Railscast tuyệt vời này nhưng tôi cũng muốn thêm mô hình payment_notification để chấp nhận cuộc gọi lại IPN và lưu trữ bất kỳ dữ liệu có liên quan nào. Điều này Railscast đi qua làm thế nào để thiết lập thông báo. Tuy nhiên, tôi đang gặp khó khăn trong việc tìm ra cách gửi cuộc gọi lại IPN trả tiền theo định kỳ tới mô hình PaymentNotification của tôi.Rails - xử lý cuộc gọi lại IPN PayPal bằng cách sử dụng đá quý trả tiền theo định kỳ

Làm cách nào tôi có thể đặt: ipn_url để ghi chính xác cuộc gọi lại IPN vào mô hình thanh toán thông báo của tôi. Tôi đã thử các sau đây cho đến nay:

1) Thêm ipn_url: "http://my-app-name.com/payment_notifications" với phương pháp xử lý (theo lựa chọn) hoặc payment_notifications_url

2) Cố gắng giải pháp gợi ý ở dưới cùng của GitHub issue page

3) Sử dụng tức thì Paypal của này Trình mô phỏng thông báo thanh toán (IPN) để gửi tới "http://my-app-name.com/payment_notifications", nhưng tôi gặp lỗi: Phân phối IPN không thành công. Lỗi HTTP mã 401: Unauthorized

EDIT

tôi đã có thể để mô phỏng thành công việc phân phối các IPN để payments_notifications_url tôi. Bây giờ tôi chỉ cần tìm hiểu làm thế nào để trỏ đá quý định kỳ để gửi ipn đến đó.

Mọi con trỏ sẽ được đánh giá cao. Dưới đây là một số mã hiện tại của tôi. Nếu tôi quên bất kỳ phần nào có liên quan, vui lòng cho tôi biết.

PaypalPayment Mẫu

class PaypalPayment 
    def initialize(subscription) 
    @subscription = subscription 
    end 

    def checkout_details 
    process :checkout_details 
    end 

    def checkout_url(options) 
    process(:checkout, options).checkout_url 
    end 

    def make_recurring 
    process :request_payment 
    process :create_recurring_profile, period: :monthly, frequency: 1, start_at: Time.zone.now 
    end 

    def cancel_recurring 
    process :cancel 
    end 

private 

    def process(action, options = {}) 
    options = options.reverse_merge(
     token: @subscription.paypal_payment_token, 
     payer_id: @subscription.paypal_customer_token, 
     description: @subscription.plan.name, 
     amount: @subscription.plan.monthly_price, 
     currency: "JPY" 
    ) 
    response = PayPal::Recurring.new(options).send(action) 
    raise response.errors.inspect if response.errors.present? 
    response 
    end 
end 

PaymentNotifications khiển

class PaymentNotificationsController < ApplicationController 
    protect_from_forgery :except => [:create] 

    def create 
    PaymentNotification.create!(:params => params, :status => params[:payment_status], :transaction_id => params[:txn_id]) 
    render :nothing => true 
    end 
end 
+0

bạn có thể vui lòng giúp tôi ở đây không, tôi hơi bối rối về cách hủy đăng ký paypal. http://stackoverflow.com/questions/21372793/link-to-paypal-to-cancel-paypal-recurring-rails –

Trả lời

5

tôi nhận nó làm việc. Trong trường hợp bất kỳ ai trong tương lai gặp rắc rối với PayPal IPN, dưới đây là một vài điều tôi đã sai:

1) Trong Bộ điều khiển đăng ký của tôi, tôi đã gọi số if @subscription.save thay vì if @subscription.save_with_payment vì vậy phương thức save_with_payment chưa bao giờ được gọi.

2) Trong phương pháp quá trình tôi đã thêm ipn_url: "https://my-app-name.com/payment_notifications",

def process(action, options = {}) 
    options = options.reverse_merge(
     token: @subscription.paypal_payment_token, 
     payer_id: @subscription.paypal_customer_token, 
     description: @subscription.plan.name, 
     amount: @subscription.plan.monthly_price, 
     ipn_url: "https://my-app-name.com/payment_notifications", 
     currency: "JPY" 
    ) 
    response = PayPal::Recurring.new(options).send(action) 
    raise response.errors.inspect if response.errors.present? 
    response 
    end 

3) Trong sandbox phát triển của PayPal, bấm vào 'Tài khoản kiểm tra' và sau đó nhấp vào 'Nhập Sandbox thử nghiệm trang web' nút màu da cam. Khi đã ở đó, hãy đăng nhập bằng thông tin đăng nhập người bán trên sandbox của bạn. Khi bên trong chuyển đến 'Tài khoản của tôi' và 'Tiểu sử' và trong 'Tuỳ chọn Bán hàng', hãy nhấp vào 'Tuỳ chọn Thông báo Thanh toán Tức thì'. Đặt url thông báo của bạn để khớp với url bạn đã thiết lập để nhận IPN POST và đặt gửi tin nhắn thành bật.