Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,027

HOME > PHP > PHP Forum > ขอคำแนะนำเรื่องเกี่ยวกับการทำ web service ด้วย PHP ครับ (SOAP WSDL และ SoapServer)



 

ขอคำแนะนำเรื่องเกี่ยวกับการทำ web service ด้วย PHP ครับ (SOAP WSDL และ SoapServer)

 



Topic : 050188



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์




สวัสดีครับพี่ๆทุกท่าน วันนี้ผมมีปัญหาอยากสอบถามเกี่ยวกับเรื่องการทำ web service โดยใช้ PHP ครับ พอดีผมได้รับงานมาโดยหัวหน้าต้องการให้ผมทำ web service โดยมีข้อมูลในองค์กรเช่นสินค้าต่างๆครับ แล้วต้องการนำข้อมูลเหล่านี้แชร์ไปยังบริษัทในเครือเพื่อใช้งานร่วมกันครับ ตอนนี้ผมพอเข้าใจ concept การทำงานของ web service แล้ว แต่อยากจะเห็นโปรเจคเล็กๆที่แสดงการทำงานพื้นฐานเพื่อจะเอาไปศึกษาต่อ พอจะแนะนำให้ผมทราบได้มั้ยครับ



Tag : PHP, MySQL, WebService







Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2010-10-14 10:29:43 By : nottp106 View : 15676 Reply : 36
 

 

No. 1



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

เคยทำครั้งนึงครับ

1. สร้าง WSDL มีฟังชั่นตามต้องการ
2. สร้าง php ฟังชั่นตามข้อ 1 และเปิดเซอร์วิส
3. สร้าง webservice client ติดต่อไปที่ ข้อ 1 และใช้งานตามสบาย

รูปแบบ WSDL หาได้ทั่วไปครับ ไม่ยาก แต่เขียนยาวอยู่ ^^ (อย่าให้เขียนผิดนะ ^^)

php นั้นก็ใช้พวกคลาส SoapServer, SoapClient

เวลาติดต่อ ไปที่เซิร์ฟเวอร์ ก็จะได้ใช้ฟังชั่นที่มีใน wsdl ครับ

Ex. (Webservice server)
Code (PHP)
....
//คืนค่าประวัติการจองทั้งหมด เฉพาะที่จ่ายเงินแล้ว(รวมที่เซตรายละเอียดห้อง และไม่ได้เซต)
function get_all_pay_booking_historyXML(){
	if(!is_login()) exit;
	
	$customer_id = $_SESSION['customer']['customer_id'];
	
	//ดึงค่า setting(ค่า commission)
	$query = mysql_query("SELECT commission FROM setting WHERE setting_id= 1");
	$commission = mysql_result($query, 0);
	$commission_multiply = (100 - $commission) / 100;

		
	$dom = new DOMDocument( "1.0", "utf-8" );
	$pay_booking = $dom->createElement('pay_booking');
	
	$query = mysql_query("SELECT * FROM booking LEFT JOIN customerpayment USING(booking_id) WHERE customer_id= $customer_id AND !ISNULL(payment_datetime)");
	while( $row = mysql_fetch_array($query) ){// bookings
		
		$query3 = mysql_query("SELECT * FROM bookingroom LEFT JOIN room USING(room_id) LEFT JOIN roomtype USING(roomtype_id) WHERE booking_id= ".$row['booking_id']);
		$room_count = mysql_num_rows($query3);
		
		$booking_id = $dom->createElement('booking_id', $row['booking_id']);
		$booking_code = $dom->createElement('booking_code', 'B'.substr('000'.$row['booking_id'], -4));
		$checkin_date = $dom->createElement('checkin_date', $row['book_start_date']);
		$checkout_date = $dom->createElement('checkout_date', $row['book_end_date']);
		$rooms = $dom->createElement('rooms');
		
		//ส่วนของ rooms
		$query2 = mysql_query("SELECT * FROM bookingroom LEFT JOIN room USING(room_id) LEFT JOIN roomtype USING(roomtype_id) WHERE booking_id= ".$row['booking_id']);
		while( $row2 = mysql_fetch_array($query2) ){
			$room_id = $dom->createElement('room_id', $row2['room_id']);
			$room_name = $dom->createElement('room_name', $row2['roomtype_name']);
			$room_person_number = $dom->createElement('room_person_number', $row2['person_number']);
			$room_floor = $dom->createElement('room_floor', $row2['floor']);
			$room_description = $dom->createElement('room_description', $row2['room_description']);
			
			$room = $dom->createElement('room');
			$room->appendChild($room_id);
			$room->appendChild($room_name);
			$room->appendChild($room_person_number);
			$room->appendChild($room_floor);
			$room->appendChild($room_description);
			
			$rooms->appendChild($room);
		}
		
		$booking = $dom->createElement('booking');
		$booking->appendChild($booking_id);
		$booking->appendChild($booking_code);
		$booking->appendChild($checkin_date);
		$booking->appendChild($checkout_date);
		$booking->appendChild($rooms);
		
		$pay_booking->appendChild($booking);
	}
	$dom->appendChild($pay_booking);
	
	return $dom->saveXML();

	
	return ''; //ถ้าไม่มีข้อมูลการจองที่ยังไม่ถูก กรอกข้อมูล
}

