ThinkPHP 对接美团大众点评团购券(门票)

news2024/9/30 9:24:19

一、功能简要介绍

1、根据需求,用户在美团大众点评中所购买的门票在自己的系统上可以核销,同时把核销信息存储到自己的系统里。

2、美团点评API文档地址:[https://open.dianping.com/document/v2?rootDocId=5000](https://open.dianping.com/document/v2?rootDocId=5000)

二、开发步骤:

1、用点评管家账号登录文档,相应文档说明:https://open.dianping.com/document/v2?docId=6000136&rootDocId=1000

2 、选好自己相应的应用型,审核通过之后,就可以用平台系统的测试的数据就行接口调用

3、在大众点评app购买相应票,根据验券核销API文档(根据业务需求选择的类型是自用型)调取查询券、验券即核销券的接口。
代码如下:

//查询券、验券
 public function prepare(){
        //  $arr 为数组  里面为应用参数
        $appKey = "1ef04****e3a8";  //key
        $secret = "dd8a291f9f*****4e3fbd9be6ff";  //秘钥
        $timestamp = date('Y-m-d H:i:s');
        $format = 'json';
        $v = 1;
        $sign_method = 'MD5';
        $qr_code = '257***4228';
        $open_shop_uuid = '34d5902420ca****48e941a38d773';
        $session = 'bbf7059256aaf3f1****3b4d9c0816cf819b7';
 
        $data = [
            'app_key' => $appKey,
            'timestamp' => $timestamp,
            'sign_method' => $sign_method,
            'format' => $format,
            'v' => $v,
            'session' => $session,
        ];
        $arr = [
            'requestid'=>'123',
            'receipt_code' => $qr_code,
            //'qr_code'=>$qr_code,
            'open_shop_uuid' => $open_shop_uuid,
            //'count'=>1,
            //'app_shop_account' =>'test',
           // 'app_shop_accountname' =>'test1',
        ];
        $data = array_merge($data, $arr);
        ksort($data);
        $sign = $this->cal_sign($secret, $data);//获取签名
        $data['sign'] = $sign;
//        $data['count'] = $sign;
//        $data['app_shop_account'] = $sign;
//        $data['app_shop_accountname'] = $sign;
        $data = array_merge($data, $arr);
        $postdata = http_build_query($data);
        $url = 'https://openapi.dianping.com/router/tuangou/receipt/prepare';//输码查询券
        //$url = 'https://openapi.dianping.com/router/tuangou/receipt/scanprepare';//扫码查询券
        //$url = 'https://openapi.dianping.com/router/tuangou/receipt/consume';//验券
        $tmpInfo=$this->curl_post($url,$postdata);
        var_dump($tmpInfo);
    }
 
 
 
/**
     * 计算签名
     *
     * @param $app_secret 三方app_secret
     * @param $req_param 请求参数集合,包括公共参数和业务参数
     * @return string md5签名
     */
    function cal_sign($app_secret, $req_param)
    {
        // 排序所有请求参数
        ksort($req_param);
        $src_value = "";
        // 按照key1value1key2value2...keynvaluen拼接
        foreach ($req_param as $key => $value) {
            $src_value .= ($key . $value);
        }
        //计算md5
        return md5($app_secret . $src_value . $app_secret);
    }
 
 //post请求
       private function curl_post($url,$postdata){
        $curl = curl_init(); // 启动一个CURL会话
        curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Expect:'
        )); // 解决数据包大不能提交
        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, $postdata); // 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'));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
// curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查
        $tmpInfo = curl_exec($curl); // 执行操作
        if (curl_errno($curl)) {
            echo 'Errno' . curl_error($curl);
        }
        curl_close($curl); // 关键CURL会话
        $tmpInfo=json_decode($tmpInfo,true);
        return $tmpInfo;
    }
 
 //get请求
    private function curl_get($url) {
        //初使化curl
        $curl = curl_init();
        //请求的url,由形参传入
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检测
        curl_setopt($curl, CURLOPT_HTTPHEADER, array(
            'Expect:'
        )); // 解决数据包大不能提交
        //将得到的数据返回
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
        //不处理头信息
        curl_setopt($curl, CURLOPT_HEADER, 0);
        //连接超过10秒超时
        curl_setopt($curl, CURLOPT_TIMEOUT, 30);
        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
        curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
        curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
        curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
        curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
        //执行curl
        $output = curl_exec($curl);
        if (curl_errno($curl)) {
            echo 'Errno' . curl_error($curl);
        }
        //关闭资源
        curl_close($curl);
        //返回内容
        $tmpInfo=json_decode($output,true);
        return $tmpInfo;
    }

运用平台提供的相应参数,流程能顺利走通。

4、当放到线上的时候,选择相应的进行上线,首先要去平台“我的应用”设置回调地址,然后再授权地址上加上回调地址,还要进行授权去获取session,然后通过session去获取店铺的id
在这里插入图片描述回调地址:
在这里插入图片描述授权地址:
在这里插入图片描述5、授权地址:

