2013-11-27 3 views
0

저는 PayPal의 IPN 콜백을 처리하는 컨트롤러가 있습니다. 참석자에게 '지불 됨'으로 표시하고 지불에 성공하면 확인 이메일을 보내려고합니다.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: '[email protected]' 

     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 

메일러가 작동 페이팔이없는 : 여기

내 컨트롤러의

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 

답변

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 
: 여기

모델입니다