PHP5下SOAP调用实现过程,php5soap调用过程
PHP5下SOAP调用实现过程,php5soap调用过程
本文以某公司iPhone 6手机预约接口开发为例,介绍PHP5下SOAP调用的实现过程。
一、基础概念
SOAP(Simple Object Access Protocol )简单对象访问协议是在分散或分布式的环境中交换信息的简单的协议,是一个基于XML的协议,它包括四个部分:SOAP封装(envelop),封装定义了一个描述消息中的内容是什么,是谁发送的,谁应当接受并处理它以及如何处理它们的框架;SOAP编码规则(encoding rules),用于表示应用程序需要使用的数据类型的实例; SOAP RPC表示(RPC representation),表示远程过程调用和应答的协定;SOAP绑定(binding),使用底层协议交换信息。
WSDL(Web Service Description Language)就是描述XML Web服务的标准XML格式,WSDL由Ariba、Intel、IBM和微软等开发商提出。它用一种和具体语言无关的抽象方式定义了给定Web服务收发的有关操作和消息。就其定义来说,你还不能把WSDL当作一种对象接口定义语言,例如,CORBA或COM等应用程序体系结构就会用到对象接口定义语言。 WSDL保持协议中立,但它确实内建了绑定SOAP的支持,从而同SOAP建立了不可分割的联系。所以,当我在这篇文章中讨论WSDL的时候,我会假定你把SOAP作为了你的通讯协议。
SOAP和WSDL虽然是web service的两大标准,但是两者并没有必然的联系,都可以独立使用。它们之间的关系就类似HTTP和Html之间的关系。前者是一种协议,后者是对一个Web Server的描述。
二、PHP5下的配置
在php的的配置文件php.ini中,找到
extension=php_soap.dll
然后将前面的;号去掉,然后重启web服务
三、查询web service方法与参数、数据类型
某省电信公司的入单接口为http://***.******.com/services/AcceptedBusiness?wsdl
我们使用SoapClient的__geunctions()和__getTypes()方法查看该接口的方法,参数和数据类型
只有__getFunctions中列出的接口才能被soap调用。
在根目录下创建代码soap.php
<?<span>php </span><span>header</span>("content-type:text/html;charset=utf-8"<span>); </span><span>try</span><span> { </span><span>$client</span> = <span>new</span> SoapClient("http://***.******.com/services/AcceptedBusiness?wsdl"<span>); </span><span>print_r</span>(<span>$client</span>-><span>__getFunctions()); </span><span>print_r</span>(<span>$client</span>-><span>__getTypes()); } </span><span>catch</span> (SOAPFault <span>$e</span><span>) { </span><span>print</span> <span>$e</span><span>; } </span>?>
在浏览器运行:http://localhost/soap.php后,返回结果如下
<span>Array</span><span> ( [</span>0] => ArrayOf_xsd_anyType introduceAcceptedBusiness(<span>string</span> <span>$c3</span>, <span>string</span> <span>$c4</span>, <span>string</span> <span>$linkman</span>, <span>string</span> <span>$linknum</span>, <span>string</span> <span>$num</span>, <span>string</span> <span>$idcard</span>, <span>string</span> <span>$remark</span>, <span>string</span> <span>$address</span><span>) [</span>1] => ArrayOf_xsd_anyType introduceAcceptedBusinessByAiZhuangWei(<span>string</span> <span>$subname</span>, <span>string</span> <span>$linkphone</span>, <span>string</span> <span>$idcard</span>, <span>string</span> <span>$address</span>, <span>string</span> <span>$businesstype</span>, <span>string</span> <span>$marketcode</span>, <span>string</span> <span>$surveycode</span>, <span>string</span> <span>$commanager</span>, <span>string</span> <span>$commanagerphone</span>, <span>string</span> <span>$bendiwang</span>, <span>string</span> <span>$fenju</span>, <span>string</span> <span>$zhiju</span>, <span>string</span> <span>$remark</span><span>) [</span>2] => <span>string</span> <strong>introduceAcceptedBusinessByStandardInterface</strong>(<span>string</span> <span>$xmlStr</span><span>) [</span>3] => <span>string</span> introduceAcceptedBusinessByCallOut(<span>string</span> <span>$xmlStr</span><span>) [</span>4] => <span>string</span> introduceAcceptedBusinessByYddj(<span>string</span> <span>$xmlParam</span><span>) [</span>5] => ArrayOf_xsd_anyType queryAcceptedBusinessByAiZhuangWei(<span>string</span> <span>$surveycode</span>, <span>string</span> <span>$starttime</span>, <span>string</span> <span>$endtime</span><span>) [</span>6] => <span>string</span> queryCallOutOrderByConfig(<span>string</span> <span>$xmlParam</span><span>) ) </span><span>Array</span><span> ( [</span>0] =><span> anyType ArrayOf_xsd_anyType[] )</span>
其中有个方法 introduceAcceptedBusinessByStandardInterface(string $xmlStr),将是开发文档中提到的要使用的接口,参数为xml字符串
另外有的接口中提到有SoapHeader认证,这就需要加入__setSoapHeaders方法,具体可查看http://php.net/manual/zh/soapclient.setsoapheaders.php
四、提交入单
这一步就是需要根据开发文档拼接xml字符串,然后作为introduceAcceptedBusinessByStandardInterface的参数传入
创建acceptedbusiness.php,内容如下
<?<span>php </span><span>header</span>("content-type:text/html;charset=utf-8"<span>); </span><span>try</span><span> { </span><span>$client</span> = <span>new</span> SoapClient('http://***.*******.com/services/AcceptedBusiness?wsdl'<span>); </span><span>$xml</span> = "<span> <?xml version='1.0' encoding='UTF-8' ?> <PACKAGE> <C3>**电信</C3> <C4></C4> <LINKMAN>张三</LINKMAN> <LINKNUM>13412341234</LINKNUM> <LINKADDRESS>广东深圳</LINKADDRESS> <REMARK>iPhone 6</REMARK> <CHANNEL></CHANNEL> <GRIDCODE>1111111111111111111111111111111</GRIDCODE> <AGENTCODE>2111</AGENTCODE> <KEY>1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111</KEY> </PACKAGE> </span>"<span>; </span><span>$return</span> = <span>$client</span>->introduceAcceptedBusinessByStandardInterface(<span>$xml</span><span>); </span><span>print_r</span>(<span>$return</span><span>); } </span><span>catch</span> (SOAPFault <span>$e</span><span>) { </span><span>print_r</span>('Exception:'.<span>$e</span><span>); } </span>?>
在浏览器中执行后,返回
<span><?</span><span>xml version="1.0" encoding="UTF-8"</span><span>?></span> <span><</span><span>PACKAGE</span><span>></span> <span><</span><span>STATUS</span><span>></span>0<span></</span><span>STATUS</span><span>></span> <span><</span><span>REASON</span><span>></span>入单成功!<span></</span><span>REASON</span><span>></span> <span><</span><span>ORDERSEQ</span><span>></span>2014100905523549742<span></</span><span>ORDERSEQ</span><span>></span> <span></</span><span>PACKAGE</span><span>></span>
soap 相比nusoap来说,优势之一是用c开发并编译成php内部函数库,而NuSOAP 完全由PHP语言编写,由一系列PHP 类组成。优势之二,nusoap是很早以前就有的,从2005-07-27 之后就停止更新了,而Soap在php5版本新增,随着php6对webservice的支持,我相信soap这个函数库的地位肯定会不断上升。
php5的Soap 函数库使用起来很方便,wsdl可以使用zend Development Environment 开发工具生成。
注意几点问题 :
1. 为了提高效率,php对 wsdl文件提供了缓存功能,开发的时候可以将使用ini_set("soap.wsdl_cache_enabled", 0); 让其失效,因为开发过程经常要修改wsdl文件;
2. SOAP(Simple Object Access Protocol) 简单对象访问协议,在php5不仅仅可以提供对象setClass给远程访问调用,还可以提供方法addFunctions。所以SOAP中的 'O' 已经被扩展了 。
3. 服务端有可能取不到客户端POST过来的数据,这可能是php5 soap functions的bugs;解决办法在下文的服务端举例程序中有一段代码:
if (isset($HTTP_RAW_POST_DATA)) {
$request = $HTTP_RAW_POST_DATA;
} else {
$request = file_get_contents('php://input');
}
下面是举例程序源代码。
soap客户端举例:
ini_set("soap.wsdl_cache_enabled", 0);
try{
$soap = new SoapClient('authenticate/idolol.wsdl');
$soap->get_avatar(230);
$functions = $soap->__getFunctions();
print_r($functions);
$types = $soap->__getTypes();
print_r($types);
}catch(SoapFault $fault){
trigger_error("SOAP Fault: (faultcode: {$fault->faultcode}, faultstring: {$fault->faultstring})", E_USER_ERROR);
}
?>
soap 服务端举例:
require './soap_functions.php';
ini_set("soap.wsdl_cache_enabled", 0);
$server = new SoapServer('authenticate/idolol.wsdl',array('encoding'=>'UTF-8'));
$server->addFunction(array("user_login","se......余下全文>>
webservice有很多种,只有SOAP类型的webservice才使用SoapClient调用。
其实SoapClient是对soap请求的封装。你也可以使用底层的接口来访问,不过这需要你了解SOAP协议,而且非常麻烦。
有一个叫nusoap的库,可以方便地编写SOAP服务和SOAP请求,你可以了解一下。
望采纳,谢谢支持!

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









Huawei 携帯電話にデュアル WeChat ログインを実装するにはどうすればよいですか?ソーシャルメディアの台頭により、WeChatは人々の日常生活に欠かせないコミュニケーションツールの1つになりました。ただし、多くの人は、同じ携帯電話で同時に複数の WeChat アカウントにログインするという問題に遭遇する可能性があります。 Huawei 社の携帯電話ユーザーにとって、WeChat の二重ログインを実現することは難しくありませんが、この記事では Huawei 社の携帯電話で WeChat の二重ログインを実現する方法を紹介します。まず第一に、ファーウェイの携帯電話に付属するEMUIシステムは、デュアルアプリケーションを開くという非常に便利な機能を提供します。アプリケーションのデュアルオープン機能により、ユーザーは同時に

プログラミング言語 PHP は、さまざまなプログラミング ロジックやアルゴリズムをサポートできる、Web 開発用の強力なツールです。その中でも、フィボナッチ数列の実装は、一般的で古典的なプログラミングの問題です。この記事では、PHP プログラミング言語を使用してフィボナッチ数列を実装する方法を、具体的なコード例を添付して紹介します。フィボナッチ数列は、次のように定義される数学的数列です。数列の最初と 2 番目の要素は 1 で、3 番目の要素以降、各要素の値は前の 2 つの要素の合計に等しくなります。シーケンスの最初のいくつかの要素

Huawei 携帯電話に WeChat クローン機能を実装する方法 ソーシャル ソフトウェアの人気と人々のプライバシーとセキュリティの重視に伴い、WeChat クローン機能は徐々に人々の注目を集めるようになりました。 WeChat クローン機能を使用すると、ユーザーは同じ携帯電話で複数の WeChat アカウントに同時にログインできるため、管理と使用が容易になります。 Huawei携帯電話にWeChatクローン機能を実装するのは難しくなく、次の手順に従うだけです。ステップ 1: 携帯電話システムのバージョンと WeChat のバージョンが要件を満たしていることを確認する まず、Huawei 携帯電話システムのバージョンと WeChat アプリが最新バージョンに更新されていることを確認します。

今日のソフトウェア開発分野では、効率的で簡潔かつ同時実行性の高いプログラミング言語として、Golang (Go 言語) が開発者にますます好まれています。豊富な標準ライブラリと効率的な同時実行機能により、ゲーム開発の分野で注目を集めています。この記事では、ゲーム開発に Golang を使用する方法を検討し、具体的なコード例を通じてその強力な可能性を示します。 1. ゲーム開発における Golang の利点 Golang は静的型付け言語として、大規模なゲーム システムの構築に使用されます。

PHP ゲーム要件実装ガイド インターネットの普及と発展に伴い、Web ゲーム市場の人気はますます高まっています。多くの開発者は、PHP 言語を使用して独自の Web ゲームを開発することを望んでおり、ゲーム要件の実装は重要なステップです。この記事では、PHP 言語を使用して一般的なゲーム要件を実装する方法を紹介し、具体的なコード例を示します。 1. ゲームキャラクターの作成 Web ゲームにおいて、ゲームキャラクターは非常に重要な要素です。ゲームキャラクターの名前、レベル、経験値などの属性を定義し、これらを操作するメソッドを提供する必要があります。

Golang で正確な除算演算を実装することは、特に財務計算を含むシナリオや高精度の計算が必要なその他のシナリオでよくあるニーズです。 Golang の組み込みの除算演算子「/」は浮動小数点数に対して計算されるため、精度が失われる場合があります。この問題を解決するには、サードパーティのライブラリまたはカスタム関数を使用して、正確な除算演算を実装します。一般的なアプローチは、math/big パッケージの Rat タイプを使用することです。これは分数の表現を提供し、正確な除算演算を実装するために使用できます。

多くの友人はまだ matlab で m ファイルを呼び出す方法を知らないので、以下のエディターが matlab で m ファイルを呼び出す方法を説明しています。 1. 以下の図に示すように、まず matlab ソフトウェアを開き、メイン インターフェイスで [開く] をクリックします。 2. 次に、以下の図に示すように、開く必要がある m ファイルを選択し、「開く」を選択します。 3. 次に、以下の図に示すように、エディターで m ファイルのファイル名と変数の数を確認します。 4. 次の図に示すように、コマンド ラインで m ファイル名に続いて括弧内の変数値を入力すると、ファイルを呼び出すことができます。 5. 最後に、次の図に示すように、m ファイルを正常に呼び出すことができます。上記は、エディターによって提供された matlab で m ファイルを呼び出す方法の完全な説明です。

タイトル: Golang を使用したデータエクスポート機能の詳細説明 情報化の進展に伴い、多くの企業や組織は、データ分析やレポート作成などの目的で、データベースに保存されているデータをさまざまな形式でエクスポートする必要があります。この記事では、Golang プログラミング言語を使用してデータ エクスポート機能を実装する方法を紹介します。これには、データベースへの接続、データのクエリ、データのファイルへのエクスポートの詳細な手順が含まれ、具体的なコード例も示されます。最初にデータベースに接続するには、Golang で提供されるデータベース ドライバー (da など) を使用する必要があります。
