我有一个简单的应用程序,我想确认客户的订单与短信购买。我将会话变量中的订单ID传递给我,他将使用y或n来响应,分别接受或拒绝订单。我的代码是这样的东西
body = "You have a new order of a #{product.title}"
session[:orderId] = @order.id
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => sotre_no, :body => body)
并通过
获得回复from = params["From"]
response = params["Body"]
order = Order.find session[:orderId] #session[:orderId] returns nil why?
if order.confirm(response)
body = "your order is confirmed! Thanks"
else
body = "You have reject the order Thanks for your response"
end
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => from, :body => body)
我无法获得订单ID为什么任何人可以提供帮助或建议我如何在params中发送订单ID。
答案 0 :(得分:1)
我是Twilio的开发人员传播者。
您的问题是当用户使用网络浏览器浏览您的网站时会话有效。 Cookie标识会话,并在每次浏览器发出请求时与服务器共享。
在这种情况下,您没有与该网站交互的浏览器,您的用户正在通过SMS进行交互。因此,没有cookie被交换,也不会有持久的会话。
相反,您需要将订单保存在更长久的商店中,例如另一个模型。我现在打算称它为Offer
(即您向用户提供产品)。
class Offer < ActiveRecord::Base
belongs_to :user
belongs_to :order
def self.last_offer_for(phone_number)
self.include(:user).where(['users.phone_number = ?', phone_number]).first
end
end
然后,您最初发送的短信将如下所示:
body = "You have a new order of a #{product.title}"
Offer.create(:order => @order, :user => @user)
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => @user.phone_number, :body => body)
当您收到回复的消息时,您将通过电话号码查找您向用户提出的最后一个优惠,并从那里获取订单:
from = params["From"]
response = params["Body"]
offer = Offer.last_offer_for(from)
order = offer.order
if order.confirm(response)
body = "your order is confirmed! Thanks"
else
body = "You have reject the order Thanks for your response"
end
client = Twilio::REST::Client.new(ACCOUNT_SID, AUTH_TOKEN)
client.account.messages.create(:from => 'myNo', :to => from, :body => body)
这只是如何执行此操作的一个选项,您可以将其保存在更简单的数据库中,例如像redis这样的键值存储。
我希望这会有所帮助,如果我能继续提供帮助,请告诉我。
答案 1 :(得分:0)
会话是空的,因为(我猜)它是通用处理程序。您应该将orderId
传递给客户:
client.account.messages.create(
:from => 'myNo',
:to => sotre_no,
:body => body,
:orderId => @order.id # supply orderId
)
现在你应该能够在
中检索它order = Order.find params['OrderId']
希望它有所帮助。