0

我刚刚迁移到一个新的服务器,仍然基于 linux。搬家后,我看到行为发生了变化——由于某种原因,Facebook 信用回调在有效负载中发送的订单 ID 格式为:2.6040261734251E+14 而不是:143121239125639(这些不一定是相同的订单号,只需参考格式)...

当从 $_REQUEST 中获取格式时,并且在数据库插入之前,格式直接到达......任何人都知道为什么格式会这样改变/到达?谢谢!

--- 编辑 --- 我使用 parse_signed_request 函数从签名请求中获取变量:

    function parse_signed_request($signed_request, $secret) {
  list($encoded_sig, $payload) = explode('.', $signed_request, 2);

  // decode the data
  $sig = base64_url_decode($encoded_sig);
  $data = json_decode(base64_url_decode($payload), true);

  if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') {
    error_log('Unknown algorithm. Expected HMAC-SHA256');
    mail('example@example.com','server error','Unknown algorithm. Expected HMAC-SHA256');
    return null;
  }

  // check signature
  $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true);
  if ($sig !== $expected_sig) {
    error_log('Bad Signed JSON signature!');
    return null;
  }

  return $data;
}

正如 Charley P. 所注意到的,我确实使用的是 32 位服务器,而不是以前的 64 位服务器。那会以某种方式破坏上面使用的功能吗

json_decode(base64_url_decode($payload), true);

再次感谢...

4

1 回答 1

0

您的旧服务器必须是 64 位的,而您的新服务器必须是 32 位的

尝试使用原始数字作为字符串

于 2011-11-22T06:56:05.770 回答