美团点评北极星开放平台PHP的SDK - 梅宝博客(Amibk)---为解决问题分享方法而存在

您当前的位置:首页 > 美团点评北极星开放平台PHP的SDK网站首页日记


正文阅读

美团点评北极星开放平台PHP的SDK

发布时间:2018-10-21 22:18 Sunday编辑:大饭米粒

    啊哈哈,快2年没更新博客了啊,中间忽然变得忙碌了起来,一直没时间打理博客就这么放着没有去动,最近在做一个网页项目,要用到新美大的北极星开放平台,接入核销验券的功能,懒癌中的我肯定先去看看有没有我对应开发语言的SDK,结果发现有JAVA、C#、python、node,偏偏就没有我大PHP语言的SDK,我PHP以后可能是'世界上最好的编程语言'啊!我PHP大法好居然没有给SDK,没法只好自己写一个了,分享给中PHP程序猿们,其实非常简单

    贴出代码前说明,贴出的只有扫码校验接口和验券接口,其实方法都一样,你们可以按照代码中的思路再去拓展


    一、API接口类:

    class DpApi{
        public static function scanprepare($inputObj){
            $string = $inputObj->ToUrlParams();
            $sign = $inputObj->MakeSign();
            $string = $string.'&sign='.$sign;
            $tmp = self::curl_post_https('https://openapi.dianping.com/router/tuangou/receipt/scanprepare',$string);
            return json_encode($tmp);
        }
        public static function consume($inputObj){
            $string = $inputObj->ToUrlParams();
            $sign = $inputObj->MakeSign();
            $string = $string.'&sign='.$sign;
            $tmp = self::curl_post_https('https://openapi.dianping.com/router/tuangou/receipt/consume',$string);
            return json_encode($tmp);
        }
    
        public static function curl_post_https($url,$data){ // 模拟提交数据函数
            $curl = curl_init(); // 启动一个CURL会话
            curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
            curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
            curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false); // 从证书中检查SSL加密算法是否存在
            curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
            curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
            curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
            curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
            curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
            curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制防止死循环
            //curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
            curl_setopt($curl,CURLOPT_HTTPHEADER,Array("Content-Type:application/x-www-form-urlencoded; charset=utf-8"));//header
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
            $tmpInfo = curl_exec($curl); // 执行操作
            if (curl_errno($curl)) {
                echo 'Errno'.curl_error($curl);//捕抓异常
            }
            curl_close($curl); // 关闭CURL会话
            return $tmpInfo; // 返回数据,json格式
        }
    }

    二、数据类(含签名)

    
    
    
    class dianping
    {
        public $values = array(
            'app_key'=>'your_app_key',
            'format'=>'json',
            'v'=>'1',
            'sign_method'=>'MD5'
        );
    
        public function MakeSign()
        {
            $key = 'Your_app_secret';
            //签名步骤一:按字典序排序参数
            ksort($this->values);
            $string = $this->ToSignParams();
            //签名步骤二:在string后加入KEY
            $string = $key .$string . $key;
    //        return $string;
            //签名步骤三:MD5加密
            $string = md5($string);
            return $string;
        }
    
    
        public function ToSignParams()
        {
            $buff = "";
            foreach ($this->values as $k => $v) {
                if ($k != "sign" && $v != "" && !is_array($v)) {
                    $buff .= $k . "=" . $v . "&";
                }
            }
            $buff = trim($buff, "&");
            $tmp = str_replace('=','',$buff);
            $tmp = str_replace('&','',$tmp);
            return $tmp;
        }
        public function ToUrlParams()
        {
            $buff = "";
            foreach ($this->values as $k => $v) {
                if ($k != "sign" && $v != "" && !is_array($v)) {
                    $buff .= $k . "=" . $v . "&";
                }
            }
            $buff = trim($buff, "&");
            return $buff;
        }
    
    }
    class dianping_query extends dianping{
    
        public function SetTimestamp($value)
        {
            $this->values['timestamp'] = $value;
        }
        public function SetSession($value)
        {
            $this->values['session'] = $value;
        }
    
        public function SetQr_code($value)
        {
            $this->values['qr_code'] = $value;
        }
        public function SetApp_shop_id($value)
        {
            $this->values['app_shop_id'] = $value;
        }
        public function SetOpen_shop_uuid($value)
        {
            $this->values['open_shop_uuid'] = $value;
        }
    }
    class dianping_use extends dianping{
    
        public function SetTimestamp($value)
        {
            $this->values['timestamp'] = $value;
        }
        public function SetSession($value)
        {
            $this->values['session'] = $value;
        }
    
        public function SetRequestid($value)
        {
            $this->values['requestid'] = $value;
        }
        public function SetReceipt_code($value)
        {
            $this->values['receipt_code'] = $value;
        }
        public function SetCount($value)
        {
            $this->values['count'] = $value;
        }
        public function SetApp_shop_id($value)
        {
            $this->values['app_shop_id'] = $value;
        }
        public function SetApp_shop_account($value)
        {
            $this->values['app_shop_account'] = $value;
        }
        public function SetApp_shop_accountname($value)
        {
            $this->values['app_shop_accountname'] = $value;
        }
        public function SetOpen_shop_uuid($value)
        {
            $this->values['open_shop_uuid'] = $value;
        }
    }

    三、调用示例(扫码校验示例)

    require_once 'api.php';
    require_once 'data.php';
    if (!empty($_POST['code'])) {
        $qr_code = '要查询的券码,我这里用POST接收';
        $session = 'Your_session';
        $shopid = '你系统内商户的ID';
        $dp = new dianping_query();
        $dp->SetQr_code($qr_code);
        $dp->SetSession($session);
        $dp->SetTimestamp(date("Y-m-d H:i:s"));
        $dp->SetApp_shop_id($shopid);
        $data = new DpApi();
        print_r($data->scanprepare($dp));
    }


    如使用有疑问请在下方留言,转载请留出处,谢谢!


发表评论:

您也可以直接填写QQ到下面的输入框中,点击获取用户资料实现自动调用您的QQ资料