以下文字转载自https://www.ngui.cc/el/2450663.html?action=onClick
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有帮助吧~
评论抢沙发