HEX
Server: Apache/2.4.46 (Ubuntu)
System: Linux localhost 5.11.0-49-generic #55-Ubuntu SMP Wed Jan 12 17:36:34 UTC 2022 x86_64
User: root (0)
PHP: 7.4.16
Disabled: pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_get_handler,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,pcntl_async_signals,pcntl_unshare,
Upload Files
File: /var/www/html/SendToKipu/indexMappingData.php
<?php
$opportunityId = isset($_REQUEST['opportunityId']) ? $_REQUEST['opportunityId'] : '';

if ($opportunityId == '') {

	header("Content-Type: text/xml\r\n");
	ob_start();

	function respond($tf)
	{
		print '<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         <soapenv:Body>
         <notifications xmlns="http://soap.sforce.com/2005/09/outbound">
         <Ack>' . $tf . '</Ack>
         </notifications>
         </soapenv:Body>
         </soapenv:Envelope>';
	}

	$data = fopen('php://input', 'rb');

	$content = fread($data, 5000);
	ob_end_clean();

	respond('true');

	$rcXML = simplexml_load_string($content);

	$opportunityId = (string) $rcXML->Id;

	if ($opportunityId == '') {
		$opportunityId = trim($rcXML->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children('http://soap.sforce.com/2005/09/outbound')->notifications->Notification->sObject->children('urn:sobject.enterprise.soap.sforce.com')->Id . PHP_EOL);
	}
}

my_log($opportunityId);


$BASE_URL 				= 'https://kipuapi.kipuworks.com';
$ACCESS_ID 				= '4bKm8x-ACsrhS7dydgz1kPcPKFu_EJ_yznJF7sdB2nM';
$KIPU_RECIPIENT_ID 		= 'JyrdYNdKv5nLgJPoACwY6GHbyyxZ25YT6r-ndIY-IjM';
$SECRET_KEY 			= 'hupTtcrI1EyRjQh95Ve+8XB9OqkuwbfAjbDfvwsdy0YcHEz8yLvZXx9by36OFgibggSftlBr+cpfHpEgTrLyNw==';
$APP_IDENTIFIER 		= 'Bridge Connector';
$EXT_SYSTEM_NAME 		= 'Salesforce';
$ACCEPT_HEADER 			= 'Accept';
$CONTENT_TYPE_HEADER 	= 'Content-type';
$CONTENT_MD5_HEADER 	= 'Content-MD5';
$DATE_HEADER 			= 'Date';

