なぜそれにWebサービスインタフェースを呼び出しますか?
- 同社は、ハードウェアインターフェイスが書かれたJavaプロジェクトのWebサービスインタフェース技術を使用して、ハードウェアのプロジェクトを取りました。
Webサービスとは何ですか?
- Webサービスは、アプリケーション・コンポーネントです
- Webサービスは、オープンプロトコルを使用して通信します
- Webサービスの独立した(自己完結型)と自己記述であります
- Webサービスは、UDDIを使用して見つけることができます
- Webサービスは、他のアプリケーションで使用することができます
- XML Webサービスの基礎となっています
2つの方法でPHPのWebサービスの呼び出し
- PHP拡張クラス石鹸
- PHPのCURL
石鹸は何ですか
任意のデータとすることができるテキスト/ XMLのXML:SOAPリクエスト(シンプル・オブジェクト・アクセス・プロトコル、シンプル・オブジェクト・アクセス・プロトコル)に特別なメッセージ形式のXMLコンテンツ・タイプ次のHTTP POSTの特別なバージョンです。
SOAP:シンプル・オブジェクト・アクセス・プロトコル、シンプル・オブジェクト・アクセス・プロトコル(SOAP)を硬化させ、WEBで構造化された情報を交換するように設計された軽量、シンプル、XMLベースのプロトコルです。SOAPを使用することができ、ハイパーテキスト転送プロトコル(HTTP)、簡易メール転送プロトコル(SMTP)、多目的インターネットメール拡張(MIME)を含む既存のインターネットプロトコルやフォーマットの組み合わせ、多くの。また、リモートプロシージャへのコール(RPC)、メッセージングシステムからの多数のアプリケーションをサポートしています。
小扁は、ここで紹介した石鹸のためのあまりをしない、石鹸PHPを使用しないでください。
JavaへのWebサービス・インターフェースを呼び出すためにカールを使用しました
さらに騒ぎがなければ、シリアに直接コードに
カールを作成します。
function posturl($url,$data){
$headerArray =array("Content-Type: application/soap+xml; charset=utf-8", "Content-length: ".strlen($data));
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST,FALSE);
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
curl_setopt($curl,CURLOPT_HTTPHEADER,$headerArray);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
curl_close($curl);
return $output;
}
取得された形式SOAPUIを使用してウェブサービスインターフェース方法
PHPは内部書かれて書かれた上記のパラメータのフォーマットをコピーします。
データがそこにコピーされているので、ここで小扁は、高度、PHPstormツールを推奨PHPstormツールは、私たちはデータを解析するのに役立ちます。
$url = "http://.cn:17236/vims/services/MobPhoneService?wsdl";
$code = 1000001;
$data = "
<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\" xmlns:web=\"http://webservice.dhsoft.com\">
<soapenv:Header/>
<soapenv:Body>
<web:openDoor>
<!--Optional:-->
<arg0>
{\"deviceCode\":$code}
</arg0>
</web:openDoor>
</soapenv:Body>
</soapenv:Envelope>";
调用一下看看数据,由于用的是http的请求方式,所以webservice返回的数据里面有好多没用的东西,但是直接在浏览器打印的时候看到的只有json串,因为浏览器把xml那部分解析了。
var_dump(posturl($url,$data));
1,返回的数据格式:
string(307) "{"status":"1","resultMessage":"信息发送成功"}"
2,其实是浏览器把xml的部分解析了,下面我们查看源代码看一下真实的数据吧;
string(307) "<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:openDoorResponse
xmlns:ns2="http://webservice.dhsoft.com"><openDoor>{"status":"1","resultMessage":"信息发送成功"}
</openDoor></ns2:openDoorResponse></soap:Body></soap:Envelope>"
3,我们看到这不是json数据,怎么办呢,小编在网上费了九牛二虎之力找到了字符串截取的办法。
function get_between($input, $start, $end) {
$str = substr($input, strlen($start)+strpos($input, $start),(strlen($input) - strpos($input, $end))*(-1));
return $str;
}
$data = '{'.get_between(posturl($url,$data),'{','}').'}';
$data_str = str_replace('"','"',$data);
var_dump($data_str);
4,此时我们在使用查看源码的方式,数据格式就是完整的json数据。
string(51) "{"status":"1","resultMessage":"信息发送成功"}"
5,这个时候用json_decode把json转换成数据是轻而易举了。
var_dump(json_decode($data_str));
object(stdClass)#1 (2) {
["status"]=>
string(1) "1"
["resultMessage"]=>
string(18) "信息发送成功"
}
概要
多くの場合、我々は他のAPI、データフォーマットエラーを呼び出すときに、ブラウザを欺くことができ、我々が使用する必要があり、ソースコードを表示するためにどのような実際のデータを解決する方法を、小扁は、このピットが発生しています。数日間に私をハングアップする、明らかにブラウザの印刷は、完全なJSONデータであるが、json_decodeを使用すると、配列を解析することです。その後、ソースコードを見て。そんなにデータ内に隠さ元。
私は少し友人が外に登る時に、このようなピットに遭遇たいです。