Payfort集成异常(错误码00006):支付页面显示Technical problem报错
排查Payfort错误00006(Technical problem)的解决方案
核心问题1:提交的参数不完整
你的代码仅将signature存入$requestParams,未把$arrData中的所有必要请求参数(如command、access_code、amount等)添加到表单提交参数中。Payfort服务器无法获取关键请求数据,因此返回技术错误。
修复方式:
将原请求参数与签名合并到提交参数集合中:
// 合并原请求参数 $requestParams = $arrData; // 添加签名参数 $requestParams['signature'] = $signature;
核心问题2:SHA签名生成不符合Payfort规则
Payfort要求签名生成时,排序后的参数需用&分隔成key=value&key=value格式,再在首尾拼接SHA请求短语。你的代码直接无分隔符拼接key=value,导致签名无效。
修复方式:
修改SHA字符串拼接逻辑:
$shaString = ''; // 按键名排序参数 ksort($arrData); // 用&连接每个key=value对 foreach ($arrData as $key => $value) { $shaString .= "$key=$value&"; } // 移除末尾多余的& $shaString = rtrim($shaString, '&'); // 首尾拼接请求短语后生成签名 $shaString = $requestPhrase . $shaString . $requestPhrase; $signature = hash("sha256", $shaString);
额外验证项
- 确认
$amount格式符合要求:需传入货币最小单位数值(例如AED的10迪拉姆需传入1000,你的代码当前设置是正确的,但需与商户后台配置一致)。 - 确保
$requestPhrase与Payfort商户后台配置的SHA Request Phrase完全一致(注意大小写、特殊字符,不能包含空格)。
完整修复后的代码
<?php $shaString = ''; $amount = 1000; // 请求参数数组 $arrData = array( 'command' => 'AUTHORIZATION', 'access_code' => $access_code, 'merchant_identifier' => $merchant_identifier, 'merchant_reference' => 'Test010', 'amount' => $amount, 'currency' => 'AED', 'language' => 'en', 'customer_email' => 'shahmeerzahoor007@gmail.com', 'order_description' => 'iPhone 6-S', ); // 按键名排序参数 ksort($arrData); // 按规则拼接SHA字符串 foreach ($arrData as $key => $value) { $shaString .= "$key=$value&"; } $shaString = rtrim($shaString, '&'); $shaString = $requestPhrase . $shaString . $requestPhrase; $signature = hash("sha256", $shaString); echo "Signature >>>>>>>>>>>>>>>>>>>>>> $signature"; // 合并所有请求参数和签名 $requestParams = $arrData; $requestParams['signature'] = $signature; $redirectUrl = 'https://sbcheckout.payfort.com/FortAPI/paymentPage'; // 输出自动提交表单 echo "<html xmlns='https://www.w3.org/1999/xhtml'> <head></head> <body> "; echo "<form action='$redirectUrl' method='post' name='frm'> "; foreach ($requestParams as $a => $b) { echo " <input type='hidden' name='" . htmlentities($a) . "' value='" . htmlentities($b) . "'> "; } echo " <script type='text/javascript'> "; echo " document.frm.submit(); "; echo " </script> "; echo "</form> </body> </html>"; ?>
内容的提问来源于stack exchange,提问作者Shahmeer Zahoor
相关产品推荐
相关产品推荐

