PHP 函数生成无效的 HMAC 签名

问题描述 投票:0回答:1

我正在努力将 MoonPay 与我的网站集成,但有一些我不明白的事情。 他们的默认 PHP 代码发布在这里:https://dev.moonpay.com/docs/ramps-sdk-url-signing#how-to-generate-signatures

$host = 'https://buy-sandbox.moonpay.com';
$query = '?apiKey=pk_test_key&currencyCode=eth&walletAddress=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae';

$signature  = base64_encode(hash_hmac('sha256', $query, 'sk_test_key', true));

echo $host . $query . "&signature=" . urlencode($signature);

当我在服务器上测试此默认代码时,它会产生无效签名,并且生成的 URL 包含一些像这样的奇怪字符

¤

例如这样的代码

<?php
$host = 'https://buy.moonpay.com'; // Use the live endpoint
$query = '?apiKey=pk_live_000000000000000000000&currencyCode=eth&walletAddress=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae';

$signature = base64_encode(hash_hmac('sha256', $query, 'sk_live_00000000000000000000000000', true));

echo $host . $query . "&signature=" . urlencode($signature);
?>

生成这样的带有无效签名的网址:

https://buy.moonpay.com?apiKey=pk_live_00000000000¤cyCode=eth&walletAddress=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae&signature=kPp00000000000000000000%3D

我已将我的密钥替换为零,因为我不想在此处发布我的实时密钥。

我的服务器是 LAMP Ubuntu,运行 Wordpress/WooCommerce 我无法弄清楚问题是在他们的示例代码中还是在我的服务器中?

php urlencode hmac
1个回答
0
投票

原因是¤是php中货币符号的实体代码。

您可以像下面这样构建您的解决方案:

<?php
$host = 'https://buy-sandbox.moonpay.com';
$query = urlencode('?apiKey=pk_test_key&currencyCode=eth&walletAddress=0xde0b295669a9fd93d5f28d9ec85e40f4cb697bae');

$signature  = base64_encode(hash_hmac('sha256', $query, 'sk_test_key', true));

echo $host . $query . urlencode("&signature=") . urlencode($signature);

请参阅之前回答的问题中的答案PHP“¤”字符串变成奇怪的符号

© www.soinside.com 2019 - 2024. All rights reserved.