目录
业务场景:
用vue写的H5 app中现在需要接入能链集团的团油服务
接入成功效果图
简单介绍:
声明
看团油的官方文档能顺利接通的是神仙,那种垃圾文档三流水平都算不上,缺胳膊少腿的
业务逻辑
其实很简单,下面详细梳理一下业务逻辑
- 企业在团油申请成为合作方,申请通过后会给你一个渠道编码、key、Secret(这三个值注意,文档里不同接口可能叫不同的名字,就这种垃圾文档连个名字都统一不了呵呵)
- 根据文档的授权码接口,获取到团油返回的result如:
"result":"d68df7dd3174b98cfb125e4bb46969a7" //授权码
这里面就是authCode,authCode是干嘛用的呢,说的直白一点就是告诉团头,这笔流量来自 自于你这个合作方的(后面好跟你分钱)。
3.拿到了authCode之后,我们需要将它拼接到团油的H5的链接里面,然后在自己的H5里面打 开这个链接就可以进入团油的页面了
这里要吐槽一下:整个文档找不到链接,那链接在哪里呢,
不好意思,你打开控制台拿到的链接也是错的哈哈哈,牛皮不!就是这么菜!别不相信。
正确的链接我是在demo里面找到的测试链接,然后!然后根据测试链接猜出来的!!!!哈哈哈
下面我放出来正确的链接:
https://open.czb365.com/redirection/todo/?platformType=你的渠道码&authCode='.$autuCode
链接中的authCode就是步骤2生成的,拼接在后面就可以了
接入代码
- 获取授权码接口+拼接后的url,
//我这边的业务场景是前端携带用户手机号发请求 public function getTyURL(){ if(!IS_POST){ $this->res['code'] = 100; $this->res['msg'] = '请用post方法请求接口'; $this->response($this->res,'json'); } $post_data = file_get_contents('php://input'); $json = json_decode($post_data); $phone = $json->phone;//接收前端请求传递过来的手机号 $params['app_key'] = C('ty_key');//自己的团油key $params['timestamp'] = $this->getUnixTimestamp();//时间戳方法 $params['platformId'] = C('platformId');//渠道编码 $params['phone'] = $phone; $sign = $this->MakeSign($params);//签名方法 $params['sign'] = $sign; //请求团油接口获取autuCode $apiurl = 'https://mcs.czb365.com/services/v3/begin/getSecretCode';//接口请求地址 $content = $this->send_post2($apiurl,$params);//发送请求方法 $result = json_decode($content,true); if($result['code'] == '200'){ $autuCode = $result['result']; $tyURL = 'https://open.czb365.com/redirection/todo/? platformType=98633339&authCode='.$autuCode; $this->res['code'] = 200; $this->res['msg'] = '请求成功'; $this->res['data']['tyURL'] = $tyURL; $this->response($this->res,'json'); }else{ $this->res['code'] = 101; $this->res['msg'] = '请求失败请稍后重试'; $this->response($this->res,'json'); } }
获取时间戳方法:
function getUnixTimestamp () { list($s1, $s2) = explode(' ', microtime()); return (float)sprintf('%.0f',(floatval($s1) + floatval($s2)) * 1000); }
签名方法:
/** * 生成签名 * @return 签名 */ public function MakeSign($params) { //签名步骤一:按字典序排序数组参数 ksort($params); $string = $this->ToUrlParams($params); //签名步骤二:在string后加入KEY $string =C('ty_Secret'). $string . C('ty_Secret'); //签名步骤三:MD5加密 $string = md5($string); //签名步骤四:所有字符转为大写 return $string; } /** * 将参数拼接为url: key=value&key=value * @param $params * @return string */ public function ToUrlParams($params) { //print_r($params); $string = ''; if (!empty($params)) { $array = array(); foreach ($params as $key => $value) { $array[] = $key . $value; } $string = implode($array); } return $string; }
发送请求方法:
/** * POST提交 * @param string $url 地址 * @param string $data 提交的数据 * @return string 返回结果 */ public function send_post2($url, $data) { $curl = curl_init(); // 启动一个CURL会话 curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE); // 对认证证书来源的检查 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE); // 从证书中检查SSL加密算法是否存在 curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (compatible; MSIE 5.01; Windows NT 5.0)'); // 模拟用户使用的浏览器 //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提交的数据包x curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 设置超时限制 防止死循环 curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的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; // 返回数据 }
-
将得到的url返回给前端,然后open就可以了
总结:
- 团油的接口文档就是个垃圾,没有之一!
- 关于文档中Android和ios的接入教程也是扯淡一样!不用看!由于我是H5封装的Android和ios,所以只要把拿到的团油url在webview和wkwebview中合理打开就可以了!他们的文档无非罗里吧嗦让你做了两件事:第一要给webview地理位置权限(这个不难吧自己搞定,别看那个憨批文档,看着看着怀疑人生了)第二要给支付权限(就是放行微信支付宝的支付请求)
- 其他的没啥要说的了当初因为客户必须要求接团油(钱都交了),网上几乎没有相关的接入教程,在这里把自己的摸索写下来,希望对你有所帮助。
- 最近很多人问我关于团油分佣的问题,这个我是开发,只把我从客户那里知道的在这里简单讲一下我的想法:
- 接入团油是需要收费的,他们平台申请开发者需要缴纳约13000/年左右
- 团油的合作加油站私营的比较多,中石油中石化相对较少,在南京、上海、广州都是如此。不建议接入!
- 资源源码已经上传需要的可以直接下载,有问题可以沟通交流(wx:15651012186)
- 接下来一篇讲另外一个相对中石化中石油多一点的链接