在执行 Facebook 数据删除请求时,Facebook 从他们这边调用我的方法并告诉我我发回给他们的 json 响应不是他们期望收到的。如果您在此处查看他们的文档Facebook 数据删除请求。返回 Facebook 的响应应该如下
{ url: '<url>', confirmation_code: '<code>' }
Facebook 为了返回这个 json 而发布的代码是这样的
$data = array(
'url' => $status_url,
'confirmation_code' => $confirmation_code
);
echo json_encode($data);
这不会创建 Facebook 打算作为回应的内容。从字面上看,属性名称周围不需要引号,实际值周围不需要单引号。所以我用这个构建了它
$return_value = "{ url: '$url', confirmation_code: '$confirmation_code' }";
是的,仍然没有成功。 IM 在这里有点不知所措,因为我一直在尝试使用
response()->json()
json_encode()
的各种方法,这会在整个字符串周围放置双引号或在 url 周围放置转义字符,这被认为是原因之一他们告诉我 json 不是他们所期望的。因此,如果有人知道 Facebook 希望此响应看起来如何。请告诉我。
谢谢你的帮助
public function removeFBDataCallback(Request $request)
{
$signed_request = $request->get('signed_request');
$data = $this->parse_signed_request($signed_request);
$fb_user_id = $data['user_id'];
$fb_user = $this->UsersRepository->CheckFacebookUIDExisted($fb_user_id);
if (!$fb_user) {
error_log("No user with facebook id: $fb_user_id found when trying to remove data during facebook deletion callback");
return response()->json(['code' => 403, 'data' => ['message' => 'Facebook user not found when deleting facebook data']]);
}
else {
$fb_delete_confirmation = new FBDeleteConfirmation();
$fb_delete_confirmation->facebook_id = $fb_user->facebook_user_id;
$fb_delete_confirmation->token = genToken(20);
$fb_delete_confirmation->save();
$fb_user->is_account_facebook = 0;
$fb_user->facebook_user_id = null;
$fb_user->save();
$confirmation_code = base64_encode("abc123");
$url = url('login').'/facebook'.'/dataDeleteConfirmation'.'?confirmationid'.('=').($confirmation_code);
error_log('------------------');
$return_value = "{ url: '$url', confirmation_code: '$confirmation_code' }";
error_log($return_value);
return json_encode($return_value);
}
}