logisticName(); $logistic_number = $rejected['logistic_number'] ?? ''; $logistic_number_return = $rejected['logistic_number_return'] ?? ''; $order_number = $rejected['order_number'] ?? ''; $sender_mobile = $rejected['mobile_sender'] ?? ''; $sender_name = $rejected['sender'] ?? ''; $json = $this->packSendToRemote($created_at,$fee_collected,$goodses, $logistic_name_return,$logistic_number,$logistic_number_return,$order_number, $sender_mobile,$sender_name); if(!$json){ $this->log(__METHOD__,'error',"返回错误:没有JSON,请检查笕尚直接返回内容"); return ['success'=>false]; }else if(!isset($json['success'])||!$json['success']){ $this->log(__METHOD__,'error',"返回错误:".json_encode($json)); return ['success'=>false]; } if(!$json['goodses_feedback']){ $this->log(__METHOD__,'error',"没有goodses信息:".json_encode($json)); } if(!$json['logistic_number_return']){ $this->log(__METHOD__,'error',"没有退回快递单号信息:".json_encode($json)); } $bill = $this->markItemsIsLoaded($json); $billIsLoaded=$bill->changeIsLoaded_ifItemsAllLoaded(); return ['success'=>true,'bill_is_loaded'=>$billIsLoaded]; } private function markItemsIsLoaded($json){ $barcodes=[]; foreach ($json['goodses_feedback'] as $goods){ $barcodes[]=trim($goods['goods_barcode']); } $bill=RejectedBill::where('logistic_number_return',$json['logistic_number_return'])->first(); $items=RejectedBillItem::where('id_rejected_bill',$bill['id'])->whereIn('barcode_goods',$barcodes)->get(); $items->each(function(RejectedBillItem $item)use(&$json){ foreach ($json['goodses_feedback'] as &$goods1){ //标记出有重复条码的商品,并且标记出其中是否同时有不能入库可和可以入库的 $goods1['sameBarcode']=0; $goods1['hasUnStorable']=false; $goods1['hasStorable']=false; foreach ($json['goodses_feedback'] as &$goods2){ if($goods1['goods_barcode']==$goods2['goods_barcode']){ $goods1['sameBarcode']+=1; if(!$goods2['storable']){ $goods1['hasUnStorable']=true; }else{ $goods1['hasStorable']=true; } } } } foreach ($json['goodses_feedback'] as $goods){ if($item['barcode_goods']==$goods['goods_barcode']){ $item['is_loaded'] = $goods['storable']==='true'|| $goods['storable']===true ? '已入库':'未入库'; if($goods['sameBarcode']>1){//如果该条码有不止一件,并且同时拥有入库和不入库的,就按品质标签来区分入库与否(因为回传不带是否正品消息,也没有ID) if($goods['hasUnStorable']&&$goods['hasStorable']){ if($item['id_quality_label']==1){ $item['is_loaded'] ='已入库'; }else{ $item['is_loaded'] ='未入库'; } } } $item->update(); } } }); return $bill; } // function sendRejectedByApi(Request $request){ // $created_at = $request->input('created_at') ?? ''; // $fee_collected = $request->input('fee_collected') ?? ''; // $goodses=[]; // foreach ($request->input('goodses') ?? [] as $goods){ // $temGoods['amount']=$goods['amount'] ?? ''; // $temGoods['goods_barcode']=$goods['barcode_goods'] ?? ''; // $temGoods['goods_name']=$goods['name_goods'] ?? ''; // $temGoods['quality_label']=$goods['quality_label'] ?? ''; // $goodses[]=$temGoods; // } // $logistic_name_return = $request->input('logistic_name_return') ?? ''; // $logistic_number = $request->input('logistic_number') ?? ''; // $logistic_number_return = $request->input('logistic_number_return') ?? ''; // $order_number = $request->input('order_number') ?? ''; // $sender_mobile = $request->input('sender_mobile') ?? ''; // $sender_name = $request->input('sender_name') ?? ''; // $json = $this->packSendToRemote($created_at,$fee_collected,$goodses, // $logistic_name_return,$logistic_number,$logistic_number_return,$order_number, // $sender_mobile,$sender_name); // if(!$json)return ['success'=>'false','fail_info'=>'没有JSON回复']; // if(!$json['success']){return $this->apiError(__METHOD__,"返回错误:".json_encode($json));} // return $json; // } private function packSendToRemote($created_at,$fee_collected,$goodses, $logistic_name_return,$logistic_number,$logistic_number_return,$order_number, $sender_mobile,$sender_name){ foreach ($goodses as $goods){ asort($goods); } $goodses = json_encode($goodses); $data="{\"created_at\":\"$created_at\", \"fee_collected\":\"$fee_collected\", \"goodses\":$goodses,\"logistic_name_return\":\"$logistic_name_return\", \"logistic_number\":\"$logistic_number\", \"logistic_number_return\":\"$logistic_number_return\", \"order_number\":\"$order_number\", \"sender_mobile\":\"$sender_mobile\", \"sender_name\":\"$sender_name\"}"; $sortParamsAndMd5=function(Array $params,$timestamp,$nonce,$signKey){ $params=new Collection($params); $params=$params->sortKeys(); $str=''; $params->each(function($param,$key)use(&$str){ if(is_array($param)){ foreach ($param as &$paramValArr){ foreach ($paramValArr as &$paramVal){ $paramVal = trim($paramVal); } } $param=json_encode($param); } $val=trim($param); if($val){ $str .= $key.$val; } }); return strtolower(md5($str.$timestamp.$nonce.$signKey)); }; $timestamp=intval(microtime(true)*1000); $nonce=md5(microtime(true)); $sign=$sortParamsAndMd5(json_decode($data,true),$timestamp,$nonce,config('api.sign_key_rejected_send_jianshang')); $url=config('api.url_rejected_send_jianshang'); if(env('api_faking'))$url=url(config('api.fakingUrl_rejected_send_jianshang')); $response=Zttp::withHeaders([ 'sign'=>$sign, 'nonce'=>$nonce, 'timestamp'=>$timestamp, 'Content-Type'=>'application/json' ])->post($url,json_decode($data,true)); $this->log(__METHOD__,'json',$data); if(!$response){ $this->log(__METHOD__,'error','回复异常:'.$response->body()); return false; } $this->log(__METHOD__,'response',$response->body()); return $response->json(); } public function fakingReceiveSend(Request $request){ $sign = $request->header('sign'); $nonce = $request->header('nonce'); $timestamp = $request->header('timestamp'); $Content_Type = $request->header('Content-Type'); $header = compact('sign', 'nonce', 'timestamp', 'Content_Type'); $goods=[]; foreach ($request->input('goodses') as $goodsIn){ $goods[]=['goods_barcode'=>$goodsIn['goods_barcode'],'storable'=>$goodsIn['quality_label']=='正品'?true:false,'message'=>'msg']; } $result = ['logistic_number_return'=>$request->input('logistic_number_return'),'goodses_feedback' => $goods, 'success' => true, 'header' => $header, 'requestAll' => $request->all()]; $this->log(__METHOD__,'faking',json_encode($result)); return $result; } }