Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
CRAP
0.00% covered (danger)
0.00%
0 / 64
RejectedController
0.00% covered (danger)
0.00%
0 / 1
0.00% covered (danger)
0.00%
0 / 3
110.00
0.00% covered (danger)
0.00%
0 / 64
 sendRejected
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 19
 sendRejectedByApi
0.00% covered (danger)
0.00%
0 / 1
12.00
0.00% covered (danger)
0.00%
0 / 16
 packSendToRemote
0.00% covered (danger)
0.00%
0 / 1
20.00
0.00% covered (danger)
0.00%
0 / 29
<?php
namespace App\Http\Controllers\api\jianshang;
use App\Http\Controllers\Controller;
use App\Rejected;
use Carbon\Carbon;
use Illuminate\Http\Request;
use Illuminate\Support\Collection;
use Zttp\Zttp;
class RejectedController extends Controller
{
    function sendRejected(Rejected $rejected){
        $amount = $rejected['amount'] ?? '';
        $created_at = $rejected['created_at'] ?? '';
        $fee_collected = $rejected['fee_collected'] ?? '';
        $goods_barcode = $rejected['barcode_goods'] ?? '';
        $goods_name = $rejected['name_goods'] ?? '';
        $logistic_name_return = $rejected->logisticName();
        $logistic_number = $rejected['logistic_number'] ?? '';
        $logistic_number_return = $rejected['logistic_number_return'] ?? '';
        $order_number = $rejected['order_number'] ?? '';
        $quality_label = $rejected->qualityLabelName();
        $sender_mobile = $rejected['mobile_sender'] ?? '';
        $sender_name = $rejected['sender'] ?? '';
        $json = $this->packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
            $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
            $quality_label,$sender_mobile,$sender_name);
        if(!$json)return false;
        if(!$json['success']){
            $this->log(__METHOD__,'error',"返回错误:".json_encode($json));
            return false;
        }else{
            $this->log(__METHOD__,'JianshangResponse',json_encode($json));
        }
        return $json;
    }
    function sendRejectedByApi(Request $request){
        $amount = $request->input('amount') ?? '';
        $created_at = $request->input('created_at') ?? '';
        $fee_collected = $request->input('fee_collected') ?? '';
        $goods_barcode = $request->input('goods_barcode') ?? '';
        $goods_name = $request->input('goods_name') ?? '';
        $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') ?? '';
        $quality_label = $request->input('quality_label') ?? '';
        $sender_mobile = $request->input('sender_mobile') ?? '';
        $sender_name = $request->input('sender_name') ?? '';
        $json = $this->packSendToRemote($amount,$created_at,$fee_collected,$goods_barcode,
            $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
            $quality_label,$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($amount,$created_at,$fee_collected,$goods_barcode,
                                      $goods_name,$logistic_name_return,$logistic_number,$logistic_number_return,$order_number,
                                      $quality_label,$sender_mobile,$sender_name){
        if(env('api_faking'))return false;
        $data="{\"amount\":\"$amount\", \"created_at\":\"$created_at\", \"fee_collected\":\"$fee_collected\", 
        \"goods_barcode\":\"$goods_barcode\", \"goods_name\":\"$goods_name\", \"logistic_name_return\":\"$logistic_name_return\",
         \"logistic_number\":\"$logistic_number\", \"logistic_number_return\":\"$logistic_number_return\", 
         \"order_number\":\"$order_number\", \"quality_label\":\"$quality_label\", \"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){
                $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');
        $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;
        }
        return $response->json();
    }
}