private function signedRequest($uri, array $payload)
{
$privateKey = $this->readPrivateKey($this->accountKeyPath);
$details = openssl_pkey_get_details($privateKey);
$header = array("alg" => "RS256", "jwk" => array("kty" => "RSA", "n" => Base64UrlSafeEncoder::encode($details["rsa"]["n"]), "e" => Base64UrlSafeEncoder::encode($details["rsa"]["e"])));
$protected = $header;
$protected["nonce"] = $this->client->getLastNonce();
$payload64 = Base64UrlSafeEncoder::encode(str_replace('\\/', '/', json_encode($payload)));
$protected64 = Base64UrlSafeEncoder::encode(json_encode($protected));
openssl_sign($protected64 . '.' . $payload64, $signed, $privateKey, "SHA256");
$signed64 = Base64UrlSafeEncoder::encode($signed);
$data = array('header' => $header, 'protected' => $protected64, 'payload' => $payload64, 'signature' => $signed64);
$this->log("Sending signed request to {$uri}");
return $this->client->post($uri, json_encode($data));
}