本文旨在解决Realex/Global Payments支付网关集成中常见的“SHA1哈希不正确”(错误代码505)问题。通过分析问题根源,我们发现该错误通常源于payer-new请求类型在计算SHA1哈希时错误地包含了金额和货币信息。教程将详细阐述正确的哈希计算方法,并提供示例代码,帮助开发者确保数据完整性与交易安全性,顺利完成Realex支付集成。
Realex(现为Global Payments的一部分)支付网关在处理交易请求时,为了确保数据的完整性和安全性,广泛采用了SHA1哈希算法。每次向Realex发送请求时,都需要根据特定的参数组合生成一个SHA1哈希值,并将其包含在请求中。Realex服务器会使用相同的逻辑重新计算哈希值,如果客户端发送的哈希值与服务器计算的不匹配,便会返回“SHA1哈希不正确”的错误(通常是错误代码505)。
Realex的哈希计算通常涉及两个步骤:
这种双重哈希机制旨在防止数据在传输过程中被篡改,并验证请求的真实性。
当收到以下错误响应时:
OUR MERCHANT ID IS IN websiteSERTED HERE
scsi45880 505 sha1hash incorrect - check your code and the Developers Documentation
这明确指示了SHA1哈希计算存在问题。根据我们的经验,此问题通常发生在以下情境:
在Realex集成中,不同的请求类型(例如auth授权请求、payer-new创建付款人请求)对SHA1哈希的参数要求是不同的。问题中描述的错误发生在尝试发送客户名称、客户编号等数据时,这通常与payer-new(或类似的客户信息注册)请求相关。
通过分析发现,在处理payer-new请求时,原始代码错误地将pay_amount(支付金额)和currency(货币)包含在了SHA1哈希的计算字符串中。然而,payer-new请求的主要目的是注册付款人信息,它本身并不直接涉及具体的交易金额。因此,在生成此类型的哈希时,不应包含金额和货币参数。
错误的哈希计算(示例,应避免):
// 错误的payer-new哈希计算示例 // $payer_temp_var = "$timestamp.$merchantid.$rlx_orderid.$pay_amount.$currency.$payer_ref"; // $payersha1hash = sha1($payer_temp_var); // $payertmp = "$payersha1hash.$payer_secret"; // $payersha1hash = sha1($payertmp);
正确的哈希计算方法:
对于payer-new请求,SHA1哈希计算的参数应仅包括时间戳、商户ID、订单ID和付款人引用(Payer Reference)。
$merchantid
$account
$rlx_orderid
$payersha1hash
";
// ... cURL请求发送 ...
?>注意事项:
解决Realex集成中“SHA1哈希不正确”的错误,核心在于严格遵循Realex文档中对每种请求类型所规定的哈希计算规则。对于payer-new请求,关键在于不将交易金额和货币包含在哈希字符串中。通过修正这一细节,并确保其他参数的正确性和顺序,可以有效解决505错误,确保支付网关通信的顺畅和安全。在处理其他Realex请求时,也应采用同样的严谨态度,对照文档,确保哈希计算的准确无误。