PHPは、ピットのものにするJava Webサービスを呼び出します

なぜそれに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を使用してウェブサービスインターフェース方法

オンラインツールである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>{&quot;status&quot;:&quot;1&quot;,&quot;resultMessage&quot;:&quot;信息发送成功&quot;}
	</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('&quot;','"',$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を使用すると、配列を解析することです。その後、ソースコードを見て。そんなにデータ内に隠さ元。

私は少し友人が外に登る時に、このようなピットに遭遇たいです。

おすすめ

転載: blog.csdn.net/zxh7770/article/details/88568229