嗨,我正在尝试使用coinbase api,api实现正常,但在通知时遇到问题。根据我创建的文档,通知URL如下所示
<?php
require_once('vendor/autoload.php');
use Coinbase\Wallet\Client;
use Coinbase\Wallet\Configuration;
$apiKey=" xxxx";
$apiSecret="xxxx";
$configuration = Configuration::apiKey($apiKey, $apiSecret);
$client = Client::create($configuration);
$raw_body = file_get_contents('php://input');
$signature = $_SERVER['HTTP_CB_SIGNATURE'];
$authenticity = $client->verifyCallback($raw_body, $signature); // boolean
if($authenticity){
$data = json_decode($raw_body, true);
mail("sahid4745@gmail.com","Coinbase Payment Notifications",print_r($order, true));
}
$message=$raw_body;
mail('sahid4745@gmail.com', 'My Subject', $message);
?>
但这会产生错误,如通知:
未定义的索引:/home/exhakduz/api/webhooks.php中的HTTP_CB_SIGNATURE 在第38行
我实际上不知道什么是server_cb_signature,如果有人可以解释的话,那将对我有很大帮助。
答案 0 :(得分:1)
$_SERVER
中以HTTP_
开头的所有条目均反映HTTP请求标头的内容。标头名称将转换为大写,而-
将转换为_
。因此,如果客户端发送诸如Foo-Bar: blah
之类的标头,则$_SERVER['HTTP_FOO_BAR']
的值将为"blah"
。
Coinbase文档说,通知使用CB-SIGNATURE
标头保护,因此$_SERVER['HTTP_CB_SIGNATURE']
应该包含此标头的内容。我不确定为什么你不明白。您的代码与文档中的示例代码完全一样。
也许您的服务器配置中有某些内容正在过滤掉非标准标头?