//สร้าง webservice server
$server = new SoapServer('webservice.wsdl');

//เพิ่มฟังชั่นให้ webservice server
$server->addFunction('login');
$server->addFunction('is_login');
$server->addFunction('logout');
$server->addFunction('get_roompriceXML');
$server->addFunction('set_roompriceXML');
$server->addFunction('get_pay_remain');
$server->addFunction('get_pay_historyXML');
$server->addFunction('get_unset_detail_bookingXML');
$server->addFunction('set_detail_bookingXML');
$server->addFunction('get_all_booking_historyXML');
$server->addFunction('get_all_pay_booking_historyXML');

//รับรีเควสจาก client
$server->handle();


Code (webservice client test)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>webservice_client_test</title>
</head>

<body>
<?php

  $client = new SoapClient("http://localhost/Ebooking/webservice/webservice.wsdl");
  echo '<strong>ทดสอบฟังชั่น login ด้วย logn() ด้วย user=test1, password=12345</strong><br>';
  echo htmlspecialchars($client->login('test1', '12345')), '<br>';
  echo '<br><br><strong>ทดสอบฟังชั่น is_login()</strong><br>';
  echo $client->is_login() ? 'true' : 'false';
  echo '<br><br><strong>ทดสอบฟังชั่น get_roompriceXML()</strong><br>';
  echo htmlspecialchars($client->get_roompriceXML());
  echo '<br><br><strong>ทดสอบฟังชั่น get_pay_remain()</strong><br>';
  echo htmlspecialchars($client->get_pay_remain());
//  echo '<br><br>'.($client->set_roompriceXML('aaa') ? 'true' : 'false');
  echo '<br><br><strong>ทดสอบฟังชั่น get_pay_historyXML()</strong><br>';
  echo htmlspecialchars($client->get_pay_historyXML());
  echo '<br><br><strong>ทดสอบฟังชั่น get_unset_detail_bookingXML()</strong><br>';
  echo htmlspecialchars($client->get_unset_detail_bookingXML());
//  echo '<br><br>'.($client->set_detail_bookingXML('aaa') ? 'true' : 'false');
  echo '<br><br><strong>ทดสอบฟังชั่น get_all_booking_historyXML()</strong><br>';
  echo htmlspecialchars($client->get_all_booking_historyXML());
  echo '<br><br><strong>ทดสอบฟังชั่น logout()<br>';
  echo $client->logout() ? 'true' : 'false';
  echo '<br><br><strong>ทดสอบฟังชั่น is_login() อีกรอบ</strong><br>';
  echo $client->is_login() ? 'true' : 'false';
  
?>
</body>
</html>


ปล. ตอน deploy อย่าลืมแก้ WSDL ให้อ้างถึง webservice server ให้ถูกต้องด้วยนะครับ
Site: http://www.pjgunner.com








ประวัติการแก้ไข
2010-10-14 11:32:42
2010-10-14 11:38:19
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 11:26:50 By : pjgunner.com
 


 

No. 2



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


สวัสดีครับผมลองรันแล้วมันขึ้น error นี้ครับ