if (isset($opportunityId) && !empty($opportunityId)) {
	$accessData 	= getAccessData($opportunityId);
	$instance_url 	= (isset($accessData['instance_url'])) ? $accessData['instance_url'] : '';
	$access_token 	= (isset($accessData['access_token'])) ? $accessData['access_token'] : '';

	if (!empty($instance_url) && !empty($access_token) && !empty($opportunityId)) {
		//Opportunity Data

		$oppActualData 	= (array)opportunityData($instance_url, $access_token, $opportunityId);

		my_log(json_encode($oppActualData));

		$oppData = array();
		if (count($oppActualData) > 0) {
			foreach ($oppActualData as $key => $value) {
				if (!is_object($value)) {
					if ($value) {
						$value = str_replace(array("<br />", "<br/>", "\r", "\n"), ' ', $value);
					}
				}
				$oppData[$key] = $value;
			}
		}




		$Is_Uk_Owner__c = (isset($oppData['Is_Uk_Owner__c'])) ? $oppData['Is_Uk_Owner__c'] : ''; //Is_Uk_Owner__c
		if ($Is_Uk_Owner__c) {
			//Credentials for UK KIPU
			$ACCESS_ID 				= 'tze3twBoDhcfnggesum2ZRRSQ17uhDvhDnarg2L90z8';
			$SECRET_KEY 			= 'FGQkG1b2GyaXwRPpgXCeITFuSt0rSBOvCfe6+BKoXwtPskPII/sx1eBnmKJwNB6+8qgSUTf+ccspkiNUA8d/Eg==';
			$KIPU_RECIPIENT_ID 		= 'bfAVCrkqW53eFYcY0Jvye5-CwxZ6v7EPGP_ZBLZDODs';
		}

		$Discharge_Transition_to__c = (isset($oppData['Discharge_Transition_to__c'])) ? $oppData['Discharge_Transition_to__c'] : '';
		$AccountId = (isset($oppData['AccountId'])) ? $oppData['AccountId'] : '';
		$stageName 	= (isset($oppData['StageName'])) ? $oppData['StageName'] : '';
		$Subscriber_Gender__c 	= (isset($oppData['Subscriber_Gender__c'])) ? $oppData['Subscriber_Gender__c'] : '';
		$Client_First_Name__c 	= (isset($oppData['Client_First_Name__c'])) ? $oppData['Client_First_Name__c'] : '';
		$Client_Middle_Name__c 	= (isset($oppData['Client_Middle_Name__c'])) ? $oppData['Client_Middle_Name__c'] : '';
		$Client_Last_Name__c = (isset($oppData['Client_Last_Name__c'])) ? $oppData['Client_Last_Name__c'] : '';
		$Preferred_Name__c = (isset($oppData['Preferred_Name__c'])) ? $oppData['Preferred_Name__c'] : '';
		$Client_DOB__c = (isset($oppData['Client_DOB__c'])) ? $oppData['Client_DOB__c'] : '';
		$Marital_Status__c = (isset($oppData['Marital_Status__c'])) ? $oppData['Marital_Status__c'] : '';
		$MR__c = (isset($oppData['MR__c'])) ? $oppData['MR__c'] : '';
		$Client_Phone__c = (isset($oppData['Client_Phone__c'])) ? $oppData['Client_Phone__c'] : '';
		$Client_Alternate_Phone__c = (isset($oppData['Client_Alternate_Phone__c'])) ? $oppData['Client_Alternate_Phone__c'] : '';
		$Ethnicity__c = (isset($oppData['Ethnicity__c'])) ? $oppData['Ethnicity__c'] : '';
		$Pre_Admission_Status__c = (isset($oppData['Pre_Admission_Status__c'])) ? $oppData['Pre_Admission_Status__c'] : '';
		$Admission_Date__c = (isset($oppData['Admission_Date__c'])) ? $oppData['Admission_Date__c'] : '';
		$Discharge_Date__c = (isset($oppData['Discharge_Date__c'])) ? $oppData['Discharge_Date__c'] : '';
		$Anticipated_Discharge_Date__c = (isset($oppData['Anticipated_Discharge_Date__c'])) ? $oppData['Anticipated_Discharge_Date__c'] : '';
		$Sobriety_Date__c = (isset($oppData['Sobriety_Date__c'])) ? $oppData['Sobriety_Date__c'] : '';
		$SSN__c = (isset($oppData['SSN__c'])) ? $oppData['SSN__c'] : '';
		$Address_1__c = (isset($oppData['Address_1__c'])) ? $oppData['Address_1__c'] : '';
		$Address_2__c = (isset($oppData['Address_2__c'])) ? $oppData['Address_2__c'] : '';
		$City__c = (isset($oppData['City__c'])) ? $oppData['City__c'] : '';
		$Zip__c = (isset($oppData['Zip__c'])) ? $oppData['Zip__c'] : '';
		$state_kipu__c = (isset($oppData['state_kipu__c'])) ? $oppData['state_kipu__c'] : '';
		$Country__c = (isset($oppData['Country__c'])) ? $oppData['Country__c'] : '';
		$Gender__c = (isset($oppData['Gender__c'])) ? $oppData['Gender__c'] : '';
		$Client_Email__c = (isset($oppData['Client_Email__c'])) ? $oppData['Client_Email__c'] : '';
		$First_Contact_Date__c = (isset($oppData['First_Contact_Date__c'])) ? $oppData['First_Contact_Date__c'] : '';
		$First_Contact_Rep_On_Call__c = (isset($oppData['First_Contact_Rep_On_Call__c'])) ? $oppData['First_Contact_Rep_On_Call__c'] : '';
		$First_Contact_Name__c = (isset($oppData['First_Contact_Name__c'])) ? $oppData['First_Contact_Name__c'] : '';
		$First_Contact_Information__c = (isset($oppData['First_Contact_Information__c'])) ? $oppData['First_Contact_Information__c'] : '';
		$First_Contact_Relationship__c = (isset($oppData['First_Contact_Relationship__c'])) ? $oppData['First_Contact_Relationship__c'] : '';
		$Referral_Source__c = (isset($oppData['Referral_Source__c'])) ? $oppData['Referral_Source__c'] : '';
		$Referral_Source_Name__c = (isset($oppData['Referral_Source_Name__c'])) ? $oppData['Referral_Source_Name__c'] : '';
		$Discharge_To_Name__c = (isset($oppData['Discharge_To_Name__c'])) ? $oppData['Discharge_To_Name__c'] : '';
		$KIPU_Bed__c = (isset($oppData['KIPU_Bed__c'])) ? $oppData['KIPU_Bed__c'] : '';
		$Payment_Method__c = (isset($oppData['Payment_Method__c'])) ? $oppData['Payment_Method__c'] : '';
		$Insurance_Provider__c = (isset($oppData['Insurance_Provider__c'])) ? $oppData['Insurance_Provider__c'] : '';
		$Insurance_Phone__c = (isset($oppData['Insurance_Phone__c'])) ? $oppData['Insurance_Phone__c'] : '';
		$Subscriber_First_Name__c = (isset($oppData['Subscriber_First_Name__c'])) ? $oppData['Subscriber_First_Name__c'] : '';
		$Subscriber_Middle_Name__c = (isset($oppData['Subscriber_Middle_Name__c'])) ? $oppData['Subscriber_Middle_Name__c'] : '';
		$Subscriber_Last_Name__c = (isset($oppData['Subscriber_Last_Name__c'])) ? $oppData['Subscriber_Last_Name__c'] : '';
		$Subscriber_SSN__c = (isset($oppData['Subscriber_SSN__c'])) ? $oppData['Subscriber_SSN__c'] : '';
		$Subscriber_DOB__c = (isset($oppData['Subscriber_DOB__c'])) ? $oppData['Subscriber_DOB__c'] : '';
		$Insurance_Primary_Notes__c = (isset($oppData['Insurance_Primary_Notes__c'])) ? $oppData['Insurance_Primary_Notes__c'] : '';
		$Group__c = (isset($oppData['Group__c'])) ? $oppData['Group__c'] : '';
		$Subscriber_Address_1__c = (isset($oppData['Subscriber_Address_1__c'])) ? $oppData['Subscriber_Address_1__c'] : '';
		$Subscriber_Address_2__c = (isset($oppData['Subscriber_Address_2__c'])) ? $oppData['Subscriber_Address_2__c'] : '';
		$Subscriber_City__c = (isset($oppData['Subscriber_City__c'])) ? $oppData['Subscriber_City__c'] : '';
		$Subscriber_Zip__c = (isset($oppData['Subscriber_Zip__c'])) ? $oppData['Subscriber_Zip__c'] : '';
		$Subscriber_State__c = (isset($oppData['Subscriber_State__c'])) ? $oppData['Subscriber_State__c'] : '';
		$Policy_Number__c = (isset($oppData['Policy_Number__c'])) ? $oppData['Policy_Number__c'] : '';
		$Subscriber_Relationship_to_Client__c = (isset($oppData['Subscriber_Relationship_to_Client__c'])) ? $oppData['Subscriber_Relationship_to_Client__c'] : '';
		$Insurance_Plan_Type__c = (isset($oppData['Insurance_Plan_Type__c'])) ? $oppData['Insurance_Plan_Type__c'] : '';
		$Subscriber_Employer__c = (isset($oppData['Subscriber_Employer__c'])) ? $oppData['Subscriber_Employer__c'] : '';

		$Subscriber_Employer__c = (isset($oppData['Subscriber_Employer__c'])) ? $oppData['Subscriber_Employer__c'] : '';

		$fileDataArray 		= array();
		$preAssessData 		= (array)preAssessmentData($instance_url, $access_token, $opportunityId);
		$vobFileLimit 		= 12;
		if (count($preAssessData) > 0) {
			$preAssessDataId 	= (isset($preAssessData['Id'])) ? $preAssessData['Id'] : '';
			$preAssessAttachData = (array)getContentDocumentLink($instance_url, $access_token, $preAssessDataId, 1);
			$contentDocumentId 	= (isset($preAssessAttachData['ContentDocumentId'])) ? $preAssessAttachData['ContentDocumentId'] : '';
			if (!empty($contentDocumentId)) {
				$contentDocumentData = (array)getContentDocument($instance_url, $access_token, $contentDocumentId);

				$latestPublishedVersionId = (isset($contentDocumentData['LatestPublishedVersionId'])) ? $contentDocumentData['LatestPublishedVersionId'] : '';
				$latestPublishedVersionData = (array)getContentVersion($instance_url, $access_token, $latestPublishedVersionId);

				$attachId = (isset($latestPublishedVersionData['Id'])) ? $latestPublishedVersionData['Id'] : '';
				$attachName = (isset($latestPublishedVersionData['Title'])) ? $latestPublishedVersionData['Title'] : '';
				$fileExtension = (isset($latestPublishedVersionData['FileExtension'])) ? $latestPublishedVersionData['FileExtension'] : '';
				if (strtolower($fileExtension) == 'pdf') {
					$attachBodyData = getContentVersionData($instance_url, $access_token, $attachId);
					$fileDataArray[$attachName . '.' . $fileExtension] = $attachBodyData;
				}
			}
		}
		$oppAttachmentData = (array)getContentDocumentLink($instance_url, $access_token, $opportunityId, $vobFileLimit);
		$counter = 1;
		foreach ($oppAttachmentData as $key => $singleValue) {
			$singleValue = (array)$singleValue;
			$counter++;
			$contentDocumentId 	= (isset($singleValue['ContentDocumentId'])) ? $singleValue['ContentDocumentId'] : '';
			$contentDocumentData = (array)getContentDocument($instance_url, $access_token, $contentDocumentId);

			$latestPublishedVersionId = (isset($contentDocumentData['LatestPublishedVersionId'])) ? $contentDocumentData['LatestPublishedVersionId'] : '';
			$latestPublishedVersionData = (array)getContentVersion($instance_url, $access_token, $latestPublishedVersionId);

			$attachId = (isset($latestPublishedVersionData['Id'])) ? $latestPublishedVersionData['Id'] : '';
			$attachName = (isset($latestPublishedVersionData['Title'])) ? $latestPublishedVersionData['Title'] : '';
			$fileExtension = (isset($latestPublishedVersionData['FileExtension'])) ? $latestPublishedVersionData['FileExtension'] : '';
			if (strtolower($fileExtension) == 'pdf') {
				$attachBodyData = getContentVersionData($instance_url, $access_token, $attachId);
				$fileDataArray[$attachName . $counter . '.' . $fileExtension] = $attachBodyData;
			}
		}

		$attachmentParts = '';
		if (count($fileDataArray) > 0) {
			$attachmentParts = ',"attachments_attributes":[';
			for ($i = 1; $i <= count($fileDataArray); $i++) {
				if ($i > 1) {
					$attachmentParts .= ',';
				}
				$attachmentParts .= '{
			    		"attachment_patient_process_id":"61"
			    	}';
			}
			$attachmentParts .= ']';
		}

		$requestbody = '{
		  	"document": {
			    "recipient_id": "' . $KIPU_RECIPIENT_ID . '",
			    "sending_app_name": "' . $APP_IDENTIFIER . '",
			    "data": {
					"sending_app_patient_id": "' . $AccountId . '",
					"first_name": "' . $Client_First_Name__c . '",
					"middle_name": "' . $Client_Middle_Name__c . '",
					"last_name": "' . $Client_Last_Name__c . '",
					"preferred_name": "' . $Preferred_Name__c . '",
					"dob": "' . $Client_DOB__c . '",
					"marital_status": "' . $Marital_Status__c . '",
					"mr": "' . $MR__c . '",
					"phone": "' . $Client_Phone__c . '",
					"alternate_phone": "' . $Client_Alternate_Phone__c . '",
					"ethnicity": "' . $Ethnicity__c . '",
					"pre_admission_status": "' . $Pre_Admission_Status__c . '",
					"admission_date": "' . $Admission_Date__c . '",
					"anticipated_discharge_date": "' . $Anticipated_Discharge_Date__c . '",
					"sobriety_date": "' . $Sobriety_Date__c . '",
					"ssn": "' . $SSN__c . '",
					"address_street": "' . $Address_1__c . '",
					"address_street2": "' . $Address_2__c . '",
					"address_city": "' . $City__c . '",
					"address_zip": "' . $Zip__c . '",
					"address_state": "' . $state_kipu__c . '",
					"address_country": "' . $Country__c . '",
					"gender": "' . strtolower($Gender__c) . '",
					"email": "' . $Client_Email__c . '",
					"first_contact_date": "' . $First_Contact_Date__c . '",
					"first_contact_rep_on_call": "' . $First_Contact_Rep_On_Call__c . '",
					"first_contact_name": "' . $First_Contact_Name__c . '",
					"first_contact_information": "' . $First_Contact_Information__c . '",
					"first_contact_relationship": "' . $First_Contact_Relationship__c . '",
					"referrer_id": "' . $Referral_Source__c . '",
					"payment_method": "' . $Payment_Method__c . '",
					"referrer_name": "' . $Referral_Source_Name__c . '",
					"discharge_to_name": "' . $Discharge_To_Name__c . '",
					"bed_name": "' . $KIPU_Bed__c . '",
					"discharge_to_name": "' . $Discharge_Transition_to__c . '",

					"ext_id_mappings_attributes": [
								{
							"ext_system_name": "Salesforce",
							"ext_id": "' . $opportunityId . '"
						}
					],
					"insurances_attributes": [
				        {
							"insurance_company": "' . $Insurance_Provider__c . '",
							"insurance_phone": "' . $Insurance_Phone__c . '",
							"subscriber_first_name": "' . $Subscriber_First_Name__c . '",
							"subscriber_middle_name": "' . $Subscriber_Middle_Name__c . '",
							"subscriber_last_name": "' . $Subscriber_Last_Name__c . '",
							"subscriber_SSN": "' . $Subscriber_SSN__c . '",
							"subscriber_DOB": "' . $Subscriber_DOB__c . '",
							"subscriber_address_street": "' . $Subscriber_Address_1__c . '",
							"subscriber_address_street2": "' . $Subscriber_Address_2__c . '",
							"subscriber_address_city": "' . $Subscriber_City__c . '",
							"subscriber_address_zip": "' . $Subscriber_Zip__c . '",
							"subscriber_address_state": "' . $Subscriber_State__c . '",
							"subscriber_address_country": "",
							"notes": "' . $Insurance_Primary_Notes__c . '",
							"policy_no": "' . $Policy_Number__c . '",
							"group_ID": "' . $Group__c . '",
							"subscriber_relationship": "' . $Subscriber_Relationship_to_Client__c . '",
							"insurance_plan_type": "' . $Insurance_Plan_Type__c . '",
							"subscriber_employer":"' . $Subscriber_Employer__c . '",
							"subscriber_gender":"' . $Subscriber_Gender__c . '"

				        }
			      	]
			    }' . $attachmentParts . '
		  	}
		}';


		my_log($requestbody);

		$requestbody = json_decode($requestbody, true);
		$finalBody = buildMultipartFormData($requestbody, $fileDataArray);


		if (!empty($stageName)) {

			$ACCEPT_HEADER 			= 'Accept';
			$CONTENT_TYPE_HEADER 	= 'Content-type';
			$CONTENT_MD5_HEADER 	= 'Content-MD5';
			$DATE_HEADER 			= 'Date';

			$accept_header_value 	= 'application/vnd.kipusystems+json; version=1';
			$content_type 			= 'multipart/form-data; boundary=MultipartBoundary';
			$currDate 				= gmdate('D, d M Y H:i:s T', time());
			$request_uri 			= '/api/patients';
			$content_md5 			= base64_encode(hex2bin(MD5($finalBody)));
			$canonical_string 		= $content_type . ',' . $content_md5 . ',' . $request_uri . ',' . $currDate;
			$encoded_signature		=  base64_encode(hash_hmac('sha1', $canonical_string, $SECRET_KEY, true));
			$authorization_header 	= 'APIAuth ' . $ACCESS_ID . ':' . $encoded_signature;
			$endpoint 				= $BASE_URL . $request_uri;
			$headers = [
				$ACCEPT_HEADER . ': ' . $accept_header_value,
				'Authorization: ' . $authorization_header,
				$CONTENT_TYPE_HEADER . ': ' . $content_type,
				$CONTENT_MD5_HEADER . ': ' . $content_md5,
				$DATE_HEADER . ': ' . $currDate
			];

			$ch = curl_init();
			curl_setopt($ch, CURLOPT_URL, $endpoint);
			curl_setopt($ch, CURLOPT_POST, 1);
			curl_setopt($ch, CURLOPT_POSTFIELDS, $finalBody);  //Post Fields
			curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
			curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
			curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
			curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
			$server_output = curl_exec($ch);

			//echo "server_output = ".$server_output;
			my_log(print_r($server_output, true));

			$server_output_arr = json_decode($server_output, true);
			if (count($server_output_arr) > 0) {
				$server_output_status = isset($server_output_arr['status']) ? $server_output_arr['status'] : '';
				$status_code = isset($server_output_arr['status_code']) ? $server_output_arr['status_code'] : 'FAILED';
				if (strtoupper($server_output_status) != strtoupper('Delivered')) {
					$Requestbody = json_encode(json_encode($requestbody));
					$APIErrorMessage = json_encode($server_output);
					sendErrorLogsToCRM($endpoint, $Requestbody, $opportunityId, $APIErrorMessage, $status_code);
				}
			}
		}
	}
}

