ورود

توجه ! این یک نسخه آرشیو شده میباشد و در این حالت شما عکسی را مشاهده نمیکنید برای مشاهده کامل متن و عکسها بر روی لینک مقابل کلیک کنید : اشکال در اتصال به وب سرویس (جایزه دارد!)



omid56
March 24th, 2012, 16:16
با سلام به دوستان
هر کسی راه حلی مناسب ارائه کند 50,000 تومان به عنوان جایزه به حسابش واریز خواهم کرد.

ما یک سرور اختصاصی در ایران داریم Centos5.7 و کنترل پنل kloxo آخرین ورژن 6.1.12.

برای اتصال به وب سرویس هایی با پروتوکل https مشکل داریم مثل بانک سامان و پارسیان .

من از کتابخانه nusoap استفاده می کنم .

برای اتصال به وب سرویس های http مشکلی نیست .

لازم به ذکر است کد سیستم را خودم نوشتم و در دو سرور مشابه دیگر درست کار می کند .
یکی در ایران و یکی در آمریکا

هنگام اتصال و ارسال اطلاعات خطای زیر اعلام می شود :
Error: wsdl error: HTTP ERROR: no proper separation of headers and document


نمونه کد جهت debug :




include "lib/nusoap.php" ;

$wsdl = "https://www.pecco24.com:27635/pecpaymentgateway/eshopservice.asmx?wsdl";


$client = new nusoap_client($wsdl,"wsdl");
$client->xml_encoding = "UTF-8";
$client->soap_defencoding = "UTF-8";
$client->decode_utf8 = false;


if (!$err = $client->getError()){
$***** = $client->get*****();
echo 'OK' ;
}




if ( (!$client) OR ($err = $client->getError()) ) {
$error .= $err . "<br />" ;

//echo $error ;
echo '<p><b>Error: ' . $err . '</b></p>';
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
echo '<h2>Debug</h2><pre>' . htmlspecialchars($client->debug_str, ENT_QUOTES) . '</pre>';



}else{

echo "OK - NO ERROR";

}






من اتصال به وب سرویس بانک پارسیان را debug کردم وپاراگراف آخر به این شرح است :

[[
LEFT]LEFT]2012-03-24 02:27:01.805522 soap_transport_http: set cURL HTTP headers
2012-03-24 02:27:01.805589 soap_transport_http: set cURL payload
2012-03-24 02:27:01.805661 soap_transport_http: send and receive with cURL
2012-03-24 02:27:01.805744 soap_transport_http: No cURL error, closing cURL
2012-03-24 02:27:01.805857 soap_transport_http: no proper separation of headers and document
2012-03-24 02:27:01.805927 soap_transport_http: end of send()
2012-03-24 02:27:01.806011 wsdl: HTTP ERROR: no proper separation of headers and document
2012-03-24 02:27:01.806096 nusoap_client: checkWSDL
2012-03-24 02:27:01.806164 nusoap_client: got wsdl error: HTTP ERROR: no proper separation of headers and document
2012-03-24 02:27:01.806232 nusoap_client: Error from _get*****ClassCode, so return NULL[/LEFT][/LEFT]

مشکلی از curl نیست چون No cURL error, closing cURL قابل مشاهده است .
هنگام ارسال دیتا مثل اینکه header و document به طور صحیح تفکیک نشده اند. علت را نمی دانم !


یک vps هم در ایران داریم که روی آن kloxo نصب است و سیستم عامل آن centos5 می باشد
روی آن درست کار می کند . پاراگراف آخر debug را قرار می دادم :
[
LEFT]
2012-03-24 01:35:36.818260 soap_transport_http: set cURL HTTP headers
2012-03-24 01:35:36.818330 soap_transport_http: set cURL payload
2012-03-24 01:35:36.818422 soap_transport_http: send and receive with cURL
2012-03-24 01:35:37.582894 soap_transport_http: No cURL error, closing cURL
2012-03-24 01:35:37.584217 soap_transport_http: found proper separation of headers and document
2012-03-24 01:35:37.584303 soap_transport_http: cleaned data, stringlen: 3785
2012-03-24 01:35:37.584449 soap_transport_http: The gzinflate function exists
2012-03-24 01:35:37.584693 soap_transport_http: The payload has been un-gzipped to 49255 bytes
2012-03-24 01:35:37.584782 soap_transport_http: end of send()[/LEFT]من تنظیمات apche و php ، فایروال و .... را کاملا چک کردم ظاهرا مشکلی ندارد .
الان چند روزه درگیر این موضوع هستم و بخاطر همین کلی مطلب یادگرفتم .
در اینترنت این error را زیاد سرچ کردم ولی پاسخ ها غیر مرتبط بودند .
احتمالا مشکل همون فوت کوزه گری هست که من نمی دونم .

هر نوع گزارشی خواستید در اختیارتان قرار خواهم داد .

با تشکر فراوان

