我知道这是一篇较旧的帖子,但由于我在尝试找出与 TransUnion 的连接问题时遇到了它,我想我会发布我所做的以使其正常工作,以防其他人仍然需要帮助。
我与 TransUnion 支持团队合作,将我所拥有的和他们所拥有的信息结合起来,我能够得到一个可行的解决方案。
我发现的最大问题是到处都是关于如何转换证书的说明。
使用以下命令转换证书,以获得用于连接的所需部分。是的,你需要 3 个,大多数答案一直说只得到 2 个,但你需要全部 3 个:
将证书转换为客户端的三种不同证书,私钥和证书颁发机构证书。
openssl pkcs12 -in client_systemID.p12 -out ca.pem -cacerts -nokeys //将CA证书从.p12文件输出到ca.pem
openssl pkcs12 -in client_systemID.p12 -out client.pem -clcerts -nokeys //将客户端证书从.p12文件输出到client.pem
openssl pkcs12 -in client_systemID.p12 -out key.pem -nocerts -nodes //将私钥从.p12输出到key.pem
然后你可以开始设置你的代码:
$keyFile = "key.pem";
$caFile = "ca.pem";
$certFile = "client.pem";
$certPass = $_ENV['TUNASSLPass']; //I am storing the passphrase in an Env variable
$URL = "https://netaccess-test.transunion.com";
$data = "<tuna-request-data>"; //need to set this to append to the URL
$xml = "<?xml version='1.0' encoding='UTF-8'?><creditBureau xmlns='http://www.transunion.com/namespace' xsi:schemaLocation='http://www.transunion.com/namespace creditBureau.xsd' xmlns:xsi='http://www.w3.org/3001/XMLSchema-instance'>{The rest of your XML}</creditBureau>";
// Initialise cURL
$ch = curl_init($actualUrl);
// The -d option is equivalent to CURLOPT_POSTFIELDS. But...
// PHP's libcurl interface does not implement the -G flag - instead you would
// append $data to $url like this:
$actualUrl = $URL.'?'.$data;
curl_setopt($ch, CURLOPT_URL, $actualUrl);
// The -v flag only makes sense at the command line, but it can be enabled
// with CURLOPT_VERBOSE - in this case the information will be written to
// STDERR, or the file specified by CURLOPT_STDERR. I will ignore this for
// now, but if you would like a demonstration let me know.
// The --key option - If your key file has a password, you will need to set
// this with CURLOPT_SSLKEYPASSWD
curl_setopt($ch, CURLOPT_SSLKEY, $keyFile);
// The --cacert option
curl_setopt($ch, CURLOPT_CAINFO, $caFile);
// The --cert option
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $certPass);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
curl_setopt($ch, CURLOPT_POSTFIELDS, "xml=" . $xml);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
try
{
$result = curl_exec($ch);
}
catch (Exception $e)
{
echo 'There was an issue querying TransUnion. Here is the returned exception info: ', $e->getMessage(), "\n";
}
if (curl_errno($ch) > 0)
{
$result = array('errocurl' => curl_errno($ch), 'msgcurl' => curl_error($ch));
echo "There was an error calling Trans Union. Here is the error info: <br>" . curl_error($ch);
}
curl_close($ch);