วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

หมวดสำหรับแบ่งบันความ รู้ต่างๆ จะมีหมวดย่อยๆ ในหมวดนี้ เช่น php, SQL, XML, CSS

Moderator: mindphp, ผู้ดูแลกระดาน

batman1292
PHP Jr. Member
PHP Jr. Member
โพสต์: 24
ลงทะเบียนเมื่อ: 10/01/2012 1:09 pm

วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

โพสต์ที่ยังไม่ได้อ่าน โดย batman1292 »

อันดับแรกก่อนที่จะทำการสร้าง WebService ด้วย NuSOAP นั้นจะต้องทำการ DownLoad ส่วนของ Library ของ NuSOAP ก่อนตาม Link นี้http://sourceforge.net/projects/nusoap/
จากนั้นให้แตกไฟล์ไว้ใน Folder ที่เราจะทำการเขียน WebService จากนั้นทำการสร้างไฟล์ออกเป็น2ส่วนคือ
1) ส่วนของ server - โดยส่วนนี้จะเป็นส่วนที่ใช้ในการเก็บเมธอดและลงทะเบียนเมธอดที่เราสร้างไว้
โค๊ดในส่วนนี้จะเป็นดังนี้

โค้ด: เลือกทั้งหมด

require_once('lib/nusoap.php');

function doHellow($input) {
    return $input;
}
$server = new soap_server();

$ws_server_url = 'url';

$server->configureWSDL('ชื่อของWebService.wsdl', $ws_server_url);

$server->register("doHellow", array('name' => 'xsd:string'), array('return' => 'xsd:string'));

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';

$server->service($HTTP_RAW_POST_DATA);
 
ในบรรทัดแรกจะเป็นการดึงข้อมูลจากไฟล์ที่เรา DownLoad ไว้ข้างต้นมาใช้
จากนั้นจะเป็นส่วนของฟังก์ชันที่เราได้สร้างขึ้น

โค้ด: เลือกทั้งหมด

$server = new soap_server()
เป็นส่วนที่เราสร้าง Server ขึ้นมา

โค้ด: เลือกทั้งหมด

$ws_server_url = 'url'
เป็นการตั้งค่า url ที่เราต้องการให้เป็นส่วนที่แสดงรายละเอียดของ Sever ว่ามีฟังก์ชันอะไรบ้างโดยทั่วไปจะใช้เป็น http://localhost/Floder ที่สร้างไว้/Fileของส่วนServer
จากนั้นจะเป็นการตั้งค่าของ WSLD โดยใช้คำสั่ง

โค้ด: เลือกทั้งหมด

 $server->configureWSDL('ชื่อของWebService.wsdl', $ws_server_url)
แล้วทำการทะเบียนฟังก์ชันโดยใช้คำสั่ง

โค้ด: เลือกทั้งหมด

$server->register("doHellow", array('name' => 'xsd:string'), array('return' => 'xsd:string'))
ซึ่งคำสั่งดังกล่าวยังมีพารามิเตอร์อีกดังโค๊ดด้านล่างนี้

โค้ด: เลือกทั้งหมด

function
register($name, $input=array(), $output=array(), $namespace=false, 
$soapaction=false, $style=false, $use=false, $documentation='')
 
โดยที่
$name - เป็นชื่อของฟังก์ชันที่ต้องการลงทะเบียน
$input - ใช้กำหนดชนิดข้อมูลของ input
$output - ใช้กำหนดชนิดข้อมูลของ output
ซึ่งชนิดของมูลของ input และ output นั้นจะต้องเป็นไปตามชนิดของข้อมูลจากภาษา xml ตามลิงค์นี้https://www.mindphp.com/forums/viewtopic ... 29&t=11982
$namespace - ใช้กำหนด XML documents (มีหรือไม่มีก็ได้)
$soapaction - ใช้กำหนด URI (มีหรือไม่มีก็ได้)
$style - ใช้กำหนดประเภทของ SOAP ซึ่งแบ่งเป็น RCP และ Document (มีหรือไม่มีก็ได้)
$use-ใช้กำหนดเกี่ยวกับผู้ใช้งาน(มีหรือไม่มีก็ได้)
$documentation-ใช้บอกรายละเอียดเกี่ยวกับฟังก์ชันนั้นๆ(มีหรือไม่มีก็ได้)

เมื่อจบคำสั่งนี้จะใช้คำสั่ง

โค้ด: เลือกทั้งหมด

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ''
เป็นการรับข้อมูลจากภาษา xml ให้เข้ามาในภาษา php
แล้วใช้คำสั่ง

โค้ด: เลือกทั้งหมด

$server->service($HTTP_RAW_POST_DATA)
เป็นอันจบในส่วนของ Sever
แก้ไขล่าสุดโดย batman1292 เมื่อ 02/05/2012 6:12 pm, แก้ไขไปแล้ว 2 ครั้ง.
batman1292
PHP Jr. Member
PHP Jr. Member
โพสต์: 24
ลงทะเบียนเมื่อ: 10/01/2012 1:09 pm

Re: วิธีการสร้างWebServiceอย่างง่ายด้วยphp+NuSOAP

โพสต์ที่ยังไม่ได้อ่าน โดย batman1292 »

จากนั้นจะเป็นการทำในส่วนที่2คือส่วนของ Client
โค๊ดในส่วนนี้จะเป็นดังนี้

