静态代理和依赖注入方式获取网店管家查询仓库信息接口

请求的URL地址http://localhost/tp5.1/public/index.php/index/wdgj/wdgjwarehouselistGet?page=1&pageSize=10

  1. 进行字典序排序 或者 ASCII码排序
  2. 将AppSecret加到该串的首和尾并进行MD5加密生成32位字符串生成Sign签名
  3. 将所有的系统级参数与应用级参数 ( 指的是必填类参数 ) 发送post 请求获取网店管家数据
<?php
//获取网店管家测试数据
namespace app\index\controller;
use app\facade\HttpRequest;
use \think\Request;
class Wdgj
{
    /** 问题  1.弄清楚 ASCII排序 与 字典序排序
     * 系统级参数
     * Appkey = "71005530"  //接入应用需要的key
    *  AppSecret = "n800m9iaei27l1n3b5eh7ko87gfl2k0g"  //用于生成sign
    *  AccessToken = "191167eb31f242bfa4a089359b77f5e4" //授权码
    */
    public $Appkey = "71005530";
    public $AppSecret = "n800m9iaei27l1n3b5eh7ko87gfl2k0g";
    public $AccessToken = "191167eb31f242bfa4a089359b77f5e4";
    // 查询仓库信息
    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');
    // 查询仓库信息的接口
    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);
    }

}

/**
* 如果想静态调用一个动态方法,需要给当前的类绑定一个静态代理的类
*如果没有在静态代理类中显示指定要绑定的类名,就需要动态显示绑定一下
* \think\Facade::bind()
*/

在这里插入图片描述

<?php
namespace app\facade;


class HttpRequest extends \think\Facade
{

}

如果想静态调用一个动态方法,需要给当前的类绑定一个静态代理的类
在这里插入图片描述

<?php
namespace app\common;


class HttpRequest
{
    /**
     * 请求数据
     * @param string $url 请求地址
     * @param array $postData 请求数据
     * @param string $head 请求头
     * @return array
     */
    public function httpRequest($url, $postData, $head)
    {
        //初始化
        $curl = curl_init();
        //设置抓取的url;
        curl_setopt($curl, CURLOPT_URL, $url);
        //设置头文件的信息作为数据流输出
        curl_setopt($curl, CURLOPT_HEADER, 0);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $head);
        curl_setopt($curl, CURLINFO_HEADER_OUT, true);
        if (0 === strpos(strtolower($url), 'https')) {
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 对认证证书来源的检查
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在 7.2 强制https 使用2
        }

        if (!empty($postData)) {
            curl_setopt($curl, CURLOPT_POST, true); //设置post方式提交
            curl_setopt($curl, CURLOPT_POSTFIELDS, http_build_query($postData)); //使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。参数 formdata 可以是数组或包含属性的对象。
            //设置post数据
        }
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //执行命令
        $json = curl_exec($curl);
        $error = curl_error($curl);
        //关闭URL请求
        curl_close($curl);
        if ($json === false) //请求失败
        {
            return ['success' => false, 'desc' => 'curl错误,错误编码:' . $error];
        }
        if (preg_match('/^\xEF\xBB\xBF/', $json)) //去除boom 头
        {
            $output = substr($json, 3);
        } else {
            $output = $json;
        }
        $obj = json_decode(trim($output), true);
        return ['code'=>1,'msg'=>'抓取成功','data'=>$obj];
    }
}

查询返回结果
在这里插入图片描述网店管家应用验证数据来源真实性

接口对应管家:【管家】->【设置】->【仓库目录】,接口查询出的数据即为该界面的仓库信息。
在这里插入图片描述
参看网店管家接口调用说明文档
http://open.wdgj.com/OpenApiDoc/DocCenter.html

http://open.wdgj.com/OpenApiDoc/ApiInfo.html?openApiID=70000&dictID=87&name%20=

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值