2016-12-12 7 views
2

Ruby on RailsアプリケーションとBigCommerceの統合を進めています。私は、注文作成または出荷作成に関する通知を受け取るためのコールバックを登録しています。注文が行われると、私のサーバーにコールバックが送信されます。次に、何らかの処理を行い、その要求送信者に、HTTPステータスコード200(ドキュメントに記載されているものと同じです)を確認します。しかし、まだWebhookはある期間でコールバックを発しています。誰もwebhookを認識し、webhookからコールバックを受信する方法を教えてもらえますか?肯定応答HTTPステータスコードを送信してもWebhookコールバックが停止しない200

これを処理するためのサンプルコードを示します。

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

コードを投稿して、どのように処理しているかを確認できますか? – Alyss

+0

私は自分の質問を更新しました。最後の行で私が返すものを見てください。詳細が必要な場合はお尋ねください。 –

答えて

1

200応答を返信するのは、あなたがWebhookを受け取ったことをBigCommerce側に警告するためのものです。問題はBigCommerce側で10秒のタイムアウト制限を超えていることです。

200 11883msでOK(再生回数:0.6ms | ActiveRecordの:0.7ms)完成し、戻っBigCommerceにあなたの応答を得るためにあなたのシステムが10秒以上を取っている、上記によると

を。その結果、webhookサーバーは応答を受信して​​WebHookを再試行キューに入れる前に接続を閉じています。

私は、受信時にウェブフックの処理をあまり行わないことをお勧めします。 BigCommerceウェブフックの処理には、キューシステムが適しています。つまり、Webhookを受け取ったら、最後にキューに入れ、すぐに200の応答を返す必要があります。次に、設定したキューからWebhookメッセージを処理している別のワーカーセットがあります。

BigCommerceサーバーで適用されるタイムアウト制限を引き上げることはできません。

+2

ありがとうJ Z.私は自分のすべての処理コードをバックグラウンドワーカーに移しましたが、今では約50msで応答を返します。これは私の問題を解決します。もう一度ありがとう。 –

+0

素晴らしい、@ NishantUpadhyay!よくやった。私は助けることができてうれしいです。乾杯! –

関連する問題