Как правильно получать данные из стороннего API Freshdesk?Php

Кемеровские программисты php общаются здесь
Ответить
Anonymous
 Как правильно получать данные из стороннего API Freshdesk?

Сообщение Anonymous »

У меня возникла проблема с получением данных из API Freshdesk Developers. Я пытаюсь вернуть билеты, которым еще не назначена покупка в нашей системе, на основе определенных фильтров. Когда я вывожу данные с помощью чего-то вроде dd(), я вижу, что он возвращает в общей сложности 187 билетов. Однако в моей сетке данных внешнего интерфейса я вижу только 30 заявок, по 5 заявок на страницу.
Возможным решением может быть всегда возвращать только 30 записей, а остальные записи генерируются как поддельные. Но на конкретной странице, где в данный момент находится пользователь, должны отображаться только реальные записи. Поддельные страницы появятся на других страницах, где пользователь в данный момент отсутствует. Это означает, что на самом деле одновременно извлекаются только 30 записей, но при навигации пользователя всегда будет загружаться следующий пакет из 30 реальных записей.
Проблема в том, что API этого не делает. позвольте мне загрузить все 187 билетов одновременно. К сожалению, я понятия не имею, как это реализовать, чтобы оно работало корректно. Поэтому я хочу узнать, сталкивался ли кто-нибудь в StackOverflow с подобной проблемой.
Это мой метод в контроллере для получения билетов.

Код: Выделить всё

public function getTicketsWithoutPurchase(Request $request)
{
$this->checkPermissions("index");

$groupIds = [77000033482, 77000271931, 77000008014, 77000008015, 77000269172, 77000017316, 77000008013, 77000008012];

$groupQuery = implode(' OR ', array_map(function ($id) {
return "group_id:$id";
}, $groupIds));

$statusQuery = "status:2 OR status:3";

$query = '"(' . $groupQuery . ') AND (' . $statusQuery . ')"';

$page = $request->input('page', 1);

$response = FreshdeskService::filterTickets($query, 'lp', $page);

if ($response['success']) {
$tickets = $response['response']['results'] ?? [];
$totalTickets = $response['response']['total'] ?? 0;
$perPage = 30;
$start = ($page - 1) * $perPage;
dd($start);

$totalPages = ceil($totalTickets / $perPage);

if ($page > $totalPages) {
$data = collect()->pad($perPage, [
'id' => null,
'subject' => 'Fake Ticket',
'updated_at' => null,
'to_emails' => 'No Email provided',
'status' => null,
'group' => null
]);
} else {
$ticketCollection = collect($tickets);

$data = $ticketCollection->map(function ($ticket) {
return [
'id' => $ticket['id'] ?? null,
'subject' => $ticket['subject'] ?? '-',
'updated_at' => $ticket['updated_at'] ?? '-',
'to_emails' => $ticket['to_emails'] ?? 'No Email provided',
'status' => $ticket['status'],
'group' => $ticket['group_id']
];
});
}

return self::watchDataTable($data, $request);
}

return response()->json(['message' => 'Could not retrieve tickets'], 500);
}
Это метод фильтрации заявок в сервисе Freshdesk.

Код: Выделить всё

public static function filterTickets(string $query, $alias): array
{
return self::simpleRequest("search/tickets?query=" .  urlencode($query), [], "GET", $alias);
}
А это интерфейсный компонент

Код: Выделить всё







[h4]
[i][/i]
{{ this.$t('purchases.select_ticket_for_purchase') }}
[/h4]












export default {
// props: {
//   model: { type: Object, required: true },
// },
data() {
return {
freshdeskGridTableSettings: {
fetchUrl: "/data/no-purchase",
columns: [
{
key: "id",
label: "purchases.ticket_id",
hidden: false,
},

{
key: "subject",
label: "purchases.subject",
searchable: false,
sortable: false
},
{
key: "updated_at",
label: "purchases.updated_at",
searchable: false,
sortable: false
},
{
key: "to_emails",
label: "purchases.to_emails",
searchable: false,
sortable: false
},
{
key: "status",
label: "purchases.status",
searchable: false,
sortable: false
},
// {
//   key: "agent",
//   label: "purchases.agent",
//   searchable: false,
//   sortable: false
// },
{
key: "group",
label: "purchases.group",
searchable: true,
sortable: false
},
{
type: "event",
key: "add",
// callback: this.newPosition,
permissions: ["manage purchases"],
icon: "fa-plus",
label: "purchases.add_ticket",
classes: "btn btn-success",
// conditions: {
//   visible: [{ model: this.model, property: "status", operator: "le", value: 110 }]
// }
}
],
defaultSearchParams: {
// purchase_id: this.model.id,
},
showSearch: true,
showSearchColumn: true,
showPageLength: true,
defaultSortBy: "id",
defaultOrder: "desc",
defaultPerPage: 5,
pageLengths: [5, 10, 25, 50, 100],
columnId: "id",

},
};
},
methods: {
addTicket(){
this.axios.post()
}
},
};


И вот что я для этого использую -> https://developers.freshdesk.com/api/#filter_tickets.

Подробнее здесь: https://stackoverflow.com/questions/790 ... -freshdesk
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Php»