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/kipu-api-9/index.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>';
}

//Get raw post data -------------------------------------------------------

$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);
}



}
//end ----------------------------------------------------------------



my_log($opportunityId);

//Access Id - KV2ICK_sztnZgoBYygHJIy3XJOKR4BvZ6Ca_X1QStdY
//Security Key -df49ehj4kCW9Kxd7i3AqwcUORcQOFmNcpOkS7P5p3pdCHlbH+cwqmUL7pmByuIs9Aesf8l2i9Q4103phZohXJA==
//Receipent Id - fw20AQBVKpyODNxgPxsUf_OFDe3SZtxF_3Foc-bBE9o



$BASE_URL 				= 'https://kipuapi.kipuworks.com';
$ACCESS_ID 				= 'KV2ICK_sztnZgoBYygHJIy3XJOKR4BvZ6Ca_X1QStdY';
$KIPU_RECIPIENT_ID 		= 'fw20AQBVKpyODNxgPxsUf_OFDe3SZtxF_3Foc-bBE9o';
$SECRET_KEY 			= 'df49ehj4kCW9Kxd7i3AqwcUORcQOFmNcpOkS7P5p3pdCHlbH+cwqmUL7pmByuIs9Aesf8l2i9Q4103phZohXJA==';
$APP_IDENTIFIER 		= 'Amend Treatment';
$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);
		$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['Gender__c']))?$oppData['Gender__c']:'';
    	$Client_First_Name__c 	= (isset($oppData['First_Name__c']))?$oppData['First_Name__c']:'';
    	$Client_Middle_Name__c 	= (isset($oppData['Middle_Name__c']))?$oppData['Middle_Name__c']:'';
    	$Client_Last_Name__c = (isset($oppData['Last_Name__c']))?$oppData['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['Phone__c']))?$oppData['Phone__c']:'';
    	$Client_Alternate_Phone__c = (isset($oppData['Alternative_Phone__c']))?$oppData['Alternative_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']:'';
		$Ethnicity__c = '';
		$Pre_Admission_Status__c = '';
		$Admission_Date__c = '';
		$Discharge_Date__c = '';
		$Anticipated_Discharge_Date__c = '';
		$Sobriety_Date__c = '';
		$Discharge_Transition_to__c = '';
		$Subscriber_Gender__c = '';
		$MR__c = '';
		$Ethnicity__c = '';


    	$SSN__c = (isset($oppData['SSN__c']))?$oppData['SSN__c']:'';
    	$Address_1__c = (isset($oppData['Address_Street__c']))?$oppData['Address_Street__c']:'';
    	$Address_2__c = (isset($oppData['Address_Street_2__c']))?$oppData['Address_Street_2__c']:'';
    	$City__c = (isset($oppData['Address_City__c']))?$oppData['Address_City__c']:'';
    	$Zip__c = (isset($oppData['Address_ZIP__c']))?$oppData['Address_ZIP__c']:'';
    	$state_kipu__c = (isset($oppData['Address_State__c']))?$oppData['Address_State__c']:'';
    	$Country__c = (isset($oppData['Address_Country__c']))?$oppData['Address_Country__c']:'';
    	$Gender__c = (isset($oppData['Gender__c']))?$oppData['Gender__c']:'';
    	$Client_Email__c = (isset($oppData['Email__c']))?$oppData['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['Primary_Insurance_Company__c']))?$oppData['Primary_Insurance_Company__c']:'';
    	$Insurance_Phone__c = (isset($oppData['Primary_Insurance_Phone__c']))?$oppData['Primary_Insurance_Phone__c']:'';
    	$Subscriber_First_Name__c = (isset($oppData['Primary_Subscriber_First_Name__c']))?$oppData['Primary_Subscriber_First_Name__c']:'';
    	$Subscriber_Middle_Name__c = (isset($oppData['Primary_Subscriber_Middle_Name__c']))?$oppData['Primary_Subscriber_Middle_Name__c']:'';
    	$Subscriber_Last_Name__c = (isset($oppData['Primary_Subscriber_Last_Name__c']))?$oppData['Primary_Subscriber_Last_Name__c']:'';
    	$Subscriber_SSN__c = (isset($oppData['Primary_Subscriber_SSN__c']))?$oppData['Primary_Subscriber_SSN__c']:'';
    	$Subscriber_DOB__c = (isset($oppData['Primary_Subscriber_DOB__c']))?$oppData['Primary_Subscriber_DOB__c']:'';
    	$Insurance_Primary_Notes__c = (isset($oppData['Insurance_Primary_Notes__c']))?$oppData['Insurance_Primary_Notes__c']:'';
    	$Group__c = (isset($oppData['Primary_Insurance_Group_Number__c']))?$oppData['Primary_Insurance_Group_Number__c']:'';
    	$Subscriber_Address_1__c = (isset($oppData['Primary_Subscriber_Address_Street__c']))?$oppData['Primary_Subscriber_Address_Street__c']:'';
    	$Subscriber_Address_2__c = (isset($oppData['Primary_Subscriber_Address_Street_2__c']))?$oppData['Primary_Subscriber_Address_Street_2__c']:'';
    	$Subscriber_City__c = (isset($oppData['Primary_Subscriber_Address_City__c']))?$oppData['Primary_Subscriber_Address_City__c']:'';
    	$Subscriber_Zip__c = (isset($oppData['Primary_Subscriber_Address_ZIP__c']))?$oppData['Primary_Subscriber_Address_ZIP__c']:'';
    	$Subscriber_State__c = (isset($oppData['Primary_Subscriber_Address_State__c']))?$oppData['Primary_Subscriber_Address_State__c']:'';
    	$Policy_Number__c = (isset($oppData['Primary_Member_ID__c']))?$oppData['Primary_Member_ID__c']:'';
    	$Subscriber_Relationship_to_Client__c = (isset($oppData['Prim_Sub_Relationship_to_Client__c']))?$oppData['Prim_Sub_Relationship_to_Client__c']:'';
    	$Insurance_Plan_Type__c = (isset($oppData['Primary_Insurance_Plan_Type__c']))?$oppData['Primary_Insurance_Plan_Type__c']:'';
    	//$Subscriber_Employer__c = (isset($oppData['Employer_Name__c']))?$oppData['Employer_Name__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.'
		  	}
		}';


		// $requestbody = '{"sending_app_name":"AmendTreatment","recipient_id":"fw20AQBVKpyODNxgPxsUf_OFDe3SZtxF_3Foc-bBE9o","data":{"sending_app_patient_id":"001D700001WNCBSIA5","location_id":"2","last_name":"Attachment 2","insurances_attributes":[{}],"first_name":"test Record 2","ext_id_mappings_attributes":[{"ext_system_name":"OppId","ext_id":"006D700000SlwVXIAZ"}],"email":"test@test.com","dob":"1985-02-01"}}}';


		my_log("KIPU Post Payload = ".$requestbody);

		my_log("Salesforce Stage Name = ".$stageName);

		$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=3';
			$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
			];
			//exit;

			my_log("KIPU End Point = ".$endpoint);

			my_log("KIPU Header Point = ".json_encode($headers));

			$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));


			my_log("server_output KIPU Response = ".$server_output);


			$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=0;
	if($isProduction==1){
		// $url_demo 		= "https://login.salesforce.com/services/oauth2/token";
		// $client_id 		= '3MVG9KsVczVNcM8xnq8coQuucXlxi45TbaWu4sUIKAS_biifcSH2fdtVMSZGm7Cw.yo1ZT8DMOi_N7RyrFnnQ';
		// $client_secret 	= 'E748E6718E553C693BCE05DBB40AF081FF9A2320D977C0B1A1090A018C722235';
		// $username 		= 'apnsf@journeysthroughsearch.com';
		// $password 		= 'h^85B0gcf3TRss2us22'; //'h^85B0gcf3TRss2us2';
		// $security_token = 'dDrbAGhZWk55oDByoOuLnGC2';


		//Production
		$url_demo 		= "https://login.salesforce.com/services/oauth2/token";
		$client_id 		= '3MVG9KsVczVNcM8xnq8coQuucXlxi45TbaWu4sUIKAS_biifcSH2fdtVMSZGm7Cw.yo1ZT8DMOi_N7RyrFnnQ';
		$client_secret 	= 'E748E6718E553C693BCE05DBB40AF081FF9A2320D977C0B1A1090A018C722235';
		$username 		= 'apnsf@journeysthroughsearch.com';
		$password 		= 'KhilKMllORk*76^gJ,'; //'h^85B0gcf3TRss2us2';
		$security_token = 'dDrbAGhZWk55oDByoOuLnGC2';
	}
	else{

		//sandbox
		$url_demo 		= "https://test.salesforce.com/services/oauth2/token";
		$client_id 		= '3MVG9A6Mm0rJfTIiUeWuSk5vldN3cVW5eLwprU.xt16peRO.hRjFqKCuvUmTfPVUuDuvBLE0GgWXe5JhO9NdE';
		$client_secret 	= 'B0213FD73F41F4D2337F6C718079F708AE2D1EA7AB69149E530B053A45C20FD6';
		$username 		= 'johnny@bmsmktg.com.devjts';
		$password 		= 'Jbhj9*7^hJNf';
		$security_token = '9R1ScIIorVvuW0Igq34wv9mty';
	}
	$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);

	my_log("Salesforce Response = ".$response);


	$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 Id, stageName, First_Name__c, Middle_Name__c, Last_Name__c, Preferred_Name__c, Client_DOB__c, Marital_Status__c, Phone__c, Alternative_Phone__c,SSN__c,Address_Street__c,Address_Street_2__c,Address_City__c,Address_ZIP__c,Address_State__c,Address_Country__c,Gender__c,Email__c,Primary_Insurance_Company__c,Primary_Insurance_Phone__c,Primary_Subscriber_First_Name__c,Primary_Subscriber_Middle_Name__c,Primary_Subscriber_Last_Name__c,Primary_Subscriber_SSN__c,Primary_Subscriber_DOB__c,Primary_Insurance_Group_Number__c,Primary_Subscriber_Address_Street__c,Primary_Subscriber_Address_Street_2__c,Primary_Subscriber_Address_City__c,Primary_Subscriber_Address_ZIP__c,Primary_Subscriber_Address_State__c,Primary_Member_ID__c,Prim_Sub_Relationship_to_Client__c,Primary_Insurance_Plan_Type__c,Employer_Name__c,AccountId FROM Opportunity where Id = '".$oppId."' LIMIT 1";
    $url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);
	// $query = "SELECT Id, stageName, First_Name__c, Middle_Name__c, Last_Name__c, Preferred_Name__c, Client_DOB__c, Marital_Status__c, Phone__c, Alternative_Phone__c,SSN__c,Address_Street__c,Address_Street_2__c,Address_City__c,Address_ZIP__c,Address_State__c,Address_Country__c,Gender__c,Email__c,Primary_Insurance_Company__c,Primary_Insurance_Phone__c,Primary_Subscriber_First_Name__c,Primary_Subscriber_Middle_Name__c,Primary_Subscriber_Last_Name__c,Primary_Subscriber_SSN__c,Primary_Subscriber_DOB__c,Insurance_Primary_Notes__c,Primary_Insurance_Group_Number__c,Primary_Subscriber_Address_Street__c,Primary_Subscriber_Address_Street_2__c,Primary_Subscriber_Address_City__c,Primary_Subscriber_Address_ZIP__c,Primary_Subscriber_Address_State__c,Primary_Member_ID__c,Prim_Sub_Relationship_to_Client__c,Primary_Insurance_Plan_Type__c,Employer_Name__c,AccountId FROM Opportunity where Id = '".$oppId."' LIMIT 1";
    // $url = "$instance_url/services/data/v48.0/query?q=" . urlencode($query);


	my_log("Salesforce url = ".$url);

	my_log("Salesforce query = ".$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);

	my_log("Salesforce query response = ".$json_response);


    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);
	}
}