Code
Fatal error: Call to undefined method soapclient::get_all_customertXML() in C:\AppServ\www\naturnova2\webservice\caller.php on line 13

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 14:17:22 By : nottp106
 

 

No. 3



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ของคุณมันมี ด้วย? มันจะมีได้ไง ผมก็แค่ให้ตัวอย่างครับ

มันเป็นเมธอดที่ได้จากการประกาศที่ WSDL ครับ และสร้างฟังชั่น แอ็ดใน webservice server ในไฟล์เว็บเซอร์วิส
คุณสามารถดูว่ามีเมธอดอะไรให้ใช้บ้าง ได้โดย

Code (PHP)
	$client = new SoapClient("http://localhost/Ebooking/webservice/webservice.wsdl");
	echo '<strong>รายชื่อ method ทั้งหมดใน webservice server</strong> (เรียกจาก SoapClient->__getFunctions())<br>';
	$webservice_server_functions = $client->__getFunctions();
	foreach($webservice_server_functions as $val){
		echo $val, '<br>';
	}

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 14:24:51 By : pjgunner.com
 


 

No. 4



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


อ๋อมผมลองรัน code ง่ายๆ ดูครับ แบบนี้

Code (PHP)
<?php
//service
function get_all_customertXML(){
     require_once("../config/conndb.php");
	 require_once("lib/nusoap.php");
    //Select data
    $query = mysql_query("SELECT Cust_Name FROM customer");
    $customer = mysql_result($query, 0);
	
	$dom = new DOMDocument( "1.0", "utf-8" );
    $cust_name = $dom->createElement('cust_name');
	
	$dom->appendChild($cust_name);
     
    return $dom->saveXML();
	
	//สร้าง webservice server
	$server = new soap_server('webservice.wsdl');
 
	//เพิ่มฟังชั่นให้ webservice server
	$server->addFunction('get_all_customertXML');
	
	//รับรีเควสจาก client
	$server->handle();
}
?>

และ
Code (PHP)
//caller
<?php
	require_once("lib/nusoap.php");
  	$client = new soapclient("http://localhost:81/naturnova2/webservice/webservice.wsdl");
  	echo '<br><br><strong>ทดสอบฟังชั่น get_all_CustomerXML()</strong><br>';
  	echo htmlspecialchars($client->get_all_customertXML());
?>


หากผิดตรงไหนรบกวนแนะนำด้วยนะครับ ขอบคุณครับ ^^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 15:28:55 By : nottp106
 


 

No. 5



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

ผมไม่เคยใช้ nusoap นะครับ ผมใช้ PHP SOAP


แล้วคุณเขียน wsdl แล้วหรือยัง?


ประวัติการแก้ไข
2010-10-14 16:19:44
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 16:05:37 By : pjgunner.com
 


 

No. 6



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ผมรู้แล้วครับว่าทำไมมันเรียกไม่ได้ ผมยังไม่ได้ไปเปิด extension 2 ตัวนี้ extension=php_xmlrpc.dll, extension=php_soap.dll แต่พอรันมันก็ error ใหม่แบบนี้