function pre($data)
{
	echo "<pre>";
	print_r($data);
	echo "</pre>";
}

function getAccessData($opportunityId = '')
{
	$isProduction = 1;
	if ($isProduction == 1) {
		$url_demo 		= "https://login.salesforce.com/services/oauth2/token";
		$client_id 		= '3MVG9KsVczVNcM8xnq8coQuucXnzt8G6TzwSsgEO5aepiXc0S1owROk59D.m4h5U4.iE7FC2nZENADi365L2N';
		$client_secret 	= 'BE9215C45EFC7337D0C1725F1AC6FDA0F0A3147D68E70B3A646DE6B71DDB7A97';
		$username 		= 'neeraj@journeysthroughsearch.com';
		$password 		=  '3MVG9KsVczVNc!@M8xnq8coQuucXlx'; //'h^85B0gcf3TRss2us22'; //'h^85B0gcf3TRss2us2';
		// $security_token = 'BGkEjYN8iNBkAvy7P1H2fsfII';
	} else {
		$url_demo 		= "https://test.salesforce.com/services/oauth2/token";
		$client_id 		= '3MVG9PE4xB9wtoY_i29RD53K7wSEBnIlLjrwxkQcRyAlRUO6Ft8hyRNYdBjwDWMIs.oJGTIOrPPFfkWDQ0P9X';
		$client_secret 	= 'ABBDF63BE57945CBFB188535D109509A53C2CBA3AC684583712B5218A8AF5663';
		$username 		= 'bridgeconnector@apnlodge.com.partial';
		$password 		= 'JslHkln9&900-JnL:;';
		$security_token = 'dDrbAGhZWk55oDByoOuLnGC2';
	}
	$finalPassword = $password . $security_token;
	$postData = array('grant_type' => 'password', 'client_id' => $client_id, 'client_secret' => $client_secret, 'username' => $username, 'password' => $finalPassword);
	$curl = curl_init();
	curl_setopt_array($curl, array(
		CURLOPT_URL => $url_demo,
		CURLOPT_RETURNTRANSFER => true,
		CURLOPT_ENCODING => '',
		CURLOPT_MAXREDIRS => 10,
		CURLOPT_TIMEOUT => 0,
		CURLOPT_FOLLOWLOCATION => true,
		CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
		CURLOPT_CUSTOMREQUEST => 'POST',
		CURLOPT_POSTFIELDS => $postData,
		CURLOPT_HTTPHEADER => array(
			'Cookie: CookieConsentPolicy=0:0; LSKey-c$CookieConsentPolicy=0:0; BrowserId=f1VAC4ELEe2lbLP40wibfA'
		),
	));
	$response = curl_exec($curl);
	$responseArr = json_decode($response, true);
	if (count($responseArr) > 0) {
		$error = isset($responseArr['error']) ? $responseArr['error'] : '';  //invalid_grant
		$access_token = isset($responseArr['access_token']) ? $responseArr['access_token'] : '';  //invalid_grant
		if (!$access_token) {
			$Requestbody = json_encode(json_encode($postData));
			$APIErrorMessage = json_encode($response);
			sendErrorLogsToCRM($url_demo, $Requestbody, $opportunityId, $APIErrorMessage, 'FAILED');
			exit;
		}
	}
	return $responseArr;
}

