You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Fatzebra支付网关:PHP中基于共享密钥生成HMAC_MD5哈希值的问题

解决PHP中使用HMAC_MD5生成Fatzebra哈希的问题

嘿,我明白你现在的困惑了——hash_hmac需要三个参数确实容易让人摸不着头脑,但其实这正是符合HMAC算法要求的,咱们一步步来解决:

先搞懂hash_hmac的参数逻辑

HMAC算法本身就需要三个核心要素:

  • 哈希算法类型(这里是md5)
  • 待签名的消息(Fatzebra会要求你用请求里的特定内容,比如请求体、时间戳或者拼接的请求参数,不是直接把共享密钥当消息哦)
  • 你的共享密钥(也就是你手里的234567erty)

针对Fatzebra的PHP实现示例

假设Fatzebra要求你对请求的JSON体生成HMAC_MD5哈希(这是支付网关常见的做法),代码可以这么写:

// 你的共享密钥
$sharedSecret = '234567erty';

// 假设这是你要发送给Fatzebra的请求数据(比如订单信息)
$requestData = [
    'amount' => 1000,
    'currency' => 'AUD',
    'card_number' => '4111111111111111'
];

// 把请求数据转成JSON字符串(Fatzebra通常要求用原始请求体来签名)
$message = json_encode($requestData);

// 生成HMAC_MD5哈希
$hmacHash = hash_hmac('md5', $message, $sharedSecret);

// 输出结果
echo $hmacHash;

关键注意事项

  • 一定要严格按照Fatzebra文档里的要求来确定消息内容:有些网关会要求拼接URL、HTTP方法、时间戳和请求体,有些只需要请求体,千万别自己瞎猜格式
  • 确保消息的编码和格式和网关要求一致:比如是否要去除空格、是否用特定的JSON编码选项(比如JSON_UNESCAPED_SLASHES)
  • 如果文档里要求哈希结果是十六进制字符串,上面的代码直接输出的就是;如果需要base64编码,就用base64_encode(hash_hmac('md5', $message, $sharedSecret, true))(最后一个true参数返回原始二进制数据,再转base64)

如果还是不确定消息的具体内容,再仔细核对Fatzebra的文档细节,重点找“签名生成”“请求验证”相关的章节,里面肯定会明确告诉你要把哪些内容拼接成消息来签名~

内容的提问来源于stack exchange,提问作者Peace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:37:54