#php #html #ajax #soap #php-curl
Вопрос:
Обновление: Теперь я обновил код с путем к файлу сертификата, и он работает, но я получаю ошибку cURL #:unable to set private key file: 'D:homesitewwwrootwp-contentthemesalfalah-themecertificate.pem' type PEM
Ранее у меня была проблема с форматом, которую я решил, указав ключ в PEM
формате, и теперь мне нужно установить private key
для файла, который я не знаю.
$xml_data = 'lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:tem="http://tempuri.org/" xmlns:epr="http://schemas.datacontract.org/2004/07/ePRCintegrationService.BLL" xmlns:epr1="http://schemas.datacontract.org/2004/07/ePRCintegrationService"gt; lt;soapenv:Header/gt; lt;soapenv:Bodygt; lt;tem:Get_PRCRequestgt; lt;tem:Refnumbergt; lt;epr:Benenamegt;'.$Benename.'lt;/epr:Benenamegt; lt;epr:Referencenumbergt;'.$Referencenumber.'lt;/epr:Referencenumbergt; lt;epr:RegisterMobilenumbergt;'.$RegisterMobilenumber.'lt;/epr:RegisterMobilenumbergt; lt;epr:Registeremailgt;'.$Registeremail.'lt;/epr:Registeremailgt; lt;/tem:Refnumbergt; lt;tem:ApiCredgt; lt;epr1:APIAgentidgt;WEbUSERlt;/epr1:APIAgentidgt; lt;epr1:APIPasswordgt;uc/KwgjodHMYIu/DkS/ZJBBFXWmkv2ptAChBjOW4u 0=lt;/epr1:APIPasswordgt; lt;epr1:APIUserIdgt;webAPIlt;/epr1:APIUserIdgt; lt;/tem:ApiCredgt; lt;/tem:Get_PRCRequestgt; lt;/soapenv:Bodygt; lt;/soapenv:Envelopegt;'; $url = "https://remittex.bankalfalah.com/ePRCintegrationService/Service1.svc"; $cert_file = getcwd().'cert.pem'; $cert_password = 'abcd@123456789'; $User_Agent = 'Mozilla/5.0 (Windows NT 5.1; rv:31.0) Gecko/20100101 Firefox/31.0'; $headers = array( "Content-Type: text/xml; charset=utf-8", "Accept: application/xml", "Content-Length: ".strlen($xml_data) ); $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL =gt; "https://remittex.bankalfalah.com/ePRCintegrationService/Service1.svc", CURLOPT_RETURNTRANSFER =gt; true, CURLOPT_ENCODING =gt; "", CURLOPT_MAXREDIRS =gt; 10, CURLOPT_TIMEOUT =gt; 30, CURLOPT_SSL_VERIFYPEER =gt; true, CURLOPT_USERAGENT =gt; $User_Agent, CURLOPT_SSL_VERIFYHOST =gt; true, CURLOPT_CUSTOMREQUEST =gt; "POST", CURLOPT_POSTFIELDS =gt; $xml_data, CURLOPT_HTTPHEADER =gt; $headers, CURLOPT_SSLCERT =gt; $cert_file )); $response = curl_exec($curl); $err = curl_error($curl); $info = curl_getinfo($curl); var_dump($info); curl_close($curl); if ($err) { echo "cURL Error #:" . $err; } else { $xml = $response; $xml = preg_replace("/(lt;/?)(w ):([^gt;]*gt;)/", '$1$2$3', $xml); $xml = simplexml_load_string($xml); $json = json_encode($xml); $responseArray = json_decode($json, true); // true to have an array, false for an object // print_r($responseArray); // print_r($response); foreach ($responseArray as $key =gt; $value) { if (is_array($value)) { foreach ($value as $k =gt; $v) { echo $v['Get_PRCRequestResult']; } } } }
Комментарии:
1. Похоже, вам нужно добавить еще один параметр конфигурации в ваш запрос curl
CURLOPT_SSLCERTPASSWD
, который"The password required to use the CURLOPT_SSLCERT certificate"
2. Во-первых, благодаря прояснению моего вопроса, я переформулирую его, но я думаю, что пароль не требуется, так как я только что дал ему пароль rndom, в нем все еще говорится, что невозможно установить закрытый ключ
3. хорошо — никогда раньше не приходилось использовать эти опции, так что это было предположение ( возможно, неудачное ) — в PHP есть различные
OpenSSL
функции, одна из которыхopenssl_get_privatekey
4. вы правы, если я удалю проверку ssl, я не получу ответа, даже если мой ip будет отправлен на сервер, он просто ничего мне не вернет, если что-то нужно решить в Soap, дайте мне знать, я буду очень благодарен вам, сэр.