function opportunityData($instance_url, $access_token, $oppId)
{
	$query = "SELECT Discharge_Transition_to__c,Is_Uk_Owner__c,Id,stageName,Client_First_Name__c,Client_Middle_Name__c,Client_Last_Name__c,Preferred_Name__c,Client_DOB__c,Marital_Status__c,MR__c,Client_Phone__c,Client_Alternate_Phone__c,Ethnicity__c,Pre_Admission_Status__c,Admission_Date__c,Discharge_Date__c,Anticipated_Discharge_Date__c,Sobriety_Date__c,SSN__c,Address_1__c,Address_2__c,City__c,Zip__c,state_kipu__c,Country__c,Gender__c,Client_Email__c,First_Contact_Date__c,First_Contact_Rep_On_Call__c,First_Contact_Name__c,First_Contact_Information__c,First_Contact_Relationship__c,Referral_Source__c,Referral_Source_Name__c,Discharge_To_Name__c,KIPU_Bed__c,Payment_Method__c,Insurance_Provider__c,Insurance_Phone__c,Subscriber_First_Name__c,Subscriber_Middle_Name__c,Subscriber_Last_Name__c,Subscriber_SSN__c,Subscriber_DOB__c,Insurance_Primary_Notes__c,Group__c,Subscriber_Address_1__c,Subscriber_Address_2__c,Subscriber_City__c,Subscriber_Zip__c,Subscriber_State__c,Policy_Number__c,Subscriber_Relationship_to_Client__c,Insurance_Plan_Type__c,Subscriber_Employer__c,AccountId FROM Opportunity where Id = '" . $oppId . "' LIMIT 1";
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);

	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);

	$json_response = curl_exec($curl);
	curl_close($curl);
	$array_res = json_decode($json_response);
	return (isset($array_res->records[0])) ? $array_res->records[0] : '';
}
function preAssessmentData($instance_url, $access_token, $oppId)
{
	$query = "SELECT Id  FROM Pre_Assessment__c where Opportunity__c = '" . $oppId . "' order by createddate desc LIMIT 1 ";
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);

	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);

	$json_response = curl_exec($curl);
	curl_close($curl);
	//Curl code end here
	$array_res = json_decode($json_response);
	return (isset($array_res->records[0])) ? $array_res->records[0] : '';
}
function attachmentData($instance_url, $access_token, $parentId, $limit = 1)
{
	$query = "SELECT Id, Name, Body, ContentType, ParentId From Attachment WHERE ParentId ='" . $parentId . "' AND Name like '%.pdf' order by lastmodifieddate desc LIMIT  " . $limit;
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);

	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);

	$json_response = curl_exec($curl);
	curl_close($curl);
	//Curl code end here
	$array_res = json_decode($json_response);
	if ($limit == 1) {
		return (isset($array_res->records[0])) ? $array_res->records[0] : '';
	} else {
		return (isset($array_res->records)) ? $array_res->records : '';
	}
}
function attachmentBodyData($instance_url, $access_token, $attachId)
{
	$url = $instance_url . '/services/data/v51.0/sobjects/Attachment/' . $attachId . '/body';
	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: Bearer $access_token", "Accept-Language: en-US")
	);
	$json_response = curl_exec($curl);
	curl_close($curl);
	return $json_response;
}
function getContentDocumentLink($instance_url, $access_token, $attachId, $limit = 1)
{
	$query = "SELECT Id, ContentDocumentId FROM ContentDocumentLink WHERE LinkedEntityId = '" . $attachId . "' ORDER BY SystemModstamp DESC LIMIT " . $limit;
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);

	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);

	$json_response = curl_exec($curl);
	curl_close($curl);
	//Curl code end here
	$array_res = json_decode($json_response);
	if ($limit == 1) {
		return (isset($array_res->records[0])) ? $array_res->records[0] : '';
	} else {
		return (isset($array_res->records)) ? $array_res->records : '';
	}
}
function getContentDocument($instance_url, $access_token, $contentDocumentId)
{
	$query = "SELECT Id, LatestPublishedVersionId FROM ContentDocument WHERE Id ='" . $contentDocumentId . "' ORDER BY LastModifiedDate DESC LIMIT 1";
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);
	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);
	$json_response = curl_exec($curl);
	curl_close($curl);
	//Curl code end here
	$array_res = json_decode($json_response);
	return (isset($array_res->records[0])) ? $array_res->records[0] : '';
}
function getContentVersion($instance_url, $access_token, $latestPublishedVersionId)
{
	$query = "SELECT Id, Title,FileExtension, VersionData FROM ContentVersion WHERE Id = '" . $latestPublishedVersionId . "' ORDER BY LastModifiedDate DESC LIMIT 1";
	$url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);
	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: OAuth $access_token", "Accept-Language: en-US")
	);
	$json_response = curl_exec($curl);
	curl_close($curl);
	//Curl code end here
	$array_res = json_decode($json_response);
	return (isset($array_res->records[0])) ? $array_res->records[0] : '';
}
function getContentVersionData($instance_url, $access_token, $attachId)
{
	$url = $instance_url . '/services/data/v48.0/sobjects/ContentVersion/' . $attachId . '/VersionData';
	//Curl code start here
	$curl = curl_init($url);
	curl_setopt($curl, CURLOPT_HEADER, false);
	curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
	curl_setopt(
		$curl,
		CURLOPT_HTTPHEADER,
		array("Authorization: Bearer $access_token", "Accept-Language: en-US")
	);
	$json_response = curl_exec($curl);
	curl_close($curl);
	return $json_response;
}

