vue H5对接团油接口(后台服务是php)

目录

业务场景:

简单介绍:

声明

业务逻辑

接入代码

总结:


业务场景:

用vue写的H5 app中现在需要接入能链集团的团油服务

接入成功效果图

简单介绍:

声明

看团油的官方文档能顺利接通的是神仙,那种垃圾文档三流水平都算不上,缺胳膊少腿的

业务逻辑

其实很简单,下面详细梳理一下业务逻辑

  1. 企业在团油申请成为合作方,申请通过后会给你一个渠道编码、key、Secret(这三个值注意,文档里不同接口可能叫不同的名字,就这种垃圾文档连个名字都统一不了呵呵)
  2. 根据文档的授权码接口,获取到团油返回的result如:
    "result":"d68df7dd3174b98cfb125e4bb46969a7" //授权码

        这里面就是authCode,authCode是干嘛用的呢,说的直白一点就是告诉团头,这笔流量来自            自于你这个合作方的(后面好跟你分钱)。

     3.拿到了authCode之后,我们需要将它拼接到团油的H5的链接里面,然后在自己的H5里面打            开这个链接就可以进入团油的页面了

        这里要吐槽一下:整个文档找不到链接,那链接在哪里呢,

      

 不好意思,你打开控制台拿到的链接也是错的哈哈哈,牛皮不!就是这么菜!别不相信。

正确的链接我是在demo里面找到的测试链接,然后!然后根据测试链接猜出来的!!!!哈哈哈

下面我放出来正确的链接:

https://open.czb365.com/redirection/todo/?platformType=你的渠道码&authCode='.$autuCode

链接中的authCode就是步骤2生成的,拼接在后面就可以了

接入代码

  1. 获取授权码接口+拼接后的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; // 返回数据
    	} 
  2.  将得到的url返回给前端,然后open就可以了

总结:

  1. 团油的接口文档就是个垃圾,没有之一!
  2. 关于文档中Android和ios的接入教程也是扯淡一样!不用看!由于我是H5封装的Android和ios,所以只要把拿到的团油url在webview和wkwebview中合理打开就可以了!他们的文档无非罗里吧嗦让你做了两件事:第一要给webview地理位置权限(这个不难吧自己搞定,别看那个憨批文档,看着看着怀疑人生了)第二要给支付权限(就是放行微信支付宝的支付请求)
  3. 其他的没啥要说的了当初因为客户必须要求接团油(钱都交了),网上几乎没有相关的接入教程,在这里把自己的摸索写下来,希望对你有所帮助。
  4. 最近很多人问我关于团油分佣的问题,这个我是开发,只把我从客户那里知道的在这里简单讲一下我的想法:
  5. 接入团油是需要收费的,他们平台申请开发者需要缴纳约13000/年左右
  6. 团油的合作加油站私营的比较多,中石油中石化相对较少,在南京、上海、广州都是如此。不建议接入!
  7. 资源源码已经上传需要的可以直接下载,有问题可以沟通交流(wx:15651012186)
  8. 接下来一篇讲另外一个相对中石化中石油多一点的链接

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值