โค้ด: เลือกทั้งหมด

require_once ('lib/nusoap.php'); 

$client = new nusoap_client('url?wsdl', 'wsdl');//สร้างClient

$result = $client->call('doHellow', array('name' => 'abc'));
print_r($result);
จะเห็นได้ว่าโค๊ดในส่วนนี้กับส่วนของ Server จะเหมือนกันตรงที่คำสั่ง

โค้ด: เลือกทั้งหมด

require_once ('lib/nusoap.php');
ซึ่งจะต้องทำการเรียกคำสั่งนี้ทุกครั้งในการทำ WebService ที่ใช้แบบ NuSOAP
จากนั้นเป็นการสร้าง Client โดยใช้คำสั่ง

โค้ด: เลือกทั้งหมด

$client = new nusoap_client('url?wsdl', 'wsdl') 
ซึ่ง url ดังกล่าวจะเป็นตัวเดียวกับ url ที่เรากำหนดไว้ในส่วนของ Server

โค้ด: เลือกทั้งหมด

$result = $client->call('doHellow', array('name' => 'abc'))
คำสั่งนี้เป็นคำสั่งเรียกใช้ฟังก์ชันที่ลงทะเบียนไว้ในส่วนของ Server โดยพารามิเตอร์ตัวแรกจะเป็นชื่อของฟังก์ชันที่ต้องการใช้และได้ทำการลงทะเบียนไว้แล้ว
พารามิเตอร์ตัวต่อมาจะเป็นส่วนของ Input โดยส่วนนี้เราต้องกำหนดชนิดของตัวแปรให้สอดคล้องกับชนิดที่กำหนดไว้ในส่วนของ Server มิฉะนั้นอาจเกิดความผิดพลาดในการทำงานของฟังก์ชันนั้นๆได้โดยที่เราไม่รู้
ต่อมาเป็นคำสั่งแสดงผลโดยใช้

โค้ด: เลือกทั้งหมด

print_r($result)
เพิ่มเติมเกี่ยวกับชนิดของข้อมูล Input และ Output ทั้งในส่วนของ Server และ Client
ควรที่จะกำหนดชนิดของข้อมูลให้สอดคล้องกับงานที่ต้องการใช้อาจจะมีการเปลี่ยนประเภทของตัวแปรโดยอัตโนมัตอยู่บ้างแต่เพื่อความถูกต้องควรที่จะกำหนดให้ชัดเจนและถ้าหากต้องการเปลี่ยนชนิดของข้อมูลควรเปลี่ยนก่อนที่จะนำมาใช้หรือเปลี่ยนก่อนที่จะทำเป็น output ออกมา
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41336
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ComplexType แบบ Array ใน NuSoap

โค้ด: เลือกทั้งหมด

$server->wsdl->addComplexType(
    'Product',
    'complexType',
    'struct',
    'all',
    '',
    array(
        'Name' => array('name'=>'name','type'=>'xsd:string'),
        'Code' => array('name'=>'product_number','type'=>'xsd:string'),
    'Price' => array('name'=>'price','type'=>'xsd:decimal'),
        'Ammount' => array('name'=>'quantity','type'=>'xsd:int')
    )
);


$server->wsdl->addComplexType(
    'ProductArray',
    'complexType',
    'array',
    '',
    'SOAP-ENC:Array',
    array(),
    array(
        array('ref'=>'SOAP-ENC:arrayType','wsdl:arrayType'=>'tns:Product[]')
    ),
    'tns:Product'
);

$server->register(
   'GetProductsByCode',
   array('user'=>'xsd:string','password'=>'xsd:string','product_code'=>'xsd:string'),
   array('return'=>'tns:ProductArray'),
   $NAMESPACE);
 
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ภาพประจำตัวสมาชิก
bbdd
PHP Newbie
PHP Newbie
โพสต์: 1
ลงทะเบียนเมื่อ: 25/09/2013 11:03 am

Re: วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

โพสต์ที่ยังไม่ได้อ่าน โดย bbdd »

ต้องใช้กับ PHP version ไรครับ ถึงจะไม่มีปัญหาครับ ผมลองใช้กับ 5.2.3 run แล้วไม่แสดงข้อมูลเลยครับ
ภาพประจำตัวสมาชิก
mindphp
ผู้ดูแลระบบ MindPHP
ผู้ดูแลระบบ MindPHP
โพสต์: 41336
ลงทะเบียนเมื่อ: 22/09/2008 6:18 pm
ติดต่อ:

Re: วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

โพสต์ที่ยังไม่ได้อ่าน โดย mindphp »

ทดสอบ บน php5.3 ครับ
และ 5.1 ได้ไม่มีปัญหาครับ
ติดตาม VDO: http://www.youtube.com/c/MindphpVideoman
ติดตาม FB: https://www.facebook.com/pages/MindphpC ... 9517401606
หมวดแชร์ความรู้: https://www.mindphp.com/forums/viewforum.php?f=29
รับอบรม และพัฒนาระบบ: https://www.mindphp.com/forums/viewtopic.php?f=6&t=2042
ตอบกลับโพส
  • Similar Topics
    ตอบกลับ
    แสดง
    โพสต์ล่าสุด

ผู้ใช้งานขณะนี้

สมาชิกกำลังดูบอร์ดนี้: ไม่มีสมาชิกใหม่ และบุคลทั่วไป 43