1.在控制器中引入Autoloader.php

我把sdk放在了app\Aliyun下

1
include_once app_path().'/Aliyun/Util/Autoloader.php';

2.复制sdk中Demo案例中的方法到控制器中使用 以 doPostForm 为例

注: Autoloader.php使用了autoload自动加载,类的namespace在 \ 下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
include_once app_path().'/Aliyun/Util/Autoloader.php';
class TestController extends Controller
{
private static $appKey = '';
private static $appSecret = '';
public function __construct()
{
$this::$appKey = '你的appKey';
$this::$appSecret = '你的appSecret';
}
public function doPostForm() {
//协议(http或https)://域名:端口,注意必须有http://或https://
$host = "http://test.alicloudapi.com";
//域名后、query前的部分
$path = "/postform";
$request = new \HttpRequest($host, $path, \HttpMethod::POST, $this::$appKey, $this::$appSecret);

//设定Content-Type,根据服务器端接受的值来设置
$request->setHeader(\HttpHeader::HTTP_HEADER_CONTENT_TYPE, \ContentType::CONTENT_TYPE_FORM);

//设定Accept,根据服务器端接受的值来设置
$request->setHeader(\HttpHeader::HTTP_HEADER_ACCEPT, \ContentType::CONTENT_TYPE_JSON);
//如果是调用测试环境请设置
//$request->setHeader(SystemHeader::X_CA_STAG, "TEST");


//注意:业务header部分,如果没有则无此行(如果有中文,请做Utf8ToIso88591处理)
//mb_convert_encoding("headervalue2中文", "ISO-8859-1", "UTF-8");
$request->setHeader("b-header2", "headervalue2");
$request->setHeader("a-header1", "headervalue1");

//注意:业务query部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理
$request->setQuery("b-query2", "queryvalue2");
$request->setQuery("a-query1", "queryvalue1");

//注意:业务body部分,如果没有则无此行;请不要、不要、不要做UrlEncode处理
$request->setBody("b-body2", "bodyvalue2");
$request->setBody("a-body1", "bodyvalue1");

//指定参与签名的header
$request->setSignHeader(\SystemHeader::X_CA_TIMESTAMP);
$request->setSignHeader("a-header1");
$request->setSignHeader("b-header2");

$response = \HttpClient::execute($request);
print_r($response);
}
}

3.接口返回数据

因为返回数据格式如下,所以需要通过反射函数转化为数组

1
2
3
4
5
6
object(HttpResponse)#11 (7) {
["content":"HttpResponse":private] => string(1047) "HTTP/1.1 200 OK
Server: Tengine
Date: Fri, 22 Jun 2018 09:52:33 GMT
Content-Type: application/json; charset=UTF-8
...

在获取到 $response 下加入

1
2
3
4
5
6
7
8
9
10
$response = \HttpClient::execute($request);
$ref = new ReflectionClass($response);
$props = $ref->getProperties();
$arr = [];

foreach ($props as $prop) {
$prop->setAccessible(true);
$arr[$prop->getName()] = $prop->getValue($response);
$prop->setAccessible(false);
}