function curlResquest($url, $hdr, $content)
{
	$c = curl_init($url);
	curl_setopt($c, CURLOPT_RETURNTRANSFER, true);
	curl_setopt($c, CURLOPT_HTTPHEADER, $hdr);
	curl_setopt($c, CURLOPT_POST, true);
	curl_setopt($c, CURLOPT_POSTFIELDS, $content);
	$json_response 	= curl_exec($c);
	$response 		= json_decode($json_response, true);
	$status 		= curl_getinfo($c, CURLINFO_HTTP_CODE);
	curl_close($c);
	return array('status' => $status, 'response' => $response);
}
function buildMultipartFormData($data = array(), $fileDataArray)
{
	$eol = "\r\n";
	// Build test string
	$testStr = '';
	array_walk_recursive($data, function ($item, $key) use (&$testStr, &$eol) {
		$testStr .= $key . $eol . $item . $eol;
	});


	$boundary = 'MultipartBoundary';
	// Build data
	$rtn = '';
	$func = function ($data, $baseKey = null) use (&$func, &$boundary, &$eol) {
		$rtn = '';
		foreach ($data as $key => &$value) {
			// Get key
			$key = $baseKey === null ? $key : ($baseKey . '[' . $key . ']');

			// Add data
			if (is_array($value))
				$rtn .= $func($value, $key);
			else
				$rtn .= '--' . $boundary . $eol . 'Content-Disposition: form-data; name="' . $key . '"' . $eol . $eol . $value . $eol;
		}

		return $rtn;
	};
	$rtn = $func($data);
	$count = 0;
	foreach ($fileDataArray as $fileName => $fileContent) {
		$rtn .= '--' . $boundary . $eol . 'Content-Disposition: form-data; name="document[attachments_attributes][' . $count . '][attachment]"; filename="' . $fileName . '"' . $eol
			. 'Content-Type: application/pdf' . $eol . $eol
			. $fileContent . $eol;
		$count++;
	}

	return $rtn . '--' . $boundary . '--' . $eol;
}
function my_log($data)
{
	$message  = "Date: " . date("Y-m-d H:i:s P T") . PHP_EOL .
		$data . PHP_EOL .
		"-------------------------" . PHP_EOL;
	file_put_contents(__DIR__ . '/webhook-kipu-sf-lead.log', $message, FILE_APPEND);
}

