我在WHMCS上成功建立并整合了第三方支付集成系统。为了验证回调真实性,网关提供了一种验证回调源自它们的方法,如下面的代码所示:
$mertid ='secretmerchantID';
$amt = '10000';
$tranxid = 'gtPay130958397220820';
$hashkey ='secretclientkey';
$hash = hash('sha512', $mertid . $tranxid . $hashkey);
$url = 'https://ibank.gtbank.com/GTPayService/gettransactionstatus.xml?mertid='.$mertid.'&amount='.$amt.'&tranxid='.$tranxid.'&hash='.$hash;
$xmlString = file_get_contents($url);
if($xmlString === false)
{
echo "Response Description: GTPAY Verification service failed to open.
}
else
{
$xml = simplexml_load_string($xmlString );
var_dump($xml);
}
我使用file_get_contents函数将API响应读入字符串,然后使用simplexml_load_string函数将XML字符串解释为具有包含xml字符串中保存的数据的属性的对象。在每个成功的事务上运行$ xml = simplexml_load_string($ jString),返回FALSE。
但是,当我使用相同的事务值直接在WAMP上的浏览器中调用此代码时,$ xml = simplexml_load_string($ jString)会按预期将XML字符串返回到对象中。此外,当我将文件放在不同的远程主机上并在浏览器中调用它时,它还会将XML字符串返回到对象中。
奇怪的是,当我将此代码放在WHMCS根文件夹中的文件中并尝试使用上面使用的相同成功事务值直接在浏览器中调用时,$ xml = simplexml_load_string($ jString)再次返回FALSE。
WHMCS安装中可能限制对第三方API调用的此调用是什么?
感谢。
答案 0 :(得分:0)
我在下面使用了WHMCS内置的curlCall辅助函数,建议用于任何远程API连接,我现在成功调用远程API:
$url = 'http://www.whmcs.com/';
$postfields = array(
'a' => 'b',
'c' => 'd',
);
$options = array(
'CURLOPT_TIMEOUT' => '300',
);
$response = curlCall($url, $postfields, $options);
您可以在此处阅读所有相关内容:http://docs.whmcs.com/Internal_Functions#CURL_Connections。
虽然我没有对此进行验证,但此处已记录(In PHP, how do I read an unreliable web page?),禁用fopen_wrappers会禁止使用file_get_contents进行远程API调用。可能是我的网络主机上禁用了这个;从而在第一时间引起我的问题。我希望这能指出其他人正确的方向。