1.需求:本公司作为C方,需要把A平台的数据通过定时任务脚本导入到B平台;
2.需求分析:
(1)怎么获取A平台的数据?
(2)怎么把从A平台的数据导入到B平台?
3.需求实施:
(1)通过postman采用get方式调试A平台的开放接口,可以成功返回数据;
(2)在php脚本,通过下载Snoopy.class.php拓展类并引入,以get方式请求接口,可以成功返回数据。
4.具体运用:
require_once "Snoopy.class.php";//引用类
$snoopy_class = new Snoopy;//实例化
$url = "https://***.com/supplier/v1/orders/toBeSent //请求的链接
$snoopy_class->rawheaders["Authorization"] = "Bearer lzGYlRUF9PrJcKKZA%2BwAvN%2F00M";//设置token
$snoopy_class->fetch($url); //获取链接的返回内容
$dingdanStr = $snoopy_class->results;//显示结果,结果是字符串
$dingdanArr = json_decode($dingdanStr, true, 512, JSON_BIGINT_AS_STRING);//格式化返回结果
至此,已经成功通过Snoopy类以get方式获取到第三平台的数据,非常简单!
5.遇到的问题:
由于后期有需求,需要以post方式把B平台的数据由公司C方向A平台传送,并且在postman调试工作中需要用到raw模式submit参数,刚好又Snoopy类不支持raw模式提交参数。
为此,post方式raw模式传输数据本人采用了php自带简单粗暴的函数方式实现,下面也做一点分享。
$authToken = "Bearer lzGYlRUF9cKKZA%2BwAvN%";//token设置,必要的。
$post_url = 'https://***.com/supplier/v1/orders/send';//请求的链接
// 需要post提交的测试数据 start 由于需要提交的参数是多维数组,需要用到postman中raw模式application/json协议。
$send_arr = array(
"data" =>array(
array(
"id"=>"30089",
"no"=>"JX",
"com"=>"百世"
),
array(
"id"=>"30086",
"no"=>"A0",
"com"=>"顺丰",
"snItems"=>array(
"S123456789",
"S123456790"
)
)
)
);
// 测试数据end
//重点在这里的设置,组合http网页请求:
$context = stream_context_create(array(
'http' => array(
'method' => 'POST',
'header' => "Authorization: {$authToken}\r\n".
"Content-Type: application/json\r\n",
'content' => json_encode($send_arr)
)
));
$response = file_get_contents($post_url, FALSE, $context); //发送请求
$responseData = json_decode($response, TRUE ,512 ,JSON_BIGINT_AS_STRING); //格式化返回的数据
到这里,以post方式的raw模式http传输就这样可以实现了,算是对目前版本Snoopy的一种缺陷补充吧,如果不需要用到多维数组方式传递参数,只以简单的key-value参数post/submit,那还是可以非常方便的利用Snoopy类的规则进行开发的。
希望以上内容对遇到类似坑的phper有帮助吧~