Bonjour,
Je souhaite créer un web service de création de compte en PHP
J'ai une classe entité Account (dans le namespace ATD_Sobul_Web_Entities), une classe de service AccountSrv (dans le namespace ATD_Sobul_Web_Services)
Voici le code de la classe Account :
Voici le code de la classe AccountSrv
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 <?php namespace ATD_Sobul_Web_Entities { class Account{ private $username = ''; private $name = ''; private $firstname = ''; private $birthdate = ''; private $city = ''; private $country = ''; function __construct() { } public function __get($attr) { if(isset($this->$attr)) return $this->$attr; else { // non-existant property echo 'GET:Unknow attribute '.$attr; } } public function __set($attr,$value) { if(isset($this->$attr)) $this->$attr = $value; else { // non-existant property echo 'SET:Unknow attribute '.$attr; } } } } ?>
Voici le WSDL qui va avec :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 <?php namespace ATD_Sobul_Web_Services { define('__ROOT__', $_SERVER['DOCUMENT_ROOT']); require_once(__ROOT__.'/Entities/Account.php'); class AccountSrv{ function Create($account){ return $account->username; } function Activate($username, $key){ } } } namespace { $wsdl = tempnam(sys_get_temp_dir(), 'wsdl'); copy("http://127.0.0.3:8080/Services/AccountSrv.wsdl", $wsdl); $server = new SoapServer($wsdl); $server->setObject( new ATD_Sobul_Web_Services\AccountSrv()); $server->addFunction('Create'); $server->addFunction('Activate'); $server->handle(); } ?>
Et enfin, voici le code de ma page de test qui appelle la methode Create du web service
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95<?xml version="1.0" encoding="utf-8"?> <wsdl:definitions xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://tempuri.org/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tm="http://microsoft.com/wsdl/mime/textMatching/" xmlns:s="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://tempuri.org/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"> <wsdl:types> <s:schema elementFormDefault="qualified" targetNamespace="http://tempuri.org/"> <s:element name="Create"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="account" type="tns:Account" /> </s:sequence> </s:complexType> </s:element> <s:complexType name="Account"> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="name" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="firstname" type="s:string" /> <s:element minOccurs="1" maxOccurs="1" name="birthdate" type="s:dateTime" /> <s:element minOccurs="0" maxOccurs="1" name="city" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="country" type="s:string" /> </s:sequence> </s:complexType> <s:element name="CreateResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="CreateResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="Activate"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="username" type="s:string" /> <s:element minOccurs="0" maxOccurs="1" name="key" type="s:string" /> </s:sequence> </s:complexType> </s:element> <s:element name="ActivateResponse"> <s:complexType> <s:sequence> <s:element minOccurs="0" maxOccurs="1" name="ActivateResult" type="s:string" /> </s:sequence> </s:complexType> </s:element> </s:schema> </wsdl:types> <wsdl:message name="CreateSoapIn"> <wsdl:part name="parameters" element="tns:Create" /> </wsdl:message> <wsdl:message name="CreateSoapOut"> <wsdl:part name="parameters" element="tns:CreateResponse" /> </wsdl:message> <wsdl:message name="ActivateSoapIn"> <wsdl:part name="parameters" element="tns:Activate" /> </wsdl:message> <wsdl:message name="ActivateSoapOut"> <wsdl:part name="parameters" element="tns:ActivateResponse" /> </wsdl:message> <wsdl:portType name="AccountSrvSoap"> <wsdl:operation name="Create"> <wsdl:input message="tns:CreateSoapIn" /> <wsdl:output message="tns:CreateSoapOut" /> </wsdl:operation> <wsdl:operation name="Activate"> <wsdl:input message="tns:ActivateSoapIn" /> <wsdl:output message="tns:ActivateSoapOut" /> </wsdl:operation> </wsdl:portType> <wsdl:binding name="AccountSrvSoap" type="tns:AccountSrvSoap"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" /> <wsdl:operation name="Create"> <soap:operation soapAction="http://tempuri.org/Create" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> <wsdl:operation name="Activate"> <soap:operation soapAction="http://tempuri.org/Activate" style="document" /> <wsdl:input> <soap:body use="literal" /> </wsdl:input> <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> </wsdl:binding> <wsdl:service name="AccountSrv"> <wsdl:port name="AccountSrvSoap" binding="tns:AccountSrvSoap"> <soap:address location="http://127.0.0.3:8080/Services/AccountSrv.php" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
J'ai l'impression que les namespaces (ATD_Sobul_Web_Entities et ATD_Sobul_Web_Services) me mettent le bronx car j'ai le message suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <?php define('__ROOT__', $_SERVER['DOCUMENT_ROOT']); require_once(__ROOT__.'/Services/AccountSrv.php'); require_once(__ROOT__.'/Entities/Account.php'); $account = new ATD_Sobul_Web_Entities\Account(); $account->username = 'android'; $wsdl = tempnam(sys_get_temp_dir(), 'wsdl'); copy("http://127.0.0.3:8080/Services/AccountSrv.wsdl", $wsdl); $service = new SoapClient($wsdl); $response = $service->Create($account); ?>
GET:Unknow attribute account
Pouvez-vous m'aider ?
Merci d'avance
Partager