milade
March 24th, 2012, 16:29
Http Response رو قرار بدید .

omid56
March 24th, 2012, 17:09
متاسفانه جهت request و response کدی رو بر نمی گردونه .
در سرورهایی هم که درست کار می کند ، این دو مورد قابل مشاهده نیست .

من در کدهای مربوط به کلاس class.soap_transport_http در nusoap دقت کردم . خطا مربوط به بخش response است . قسمتی از کد را از فانکشن : getResponse() را قرار می دهم .



if ($pos = strpos($data,"\r\n\r\n")) {
$lb = "\r\n";
} elseif( $pos = strpos($data,"\n\n")) {
$lb = "\n";
} else {
$this->debug('no proper separation of headers and document');
$this->setError('no proper separation of headers and document');

return false;
}
$header_data = trim(substr($data,0,$pos));
$header_array = explode($lb,$header_data);
$data = ltrim(substr($data,$pos));
$this->debug('found proper separation of headers and document');
$this->debug('cleaned data, stringlen: '.strlen($data));



در اینترنت که سرچ کردم روش گرفتن request و response رو بصورت زیر گیدا کردم که جواب نداد . شاید من اشتباه می کنم :




echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';



البته تمام مقادیر ceient را که بصورت array است را استخراج کردم .




username:
password:
authtype:
certRequest:Array
requestHeaders:
responseHeaders:
responseHeader:
document:
endpoint:https://Acquirer.sb24.com/ref-payment/ws/ReferencePayment?WSDL
forceEndpoint:
*****host:
*****port:
*****username:
*****password:
xml_encoding:UTF-8
http_encoding:
timeout:0
response_timeout:30
endpointType:wsdl
persistentConnection:
defaultRpcParams:
request:
response:
responseData:
cookies:Array
decode_utf8:
operations:Array
curl_options:Array
bindingType:
use_curl:
fault:
faultcode:
faultstring:
faultdetail:
title:NuSOAP
version:0.7.3
revision:$Revision: 1.114 $


البته این مقادیر در سروهایی که درست کار می کنند هم بصورت فوق است .


با تشکر از توجه شما .

---------- Post added at 05:09 PM ---------- Previous post was at 04:51 PM ----------

یک توضیح دیگر هم اضافه کنم .

از طریق ssh به سرور پارسیان با پورت 27635 ، telnet کردم ، connet شد . در ضمن با lynx به آدرس وب سرویس متصل شدم ، بدوم مشکل صفحه xml را باز کرد .
منظورم اینکه مشکل از اتصال نیست .

فایل های httpd.conf و php.ini رو هم با سرور های دیگر مقایسه کردم ، تفاوتی ندیدم .
تنظیمات ip هم درست است . سرور 2 ip دارد .

با تشکر

milade
March 24th, 2012, 17:19
متاسفانه من امکان تست php برام مهیا نیست ،
اینکه یفرمایید روی یه سرور کار میکنه روی یه سرور دیگه نه ، جای سواله ! که نشون میده مشکل از کد نیست .ایا در هر دو سرور همین کد رو تست میکنید ؟

اما کلاً این کد جای سوال داره ! کدوم فانکشن از وب سرویس صدا زده شده !؟

omid56
March 24th, 2012, 17:54
در هر سه سرور یک کد اجرا می شود .
کد تست اولیه روی هر 3 تست کردم . منظور کد degug است . این کد همان مراحل اول را تست می کند . 1 - اتصال 2 - سلامتی data

باز هم یادآوری می کنم مشکل فقط در ارتباط با وب سرویس با پروتوکل https است .
شاید در تنظیمات مربوط به xml در سرور باید تغییراتی انجام شود !

مشکل از ssl هم نباید باشد چون اتصال به hhtps مشکلی ندارد .(Curl)

os و kloxo و تنظیمات امنیتی را خودم انجام دادم شاید چیری از قلم افتاده . شاید library یا چیزی باید نصب می شده .

با تشکر

omid56
March 25th, 2012, 03:53
بالاخره بعد از 5 روز مشکل را پیدا کردم . ساعت 3:40 نیمه شب (صبح)
تابع curl_exec در لیست Disable Functions قرار گرفته بود . با حذف کردن آن از لیست و restart کردن سرویس httpd مشکل حل شد .


I solved my problem by removing curl_exec from Disabled Functions in php.ini then I restarted apache service
GoodLuck

این قسمت رو انگلیسی نوشتم چون شاید یک خارجی هم همین مشکل رو داشته باشه بتونه حل کنه !

با تشکر از همه دوستان

martoor
August 24th, 2013, 15:28
omid56,
آقا دستت درد نکنه، عالی بود ... خیلی منو جلو انداختی :53:

unforgiven747
August 24th, 2013, 18:29
ظاهرا این 50000 تومان قسمت خودتون بود .
جایزه پشتکار و پیگیری خودتون برای شب زنده داری . :-|
تبریک=d>