https://e.dianping.com/dz-open/merchant/auth?app_key=1ef0e3a8&redirect_url=https:///admin/Dian/get_auth&state=teststate&scope=[%22tuangou%22]
授权地址可以获取auth_code,根据这个值去换取session,换取session后可以去换取店铺id

//获取auth_code
 
 public function get_auth(){
        $auth_code = input('auth_code');
        if(!isset($auth_code)) {
            $app_key='1ef*****3a8';
            $state='teststate';
            $redirect_url='https://****/admin/Dian/get_auth';
            $scope='tuangou';
            $url='https://e.dianping.com/dz-open/merchant/auth?';
            $data=[
                'app_key' =>$app_key,
                'state' => $state,
                'redirect_url' =>$redirect_url,
                'scope' =>$scope,
            ];
            $postdata = http_build_query($data);
            Header("Location: $url$postdata");
        } else {
            var_dump($auth_code);die();
        }
    }
 
 
 //获取session
    public function get_session(){
        $app_key='1ef0*****e3a8';
        $app_secret='dd8a291******bd9be6ff';
        $auth_code='4e027519e******a6a9d1ee5f2';
        $grant_type='authorization_code';
        $redirect_url='https://*****/admin/Dian/get_auth';
 
        $data=[
            'app_key' =>$app_key,
            'app_secret' => $app_secret,
            'redirect_url' =>$redirect_url,
            'auth_code' =>$auth_code,
            'grant_type' =>$grant_type
        ];
        $postdata = http_build_query($data);
        $url='https://openapi.dianping.com/router/oauth/token';
        $tmpInfo=$this->curl_post($url,$postdata);
        var_dump($tmpInfo);
    }
 
 
//获取所有店铺的id
    public function get_shopid(){
        $app_key='1ef04*****e3a8';
        $secret = "dd8a29*****fbd9be6ff";  //秘钥
        $sign_method='MD5';
        $timestamp = date('Y-m-d H:i:s');
        $format = 'json';
        $v = 1;
        //$session = 'f44d594ab895c******85b70bade02c';
        $session = 'bbf7059256aaf3*******0816cf819b7';
        $bid='5da1aab********5ad457a2c';//和session一起返回的
        $offset =0;
        $limit = 20;
        $url='https://openapi.dianping.com/router/oauth/session/scope?';
        $data=[
            'app_key' =>$app_key,
            'sign_method' => $sign_method,
            'timestamp' =>$timestamp,
            'format' =>$format,
            'v' =>$v,
            'session' =>$session,
            'bid' =>$bid,
            'offset' =>$offset,
            'limit' =>$limit,
        ];
        ksort($data);
        $sign = $this->cal_sign($secret, $data);
        $data['sign'] = $sign;
        $postdata = http_build_query($data);
        $tmpInfo=$this->curl_get($url.$postdata);
        var_dump($tmpInfo);
    }
 

有需要的朋友可以试一下。本人没有试过,但是可以用。以前用到过。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/687416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

PostgreSQL13.1

目录 1. PostgreSQL简介1.1 PostgreSQL是什么?1.2 PostgreSQL数据库的优缺点是什么?1.2.1 PostgreSQL的主要优点如下:1.2.2 PostgreSQL的应用劣势如下: 1.3 PostgreSQL不同大版本之间的特性比较1.4OpenGauss与PostgreSQL的对比1.4…

管理类联考——逻辑——知识篇——分析推理——三、分组——haimian

分组 题型特征 题干给出5-7个对象和2-5个限制条件,需根据题干要求分为2~3组。要注意题干中需分为几组,每组几个对象,对象有哪些限制因素,并灵活运用排除法、假设法、分析法、数字法、假言命题性质等方法解题。 思维导图 思路点…

技术管理第三板斧招聘与解聘-找到人

1.人才要自己去找、去抢 从团队的角度出发,Leader“主动出击、寻找合适人选”的观念符合逻辑,你既然是团队的一号位,自然最应该了解团队现状,以及团队需要的人选。与此同时,找到合适的人对你的影响最大而非 HR&#x…

大势智慧软硬件技术答疑第四期

1.重建大师是否支持bigmap绘制的范围线? 答:目前重建大师仅支持面格式的,bigmap的还没试验过,globalmapper或者arcgis是可以的。 2.为什么6.1建模的时候引擎一直是等待呢? 答:检查一下引擎面板引擎监控目录…

软件测试人员应该如何介绍自己测试过的项目工作【商城项目实战讲解】

测试人员在找工作的过程中,通常有一个问题是很难绕开的。就是要如何向别人介绍自己之前做过的项目。下面我们就这个问题简单的做一些分析。 要解决这个问题,大体上可以分为如下几个步骤: 1、对项目进行基本介绍 2、说明自己负责测试的模块 …

vue-router之hash与history,以及nginx配置

