Realtime Updates APIを使用してアプリのサブスクリプションを設定しようとしましたが、いくつか問題がありました。まず、これは私が取得し続けるエラーです:
{"error":{"message":"(#2200) callback verification failed: Operation timed out after 6000 milliseconds with 0 bytes received","type":"OAuthException","code":2200}}
私はドキュメントに適切に従い、HTTP GET と POST を処理する Amazon EC2 インスタンスで Flask エンドポイントを設定しました。サブスクリプション コードを呼び出すために、自分自身を手動でヒットしてエンドポイントにします。
curl -i -X GET http://public-ip-of-ec2:5000/subscribe
上記の curl は、ec2 インスタンスの /subscribe のルートにあるフラスコ アプリケーションで実行されているスクリプトを呼び出します。access_token、object、fields、verify_token、および callback_urlを含む必要なクエリ文字列パラメーターを使用して POST を作成するには、python HTTP ライブラリrequestsを使用しています。
VERIFY_TOKEN = 'my_verify_token'
@app.route('/subscribe')
def subscribe():
global VERIFY_TOKEN
FB_CLIENT_ID = 'my_app_id'
# access_token is sent as a query string parameter
APP_ACCESS_TOKEN = 'my_app_access_token'
# object, fields, callback_url, and verify_token are sent as urllib.urlencode([('param','val')])
CALLBACK_URL = 'http://my-public-ec2-ip:5000/'
payload_url = "https://graph.facebook.com/{0}/subscriptions".format(FB_CLIENT_ID)
payload = {"access_token": APP_ACCESS_TOKEN, "object": "user", "fields": "feed", "verify_token": VERIFY_TOKEN, "callback_url": CALLBACK_URL}
r = requests.post(payload_url, data=payload)
return r.text
@app.route('/', methods=['GET','POST'])
def handle_requests():
global VERIFY_TOKEN
if request.method == 'GET':
mode = request.args.get('hub.mode')
challenge = request.args.get('hub.challenge')
verification = request.args.get('hub.verify_token')
# if we have our verification token back echo the challenge back to facebook
if verification == VERIFY_TOKEN:
return challenge
elif request.method == 'POST':
# do some stuff with the updates
{"error":{"message":"(#2200) callback validation failed: Operation timed out after 6000 milliseconds with 0 bytes received","type":"OAuthException","type":"OAuthException","type":"OAuthException", "コード":2200}}
フラスコ アプリケーションを起動すると、Facebook の IP アドレスである173.252.110.113からの GET 要求が表示されるためです。テストのためにチャレンジをログに出力することで、正しいデータをエコーバックしていることを確認するために適切にテストしました。したがって、コードはFacebookがサブスクリプションを確認するために必要とするチャレンジを返し、その時点でサブスクリプションは成功する必要がありますが、前述のエラーは私が得ているものです。おそらく、ec2 セキュリティ グループなどにアクセス許可を追加する必要があるセキュリティ上の問題でしょうか??
助けてくれてありがとう!