关于thinkphp5.1中vendor目录与extend目录说明
1、vendor
vendor的是通过composer的方法进行自动引入到第三方扩展库vendor目录里的,调用方法是利用的vendor方法:
2、extend
extend是通过手动的方法直接把第三方扩展库或者自己写的封装库直接引入到extend目录里,调用方法的实例:
require '../extend/taobao/TopSdk.php';
require '../extend/taobao/QimenCloud/top/request/WdgjTradenosensitiveinfoListGetRequest.php';
调取淘系数据需要下载第三方类库包好相应开放功能
<?php
//获取网店管家测试数据
namespace app\index\controller;
use app\facade\HttpRequest;
use \think\Request;
class Qimen
{
/** 问题 1.弄清楚 ASCII排序 与 字典序排序
* 系统级参数
* Appkey = "71005530" //接入应用需要的key
* AppSecret = "n800m9iaei27l1n3b5eh7ko87gfl2k0g" //用于生成sign
* AccessToken = "191167eb31f242bfa4a089359b77f5e4" //授权码
*/
public $Appkey = "71005530";
public $AppSecret = "n800m9iaei27l1n3b5eh7ko87gfl2k0g";
public $AccessToken = "191167eb31f242bfa4a089359b77f5e4";
//奇门key
public $Appkeyqm = "对应奇门appkeyqm";
//奇门secret
public $Appsecretqm = "对应奇门appsecretqm";
//授权方的奇门 应用 的Appkey 貌似该代码中没有使用到
public $targetAppkey='对应奇门targetAppkey';
//授权方给客户配置的奇门路由参数routeParameter 有的接口本身就有这个参数直接传值即可,例如订单查询;有的接口入参没有这个参数,需要额外传入这个参数例如会员查询,目前设置的值与自己的奇门应用Appkey一致
public $routeParameter='*****';
//调用入口地址
public $gatewayUrl = "http://t33hglzv00.api.taobao.com/router/qm";
// 查询仓库信息 应用级参数
public $Method = "wdgj.warehouse.list.get";
public $Format ="json";
public $Versions = "1.0";
// public $Timestamp = "1581228150";
public $Apiurl = "http://api.wdgj.com/wdgjcloud/api";
public $Heades = array('application/x-www-form-urlencoded;charset=UTF8');
/**
* 对象 转 数组
* @param object $obj 对象
* @return array
*/
public function object_to_array($obj) {
$obj = (array)$obj;
foreach ($obj as $k => $v) {
if (gettype($v) == 'resource') {
echo '资源非对象';die();
}
if (gettype($v) == 'object' || gettype($v) == 'array') {
//数据为空默认给空字符
if (empty($v)){
$obj[$k] = '';
continue;
}
$obj[$k] = (array)$this->object_to_array($v);
}
}
return $obj;
}
//网店管家对奇门数据抓取的类库引用
public function WdgjTradenosensitiveinfoListGetRequest($data){
//抓取淘系数据
/**引入类库*/
require '../extend/taobao/TopSdk.php';
require '../extend/taobao/QimenCloud/top/request/WdgjTradenosensitiveinfoListGetRequest.php';
$c = new \QimenCloudClient($this->Appkeyqm,$this->Appsecretqm);
$req = new \WdgjTradenosensitiveinfoListGetRequest();
$req->setBegintime($data['begintime']);
$req->setEndtime($data['endtime']);
$req->setPageno('1');
$req->setPagesize('20');
$req->setSearchtype('0');
$req->setwdgjaccesstoken($this->AccessToken);
$req->setWdgjappkey($this->Appkey);
$req->setWdgjmethod('wdgj.tradenosensitiveinfo.list.get');
$req->setWdgjformat("json");
$req->setWdgjversions('1.0');
$req->setWdgjtimestamp($data['timestamp']);
$req->setWdgjsign($data['sign']);
$rsp = $c->execute($req);
//对象转数组
$res = $this->object_to_array($rsp);
return $res;
}
/*
* 抓取网店管家淘系数据 订单数据
*/
public function WdgjTradenosensitiveinfoListGet(Request $request)
{
//系统级参数
$paramArr = array();
$paramArr['appkey'] = $this->Appkey;
$paramArr['accesstoken'] = $this->AccessToken;
$paramArr['aethod'] = $this->Method;
$paramArr['format'] = $this->Format;
$paramArr['versions'] = $this->Versions;
$paramArr['timestamp'] = (string)time();
//应用级参数
$paramArr['searchtype'] = "0";
$paramArr['pageno'] = "1";
$paramArr['pagesize'] = "1";
$paramArr['begintime'] = date('Y-m-d H:i:s',strtotime("-1 day"));
$paramArr['endtime'] = date('Y-m-d H:i:s');
$paramArr['method'] = 'wdgj.tradenosensitiveinfo.list.get';
$paramArrDemo = $paramArr;
//生成Sign签名 将除Sign参数外的所有系统级参数和应用级级参数的值进行字典排序生成串(versions=1.1时按ASCII码排序)
if($paramArr['versions']=='1.1'){
// 发现问题 ASCCII的排序与测试工具的排序是不一样的 所以version值我改成1.0的字典排序
//ksort($paramArrDemo);
sort($paramArrDemo,SORT_LOCALE_STRING);
}else{
sort($paramArrDemo,SORT_LOCALE_STRING);
}
//2. 将AppSecret加到该串的首和尾并进行MD5加密生成32位字符串
$paramString = join($paramArrDemo);
//Sign签名 所有系统级参数 和 必要的应用级参数 的值进行 字典排序 生成串
$sign = MD5($this->AppSecret.$paramString.$this->AppSecret);
$paramArr['sign'] = $sign;
//抓取淘系数据
$res = $this->WdgjTradenosensitiveinfoListGetRequest($paramArr);
dump(1111);
halt($res);
}
// 不通过淘系sdk抓取 查询仓库信息的接口
public function wdgjwarehouselistGet(Request $request)
{
//1. 进行字典序排序 或者 ASCII码排序
//系统级参数
$paramArr = array();
$paramArr['Appkey'] = $this->Appkey;
$paramArr['Accesstoken'] = $this->AccessToken;
$paramArr['Method'] = $this->Method;
$paramArr['Format'] = $this->Format;
$paramArr['Versions'] = $this->Versions;
$paramArr['Timestamp'] = (string)time();
//应用级参数 依赖注入方式调用
$paramArr['pageno'] = $request->get('page');
$paramArr['pagesize'] = $request->get('pageSize');
$paramArrDemo = $paramArr;
//生成Sign签名 将除Sign参数外的所有系统级参数和应用级级参数的值进行字典排序生成串(versions=1.1时按ASCII码排序)
if($paramArr['Versions']=='1.1'){
// 发现问题 ASCCII的排序与测试工具的排序是不一样的 所以version值我改成1.0的字典排序
// ksort($paramArrDemo);
sort($paramArrDemo,SORT_LOCALE_STRING);
}else{
sort($paramArrDemo,SORT_LOCALE_STRING);
}
//2. 将AppSecret加到该串的首和尾并进行MD5加密生成32位字符串
$paramString = join($paramArrDemo);
//Sign签名 所有系统级参数 和 必要的应用级参数 的值进行 字典排序 生成串
$sign = MD5($this->AppSecret.$paramString.$this->AppSecret);
$paramArr['Sign'] = $sign;
//3. 发送post 请求获取网店管家数据
\think\Facade::bind('app\facade\HttpRequest','\app\common\HttpRequest');
/**
* 请求数据
* @param string $url 请求地址
* @param array $postData 请求数据
* @param string $head 请求头
* @return array
*/
//静态代理方式调用
$res = HttpRequest::httprequest($this->Apiurl, $paramArr, $this->Heades);
dump($res);
}
}