本篇讲解前端项目的路由模式(以vue-router为例),以及history模式下的项目部署问题。 vue-router的路由模式可以通过指定mode属性值控制,可选值:“hash” 、“history”、 “abstract” , 默认:“…

一篇文章告诉你什么是—Selenium的元素等待

前言 今天我们来说说selenium的元素等待,废话不多说直接开始吧。 1、元素等待介绍 WebDriver定位页面元素时如果未找到,会在指定时间内一直等待的过程。为了保证脚本运行的稳定性,需要脚本中添加等待时间。 2、为什么要设置元素等待 在元…

OpenStack(4)--NameSpace实现不同项目(租户)重叠网段

openstack通过namespace将不同项目(租户)的网络隔离,每个项目的管理员都需要对项目网络进行规划建设,这就导致不同项目之间会重复使用到某些网段,例如192.168.X.X就是管理员习惯使用的网段。 上一次我们新建位于vxlan…

基于Java的景区售票信息管理系统

1.设计要求 (1)要求每个学生独立完成期末作品,在遇到问题时,同学之间可以相互讨论,但切忌复制他人程序。 (2)根据期末作品题目,自己编写程序,上机调试程序,…

uniapp视频播放器

微信小程序使用hic-video-player app(android和ios)使用好用视频播放器注:用的是旧版本的这个组件 目前只有app中支持竖屏横批选集 android视频全屏是通过 beforeDestroy() {// #ifdef APP-VUE// 页面关闭时关闭沉浸模式if (uni.getSystemInfoSync().platform &quo…

【FFmpeg实战】解复用实战

原文链接:https://blog.csdn.net/u014078003/article/details/128554153 1.封装格式相关函数 avformat_alloc_context():负责申请一个AVFormatContext结构的内存,并进行简单初始化,这个函数可以不用手动调用,内部会自动调用。avf…

【无标题】NXP i.MX 6ULL工业核心板硬件说明书( ARM Cortex-A7,主频792MHz)

1 硬件资源 创龙科技SOM-TLIMX6U是一款基于NXP i.MX 6ULL的ARM Cortex-A7高性能低功耗处理器设计的低成本工业级核心板,主频792MHz,通过邮票孔连接方式引出Ethernet、UART、CAN、LCD、USB等接口。核心板经过专业的PCB Layout和高低温测试验证&…

怎么才能提高自动化测试的覆盖率,华为大佬教你一招!

前言 自动化测试一直是测试人员的核心技能,也是测试的重要手段之一。尤其是在今年所谓的互联网寒冬的行情下,各大企业对测试人员的技术水平要求的很高,而测试人员的技术水平主要集中在三大自动化测试领域,再加测试辅助脚本的编写…

智慧园区能源管理系统建设方案

随着能源资源的日益紧缺和环境保护意识的不断提高,智慧园区能源管理系统建设成为了当前能源管理的热点话题。智慧园区能源管理系统是一种集成化的能源管理平台,可以实现对园区内各种能源的实时监测、分析和管理,从而达到优化能源配置、提高能…

Python 学习之NumPy(一)

文章目录 1.为什么要学习NumPy2.NumPy的数组变换以及索引访问3.NumPy筛选使用介绍筛选出上面nb数组中能被3整除的所有数筛选出数组中小于9的所有数提取出数组中所有的奇数数组中所有的奇数替换为-1二维数组交换2列生成数值5—10,shape 为(3,5)的二维随机浮点数 NumP…

对一大厂游戏测试员的访谈实录,带你了解游戏测试

今天采访了一个在游戏行业做测试的同学,他所在的游戏公司是做大型多人在线角色扮演类的游戏,类似传奇游戏。他所在的公司目前有1200多人,是上市公司,目前游戏产品在国内海外都有市场。 因为我是一个对游戏无感的人,所…

【C++ 程序设计】第 7 章:输入/输出流

目录 一、流类简介 二、标准流对象 三、控制I/O格式 (1)流操纵符 (2)标志字 四、调用cout的成员函数【示例一】 五、调用 cin 的成员函数 (1)get() 函数 (2)getline()…

高考选什么专业好?适合考公务员的10大热门专业,了解一下!

高考是人生的分水岭,它是青春和未来的交汇处。高考成绩的优劣将对考生未来的发展产生深远的影响。作为学生们人生中重要的一站,高考不仅考验着学生的学业能力,也考验着他们的心理素质和思维能力。 高考结束后,众多考生面临的一个重…

FFmpeg视频转码参数详解

1 固定码率因子crf(Constant Rate Factor) 固定码率因子(CRF)是 x264 和 x265 编码器的默认质量(和码率控制)设置。取值范围是 0 到 51,这其中越低的值,结果质量越好,同…

阿里云docker启动xxljob,部署自己的定时任务

本次安装版本xxl-job-admin:2.3.0 一:创建xxl-job数据库的各种表 作者官方地址 下载sql执行 二:docker拉取xxl-job镜像 docker pull xuxueli/xxl-job-admin:2.3.0 三:docker启动xxl-job服务 docker run -e PARAMS"--spring.datasour…