Я использую php с curl, чтобы запросить некоторые API сторонних поставщиков, как говорит API, я должен запросить API с ssl-сертификатом, я делаю. Но проблема в том, когда я запускаю скрипт в своей локальной среде (mac MAMP ), сценарий работает хорошо, но когда я развертываю сценарий на моем сервере (centos 6.5), API не может правильно ответить, он говорит «сертификат ошибки», как это происходит?
код:
public function http_post_xml($data, $url){
$sslcert_path = self::DATA_PATH.'cert/apiclient_cert.pem';
$sslkey_path = self::DATA_PATH.'cert/apiclient_key.pem';
$rootca_path = self::DATA_PATH.'cert/rootca.pem';
$xml = '<xml>';
foreach($data as $k=>$v){
$xml .= "<{$k}>$v</$k>";
}
$xml .= '</xml>';
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, TRUE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 1);
curl_setopt($curl, CURLOPT_SSLCERTTYPE,'PEM');
curl_setopt($curl, CURLOPT_SSLCERT, $sslcert_path);
curl_setopt($curl, CURLOPT_SSLKEYTYPE, 'PEM');
curl_setopt($curl, CURLOPT_SSLKEY, $sslkey_path);
curl_setopt($curl, CURLOPT_CAINFO, $rootca_path);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $xml);
$response = curl_exec($curl);
$rep_xml = simplexml_load_string($response, null);
$return_code = (String)$rep_xml->return_code;
return array(
'code'=>(String)$rep_xml->return_code,
'msg'=>(String)$rep_xml->return_msg
);
}
Я уверен, что путь к сертификату правильный.
извините за мой плохой английский, но, пожалуйста, помогите мне ….
Задача ещё не решена.
Других решений пока нет …