我正在研究Ruby on Rails应用程序与BigCommerce的集成。我已经注册了回收,以便接收有关订单创建或货件创建的通知。当下订单时,它正在向我的服务器发送回调,然后我做一些处理并确认该请求发送方的HTTP状态代码200与文档中提到的相同。但是webhook仍然会在一段时间内触发回调。谁能告诉我如何确认webhook并停止接收来自webhook的回调?
以下是我处理它的示例代码。
order_id =params['data']["orderId"].to_i
store_hash = params['producer'].split('/').last
store = Store.find_by(store_hash: store_hash)
connection = prepare_connection(store, store_hash)
vars = prepare_variable_hash(order_id, connection)
send_notification_email(vars['email'],
store.email,
q_subject.html_safe,
q_body.html_safe
)
render nothing: true, status: 200
在我的服务器控制台中,我收到了以下日志。
Rendered text template (0.0ms)
Completed 200 OK in 11883ms (Views: 0.6ms | ActiveRecord: 0.7ms)
我们是否必须在回复时设置任何标头?或只是状态代码200没问题?
答案 0 :(得分:1)
发送回200响应是您想要提醒BigCommerce方面您已收到webhook。您遇到的问题是您在BigCommerce方面超过了10秒的超时限制。
11883ms完成200 OK(浏览次数:0.6ms | ActiveRecord:0.7ms)
根据以上所述,您的系统需要10秒以上才能将您的回复反馈给BigCommerce。因此,webhook服务器在接收响应并将webhook放入重试队列之前关闭连接。
我建议不要在接收时尝试对webhook进行如此多的处理。队列系统更适合处理BigCommerce webhook。这意味着当您收到webhook时,您应将其放入您的队列中,并立即给出200响应。然后,您将拥有一组单独的工作程序,这些工作程序正在处理您已设置的队列中的webhook消息。
无法增加BigCommerce服务器上强制执行的超时限制。