请你帮忙!我正在尝试使用curl创建一个PHP soap客户端。当我运行我的PHP代码。我得到了空白的结果。 这是一个https连接。我通过此example
生成带有OpenSSL的.pem文件PHP代码
$xml = '<?xml version="1.0" encoding="utf-8"?>'.
'<x:Envelope xmlns:x="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://olp.sadad.com/sadadpaymentmanagement/service/olppaymentmanager/req">'.
'<x:Header/>'.
'<x:Body>'.
'<req:initiatePaymentDetailsReq>'.
'<req:olpIdAlias>*****</req:olpIdAlias>'.
' <req:merchantId>*****</req:merchantId>'.
'<req:merchantRefNum>999454564</req:merchantRefNum>'.
'<req:paymentAmount>200</req:paymentAmount>'.
'<req:paymentCurrency>SAR</req:paymentCurrency>'.
'<req:dynamicMerchantLandingURL></req:dynamicMerchantLandingURL>'.
' <req:dynamicMerchantFailureURL></req:dynamicMerchantFailureURL>'.
'</req:initiatePaymentDetailsReq>'.
'</x:Body>'.
'</x:Envelope>';
try{
$url = "https://b2brbtest.riyadbank.com/soap?service=RB_OLP_INITIATE_PAYMENT";
$certFile = dirname(__FILE__)."/key1.pem";
$certPass = "*******";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $certPass);
$headers = array();
array_push($headers, "Content-Type: text/xml; charset=utf-8");
array_push($headers, "SOAPAction: sii:RB_OLP_INITIATE_PAYMENT");
if($xml != null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, "$xml");
array_push($headers, "Content-Length: " . strlen($xml));
}
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
var_dump($response);
} catch (Exception $e){
echo $e->getMessage();
}
?>
输出
string(228)“”
答案 0 :(得分:0)
最后,我通过更改$ xml值来解决这个问题
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://olp.bank.com/sappay/service/olppaymentmanager/req">
<soapenv:Header/>
<soapenv:Body>
<req:initiatePaymentDetailsReq>
<olpIdAlias>****</olpIdAlias>
<merchantId>***</merchantId>
<merchantRefNum>'.rand(1, 15).rand().'</merchantRefNum>
<paymentAmount>'.$tb.'</paymentAmount>
<paymentCurrency>SAR</paymentCurrency>
<dynamicMerchantLandingURL></dynamicMerchantLandingURL>
<dynamicMerchantFailureURL></dynamicMerchantFailureURL>
</req:initiatePaymentDetailsReq>
</soapenv:Body>
</soapenv:Envelope>';
这里是如何将SOAP webservice与ssl
连接的完整代码<?php
$tb='200';
$xml = '<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://olp.bank.com/sappay/service/olppaymentmanager/req">
<soapenv:Header/>
<soapenv:Body>
<req:initiatePaymentDetailsReq>
<olpIdAlias>*****</olpIdAlias>
<merchantId>********</merchantId>
<merchantRefNum>'.rand(1, 15).rand().'</merchantRefNum>
<paymentAmount>'.$tb.'</paymentAmount>
<paymentCurrency>SAR</paymentCurrency>
<dynamicMerchantLandingURL></dynamicMerchantLandingURL>
<dynamicMerchantFailureURL></dynamicMerchantFailureURL>
</req:initiatePaymentDetailsReq>
</soapenv:Body>
</soapenv:Envelope>';
try{
$url = "https://b2b.rb.com/soap?service=RB_OLP_INITIATE_PAYMENT";
$certFile = dirname(__FILE__)."/key1.pem";
$certPass = "*****";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $certPass);
$headers = array();
array_push($headers, "Content-Type: text/xml; charset=utf-8");
array_push($headers, "SOAPAction: sii:RB_OLP_INITIATE_PAYMENT");
array_push($headers, "Host:b22.rb.com");
if($xml != null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
array_push($headers, "Content-Length: " . strlen($xml));
}
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
print_r($response);
} catch (Exception $e){
echo $e->getMessage();
}
?>