#php #json #xml #laravel #payload
Вопрос:
У меня проблема с отправкой файлов в формате XML. Моя программа работает следующим образом; вы загружаете файл .csv, который я анализирую в интерфейсе React в JSON. Моя БД работает на Postgres, где данные будут загружены точно так, как это должно быть. Но дело в том, чтобы отправить эти же данные в виде XML в базу данных Oracle. (Для лучшего понимания, пожалуйста, проверьте код ниже)
Я пробовал много способов, но это будет работать только тогда, когда данные заданы в коде. Как здесь РАБОТАЕТ ПРИМЕР:
служба общественных функций( Запрос $запрос ) {
$datas = $request->input('datas');
$curl = curl_init();
$uuid = Str::uuid()->toString();
$date = Carbon::now();
$dt = $date->format('Y-m-d');
$ho = $date->format('H:i:s');
$endDate = $dt."T".$ho;
for ($i=0; $i < count($datas) ; $i ) {
$v_0 = !isset($datas[$i][0]) ? "" : $datas[$i][0] ;
$v_1 = !isset($datas[$i][1]) ? "" : $datas[$i][1] ;
$v_2 = !isset($datas[$i][2]) ? "" : $datas[$i][2] ;
$v_3 = 9999;
$v_4 = 1;
$row_effects = DB::table('target_groups')->insert([
'STORE_KEY' => $v_0,
'CUST_NO' => $v_1,
'TARGET_GROUP_ID' => $v_2,
'TARGET_GROUP_STORE_KEY' => $v_3,
'ORIGIN_TYPE_CD' => $v_4,
'created_at' => now()
]);
$obj["status"] = $row_effects;
// json to xml
/*
$uuid = Str::uuid()->toString();
$date = Carbon::now();
$dt = $date->format('Y-m-d');
$ho = $date->format('H:i:s');
$endDate = $dt."T".$ho;
*/
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://oracleURL',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS =>'{
"bulk": [{
"entity": "customer_data_update",
"primaryKey": "r4f7546e-2545-40cd-a01d-471f2865d734",
"action": "UPSERT",
"sortorder": 1,
"lastModified": "2021-10-04T09:33:10",
"payload": {
"STORE_KEY": "23",
"SERVICE": "CustDataUpdate",
"MODIFIER": "1910001910",
"PAYLOAD_DATA": "<STORESET STORE_KEY="23"> <DATASET NUM="1"> <ROWSET TABLE_NAME="CUST_GROUP"> <ROW NUM="1"> <STORE_KEY>23</STORE_KEY> <CUST_NO>37252</CUST_NO> <TARGET_GROUP_STORE_KEY>9999</TARGET_GROUP_STORE_KEY> <ORIGIN_TYPE_CD>1</ORIGIN_TYPE_CD> <TARGET_GROUP_ID>444</TARGET_GROUP_ID> </ROW> </ROWSET> </DATASET> </STORESET>",
"SOURCE_APPLICATION": "LOCAL_APP",
"CORRELATION_ID": "r4f7546e-2545-40cd-a01d-471f2865d734"
}
}]
}
',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic code....', // ihave delete the base64 code here for showing porpose
'Cookie: BIGipServerchange.......' // ihave delete the rest here for showing porpose
),
));
$response = curl_exec($curl);
sleep(1);
}
curl_close($curl);
return response()->json($obj);
}
Часть комментариев показывает, что я также пытался сделать. Здесь полезная нагрузка работает нормально, чтобы убедиться, что соединение работает.
НЕ РАБОТАЕТ ПРИМЕР: служба публичных функций( запрос $запрос ) {
$datas = $request->input('datas');
$curl = curl_init();
$uuid = Str::uuid()->toString();
$date = Carbon::now();
$dt = $date->format('Y-m-d');
$ho = $date->format('H:i:s');
$endDate = $dt."T".$ho;
for ($i=0; $i < count($datas) ; $i ) {
$v_0 = !isset($datas[$i][0]) ? "" : $datas[$i][0] ;
$v_1 = !isset($datas[$i][1]) ? "" : $datas[$i][1] ;
$v_2 = !isset($datas[$i][2]) ? "" : $datas[$i][2] ;
$v_3 = 9999;
$v_4 = 1;
$row_effects = DB::table('target_groups')->insert([
'STORE_KEY' => $v_0,
'CUST_NO' => $v_1,
'TARGET_GROUP_ID' => $v_2,
'TARGET_GROUP_STORE_KEY' => $v_3,
'ORIGIN_TYPE_CD' => $v_4,
'created_at' => now()
]);
$obj["status"] = $row_effects;
// json to xml
/*
$uuid = Str::uuid()->toString();
$date = Carbon::now();
$dt = $date->format('Y-m-d');
$ho = $date->format('H:i:s');
$endDate = $dt."T".$ho;
*/
curl_setopt_array($curl, array(
CURLOPT_URL => 'https://oracleURL',
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => '',
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => 'PUT',
CURLOPT_POSTFIELDS =>'{
"bulk": [{
"entity": "customer_data_update",
"primaryKey": "'.$uuid.'",
"action": "UPSERT",
"sortorder": 1,
"lastModified": "'.$endDate.'",
"payload": {
"STORE_KEY": "'.$v_0.'",
"SERVICE": "CustDataUpdate",
"MODIFIER": "1910001910",
"PAYLOAD_DATA": "<STORESET STORE_KEY="'.$v_0.'"> <DATASET NUM="1"> <ROWSET TABLE_NAME="CUST_GROUP"> <ROW NUM="1"> <STORE_KEY>'.$v_0.'</STORE_KEY> <CUST_NO>'.$v_1.'</CUST_NO> <TARGET_GROUP_STORE_KEY>'.$v_3.'</TARGET_GROUP_STORE_KEY> <ORIGIN_TYPE_CD>'.$v_4.'</ORIGIN_TYPE_CD> <TARGET_GROUP_ID>'.$v_2.'</TARGET_GROUP_ID> </ROW> </ROWSET> </DATASET> </STORESET>",
"SOURCE_APPLICATION": "LOCAL_APP",
"CORRELATION_ID": "'.$uuid.'"
}
}]
}
',
CURLOPT_HTTPHEADER => array(
'Content-Type: application/json',
'Authorization: Basic code....', // ihave delete the base64 code here for showing porpose
'Cookie: BIGipServerchange.......' // ihave delete the rest here for showing porpose
),
));
$response = curl_exec($curl);
sleep(1);
}
curl_close($curl);
return response()->json($obj);
}
Я пробовал, где я печатаю ключ и дату, все равно то же самое.
У меня есть два образца .csv, один с несколькими данными, другой только с одними данными.
Почему это не работает, мне нужна помощь.
Не могли бы вы, пожалуйста, помочь мне?
Комментарии:
1. Что именно не работает? Что вы пытались сделать, чтобы решить эту проблему? Где ты застрял?
2. Когда я использую второй НЕРАБОТАЮЩИЙ ПРИМЕР, что должно сработать. Ошибки нет, но данных нет в базе данных ORACLE. Я уже внес несколько изменений в код, например, добавил sleep(1) / без той же проблемы. У меня есть изменение, например <КЛЮЧ ХРАНИЛИЩА>’.$v_0.'<КЛЮЧ ХРАНИЛИЩА></КЛЮЧ ХРАНИЛИЩА> на </КЛЮЧ ХРАНИЛИЩА><КЛЮЧ ХРАНИЛИЩА>»‘.$v_0.'»<КЛЮЧ ХРАНИЛИЩА></КЛЮЧ ХРАНИЛИЩА>, все еще не работает. Похоже, что это не заменяет точные значения в этих полях. Или что-то еще. У меня уже был другой код, но я удалил его и взял это у почтальона.
3. Привет, Нико, спасибо за твой ответ. Сначала, где я застрял, данные, которые я загружаю из файла .csv, анализируются в JSON во внешнем интерфейсе react, загружаются в PostgresSQL. В той же функции (служба публичных функций( Запрос $запрос ) {) ее необходимо отправить, а также отправить в БД ORACLE, как ОСНОВНУЮ часть, которая отображает информацию и формат. Насколько я понимаю, «КЛЮЧ ХРАНИЛИЩА» = > $v_0, «CUST_NO» = > > $v_1, «TARGET_GROUP_ID» = > > > $v_2, то, что отправляется в Postgres, неправильно отправляется в основную массу.
4. Пожалуйста, добавьте все разъяснения к вашему вопросу, отредактировав его
5. Это то, что я получаю в заключении, когда я проверяю исключение ConstraintViolationException, ответы больше относятся к проблеме, связанной с JAva: = {«код»:400,»сообщение»:»Произошло исключение ConstraintViolationException с идентификатором f7a54ae5-dcff-45f9-aca5-8b18aed67365. Дополнительную информацию см. в файлах журналов. «}{«статус»: истина}», «статус»: 200, «statusText»: «ОК»,