HLS * =======================================================================*/ // Special implementation for customer function sendResponse($stateEvent, $timestamp, $jbId, $trId, $trSort, $tr1CommissionNo = "", $crId = "", $crSid, $trSignName, $trSign, $gdc_01 = "", $gdc_02 = "", $gdc_03 = "", $gdc_04 = "", $gdc_05 = "") { global $server, $port; $isProductive = true; $callback = trim($gdc_03); // "shipments", "tours", .... if ($callback == "") : // Different servers for differenz stateEvents if ($stateEvent == "0" || $stateEvent == "1") : $callback = "shipments"; $numOfStations = getCountOfTable("tour", "jb_id = '" . $jbId . "'"); if ($numOfStations != "" && is_numeric($numOfStations) && $numOfStations >= 3) : $callback = "tours"; endif; elseif ($stateEvent == "2") : $callback = "shipments"; endif; endif; $callback .= "/"; // Add final slash if ($isProductive) : $server = "https://www.hls.com/api/courier_company/v1/" . $callback; // Productive else : $server = "https://staging.hls.com/api/courier_company/v1/" . $callback; // Test endif; // $crEid = ""; // if ($crId != "" && $crId != "0") : // $crEid = getFieldValueFromId("courier","cr_id",$crId,"cr_eid"); // endif; $shipmentId = $gdc_01; // Init // if ($jbId != "" && $trSort != "") : if ($trId != "") : // $shipmentId = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'tr' AND gdc_gen_fieldname = 'info_0' AND gdc_obj_id = '" . $jbId . "' AND gdc_context = '" . $trSort . "'"); $shipmentId = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'tr' AND gdc_gen_fieldname = 'info_0' AND gdc_obj_id = '" . $trId . "'"); if ($shipmentId == "") : $shipmentId = $gdc_01; if ($shipmentId == "") : $shipmentId = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'jb' AND gdc_gen_fieldname = 'info_0' AND gdc_obj_id = '" . $jbId . "'"); endif; endif; endif; // $courierId = $crEid; $courierId = $crSid; if ($courierId == "") : $courierId = $gdc_02; if ($courierId == "") : $courierId = "5329aaec8e06c724ec000002"; endif; endif; // Select API-Key from headquarters of the courier $currHq = ""; if ($crId != "") : $currHq = getFieldValueFromId("courier","cr_id",$crId,"hq_id"); endif; $apiKey = "533183292ad6210fd500001700000000OiEV3a6pl3AdL5qDQ79aCl22nBR6roCE"; if ($currHq == "1") : $apiKey = "53319500e26daf03a300001b00000000clbCnJ3K9XjQ6XSbSPZNgmSoiKNO9LNh"; $courierId = "5335a7f8e26daf03a300008f00000000"; elseif ($currHq == "2") : $apiKey = "53354a542ad6210fd500006000000000VXBWIEM9q5Dh6SJcoYb1PRTfGAB9ehzV"; // $courierId = "54116e80281ec24aff000143"; $courierId = "54116e80281ec24aff00014300000000"; elseif ($currHq == "3") : $apiKey = "ynPIWypFHvyQuykyU84SK77iOT_Xkl9u2BS9ExTwsY1F_cBx3OUi-DREjoBSxQpO"; $courierId = "tHp_T3IsLKbTILsuBamACbmDGRonkwx_"; elseif ($currHq == "4") : $apiKey = "53318d0b2ad6210fd500001900000000-uBBN9P_218rgLiex9lonWn2-NO1YxaC"; $courierId = "5335a6b4e26daf03a300008e00000000"; elseif ($currHq == "5") : $apiKey = "7SKbzWxaW9lcos49v2T6tASVBGeE7bSLtIfdp8zOfhFxGHNKPvLQYD0cIML3a3ZO"; $courierId = "mlw2UpV--RkiqIvK1Vf9I1Pjkd2sY-hw"; elseif ($currHq == "6") : $apiKey = ""; $courierId = ""; elseif ($currHq == "7") : $apiKey = "5331922de26daf03a300001900000000R0jD-YV20LTyFMbz1GaU1LRv1iejXSg2"; $courierId = "5335a5de2ad6210fd500006b"; elseif ($currHq == "8") : $apiKey = ""; $courierId = ""; elseif ($currHq == "9") : $apiKey = "XV2xAbdXu9qvEkmy7bt5-O_4fR1rlToUR4OjgyKf7437si404snx5oZyazUtVprB"; $courierId = "XV2xAbdXu9qvEkmy7bt5-O_4fR1rlToU"; elseif ($currHq == "10") : $apiKey = ""; $courierId = ""; elseif ($currHq == "11") : if ($isProductive) : $apiKey = "533183292ad6210fd500001700000000OiEV3a6pl3AdL5qDQ79aCl22nBR6roCE"; $courierId = "5335a5152ad6210fd500006a"; else : $apiKey = "I1PDEq_wy1zLKNYblJklO-k-42W02rOI5Ei6YK22mV_CYJm8jDoRAmCBzNw8RSbQ"; // 5335a5152ad6210fd500006a00000000JM6QrjNtF6snXEZEabRrthrOX7pcvkcq I1PDEq_wy1zLKNYblJklO-k-42W02rOI5Ei6YK22mV_CYJm8jDoRAmCBzNw8RSbQ $courierId = "5335a5152ad6210fd500006a00000000"; endif; elseif ($currHq == "90") : $apiKey = ""; $courierId = ""; endif; // Convert timestamp from localtime to UTC [2014-03-01 10:00:00 20140301100000] $timestamp = gmdate("Y-m-d H:i:s", mktime(substr($timestamp, 11, 2), substr($timestamp, 14,2), substr($timestamp, 17, 2), substr($timestamp, 5, 2), substr($timestamp, 8,2), substr($timestamp, 0, 4))); $timestamp = substr($timestamp,0,10). "T" . substr($timestamp,11) . "Z"; $requestHeader = ""; $requestBody = ""; if ($stateEvent != "2" || $shipmentId != "") : // Define header request $requestHeader .= "PUT /" . $shipmentId . " HTTP/1.1\r\n"; $requestHeader .= "Host: " . $server . "\r\n"; // $requestHeader .= "Host: " . $server . $shipmentId . "\r\n"; $requestHeader .= "Content-Type: application/json; charset=utf-8\r\n"; $requestHeader .= "API-Key: " . $apiKey . " \r\n"; $requestHeader .= "Content-Length: LENGTH\r\n"; /* { "CCIMessageHeader": { "SenderOrganisation": "", "SenderGLN"*: "", "ReceiverOrganisation": "", "ReceiverGLN"*: "", "MessageType": "CCI_DEPOSIT_ADVICE", "MessageTime": "" }, "CCIDepositAvis": [ { "DepartmentGLN": "", "CustomerOrganisation": "", "CustomerGLN"*: "", "BranchNo": "", "BranchName"*: "", "LocationCode"*: "", "Amount": , "ContainerType"*: "", "PickupTime": "" } ... ] } BEISPIEL: POST https://:3310/webamis/CCI20/depositadvice HTTP/1.1. content-type: application/json Authorization: Basic { "CCIMessageHeader": { "SenderOrganisation": "www.mycustomer.de", "ReceiverOrganisation": "www.itkompetenz.de", "ReceiverGLN": "4399901967878", "MessageType": "CCI_DEPOSIT_ADVICE", "MessageTime": "2017-07-16T13:22:45Z" }, "CCIDepositAdvice": [ { "DepartmentGLN": "4399901967878", "CustomerOrganisation": "www.mycustomer.de", "BranchNo": 105, "BranchName": "Testshop 105", "Barcode": "00340356584051566423", "LocationCode": "10078881" "Amount": 1200.00, "ContainerType": "SB", "PickupTime": "2017-07-18T10:00:00Z" }, { "DepartmentGLN": "4399901967878", "CustomerOrganisation": "www.mycustomer.de", "BranchNo": 88103, "BranchName": "ATM Mainstation", "Barcode": "00340356584051566447", "LocationCode": "10078895" "Amount": 4500.00, "ContainerType": "AC", "PickupTime": "2017-07-18T10:30:00Z" } ] } */ $shipments = array(); $tmp_array = array(); if ($stateEvent == "0") { $tmp_array['stateEvent'] = "accept"; // $tmp_array['waybillNr'] = $tr1CommissionNo; $tmp_array['courierId'] = $courierId; // $tmp_array['timestamps'] = array('acceptedAt' => $timestamp); $tmp_array['acceptedAt'] = $timestamp; } else if ($stateEvent == "1") { $tmp_array['stateEvent'] = "pickup"; // $tmp_array['waybillNr'] = "A-" . $tr1CommissionNo; $tmp_array['courierId'] = $courierId; // $tmp_array['timestamps'] = array('pickedupAt' => $timestamp); $tmp_array['pickedupAt'] = $timestamp; } else if ($stateEvent == "2") { // Get event state from GDC $eventReason = getFieldValueFromClause("genericdatacontainer", "gdc_content", "gdc_obj_type = 'tr' AND gdc_gen_fieldname = 'del_code' AND gdc_obj_id = '" . $trId . "'"); if ($eventReason == "" || $eventReason == "0" || ($eventReason >= "100" && $eventReason <= "199")) : // OK <=> dropoff if ($eventReason == "101") : $eventText = "with_contact"; elseif ($eventReason == "102") : $eventText = "with_neighbour"; elseif ($eventReason == "103") : $eventText = "in_safe_place"; else : $eventText = ""; endif; $tmp_array['stateEvent'] = "dropoff"; $tmp_array['finalConsignee'] = utf8_encode($trSignName); $tmp_array['courierId'] = $courierId; $tmp_array['dropOffSignature'] = $trSign; // $tmp_array['dropOffSignatureUrl'] = ""; // $tmp_array['waybillNr'] = "A-" . $tr1CommissionNo; // $tmp_array['waybillNrConfirmation'] = "A-" . $tr1CommissionNo; // $tmp_array['timestamps'] = array('droppedoffAt' => $timestamp); $tmp_array['droppedoffAt'] = $timestamp; if ($eventText != "") : $tmp_array['dropOffOutcome'] = $eventText; endif; elseif ($eventReason >= "1" && $eventReason <= "5") : // Reasons if ($eventReason == "1") : $eventText = "address_not_found"; elseif ($eventReason == "2") : $eventText = "recipient_not_found_at_address"; elseif ($eventReason == "3") : $eventText = "recipient_not_there"; elseif ($eventReason == "4") : $eventText = "acceptance_refused"; elseif ($eventReason == "5") : $eventText = "allowed_time_exceeded"; else : $eventText = "recipient_not_there"; endif; $tmp_array['stateEvent'] = "undeliverable"; $tmp_array['undeliverableReason'] = $eventText; // $tmp_array['courierId'] = $courierId; // $tmp_array['dropOffSignature'] = $trSign; // $tmp_array['dropOffSignatureUrl'] = ""; // $tmp_array['timestamps'] = array('undeliverableAt' => $timestamp); $tmp_array['undeliverableAt'] = $timestamp; elseif ($eventReason == "6") : // Return to sender $tmp_array['stateEvent'] = "returnedToSender"; $tmp_array['returnedToSenderContactName'] = ""; $tmp_array['returnedToSenderSignature'] = ""; $tmp_array['returnedToSenderSignatureUrl'] = ""; // $tmp_array['timestamps'] = array('returnedToSenderAt' => $timestamp); $tmp_array['returnedToSenderAt'] = $timestamp; endif; } $frameArray = array(); $frameArray['shipment'] = $tmp_array; $shipments[] = $frameArray; $requestBody .= json_encode($shipments); // $requestBody .= array_to_json($shipments); $requestBody = substr($requestBody,1,-1); // Remove "[" and "]" // $requestBody = urlencode($requestBody); $requestBodyLen = strlen($requestBody); $requestHeader = str_replace("LENGTH", $requestBodyLen, $requestHeader); endif; $requestConfigArray = array(); if ($requestBody != "") : $requestConfigArray["CURLOPT_URL"] = $server . $shipmentId; $requestConfigArray["CURLOPT_HTTPHEADER"] = array('Content-Type: application/json', 'API-Key: ' . $apiKey); $requestConfigArray["CURLOPT_RETURNTRANSFER"] = true; $requestConfigArray["CURLOPT_CUSTOMREQUEST"] = "PUT"; $requestConfigArray["CURLOPT_POSTFIELDS"] = $requestBody; // JSON $requestConfigArray["CURLOPT_PUT"] = true; endif; return $requestConfigArray; } /* EVENT-RESPONSES [JSON] // ACCEPT (Annahme des Auftrags durch den Fahrer) { "shipment": { "stateEvent":"accept", "courierId":"", "acceptedAt":"" } } // PICKUP (Abholung) { "shipment": { "stateEvent":"pickup", "courierId":"", "pickedupAt":"" } } // DROP-OFF (Anlieferung) // [CASE DELIVERED] { "shipment": { "stateEvent":"dropoff", "finalConsignee":"", "courierId":"", "dropOffSignature":"", "droppedoffAt":"", "dropOffOutcome":"", } } // [CASE NOT DELIVERED] { "shipment": { "stateEvent":"dropoff", "courierId":"", "stateEvent":"undeliverable", "undeliverableReason'":"" "undeliverableAt'":"" } } // --------------------------------------------------------------- BEISPIEL: // ACCEPT { "shipment": { "stateEvent":"accept", <= konstant "courierId":"E1044", <= Stadtbote-Fahrzeugnummer "acceptedAt":"2017-01-17T08:31:00Z" <= Annahmezeitpunkt } } // PICKUP { "shipment": { "stateEvent":"pickup", <= konstant "courierId":"E1044", <= Stadtbote-Fahrzeugnummer "pickedupAt":"2017-01-17T08:55:16Z" <= Abholzeitpunkt } } // DROP-OFF // [CASE DELIVERED] { "shipment": { "stateEvent":"dropoff", <= konstant "finalConsignee":"Meier", <= Klartext der unterschreibenden Person "courierId":"E1044", <= Stadtbote-Fahrzeugnummer "dropOffSignature":"iVBORw0KGgoAAAANSUhEUgAAAoAAAAEKAQMAAAC4wHZDAAAABlBM........", "droppedoffAt":"2017-01-17T15:36:15Z", <= Auslieferzeitpunkt "dropOffOutcome":"with_contact" <= einer der erfolgreichen Übergabearten } } // [CASE NOT DELIVERED] { "shipment": { "stateEvent":"dropoff", <= konstant "courierId":"E444", <= Stadtbote-Fahrzeugnummer "stateEvent":"undeliverable", <= konstant "undeliverableReason'":"recipient_not_there", <= einer der Gründe für die Nichtzustellunh "undeliverableAt'":"2017-01-17T15:36:15Z" <= Zeitpunkt } } --------------------------------------------------------------------------------- PRODUKTIVSYSTEM: STExxxxxx STExxxxxx Eyyyyy 6759432675943265432564935643295643956439563 ---- TESTSYSTEM: https://mps1.assecutor.de/test_sb/tools/order_request.php STS910195 STS910195 S10195_TEST 4e9800998ecf8427d04f1621a119799fd3d7545d3dc81e728d9d41802d63508455ca9038f00b20db4e74220d41d8ea6cd98c2f636f067f89cc14862c8d34e6d8 */ ?>