-
March 24th, 2012, 16:16
#1
اشکال در اتصال به وب سرویس (جایزه دارد!)
با سلام به دوستان
هر کسی راه حلی مناسب ارائه کند 50,000 تومان به عنوان جایزه به حسابش واریز خواهم کرد.
ما یک سرور اختصاصی در ایران داریم Centos5.7 و کنترل پنل kloxo آخرین ورژن 6.1.12.
برای اتصال به وب سرویس هایی با پروتوکل https مشکل داریم مثل بانک سامان و پارسیان .
من از کتابخانه nusoap استفاده می کنم .
برای اتصال به وب سرویس های http مشکلی نیست .
لازم به ذکر است کد سیستم را خودم نوشتم و در دو سرور مشابه دیگر درست کار می کند .
یکی در ایران و یکی در آمریکا
هنگام اتصال و ارسال اطلاعات خطای زیر اعلام می شود :
Error: wsdl error: HTTP ERROR: no proper separation of headers and document
نمونه کد جهت debug :
کد PHP:
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 کردم وپاراگراف آخر به این شرح است :
[[
کد HTML:
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 را قرار می دادم :
[
کد HTML:
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 را زیاد سرچ کردم ولی پاسخ ها غیر مرتبط بودند .
احتمالا مشکل همون فوت کوزه گری هست که من نمی دونم .
هر نوع گزارشی خواستید در اختیارتان قرار خواهم داد .
با تشکر فراوان
-
تعداد تشکر ها ازomid56 به دلیل پست مفید
-
March 24th, 2012 16:16
# ADS
-
March 24th, 2012, 16:29
#2
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
Http Response رو قرار بدید .
-
تعداد تشکر ها ازmilade به دلیل پست مفید
-
March 24th, 2012, 17:09
#3
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
متاسفانه جهت request و response کدی رو بر نمی گردونه .
در سرورهایی هم که درست کار می کند ، این دو مورد قابل مشاهده نیست .
من در کدهای مربوط به کلاس class.soap_transport_http در nusoap دقت کردم . خطا مربوط به بخش response است . قسمتی از کد را از فانکشن : getResponse() را قرار می دهم .
کد PHP:
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 رو بصورت زیر گیدا کردم که جواب نداد . شاید من اشتباه می کنم :
کد PHP:
echo '<h2>Request</h2><pre>' . htmlspecialchars($client->request, ENT_QUOTES) . '</pre>';
echo '<h2>Response</h2><pre>' . htmlspecialchars($client->response, ENT_QUOTES) . '</pre>';
البته تمام مقادیر ceient را که بصورت array است را استخراج کردم .
کد HTML:
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 دارد .
با تشکر
-
تعداد تشکر ها ازomid56 به دلیل پست مفید
-
March 24th, 2012, 17:19
#4
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
متاسفانه من امکان تست php برام مهیا نیست ،
اینکه یفرمایید روی یه سرور کار میکنه روی یه سرور دیگه نه ، جای سواله ! که نشون میده مشکل از کد نیست .ایا در هر دو سرور همین کد رو تست میکنید ؟
اما کلاً این کد جای سوال داره ! کدوم فانکشن از وب سرویس صدا زده شده !؟
-
تعداد تشکر ها ازmilade به دلیل پست مفید
-
March 24th, 2012, 17:54
#5
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
در هر سه سرور یک کد اجرا می شود .
کد تست اولیه روی هر 3 تست کردم . منظور کد degug است . این کد همان مراحل اول را تست می کند . 1 - اتصال 2 - سلامتی data
باز هم یادآوری می کنم مشکل فقط در ارتباط با وب سرویس با پروتوکل https است .
شاید در تنظیمات مربوط به xml در سرور باید تغییراتی انجام شود !
مشکل از ssl هم نباید باشد چون اتصال به hhtps مشکلی ندارد .(Curl)
os و kloxo و تنظیمات امنیتی را خودم انجام دادم شاید چیری از قلم افتاده . شاید library یا چیزی باید نصب می شده .
با تشکر
-
تعداد تشکر ها ازomid56 به دلیل پست مفید
-
March 25th, 2012, 03:53
#6
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
بالاخره بعد از 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
این قسمت رو انگلیسی نوشتم چون شاید یک خارجی هم همین مشکل رو داشته باشه بتونه حل کنه !
با تشکر از همه دوستان
-
تعداد تشکر ها ازomid56 به دلیل پست مفید
asadiweb, BenYamin313, gar3na, martoor, merci, mkh8586, noreplayshop, parsibox, PDhost.net, PersianDOT, reimei, rubinnaito, talebi1372
-
August 24th, 2013, 15:28
#7
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
omid56,
آقا دستت درد نکنه، عالی بود ... خیلی منو جلو انداختی
-
تعداد تشکر ها ازmartoor به دلیل پست مفید
-
August 24th, 2013, 18:29
#8
پاسخ : اشکال در اتصال به وب سرویس (جایزه دارد!)
ظاهرا این 50000 تومان قسمت خودتون بود .
جایزه پشتکار و پیگیری خودتون برای شب زنده داری . 
تبریک=d>
-----------------------------------------------------------
Come as you are, as you were , as I want you to be
-----------------------------------------------------------
-
تعداد تشکر ها ازunforgiven747 به دلیل پست مفید