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)); }
private function signedRequest($uri, array $payload) { if (($privateKey = openssl_pkey_get_private('file://' . $this->account_key_path)) === FALSE) { throw new \RuntimeException(openssl_error_string()); } $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(json_encode($payload, JSON_UNESCAPED_SLASHES)); $protected64 = Base64UrlSafeEncoder::encode(json_encode($protected)); openssl_sign($protected64 . '.' . $payload64, $signed, $privateKey, OPENSSL_ALGO_SHA256); $signed64 = Base64UrlSafeEncoder::encode($signed); $data = array('header' => $header, 'protected' => $protected64, 'payload' => $payload64, 'signature' => $signed64); $this->logger->info("Sending signed request to {$uri}"); return $this->client->post($uri, json_encode($data)); }