API参考 - 筋斗云服务端

最后更新:2019-03-15

@fn tobool($s)

@fn tryParseBool($s, &$val)

字符串转bool,支持"0/1", "true/false", "yes/no", "on/off".

@fn startsWith($s, $pat)

@fn isCLI()

command-line interface. e.g. run "php x.php"

@fn isCLIServer()

php built-in web server e.g. run "php -S 0.0.0.0:8080"

@fn isEqualCollection($col1, $col2)

@fn urlEncodeArr($params)

e.g.

urlEncodeArr(["a"=>1, "b"=>"hello"]) -> a=1&b=hello

@fn makeUrl($ac, $params, $hash)

e.g.

$url = makeUrl("http://oliveche.com/jdcloud/api.php", ["p1"=>"abc", "p2"=>"333"])

@fn httpCall($url, $postParams =null, $opt={timeout?=5, @headers, %curlOpt={optName=>val} )

请求URL,返回内容。
默认使用GET请求,如果给定postParams,则使用POST请求。
postParams可以是一个kv数组或字符串,也可以是一个文件名(以"@"开头,如"@1.jpg")

如果请求失败,抛出E_SERVER异常。
不检查http返回码。

示例:指定postParams, 默认以application/x-www-form-urlencoded格式提交。

$data = [
    "name" => "xiaoming",
    "classId" => 100
];
// 注意headers的格式
$headers = [
    "Authorization: Basic dGVzdDp0ZXN0MTIz",
    "Cookie: extid=" . session_id()
];
$url = makeUrl("$baseUrl/$ac", $param);
$rv = httpCall($url, $data, ["headers" => $headers]);

上例中在headers中用Authorization指定了登录信息,适合服务器需要登录的场景;
同时主动指定了Cookie(Cookie名称需按服务端要求设置),以便与通过Session保持信息的服务器持续交互。
(有的服务器不使用Cookie,而是在登录后通过返回token来标识,需要额外处理)

示例:调用第三方服务,登录并调用筋斗云后端

function jdcloudCall($ac, $param=null, $postParam=null)
{
    $baseUrl = "http://localhost/jdcloud/api.php";
    $url = makeUrl("$baseUrl/$ac", $param);
    $rv = httpCall($url, $postParam, ["headers" => [
        // 模拟筋斗云用户端cookie
        "Cookie: userid=" . session_id()
    ]]);
    // 筋斗云协议格式:成功为[0, obj] 或 失败为[errCode, userMessage, internalMessage?]
    $ret = json_decode($rv);
    if ( $ret[0] !== 0 ) {
        throw new MyException(E_PARAM, $ret[2], $ret[1]);
    }
    return $ret[1];
}
// 如果是首次则登录
jdcloudCall("login", ["uname"=>"12345678901", "pwd"=>"1234"]);
// 保持会话,获取订单列表
$orders = jdcloudCall("Ordr.query");

示例:提交application/json格式的内容

// 用json_encode将数组变成字符串。避免被httpCall转成urlencoded格式。
$data = json_encode([
    "name" => "xiaoming",
    "classId" => 100
]);
$headers = [
    "Content-type: application/json",
    "Authorization: Basic dGVzdDp0ZXN0MTIz"
];
$GLOBALS["X_RET_STR"] = httpCall($url, $data, ["headers" => $headers]);
// 筋斗云:设置全局变量X_RET_STR可直接设置返回内容,避免再次被json编码。

函数通过CURL实现,若需扩展功能,可以直接设置curlOpt选项(具体选项可查阅curl_setopt文档),如:

$curlOpt = [