Skip to content

Instantly share code, notes, and snippets.

@niveshsaharan
Last active August 18, 2019 06:41
Show Gist options
  • Save niveshsaharan/c15f787def7791de6936ec52b828daf0 to your computer and use it in GitHub Desktop.
Save niveshsaharan/c15f787def7791de6936ec52b828daf0 to your computer and use it in GitHub Desktop.
Sellify Partners - Create referred shop
<?php
$accessToken = 'MY_ACCESS_TOKEN_GENERATED_FROM_ADMIN_ACCOUNT';
curl_advance([
'URL' => 'https://partners.mydomain.com/api/shops',
'METHOD' => 'POST',
'HEADERS' => [
'Accept: application/json',
'Authorization: Bearer ' . $accessToken,
],
'DATA' => [
'shopify_domain' => 'myshop.myshopify.com',
'app' => 'my-app-slug',
'username' => 'affiliate-username-here',
],
]);
/**
* Executes the actual cURL call based on $userData
*
* @param array $userData
*
* @return mixed
* @throws \Exception
*/
function curl_advance($userData = [])
{
if (is_string($userData)) {
$userData = ['URL' => $userData];
}
$request = array_merge([
'CHARSET' => 'UTF-8',
'METHOD' => 'GET',
'URL' => '/',
'HEADERS' => [],
'DATA' => [],
'FAILONERROR' => false,
'RETURNARRAY' => false,
'ALLDATA' => true,
], $userData);
// Send & accept JSON data
$defaultHeaders = [];
$defaultHeaders[] = 'Content-Type: application/json; charset=' . $request['CHARSET'];
$defaultHeaders[] = 'Accept: application/json';
$headers = array_merge($defaultHeaders, $request['HEADERS']);
$url = $request['URL'];
// cURL setup
$ch = curl_init();
$options = [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_URL => $url,
CURLOPT_HTTPHEADER => $headers,
CURLOPT_CUSTOMREQUEST => strtoupper($request['METHOD']),
CURLOPT_ENCODING => '',
CURLOPT_USERAGENT => 'SELLIFYAPPS/CVMYSELLIFY',
CURLOPT_FAILONERROR => $request['FAILONERROR'],
CURLOPT_VERBOSE => $request['ALLDATA'],
CURLOPT_HEADER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
];
// Checks if DATA is being sent
if (!empty($request['DATA'])) {
if (is_array($request['DATA'])) {
$options[CURLOPT_POSTFIELDS] = json_encode($request['DATA']);
} else {
// Detect if already a JSON object
json_decode($request['DATA']);
if (json_last_error() == JSON_ERROR_NONE) {
$options[CURLOPT_POSTFIELDS] = $request['DATA'];
} else {
throw new \Exception('DATA malformed.');
}
}
}
curl_setopt_array($ch, $options);
$response = curl_exec($ch);
$headerSize = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
// Data returned
$result = json_decode(substr($response, $headerSize), $request['RETURNARRAY']);
// Headers
$info = array_filter(array_map('trim', explode("\n", substr($response, 0, $headerSize))));
foreach ($info as $k => $header) {
if (strpos($header, 'HTTP/') > -1) {
$_INFO['HTTP_CODE'] = $header;
continue;
}
list($key, $val) = explode(':', $header);
$_INFO[trim($key)] = trim($val);
}
// cURL Errors
$_ERROR = ['NUMBER' => curl_errno($ch), 'MESSAGE' => curl_error($ch)];
curl_close($ch);
if ($_ERROR['NUMBER']) {
throw new \Exception('ERROR #' . $_ERROR['NUMBER'] . ': ' . $_ERROR['MESSAGE']);
}
// Send back in format that user requested
if ($request['ALLDATA']) {
if ($request['RETURNARRAY']) {
$result['_ERROR'] = $_ERROR;
} else {
$result = $result ? $result : new \stdClass();
$result->_ERROR = $_ERROR;
}
return $result;
} else {
return $result;
}
}
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment