我正在尝试构建一个与 Firstdata 的 api 集成的支付表单。我需要将 XML 字符串发布到他们的服务器。它们还需要客户端证书和 http 身份验证。我的 CURL 设置目前如下所示:
function firstdata_send($config_param, $data) {
$config_default = array(
'test' => FALSE,
);
// settings in $config_param will overwrite settings in $config_default
$config = (object)array_merge($config_default, $config_param);
if($config->test) {
$url = 'https://ws.merchanttest.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl';
}
else {
$url = 'https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl';
}
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_setopt($ch, CURLOPT_USERPWD, "{$config->username}:{$config->password}");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_SSLCERT, $config->pemfile);
curl_setopt($ch, CURLOPT_SSLKEY, $config->keyfile);
curl_setopt($ch, CURLOPT_SSLKEYPASSWD, $config->keypass);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_VERBOSE, TRUE);
$result = curl_exec($ch);
$result .= curl_error($ch);
return $result;
}
他们的服务器以HTTP/1.1 401 Unauthorized
. 但是,如果我注释掉帖子选项:
//curl_setopt($ch, CURLOPT_POST, TRUE);
//curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
我明白了HTTP/1.1 200 OK
。除非我完全误解了发生了什么,否则使用 post 似乎会以某种方式干扰 auth 标头。我不知道我错过了什么。
解决了:
结果证明测试帐户生成的 ssl 证书很糟糕。我不得不打电话给他们的技术支持,他们必须重新生成证书 3 次,然后系统才会接受它们。很抱歉浪费您的时间。我应该先打电话给他们。如果有人感兴趣,我拨打的技术支持号码是 (888) 477-3611。我认为 NomikOS 最接近正确,所以我会将他标记为答案,并投票给你们其他人。再次感谢。