Create Facebook offline events from Salesforce using Http callout

Sample code for create a Facebook offline event from Salesforce Using Http callout

 


global class FacebookOfflineEventCreation {
       
    @future(callout=true)  
    global static void CreateFacebookOfflineEvents(){
        
      String access_token =  System.Label.FacebookAccessToken; // we can get accesstoken from Facebook by manual login and extend to 2 months by using Graph API explorer
        
                     
        JSONGenerator gen=JSON.createGenerator(true);
        gen.writeStartArray();
        gen.writeStartObject();
        gen.writeFieldName('match_keys');
        gen.writeStartObject();
        gen.writeStringField('lead_id', '00Q9E0000058NHB');
        gen.writeStringField('fn',FacebookOfflineEventCreation.getSHA256code('jana'));
        gen.writeStringField('ln',FacebookOfflineEventCreation.getSHA256code('Muddana'));
        gen.writeStringField('email',FacebookOfflineEventCreation.getSHA256code('jaan@gm.com'));
        gen.writeStringField('phone',FacebookOfflineEventCreation.getSHA256code('1-(650)-888-5622'));
        gen.writeEndObject();
        gen.writeStringField('event_name','Lead');
        gen.writeNumberField('event_time',system.now().getTime()/1000); 
        gen.writeStringField('order_id','00Q9E0000058NHB'); 
        gen.writeStringField('item_number','Leaf');
        gen.writeStringField('currency','ZAR');
        gen.writeNumberField('value',15.00);
        gen.writeEndObject(); 
        gen.writeEndArray();
        
        string finalJsn = gen.getAsString();  
        
        system.debug(finalJsn+'sssss');
        
        String urlEncodedData = EncodingUtil.urlEncode(finalJsn, 'UTF-8');
        
        
        Http h = new Http();
        HttpRequest request = new HttpRequest();

     //460995844408117 is offline event set id , we need to get it from FB

        request.setEndpoint('https://graph.facebook.com/v3.1/460995844408117/events?data='+urlEncodedData+'&upload_tag=in-store%20uploads&access_token='+access_token);
        request.setMethod('POST');
        
        HttpResponse res=new HttpResponse();
        res = h.send(request);
        
        if (res.getStatusCode() == 200) {
            
            system.debug('Lead is send to Facebook');
        }
        
        system.debug('----------------'+res); 
        system.debug('----------------'+res.getBody());
        
        JSONParser parser = JSON.createParser(res.getBody());
         
    }
    
   global static string getSHA256code(string strVal){
        
        Blob hash = Crypto.generateDigest('SHA-256', Blob.valueOf(strVal));
        string hashCode = EncodingUtil.convertToHex(hash);
        
        return hashCode;  
    }
    
    
}

------------------Test Class-----------------------------------



@isTest
global class FacebookOfflineEventCreationTest {

static testmethod void CreateofflineEvent(){
        
        Test.startTest();
        Test.setMock(HttpCalloutMock.class, new MockHttpResponseGenerator());
         FacebookOfflineEventCreation.CreateFacebookOfflineEvents();
        Test.stopTest();
    }
 
    global class MockHttpResponseGenerator implements HttpCalloutMock {
     global HttpResponse respond(HTTPRequest req){
        HttpResponse res = new HttpResponse();
        res.setStatus('OK');
        res.setStatusCode(200);
        res.setBody('test');
        return res;
  }
        
    }
}



Comments