【问题标题】:PayPal IPN Send Email贝宝 IPN 发送电子邮件
【发布时间】:2013-12-13 14:08:53
【问题描述】:

我有一个控制器来处理 PayPal 的 IPN 回调。我想将与会者标记为“已付款”,并在他们成功付款后向他们发送确认电子邮件。

标记已付款操作有效,但电子邮件未发送。

这是我的控制器:

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

      def create
        PaymentNotification.create!(:params => params, :attendee_id => params[:invoice],  :status => params[:payment_status], :transaction_id => params[:txn_id])
        if params[:payment_status] == 'Complete'
          @attendee = Attendee.find(params[:invoice])
          ## Working
          @attendee.update_attribute(:paid, Time.now)
          ## Not Working
          UserMailer.welcome_email(@attendee).deliver
        end
        render nothing: true
      end
    end

这是我的 user_mailer 文件:

    class UserMailer < ActionMailer::Base
      default from: 'example@email.com'

      def welcome_email(user)
        @user = user
        email_with_name = "#{@user.first_name} #{@user.last_name} <#{@user.email}>"
        @url  = 'http://example.com'
        mail(
          to: email_with_name,
          subject: 'Welcome to Yadda Yadda'
        )
      end
    end

奇怪的是,在另一个没有 PayPal 的控制器中,邮件程序可以正常工作:

    class VendorsController < ApplicationController
      def create
        @vendor = Vendor.new(vendor_params)
        if @vendor.save
          UserMailer.welcome_email(@vendor).deliver
          redirect_to vendor_success_path
        else
          render 'new'
        end
       end
     end

【问题讨论】:

    标签: ruby-on-rails email paypal paypal-ipn


    【解决方案1】:

    我正在从您的问题中提取您的答案并将其发布在此处以供将来参考。

    这需要两个操作(标记已付款和发送邮件)。它已作为 after_create 方法移至模型中。

    这是模型:

        class PaymentNotification < ActiveRecord::Base
          ...
          after_create :mark_attendee_paid
    
          private
    
          def mark_attendee_paid
            if status == 'Completed'
              attendee.update_attribute(:paid, Time.now)
              UserMailer.welcome_email(attendee).deliver
            end
          end
        end
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-07
      • 2014-10-29
      • 2014-06-30
      • 2020-03-24
      • 2020-12-17
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多