596 lines
17 KiB
PHP
596 lines
17 KiB
PHP
<?php
|
|
|
|
namespace App\Utils;
|
|
|
|
class IfoodUtil{
|
|
|
|
public function getUserCode($config){
|
|
$url = "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/userCode";
|
|
|
|
$curl = curl_init();
|
|
|
|
$headers = [];
|
|
curl_setopt($curl, CURLOPT_URL, $url . "?clientId=".$config->clientId);
|
|
curl_setopt($curl, CURLOPT_POST, true);
|
|
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true );
|
|
curl_setopt($curl, CURLOPT_HEADER, false);
|
|
$result = json_decode(curl_exec($curl));
|
|
curl_close($curl);
|
|
|
|
if(isset($result->authorizationCodeVerifier)){
|
|
$authorizationCodeVerifier = $result->authorizationCodeVerifier;
|
|
$verificationUrlComplete = $result->verificationUrlComplete;
|
|
$userCode = $result->userCode;
|
|
|
|
if($userCode){
|
|
$item = $config;
|
|
$item->userCode = $userCode;
|
|
$item->authorizationCodeVerifier = $authorizationCodeVerifier;
|
|
$item->verificationUrlComplete = $verificationUrlComplete;
|
|
$item->save();
|
|
return $userCode;
|
|
}
|
|
return "";
|
|
}else{
|
|
echo "Algo errado, retorno iFood: ";
|
|
print_r($result);
|
|
die;
|
|
}
|
|
}
|
|
|
|
public function oAuthToken($config){
|
|
$url = "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/token";
|
|
|
|
$ch = curl_init();
|
|
$grantType = $config->grantType;
|
|
|
|
if($config->accessToken != ""){
|
|
$grantType = 'refresh_token';
|
|
}
|
|
|
|
$clientId = $config->clientId;
|
|
$clientSecret = $config->clientSecret;
|
|
$authorizationCode = $config->authorizationCode;
|
|
$authorizationCodeVerifier = $config->authorizationCodeVerifier;
|
|
|
|
$params = "?grantType=$grantType&clientId=$clientId&clientSecret=$clientSecret&authorizationCode=$authorizationCode&authorizationCodeVerifier=$authorizationCodeVerifier";
|
|
|
|
if($config->accessToken != ""){
|
|
$params .= "&refreshToken=" . $config->refreshToken;
|
|
}
|
|
$headers = [];
|
|
curl_setopt($ch, CURLOPT_URL, $url . $params);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
if(!isset($result->error)){
|
|
|
|
$accessToken = $result->accessToken;
|
|
$refreshToken = $result->refreshToken;
|
|
$item = $config;
|
|
$item->accessToken = $result->accessToken;
|
|
$item->refreshToken = $result->refreshToken;
|
|
|
|
$item->save();
|
|
return ['success' => 1, 'token' => $accessToken];
|
|
}else{
|
|
$item = $config;
|
|
$item->save();
|
|
return ['success' => 0, 'message' => $result->error->message];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
public function newToken($config){
|
|
$url = "https://merchant-api.ifood.com.br/authentication/v1.0/oauth/token";
|
|
|
|
$ch = curl_init();
|
|
$grantType = $config->grantType;
|
|
|
|
$clientId = $config->clientId;
|
|
$clientSecret = $config->clientSecret;
|
|
$authorizationCode = $config->authorizationCode;
|
|
$authorizationCodeVerifier = $config->authorizationCodeVerifier;
|
|
|
|
// $params = "?grantType=$grantType&clientId=$clientId&clientSecret=$clientSecret&authorizationCode=$authorizationCode&authorizationCodeVerifier=$authorizationCodeVerifier";
|
|
$params = "?grantType=$grantType&clientId=$clientId&clientSecret=$clientSecret&authorizationCode=$authorizationCode&authorizationCodeVerifier=$authorizationCodeVerifier";
|
|
|
|
$headers = [];
|
|
curl_setopt($ch, CURLOPT_URL, $url . $params);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
if(!isset($result->error)){
|
|
$accessToken = $result->accessToken;
|
|
$refreshToken = $result->refreshToken;
|
|
$item = $config;
|
|
$item->accessToken = $result->accessToken;
|
|
$item->refreshToken = $result->refreshToken;
|
|
|
|
$item->save();
|
|
return ['success' => 1, 'token' => $accessToken];
|
|
}else{
|
|
dd($result->error);
|
|
$item = $config;
|
|
$item->save();
|
|
return ['success' => 0, 'message' => $result->error->message];
|
|
}
|
|
}
|
|
|
|
public function statusMerchant($config){
|
|
$url = "https://merchant-api.ifood.com.br/merchant/v1.0/merchants/".$config->merchantUUID."/status";
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
];
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
|
|
return $result;
|
|
}
|
|
|
|
public function getInterruptions($config){
|
|
$url = "https://merchant-api.ifood.com.br/merchant/v1.0/merchants/".$config->merchantUUID."/interruptions";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
return json_decode($result['response']);
|
|
|
|
}
|
|
|
|
public function getCatalogs($config){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/catalogs";
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken
|
|
];
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
return $result;
|
|
|
|
}
|
|
|
|
public function getCategories($config){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/catalogs/".
|
|
$config->catalogId."/categories";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function getCategoriesV2($config) {
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v2.0/merchants/" . $config->merchantUUID . "/catalogs/" . $config->catalogId . "/categories";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
|
|
if ($result['http_code'] === 200) {
|
|
return json_decode($result['response'], true);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function getCategoryItemsV2($config, $categoryId) {
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v2.0/merchants/" . $config->merchantUUID . "/categories/" . $categoryId . "/items";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
|
|
if ($result['http_code'] === 200) {
|
|
return json_decode($result['response'], true);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
public function storeInterruption($config, $data){
|
|
$url = "https://merchant-api.ifood.com.br/merchant/v1.0/merchants/".$config->merchantUUID."/interruptions";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json',
|
|
'Content-Type: application/json',
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'POST', $payload);
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function destroyInterruption($config, $id){
|
|
$url = "https://merchant-api.ifood.com.br/merchant/v1.0/merchants/".$config->merchantUUID."/interruptions/$id";
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json',
|
|
'Content-Type: application/json',
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'DELETE');
|
|
dd($result);
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
// private function makeApiRequest($url, $headers = [], $method = 'GET', $data = null) {
|
|
// $ch = curl_init();
|
|
// curl_setopt($ch, CURLOPT_URL, $url);
|
|
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);
|
|
// curl_setopt($ch, CURLOPT_TIMEOUT, 30);
|
|
// curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
|
|
// if ($method === 'POST') {
|
|
// curl_setopt($ch, CURLOPT_POST, true);
|
|
// if ($data) {
|
|
// curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
// }
|
|
// }
|
|
|
|
// $response = curl_exec($ch);
|
|
// $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
|
|
// $curlError = curl_error($ch);
|
|
// curl_close($ch);
|
|
|
|
// return [
|
|
// 'response' => $response,
|
|
// 'http_code' => $httpCode,
|
|
// 'error' => $curlError
|
|
// ];
|
|
// }
|
|
|
|
private function makeApiRequest($url, $headers = [], $method = 'GET', $data = null)
|
|
{
|
|
$ch = curl_init();
|
|
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_URL => $url,
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_SSL_VERIFYPEER => true,
|
|
CURLOPT_TIMEOUT => 30,
|
|
CURLOPT_ENCODING => '',
|
|
CURLOPT_HTTPHEADER => $headers,
|
|
]);
|
|
|
|
$method = strtoupper($method);
|
|
|
|
if (in_array($method, ['POST', 'PUT', 'PATCH', 'DELETE'])) {
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $method);
|
|
|
|
if ($data !== null) {
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
|
|
}
|
|
}
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
$result = [
|
|
'response' => $response,
|
|
'http_code' => curl_getinfo($ch, CURLINFO_HTTP_CODE),
|
|
'error' => curl_error($ch),
|
|
];
|
|
|
|
curl_close($ch);
|
|
|
|
return $result;
|
|
}
|
|
|
|
|
|
public function getProducts($config)
|
|
{
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v2.0/merchants/". $config->merchantUUID
|
|
. "/products?limit=200&page=1";
|
|
|
|
$ch = curl_init();
|
|
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_URL => $url,
|
|
CURLOPT_HTTPHEADER => [
|
|
"Authorization: Bearer {$config->accessToken}",
|
|
"Content-Type: application/json"
|
|
],
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 30,
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
if (curl_errno($ch)) {
|
|
throw new \Exception(curl_error($ch));
|
|
}
|
|
|
|
curl_close($ch);
|
|
|
|
return json_decode($response, true);
|
|
}
|
|
|
|
public function findProduct($config, $id)
|
|
{
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/". $config->merchantUUID
|
|
. "/product/$id";
|
|
|
|
$ch = curl_init();
|
|
|
|
curl_setopt_array($ch, [
|
|
CURLOPT_URL => $url,
|
|
CURLOPT_HTTPHEADER => [
|
|
"Authorization: Bearer {$config->accessToken}",
|
|
"Content-Type: application/json"
|
|
],
|
|
CURLOPT_RETURNTRANSFER => true,
|
|
CURLOPT_TIMEOUT => 30,
|
|
]);
|
|
|
|
$response = curl_exec($ch);
|
|
|
|
if (curl_errno($ch)) {
|
|
throw new \Exception(curl_error($ch));
|
|
}
|
|
|
|
curl_close($ch);
|
|
|
|
return json_decode($response, true);
|
|
}
|
|
|
|
|
|
public function storeCategory($config, $data){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/catalogs/".
|
|
$config->catalogId."/categories";
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_POST, true);
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
return $result;
|
|
|
|
}
|
|
|
|
public function updateCategory($config, $data, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/catalogs/".
|
|
$config->catalogId."/categories/".$id;
|
|
// dd($url);
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "PATCH");
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
return $result;
|
|
|
|
}
|
|
|
|
public function destroyCategory($config, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/catalogs/".
|
|
$config->catalogId."/categories/".$id;
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
];
|
|
|
|
curl_setopt($ch, CURLOPT_URL, $url);
|
|
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
|
|
|
|
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
curl_setopt($ch, CURLOPT_HEADER, false);
|
|
curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
$result = json_decode(curl_exec($ch));
|
|
curl_close($ch);
|
|
return $result;
|
|
|
|
}
|
|
|
|
// public function storeProduct($config, $data){
|
|
// $url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/products";
|
|
|
|
// $ch = curl_init();
|
|
// $headers = [
|
|
// "Authorization: Bearer " . $config->accessToken,
|
|
// 'Content-Type: application/json'
|
|
// ];
|
|
// $payload = json_encode($data);
|
|
|
|
// curl_setopt($ch, CURLOPT_URL, $url);
|
|
// curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
|
|
// curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
|
|
// curl_setopt($ch, CURLOPT_POST, true);
|
|
|
|
// curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
|
|
// curl_setopt($ch, CURLOPT_HEADER, false);
|
|
// curl_setopt($ch, CURLOPT_ENCODING, '');
|
|
// $result = json_decode(curl_exec($ch));
|
|
// curl_close($ch);
|
|
|
|
// return $result;
|
|
// }
|
|
|
|
public function storeProduct($config, $data){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/products";
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'POST', $payload);
|
|
return json_decode($result['response']);
|
|
|
|
}
|
|
|
|
public function updateProduct($config, $data, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/products/$id";
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'PUT', $payload);
|
|
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function updateStatusProduct($config, $data, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/items/$id/status";
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'PATCH', $payload);
|
|
return $result;
|
|
}
|
|
|
|
public function destroyProduct($config, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/products/".$id;
|
|
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'DELETE');
|
|
|
|
if ($result['http_code'] === 200) {
|
|
return json_decode($result['response'], true);
|
|
}
|
|
return null;
|
|
|
|
}
|
|
|
|
public function addStockProduct($config, $data){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/inventory";
|
|
|
|
$ch = curl_init();
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
$result = $this->makeApiRequest($url, $headers, 'POST', $payload);
|
|
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function associationProductCategory($config, $categoryId, $productId, $data){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/categories/$categoryId/products/$productId";
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
'Content-Type: application/json'
|
|
];
|
|
$payload = json_encode($data);
|
|
|
|
$result = $this->makeApiRequest($url, $headers, 'POST', $payload);
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function getStock($config, $id){
|
|
$url = "https://merchant-api.ifood.com.br/catalog/v1.0/merchants/".$config->merchantUUID."/inventory/$id";
|
|
$headers = [
|
|
'Authorization: Bearer ' . $config->accessToken,
|
|
'Accept: application/json'
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
|
|
if ($result['http_code'] === 200) {
|
|
return json_decode($result['response'], true);
|
|
}
|
|
return null;
|
|
|
|
}
|
|
|
|
public function getOrders($config, $types){
|
|
$url = "https://merchant-api.ifood.com.br/order/v1.0/events:polling?types=$types&groups=ORDER_STATUS%2CDELIVERY";
|
|
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
"x-polling-merchants: " . $config->merchantUUID
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
return json_decode($result['response']);
|
|
}
|
|
|
|
public function getOrderDetail($config, $id){
|
|
$url = "https://merchant-api.ifood.com.br/order/v1.0/orders/$id";
|
|
$headers = [
|
|
"Authorization: Bearer " . $config->accessToken,
|
|
];
|
|
|
|
$result = $this->makeApiRequest($url, $headers);
|
|
if ($result['http_code'] === 200) {
|
|
return json_decode($result['response'], true);
|
|
}
|
|
return $result;
|
|
}
|
|
|
|
|
|
} |