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

ตอบกระทู้

รูปแสดงอารมณ์
:icon_plusone: :like: :plusone: :gfb: :-D :) :( :-o 8O :? 8) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: :angry: :baa: :biggrin:
รูปแสดงอารมณ์อื่นๆ

BBCode เปิด
[img] เปิด
[url] เปิด
[Smile icon] เปิด

กระทู้แนะนำ
   

มุมมองที่ขยายได้ กระทู้แนะนำ: วิธีการสร้าง WebService อย่างง่ายด้วย php + NuSOAP

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

โดย mindphp » 20/01/2014 4:13 pm

ทดสอบ บน php5.3 ครับ
และ 5.1 ได้ไม่มีปัญหาครับ

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

โดย bbdd » 25/09/2013 11:42 am

ต้องใช้กับ PHP version ไรครับ ถึงจะไม่มีปัญหาครับ ผมลองใช้กับ 5.2.3 run แล้วไม่แสดงข้อมูลเลยครับ

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

โดย mindphp » 11/05/2012 8:52 pm

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);
 

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

โดย batman1292 » 02/05/2012 5:54 pm

จากนั้นจะเป็นการทำในส่วนที่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 ออกมา

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

โดย batman1292 » 02/05/2012 5:42 pm

อันดับแรกก่อนที่จะทำการสร้าง 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

ข้างบน