function sendErrorLogsToCRM($APIURL = '', $Requestbody = '', $OpportunityId = '', $APIErrorMessage = '', $APIErrorCode = '')
{

	$postData = '{
		"Origin": "API",
		"APIURL": "' . $APIURL . '",
		"Requestbody": ' . $Requestbody . ',
		"OpportunityId": "' . $OpportunityId . '",
		"APIErrorMessage": ' . $APIErrorMessage . ',
		"APIErrorCode": "' . $APIErrorCode . '"
	}';
	my_log('------------ErrorLogPayloadSendToCRM------------');
	my_log($postData);

	if ($Requestbody) {
		$curl = curl_init();
		curl_setopt_array($curl, array(
			//CURLOPT_URL => 'https://apncapital--partial.sandbox.my.salesforce-sites.com/ErrorLogAPI/services/apexrest/ErrorLog', //sandbox URL
			CURLOPT_URL => 'https://apncapital.my.salesforce-sites.com/ErrorLogAPI/services/apexrest/ErrorLog', //production URL
			CURLOPT_RETURNTRANSFER => true,
			CURLOPT_ENCODING => '',
			CURLOPT_MAXREDIRS => 10,
			CURLOPT_TIMEOUT => 0,
			CURLOPT_FOLLOWLOCATION => true,
			CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
			CURLOPT_CUSTOMREQUEST => 'POST',
			CURLOPT_POSTFIELDS => $postData,
			CURLOPT_HTTPHEADER => array(
				'Content-Type: application/json',
				'Cookie: CookieConsentPolicy=0:1; LSKey-c$CookieConsentPolicy=0:1; BrowserId=5N_Acr8-Ee2LZP2hCWFcxA'
			),
		));
		$response = curl_exec($curl);
		curl_close($curl);
		my_log('------------ErrorRespomseLogSendToCRM------------');
		my_log($response);
	}
}