123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294 |
- <?php
- namespace app\expand\controller;
- use app\common\service\HelperService;
- use think\Cache;
- use think\Log;
- use think\Validate;
- /**
- * 蜂鸟相关接口
- * Class Baidu
- * @package app\expand\controller
- */
- class FengNiao extends BaseAuth
- {
- private $_baseUrl = "https://exam-anubis.ele.me/anubis-webapi";//联调接口基础地址
- //"https://open-anubis.ele.me/anubis-webapi";//正式接口基础地址
- private $_fengNiaoAccount = null;
- private $_appId = null;
- private $_secretKey=null;
- public function __construct(){
- // echo sha1(md5(base64_encode("KEQIN1554885752"))."439F269CE14DBF34257C08612CE51EC8");exit;
- parent::__construct();
-
- $this->_fengNiaoAccount = $this->getKey($this->_apiCode);
- //验证是否具有访问这个接口的权限
- if(!isset($this->_fengNiaoAccount['fengNiaoAppId']) || !isset($this->_fengNiaoAccount['fengNiaoSecretKey'])){
- HelperService::returnJson(['code'=>400,'msg'=>'feng niao interface unauthorized access','data'=>[]]);
- }
- $this->_appId = $this->_fengNiaoAccount['fengNiaoAppId'];
- $this->_secretKey = $this->_fengNiaoAccount['fengNiaoSecretKey'];
- }
- public function order(){
- $params = $this->_params;
- $rule = [
- 'orderInfo|订单信息'=>'require',
- 'addressInfo|收货人信息'=>'require',
- 'productDetail|订单详情信息'=>'require',
- 'storeInfo|门店信息'=>'require',
- ];
- $validate = new Validate($rule);
- if(!$validate->check($params)){
- HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]);
- }
- $times = time();
- $company_code = 'KEQIN';
- $sign = sha1(md5(base64_encode($company_code.$times))."439F269CE14DBF34257C08612CE51EC8");
- $url = "https://csapi.ahamu.cn/v1/FnNotifyUrl?api_code=".$company_code."&request_ts=".$times."&signKey=".$sign;
- file_put_contents('check_url',$url);
- $salt = mt_rand(1000,9999);
- $data = [
- 'partner_order_code'=>isset($params['orderInfo']['order_no'])?$params['orderInfo']['order_no']:'',//商户订单号
- 'partner_remark'=>isset($params['table_name'])?$params['table_name']:'',
- 'notify_url'=>$url,//回调地址
- 'order_type'=>1,//订单类型 1: 蜂鸟配送,支持90分钟内送达
- 'chain_store_code'=>isset($params['storeInfo']['store_no'])?$params['storeInfo']['store_no']:'',//门店编号
- 'transport_info'=>[
- 'transport_name'=>isset($params['storeInfo']['store_name'])?$params['storeInfo']['store_name']:'',//门店名称(支持汉字、符号、字母的组合),后期此参数将预留另用
- 'transport_address'=>isset($params['storeInfo']['address'])?$params['storeInfo']['address']:'',//取货点地址,后期此参数将预留另用
- 'transport_longitude'=>isset($params['storeInfo']['lng'])?$params['storeInfo']['lng']:'',//取货点经度,取值范围0~180,后期此参数将预留另用
- 'transport_latitude'=>isset($params['storeInfo']['lat'])?$params['storeInfo']['lat']:'',//取货点纬度,取值范围0~90,后期此参数将预留另用
- 'position_source'=>3,//取货点经纬度来源(1:腾讯地图, 2:百度地图, 3:高德地图),蜂鸟建议使用高德地图
- 'transport_tel'=>isset($params['storeInfo']['mobile'])?$params['storeInfo']['mobile']:'',//取货点联系方式, 只支持手机号,400开头电话以及座机号码
- ],
- 'order_total_amount'=>isset($params['orderInfo']['price'])?$params['orderInfo']['price'] + $params['orderInfo']['dis_count']:'',//订单总金额(不包含商家的任何活动以及折扣的金额)
- 'order_actual_amount'=>isset($params['orderInfo']['price'])?$params['orderInfo']['price']:'',//客户需要支付的金额
- 'is_invoiced'=>0,//是否需要发票, 0:不需要, 1:需要
- 'order_payment_status'=>1,//订单支付状态 0:未支付 1:已支付
- 'order_payment_method'=>1,//订单支付方式 1:在线支付
- 'is_agent_payment'=>0,//是否需要ele代收 0:否
- 'goods_count'=>1,//订单货物件数
- 'receiver_info'=>[
- 'receiver_name'=>isset($params['addressInfo']['receipt_name'])?$params['addressInfo']['receipt_name']:'',//收货人姓名
- 'receiver_primary_phone'=>isset($params['addressInfo']['receipt_mobile'])?$params['addressInfo']['receipt_mobile']:'',//收货人联系方式,只支持手机号,400开头电话,座机号码以及95013开头、长度13位的虚拟电话
- 'receiver_address'=>isset($params['addressInfo']['address'])?$params['addressInfo']['address'].$params['addressInfo']['house']:'',//收货人地址
- 'position_source'=>3,//收货人经纬度来源(1:腾讯地图, 2:百度地图, 3:高德地图),蜂鸟建议使用高德地图
- 'receiver_longitude'=>isset($params['addressInfo']['lng'])?$params['addressInfo']['lng']:'',//收货人经度,取值范围0~180
- 'receiver_latitude'=>isset($params['addressInfo']['lat'])?$params['addressInfo']['lat']:'',//收货人纬度,取值范围0~90
- ],
- 'items_json'=>
- isset($params['productDetail'])?$params['productDetail']:[]
- ,
- ];
- // Log::record('蜂鸟传输数组',$data);
- // file_put_contents('fengniao',$data);
- $udata = urlencode(json_encode($data,JSON_UNESCAPED_UNICODE).PHP_EOL);
- $orderInfo = [
- 'app_id'=>$this->_appId,
- 'salt'=>$salt,
- 'data'=> $udata,
- ];
- $signature = $this->_createRequestSign($this->_appId,$this->_getToken(),$udata,$salt);
- $orderInfo['signature'] = $signature;
- $url = $this->_baseUrl."/v2/order";
- $res = HelperService::doPost($url, json_encode($orderInfo));
- HelperService::addLog(['request'=>$orderInfo,'return'=>$res], $url, 'FN');
-
- HelperService::returnJson(['code'=>200,'msg'=>[],'data'=>@json_decode($res,true)]);
- }
- //查询订单
- public function searchOrder(){
- $params = $this->_params;
- $rule = [
- 'order_no|订单信息'=>'require',
- ];
- $validate = new Validate($rule);
- if(!$validate->check($params)){
- HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]);
- }
- $salt = rand(1000,9999);
- $data = [
- 'partner_order_code'=>$params['order_no'],//商户订单号
- ];
- $udata = urlencode(json_encode($data,JSON_UNESCAPED_UNICODE).PHP_EOL);
- $orderInfo = [
- 'app_id'=>$this->_appId,
- 'data'=> $udata,
- 'salt'=>$salt,
- ];
- $signature = $this->_createRequestSign($this->_appId,$this->_getToken(),$udata,$salt);
- $orderInfo['signature'] = $signature;
- $url = $this->_baseUrl."/v2/order/query";
- $res = HelperService::doPost($url, json_encode($orderInfo));
- HelperService::addLog(['request'=>$orderInfo,'return'=>$res], $url, 'FN');
-
- HelperService::returnJson(['code'=>200,'msg'=>[],'data'=>@json_decode($res,true)]);
- }
- public function notifyUrl(){
- $params = $this->_params;
- Log::record('回调'.$params);
- file_put_contents('test',$params);
- }
-
- /**
- * 创建token签名算法
- * @param type $requestArr 请求数组
- * @return string
- */
- private function _createTokenSign($requestArr = []){
-
- if(empty($requestArr) || !is_array($requestArr)){
- return '';
- }
-
- ksort($requestArr);
- return md5(urlencode(http_build_query($requestArr)));
- }
-
- /**
- * 创建商户请求时签名
- * @param type $appId
- * @param type $accessToken
- * @param type $ueRequestDataArr urlencode,json_encode请求数据部分
- * @param type $salt
- */
- private function _createRequestSign($appId,$accessToken,$ueRequestDataArr,$salt){
- $signStr = 'app_id=' . $appId . '&access_token=' . $accessToken
- . '&data=' . $ueRequestDataArr . '&salt=' . $salt;
- return md5($signStr);
- }
-
-
- /**
- * 获取蜂鸟的token数据
- * @param type $isForce 是否强制获取token
- * @return type
- */
- private function _getToken($isForce=false){
-
- if(Cache::has('fengNiaoToken') && $isForce === false){
- return Cache::get('fengNiaoToken');
- }
-
- $salt = rand(1000,9999);
- $appId = $this->_appId;
- $getTokenArr = [
- 'app_id'=>$appId,
- 'salt'=>$salt,
- 'secret_key'=>$this->_secretKey
- ];
- $signature = $this->_createTokenSign($getTokenArr);
- $url = $this->_baseUrl."/get_access_token?app_id=$appId&salt=$salt&signature=$signature";
- $tokenInfoJson = file_get_contents($url);
- $tokenInfo = json_decode($tokenInfoJson,true);
-
- if(!isset($tokenInfo['code']) || $tokenInfo['code']!=200 || !isset($tokenInfo['data']['access_token'])){
-
- HelperService::returnJson([
- 'code'=>200,
- 'msg'=>'签名错误',
- 'data'=>$tokenInfoJson
- ]);
- }
-
- $token = $tokenInfo['data']['access_token'];
- Cache::set('fengNiaoToken', $token,intval($tokenInfo['data']['expire_time']/1000)-time());
- return $token;
- }
- /**
- * 查询门店是否有配送能力
- */
- public function distanceStore(){
- $params = $this->_params;
- $rule = [
- 'store_no|门店编号'=>'require',
- 'lng|经度'=>'require',
- 'lat|纬度'=>'require',
- ];
- $validate = new Validate($rule);
- if(!$validate->check($params)){
- HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]);
- }
- $salt = rand(1000,9999);
- $data = [
- 'chain_store_code'=>$params['store_no'],//门店编号【大华店】
- 'position_source'=>3,//门店编号
- 'receiver_longitude'=>$params['lng'],//收货点经度(数字格式, 包括小数点, 取值范围0~180)
- 'receiver_latitude'=>$params['lat'],//收货点纬度(数字格式, 包括小数点, 取值范围0~90)
- ];
- $udata = urlencode(json_encode($data,JSON_UNESCAPED_UNICODE).PHP_EOL);
- $orderInfo = [
- 'app_id'=>$this->_appId,
- 'data'=> $udata,
- 'salt'=>$salt,
- ];
- $signature = $this->_createRequestSign($this->_appId,$this->_getToken(),$udata,$salt);
- $orderInfo['signature'] = $signature;
- $url = $this->_baseUrl."/v2/chain_store/delivery/query";
- $res = HelperService::doPost($url, json_encode($orderInfo));
- HelperService::addLog(['request'=>$orderInfo,'return'=>$res], $url, 'FN');
- HelperService::returnJson(['code'=>200,'msg'=>[],'data'=>@json_decode($res,true)]);
- }
- /**
- * 取消订单
- */
- public function cancelOrder(){
- // $params = $this->_params;
- // $rule = [
- // 'store_no|门店编号'=>'require',
- // 'lng|经度'=>'require',
- // 'lat|纬度'=>'require',
- // ];
- //
- // $validate = new Validate($rule);
- // if(!$validate->check($params)){
- // HelperService::returnJson(['code'=>400,'msg'=>$validate->getError(),'data'=>[]]);
- // }
- $salt = rand(1000,9999);
- $data = [
- 'partner_order_code'=>"1904101806201487",//商户订单号
- 'order_cancel_reason_code'=>1,//订单取消原因代码(2:商家取消)
- 'order_cancel_code'=>1,//订单取消编码(1:物流原因:订单长时间未分配骑手, 2:物流原因:分配骑手后,骑手长时间未取件 , 3:物流原因:骑手告知不配送,让取消订单, 4:商品缺货/无法出货/已售完, 5:商户联系不上门店/门店关门了, 6:商户发错单, 7:商户/顾客自身定位错误, 8:商户改其他第三方配送, 9:顾客下错单/临时不想要了, 10:顾客自取/不在家/要求另改时间配送)(0类型已下线)
- 'order_cancel_time'=>microtime(),//订单取消时间(毫秒)
- ];
- $udata = urlencode(json_encode($data,JSON_UNESCAPED_UNICODE).PHP_EOL);
- $orderInfo = [
- 'app_id'=>$this->_appId,
- 'data'=> $udata,
- 'salt'=>$salt,
- ];
- $signature = $this->_createRequestSign($this->_appId,$this->_getToken(),$udata,$salt);
- $orderInfo['signature'] = $signature;
- $url = $this->_baseUrl."/v2/order/cancel";
- $res = HelperService::doPost($url, json_encode($orderInfo));
- HelperService::addLog(['request'=>$orderInfo,'return'=>$res], $url, 'FN');
- HelperService::returnJson(['code'=>200,'msg'=>[],'data'=>@json_decode($res,true)]);
- }
-
- }
|