Web 從文檔集散地演進為服務平台。B2B/B2C 協同本質是服務調用。表現層(HTML)之下需要統一服務層,支援瀏覽器、行動裝置、家電等異構終端。XML-RPC 正是這層標準協議。
POST /RPC2 HTTP/1.0
Content-Type: text/xml
<?xml version="1.0"?>
<methodCall>
<methodName>examples.getStateName</methodName>
<params>
<param><value><i4>41</i4></value></param>
</params>
</methodCall>
| 標籤 | 型別 | 範例 |
|---|---|---|
| <i4> / <int> | 32-bit 有號整數 | 12 |
| <boolean> | 布林 | 0/1 |
| <string> | 字串 | Hello World |
| <double> | 雙精度浮點 | -12.214 |
| <dateTime.iso8601> | 日期時間 | 19980717T14:08:55 |
| <base64> | 二進位 | eW91IGbid0IHJlQgdGhpcyE= |
<struct>
<member><name>name</name><value><string>member1</string></value></member>
<member><name>age</name><value><i4>19</i4></value></member>
</struct>
<array>
<data>
<value><boolean>0</boolean></value>
<value><i4>9</i4></value>
<value><string>Hello</string></value>
</data>
</array>
<?xml version="1.0"?>
<methodResponse>
<params>
<param><value><string>ABCDEFG</string></value></param>
</params>
</methodResponse>
<fault>
<value><struct>
<member><name>faultCode</name><value><int>4</int></value></member>
<member><name>faultString</name><value><string>Error!</string></value></member>
</struct></value>
</fault>
xmlrpc.inc:客戶端類別xmlrpcs.inc:服務端類別new xmlrpcmsg($methodName, $paramArray)new xmlrpc_client($path, $host, $port)$client->send($msg) 回傳 xmlrpcresp$resp->faultCode()$resp->value() 回傳 xmlrpcval$val->scalarval() 或 xmlrpc_decode($val)(陣列/結構)<?php
include("xmlrpc.inc");
$f = new xmlrpcmsg('examples.getStateName', array(new xmlrpcval(14, "int")));
$c = new xmlrpc_client("/RPC2", "betty.userland.com", 80);
$r = $c->send($f);
$v = $r->value();
if (!$r->faultCode()) {
print "狀態代碼 14 是 " . $v->scalarval() . "<BR>";
print "<HR>原始回應<BR><PRE>" . htmlentities($r->serialize()) . "</PRE><HR>";
} else {
print "錯誤: 代碼 " . $r->faultCode() . " 原因: '" . $r->faultString() . "'<BR>";
}
?>
<?php
// 陣列
$myArray = new xmlrpcval(array(
new xmlrpcval("Tom"),
new xmlrpcval("Dick"),
new xmlrpcval("Harry")
), "array");
// 結構
$myStruct = new xmlrpcval(array(
"name" => new xmlrpcval("Tom"),
"age" => new xmlrpcval(34, "int"),
"geek" => new xmlrpcval(1, "boolean")
), "struct");
?>
xmlrpc_encode($phpval):PHP 變數 → xmlrpcval(遞迴支援陣列/結構)xmlrpc_decode($xmlrpc_val):xmlrpcval → PHP 原生陣列