我刚刚迁移到一个新的服务器,仍然基于 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);
再次感谢...