Code
Warning: SoapClient::SoapClient(http://localhost:81/naturnova2/webservice/webservice.wsdl) [soapclient.soapclient]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\AppServ\www\naturnova2\webservice\caller.php on line 11

Warning: SoapClient::SoapClient() [soapclient.soapclient]: I/O warning : failed to load external entity "http://localhost:81/naturnova2/webservice/webservice.wsdl" in C:\AppServ\www\naturnova2\webservice\caller.php on line 11

Fatal error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'http://localhost:81/naturnova2/webservice/webservice.wsdl' in C:\AppServ\www\naturnova2\webservice\caller.php:11 Stack trace: #0 C:\AppServ\www\naturnova2\webservice\caller.php(11): SoapClient->SoapClient('http://localhos...') #1 {main} thrown in C:\AppServ\www\naturnova2\webservice\caller.php on line 11


รบกวนถามเพิ่มครับ สร้าง WSDL นี่สร้างตอนไหนครับ ^^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 16:31:33 By : nottp106
 


 

No. 7



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

Quote:
รับ : สวัสดีครับ ^^ ผมเป็นคนที่โพสถามเรื่อง web service อ่ะครับ พอดีผมอยากรบกวนสอบถามว่าพี่พอจะส่ง code ตัวอย่างที่สามารถทำงานได้ ข้างในมีซัก 1 function ที่เรียกข้อมูลจากฐานข้อมูล และทำในรูปแบบ web service พอจะเป็นไปได้มั้ยครับ ขอบคุณครับ ^^ (Nott)

โอเคครับ ผมจะทำตัวอย่างง่ายๆ ให้ดูครับ ไฟล์ทั้งหมดเก็บไว้ที่ wwwroot/webservice_server
อย่าลืมเปิดใช้ PHP SOAP ที่ php.ini (extension=php_soap.dll)

plus.wsdl
<?xml version ='1.0' encoding ='UTF-8' ?> 
<definitions name='plus' 
  targetNamespace='http://example.org/plus' 
  xmlns:tns=' http://example.org/plus ' 
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/' 
  xmlns:xsd='http://www.w3.org/2001/XMLSchema' 
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/' 
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/' 
  xmlns='http://schemas.xmlsoap.org/wsdl/'> 

<message name='plusRequest'> 
  <part name='num1' type='xsd:float'/> 
  <part name='num2' type='xsd:float'/>
</message> 
<message name='plusResponse'> 
  <part name='Result' type='xsd:float'/> 
</message>

<message name='substractRequest'> 
  <part name='num1' type='xsd:float'/> 
  <part name='num2' type='xsd:float'/>
</message> 
<message name='substractResponse'> 
  <part name='Result' type='xsd:float'/> 
</message> 

<portType name='plusPortType'> 
  <operation name='plus'> 
    <input message='tns:plusRequest'/> 
    <output message='tns:plusResponse'/> 
  </operation> 
</portType>
<portType name='substractPortType'> 
  <operation name='substract'> 
    <input message='tns:substractRequest'/> 
    <output message='tns:substractResponse'/> 
  </operation> 
</portType>  

<binding name='plusBinding' type='tns:plusPortType'> 
  <soap:binding style='rpc' 
    transport='http://schemas.xmlsoap.org/soap/http'/> 
  <operation name='plus'> 
    <soap:operation soapAction='urn:xmethods-delayed-quotes#plus'/> 
    <input> 
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </input> 
    <output> 
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </output> 
  </operation> 
</binding>
<binding name='substractBinding' type='tns:substractPortType'> 
  <soap:binding style='rpc' 
    transport='http://schemas.xmlsoap.org/soap/http'/> 
  <operation name='substract'> 
    <soap:operation soapAction='urn:xmethods-delayed-quotes#substract'/> 
    <input> 
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </input> 
    <output> 
      <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes' 
        encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/> 
    </output> 
  </operation> 
</binding>  

<service name='plusService'> 
  <port name='plusPort' binding='plusBinding'> 
    <soap:address location='http://localhost/webservice_server/plus_server.php'/> 
  </port> 
</service>
<service name='substractService'> 
  <port name='substractPort' binding='substractBinding'> 
    <soap:address location='http://localhost/webservice_server/plus_server.php'/> 
  </port> 
</service>  
</definitions>


plus_server.php
<?php
ini_set("soap.wsdl_cache_enabled", "0");

function plus($num1, $num2)
{
	return $num1+$num2;
}

function substract($num1, $num2)
{
	return $num1 - $num2;
}

$server = new SoapServer("plus.wsdl");
$server->addFunction("plus");
$server->addFunction('substract');
$server->handle();
?>


index.php
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>ทดสอบ Webservice</title>
</head>

<body>
<?php
$client = new SoapClient("http://localhost/webservice_server/plus.wsdl");

echo '<h3>รายชื่อฟังชั่น</h3>';
$funcs = $client->__getFunctions();
foreach($funcs as $func)
{
	echo $func,'<br>';
}

echo '<h3>ทดสอบ plus()</h3>';
echo $client->plus(1, 2);

echo '<h3>ทดสอบ substract()</h3>';
echo $client->substract(1, 2);
?>
</body>
</html>



http://www.pjgunner.com


ประวัติการแก้ไข
2010-10-14 16:44:34
2010-10-14 16:44:48
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-14 16:37:40 By : pjgunner.com
 


 

No. 8



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณพี่มากครับ ตอนนี้ผมรันตัว client ขึ้นมาแล้วพบ error นี้ครับ

Fatal error: Uncaught SoapFault exception: [Client] looks like we got no XML document in C:\AppServ\www\naturnova2\webservice5\soap-client.php:7 Stack trace: #0 [internal function]: SoapClient->__call('getCatalogEntry', Array) #1 C:\AppServ\www\naturnova2\webservice5\soap-client.php(7): SoapClient->getCatalogEntry('catalog1') #2 {main} thrown in C:\AppServ\www\naturnova2\webservice5\soap-client.php on line 7

ไม่รู้ต้องแก้ยังไง ที่ออฟิศมี proxy ด้วยไม่แน่ใจว่าจะเกี่ยวว่ามันไม่สามารถออกเนตได้หรือเปล่าครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 11:12:17 By : nottp106
 


 

No. 9



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

คิดว่ามันผิดชนิดข้อมูลครับ

ดูดีๆครับ ลักษณะนี้ เขียนให้คล้าย static language ทั้งข้อมูลขาเข้าและออกครับ โดยเฉพาะชนิดข้อมูลที่ปรกกาศใน wsdl

เพราะ การสร้าง webservice ควรได้มาตรฐานกลาง โดยเฉพาะชนิดข้อมูล ขาเข้าและออก


ประวัติการแก้ไข
2010-10-15 11:55:27
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 11:52:22 By : pjgunner.com
 


 

No. 10



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ลองเอาไฟล์ที่พี่ให้มารันกลับรันได้ T.T


ประวัติการแก้ไข
2010-10-15 13:56:48
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 13:54:07 By : nottp106
 


 

No. 11



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ผมลองรันโดยเอาไฟล์พี่มาแก้ไข และลองแก้ไขไฟล์ wsdl โดยผมเขียนฟังก์ชันสำหรับเรียกข้อมูลจากฐานข้อมูลมาแสดง ดังนี้

wsdl
<?xml version ='1.0' encoding ='utf-8' ?>
<definitions name='getCustomer'
  targetNamespace='http://example.org/plus'
  xmlns:tns=' http://example.org/plus '
  xmlns:soap='http://schemas.xmlsoap.org/wsdl/soap/'
  xmlns:xsd='http://www.w3.org/2001/XMLSchema'
  xmlns:soapenc='http://schemas.xmlsoap.org/soap/encoding/'
  xmlns:wsdl='http://schemas.xmlsoap.org/wsdl/'
  xmlns='http://schemas.xmlsoap.org/wsdl/'>

  <!-- For getCustomer Function -->
  <message name='getCustomerRequest'>
    <part name='Value' type='xsd:integer'/>
  </message>
  <message name='getCustomerResponse'>
    <part name='Result' type='xsd:integer'/>
  </message>

  <!-- For second Function2 -->
  <!--<message name='substractRequest'>
    <part name='num1' type='xsd:float'/>
    <part name='num2' type='xsd:float'/>
  </message>
  <message name='substractResponse'>
    <part name='Result' type='xsd:float'/>
  </message>-->

  <portType name='getCustomerPortType'>
    <operation name='getcustomer'>
      <input message='tns:getCustomerRequest'/>
      <output message='tns:getCustomerResponse'/>
    </operation>
  </portType>
  
  <!-- For portType of Function2-->
  <!--<portType name='substractPortType'>
    <operation name='substract'>
      <input message='tns:substractRequest'/>
      <output message='tns:substractResponse'/>
    </operation>
  </portType>-->

  <binding name='getCustomerBinding' type='tns:getCustomerPortType'>
    <soap:binding style='rpc'
      transport='http://schemas.xmlsoap.org/soap/http'/>
    <operation name='getcustomer'>
      <soap:operation soapAction='urn:xmethods-delayed-quotes#plus'/>
      <input>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
      </input>
      <output>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
      </output>
    </operation>
  </binding>
  
  <!-- Binding for function2 -->
  <!--<binding name='substractBinding' type='tns:substractPortType'>
    <soap:binding style='rpc'
      transport='http://schemas.xmlsoap.org/soap/http'/>
    <operation name='substract'>
      <soap:operation soapAction='urn:xmethods-delayed-quotes#substract'/>
      <input>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
      </input>
      <output>
        <soap:body use='encoded' namespace='urn:xmethods-delayed-quotes'
          encodingStyle='http://schemas.xmlsoap.org/soap/encoding/'/>
      </output>
    </operation>
  </binding>-->

  <service name='getCustomerService'>
    <port name='getCustomerPort' binding='getCustomerBinding'>
      <soap:address location='http://localhost:81/naturnova2/webservice4/service.php'/>
    </port>
  </service>
  
  <!-- Service for function2 -->
  <!--<service name='substractService'>
    <port name='substractPort' binding='substractBinding'>
      <soap:address location='http://localhost:81/naturnova2/webservice4/service.php'/>
    </port>
  </service>-->
</definitions>


และไฟล์ service เป็นดังนี้
Service
<?php
	//Set no cache WSDL
	ini_set("soap.wsdl_cache_enabled", "0");
	
	//service function
	function getCustomer(){
		
		//connect database
		require_once('../config/conndb.php');
		$str = "SELECT Cust_Name FROM customer";
		$query = mysql_query($str);
		
		while($result = mysql_fetch_array($query))
		{
			$Value = $result['Cust_Name'];
			
			return $Value;
		}
	}
	
	//create server instance
	$server = new SoapServer("testwsdl.wsdl");
	
	//add function
	$server->addFunction("getCustomer");
	
	//handle server with client
	$server->handle();
?>


ไฟล์ Client
Client
<?php header("Content-Type:text/html; charset=utf-8");?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<?php
	//create client instance
	$client = new SoapClient("http://localhost:81/naturnova2/webservice4/testwsdl.wsdl");
	
	/*echo '<h3>รายชื่อ Function</h3>';
	$funcs = $client->__getFunctions();
	
	foreach($funcs as $func)
	{
		echo $func, '<br>';
	}*/
	
	echo $client->getCustomer();
?>
</body>
</html>


ปรากฏว่าถ้าผมกำหนดการรับค่าและคืนค่าใน wsdl เป็น integer มันจะ return เป็นตัวเลขคือ (888) ซึ่งค่าที่ถูกต้องคือ (888 พร็อพเพอร์ตี้ แอนด์ เซอร์วิส จำกัด) แต่ถ้าผมเปลี่ยนเป็น string มันจะ error โดยมัน error แบบนี้ครับ ไม่รู้ต้องแก้ไขที่ไหนครับ

atal error: Uncaught SoapFault exception: [SOAP-ENV:Server] SOAP-ERROR: Encoding: string '888 \xbe...' is not a valid utf-8 string in C:\AppServ\www\naturnova2\webservice4\client.php:22 Stack trace: #0 [internal function]: SoapClient->__call('getCustomer', Array) #1 C:\AppServ\www\naturnova2\webservice4\client.php(22): SoapClient->getCustomer() #2 {main} thrown in C:\AppServ\www\naturnova2\webservice4\client.php on line 22


ประวัติการแก้ไข
2010-10-15 16:32:34
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 16:31:50 By : nottp106
 


 

No. 12



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

Code (PHP)
<message name='getCustomerRequest'>
  </message>
  <message name='getCustomerResponse'>
    <part name='Result' type='xsd:integer'/>
  </message>


แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 17:06:38 By : pjgunner.com
 


 

No. 13



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


(Hero ผมมาแล้ว ^^')

ผมลองเปลี่ยนเป็น string แล้วครับ มัน error ที่ถามไปด้านบนครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 17:08:57 By : nottp106
 


 

No. 14



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

พยายามหน่อยครับ ผมเองก็ไม่ได้ให้ใครมาทำให้ ผมก็ลองผิดลองถูกกว่าจะเป็นครับ

คุณเซฟไฟล์ถูกชนิดหรือยัง?
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 17:13:35 By : pjgunner.com
 


 

No. 15



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


เป็นที่เรื่องการ save file จริงๆด้วยครับ ต้องเป็น utf-8 ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2010-10-15 17:43:48 By : nottp106
 


 

No. 16

Guest


ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-03-30 14:19:14 By : 312
 


 

No. 17



โพสกระทู้ ( 1 )
บทความ ( 0 )



สถานะออฟไลน์


สามารถสร้าง class ของ service ได้ใหมครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-08 15:57:56 By : hanamiji
 


 

No. 18



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook



Go to : PHP Create - Call Web Service สร้างและเรียกเว็บเซอร์วิส ด้วย PHP (NuSoap and Soap)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-08 21:34:40 By : mr.win
 


 

No. 19



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ด้วยความลืมเกี่ยวกับ webservice ค้นหาใน google ก็เจอเว็บนี้เว็บแรกเข้ามาอ่าน อ่านไปอ่านมา กระทู้ที่เราเคยถามนี่นา ตลกดีฮ่าๆ :)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-15 14:58:11 By : nottp106
 


 

No. 20



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ตอบความคิดเห็นที่ : 19 เขียนโดย : nottp106 เมื่อวันที่ 2012-05-15 14:58:11
รายละเอียดของการตอบ ::
แสดงว่าตอนนี้เก่งแล้วซิครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-15 15:03:48 By : mr.win
 


 

No. 21



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


555 ยังหรอกครับพี่วิน :D ผมติดปัญหาอ่ะคับ คือถ้าผมรันที่ไม่ใช่ port 80 เช่นตอนนี้ผมใช้ port:91 ตัว Client ไม่สามารถเรียก service ได้ครับ ไม่รู้ว่าต้องแก้ไขอย่างไรครับ

ผมลองไปรันเครื่องที่ใช้ port 80 รัน php สามารถรันได้ปกติ

พี่วินหรือท่านอื่นๆพอทราบวิธีแก้ไขมั้ยครับ ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-15 16:45:12 By : nottp106
 


 

No. 22



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ผมลองข้าม port อื่น ก็ได้ปกติน่ะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-15 16:51:59 By : mr.win
 


 

No. 23



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ได้แล้วครับลองรัน port อื่นดูครับ ^^
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-16 14:24:09 By : nottp106
 


 

No. 24



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ผม review เขียนไปหลายบทความเลยครับ

Go to : ASP.NET and Web Service การสร้างและเรียกใช้งาน Web Service บน .NET Framework
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-17 06:25:04 By : mr.win
 


 

No. 25



โพสกระทู้ ( 156 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณครับพี่วิน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-17 08:45:42 By : nottp106
 


 

No. 26



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

อันนี้ Web Service กับ mySQL ครับ



Go to : PHP - Web Service กับ MySQL รับส่งค่าผ่าน Web Service กับ MySQL (NuSoap)
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-05-19 07:05:35 By : mr.win
 


 

No. 27

Guest


ผมเป็นเด็กใหม่ ขอความรู้จากพี่่ๆ ผู้มีความชำนาญ ครับ

$client = new SoapClient("some.wsdl", array('login' => "some_name", 'password'=> "some_password"));

ในส่วนที่เป็นการกำหนด user ใช้งานอย่างไร ถ้าเราต้องการกำหนดหลายๆ user และต้องสร้าง user ไว้ที่ไหน

array('login' => "some_name", 'password'=> "some_password") ????

ขอบคุณครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-10 22:01:38 By : เด็กใหม่
 


 

No. 28



โพสกระทู้ ( 5,105 )
บทความ ( 4 )

สมาชิกที่ใส่เสื้อไทยครีเอท Hall of Fame 2012

สถานะออฟไลน์


สมัครสมาชิก ตั้งกระทู้ใหม่ อ้างอิงกระทู้นี้ไปด้วยดีกว่าครับ
แต่ถ้าถามแค่นี้ก็สร้างตาราง user ขึ้นมาอีกอันครับ....
https://www.thaicreate.com/community/php-mysql-login-form-check-username-password.html
https://www.thaicreate.com/community/php-mysql-member-register-form.html
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-10 22:40:04 By : apisitp
 


 

No. 29



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ในบทความ PHP Web Service มีตัวอย่างการทำ Login ผ่าน Web Service อยู่ครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-10 22:58:35 By : mr.win
 


 

No. 30

Guest


ผมอาจถามไม่ตรงประเด็นครับพี่ๆ

ผมอ่านจาก web หลายที่ การสร้าง instance ด้าน client คือ $client = new SoapClient($wsdl,$options);

จะมี option ให้เพิ่มเติม เช่น

Code (PHP)
$client = new SoapClient("some.wsdl", array('login' => "some_name", 'password'=> "some_password"));


คือเนื่องจาก เราสร้าง SoapClient ขึ้นมา แล้ว ฝั่ง server.php จะมาอ่าน array ที่ตามมาจากอะไรก่อนที่จะอนุญาต

ให้ใช้งาน operation ที่มีอยู่ ไม่ได้ต้องการสร้าง soap เพื่อตรวจสอบ user กรณีการ login form ครับ

ขอตัวอย่าง code ฝั่ง server ที่ตรวจสอบ option ก่อนเกิด instance ของ client ครับ

----------------------------------------------------------------------------

ตัวอย่าง ของ php ด้านล่าง ถ้า login ไม่ผ่าน instance จะไม่เกิดขึ้น และจะเรียกใช้ บรรทัดล่างสุดไม่ได้ ครับ

Code (PHP)
<?
 $client = new SoapClient("http://10.0.1.45/WS/BWS.php?wsdl",array(  'trace'=>1,"login"=>"36072446","password" => "0812110","connection_timeout"=>300));
 $param=new stdClass();
 $param->Number=$num;
 $result=$client->GetAreaByNumber($param);
?>

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-11 23:50:03 By : เด็กใหม่
 


 

No. 31



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ถามในกระทู้ใหม่น่ะครับ จะได้เป็นเรื่อง ๆ ไปครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2012-08-13 07:52:18 By : mr.win
 


 

No. 32



โพสกระทู้ ( 2 )
บทความ ( 0 )



สถานะออฟไลน์


error แบบนี้คืออะไรครับ

Warning: require_once(lib/nusoap.php) [function.require-once]: failed to open stream: No such file or directory in C:\AppServ\www\php\WebServiceServer.php on line 2
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-11-28 16:55:35 By : vutchai14
 


 

No. 33



โพสกระทู้ ( 1,569 )
บทความ ( 2 )



สถานะออฟไลน์
Twitter Facebook Blogger

C:\AppServ\www\php\lib\nusoap.php ไม่มีอยู่จริงครับ
ตรวจสอบ path ให้ด๊ครัส
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-11-28 19:45:11 By : itpcc
 


 

No. 34



โพสกระทู้ ( 3,468 )
บทความ ( 0 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter

เห็นกรู้ที่เคยตอบสมัยไหนไม่รู้ละ ไม่น่าขุดนะคับน่าจะอ้างอิงเอา เพราะคนมาอ่านทีหลังอาจทำให้สับสน

สมัยก่อนที่ไม่ใช้ nusoap ทั้งที่มันง่ายกว่าไม่ต้องทำ wsdl เอง เพราะผมไม่แน่ใจว่ามันจะได้มาตรฐาน เวลาภาษาอื่นมาดึงข้อมูล ไม่แน่ว่ามีปัญหาหรือเปล่า และไม่รู้ว่าภาษานั้นๆ มี nusoap หรือเปล่า เท่านั้นเอง เลยเลือกใช้ของที่ php แถมาให้เลย

เผ่น http://www.youtube.com/watch?v=Y4f1cdNv_M8
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-11-28 21:13:24 By : pjgunner.com
 


 

No. 35



โพสกระทู้ ( 2 )
บทความ ( 0 )



สถานะออฟไลน์


ขอบคุณมากนะครับ
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2013-11-29 11:05:23 By : vutchai14
 


 
ตอบความคิดเห็นที่ : 7 เขียนโดย : pjgunner.com เมื่อวันที่ 2010-10-14 16:37:40
รายละเอียดของการตอบ ::
ขอบคุณท่านเป็นอย่างสูง ทำให้ผมสามารถเข้าใจในการเขียนเวปเซอร์วิส แบบ Soap native , ขอให้ท่านร่ำรวย มีเงินทองไหลมาเทมา สุขภาพกายใจแข็งแรงครับ

แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2022-01-11 16:30:57 By : ่jade.k
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : ขอคำแนะนำเรื่องเกี่ยวกับการทำ web service ด้วย PHP ครับ (SOAP WSDL และ SoapServer)
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 05
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่