1.form表單傳遞數據,到控制器,之后的復制操作
1 順豐信息 2 //快遞信息 3 $eorder = []; 4 $eorder["ShipperCode"] = $express_number[$number]; //快遞公司編碼 5 $eorder["OrderCode"] = $ship_order_data['ship_order_number']; //發貨單編號() 6 7 $eorder["PayType"] = 3; //支付快遞方式 1現付 2到付 3月結 4第三方 8 $eorder["ExpType"] = $express_type; //快遞類型 1次日達 2 隔日達 9 $eorder["IsReturnPrintTemplate"] = 1; //是否需要電子面單 1需要 0不 10 //目前接口中每家快遞公司配置需求與值都不相同 部分需單獨當地網點申請帳號密碼 11 if($number == 1){ //順豐 12 // $eorder["MonthCode"] = '527****057'; //月結卡號 月結類型必填 13 $eorder["MonthCode"] = '527****075'; //月結卡號 月結類型必填 14 } 15 16 //發貨信息 17 $sender = []; 18 $sender["Name"] = $ship_order_data['send_username']; 19 $sender["Mobile"] = $ship_order_data['send_phone']; 20 $sender["ProvinceName"] = $ship_order_data['send_province']; 21 $sender["CityName"] = $ship_order_data['send_city']; 22 $sender["ExpAreaName"] = $ship_order_data['send_exparea']; 23 $sender["Address"] = $ship_order_data['send_address']; 24 // $sender["Name"] = '豹子頭'; 25 // $sender["Mobile"] = '135****3329'; 26 // $sender["ProvinceName"] = '江蘇省'; 27 // $sender["CityName"] = '宿遷市'; 28 // $sender["ExpAreaName"] = '泗陽縣'; 29 // $sender["Address"] = '淮海東路11號'; 30 //收貨信息 31 $receiver = []; 32 $receiver["Name"] = $ship_order_data['username']; 33 $receiver["Mobile"] = $ship_order_data['phone']; 34 $receiver["ProvinceName"] = $ship_order_data['province']; 35 $receiver["CityName"] = $ship_order_data['city']; 36 $receiver["ExpAreaName"] = $ship_order_data['exparea']; 37 $receiver["Address"] = $ship_order_data['address']; 38 // $receiver["Name"] = '王先生'; 39 // $receiver["Mobile"] = '15****34566'; 40 // $receiver["ProvinceName"] = '四川省'; 41 // $receiver["CityName"] = '成都市'; 42 // $receiver["ExpAreaName"] = '青羊區'; 43 // $receiver["Address"] = '一環路東四段'; 44 45 $commodityOne = []; 46 $commodityOne["GoodsName"] = '襯衫*'.$total_number.'件'; //商品名 數量 47 // dump($commodityOne);die; 48 $commodity = []; 49 $commodity[] = $commodityOne; 50 51 $eorder["Sender"] = $sender; 52 $eorder["Receiver"] = $receiver; 53 $eorder["Commodity"] = $commodity; 54 55 //備注 56 $ship_order_data['ship_order_number']; 57 $eorder["Remark"] = db('ship_box')->where('ship_order_num', $ship)->value('box_num'); 58 $eorder["Remark"] .= '號框'; 59 60 //調用電子面單 61 $jsonParam = json_encode($eorder, JSON_UNESCAPED_UNICODE); 62 //電子面單提交結果 63 $jsonResult = $this->submitEOrder($jsonParam); 64 // dump($eorder);die; 65 //解析電子面單返回結果 66 $result = json_decode($jsonResult, true); 67 68 echo "<script>alert('發貨信息已成功提交至快遞公司,請打印電子面單!');parent.location.reload();</script>"; 69 echo $result['PrintTemplate'];//打印PrintTemplate的數據
70 echo "<script>print()</script>";
第二部.這是簽名和提交的方法
1 /** 2 * Json方式 調用電子面單接口 3 */ 4 public function submitEOrder($requestData) 5 { 6 $express_config = config('KUAIDINIAO');//信息配置在config的信息,你也可以寫死 7 $datas = array(//必須 8 'EBusinessID' => $express_config['EBusinessID'], 9 'RequestType' => '1007', 10 'RequestData' => urlencode($requestData), 11 'DataType' => '2', 12 ); 13 $datas['DataSign'] = $this->encrypt($requestData, $express_config['AppKey']);//獲取簽名 14 $result = $this->sendPost($express_config['ReqURL'], $datas);//提交數據 15 return $result; 16 } 17 /** 18 * 電商Sign簽名生成 19 * @param data 內容 20 * @param appkey Appkey 21 * @return DataSign簽名 22 */ 23 public function encrypt($data, $appkey) 24 { 25 return urlencode(base64_encode(md5($data . $appkey))); 26 } 27 /** 28 * post提交數據 29 * @param string $url 請求Url 30 * @param array $datas 提交的數據 31 * @return url響應返回的html 32 */ 33 public function sendPost($url, $datas) 34 { 35 $temps = array(); 36 foreach ($datas as $key => $value) { 37 $temps[] = sprintf('%s=%s', $key, $value); 38 } 39 $post_data = implode('&', $temps); 40 $url_info = parse_url($url); 41 if (empty($url_info['port'])) { 42 $url_info['port'] = 80; 43 } 44 $httpheader = "POST " . $url_info['path'] . " HTTP/1.0\r\n"; 45 $httpheader .= "Host:" . $url_info['host'] . "\r\n"; 46 $httpheader .= "Content-Type:application/x-www-form-urlencoded\r\n"; 47 $httpheader .= "Content-Length:" . strlen($post_data) . "\r\n"; 48 $httpheader .= "Connection:close\r\n\r\n"; 49 $httpheader .= $post_data; 50 $fd = fsockopen($url_info['host'], $url_info['port']); 51 fwrite($fd, $httpheader); 52 $gets = ""; 53 $headerFlag = true; 54 while (!feof($fd)) { 55 if (($header = @fgets($fd)) && ($header == "\r\n" || $header == "\n")) { 56 break; 57 } 58 } 59 while (!feof($fd)) { 60 $gets .= fread($fd, 128); 61 } 62 fclose($fd); 63 64 return $gets; 65 }
快遞鳥的順豐比較簡單,這就完成了,如果你有什么不理解的,可以給我留言