function readOnly(count){ }
Starting November 20, the site will be set to read-only. On December 4, 2023,
forum discussions will move to the Trailblazer Community.
+ Start a Discussion
nasknask 

Problem im generating in signature for Google.

Our company has recently buyed Google business license i am trying to client id the key and private key to generate the signature but i am not sucessfull. Please see the code below and help me if any one has done it before:

 

string origin = 'sk12lg';
string destination = 'm130ws';
string GoogleBaseUrl = 'http://maps.googleapis.com';  
string clientid = '**********************';
string privateKey = '*********************';
string domain = '/maps/api/distancematrix/json?';
string query = 'origins='+origin+'&destinations='+destination+'&sensor=false&units=imperial&client='+clientid;
//string inputStr = EncodingUtil.urlEncode(domain+query, 'UTF-8');
string inputStr = domain+query;
system.debug('Sign Url-->'+inputStr );
String algorithmName = 'hmacSHA1';
Blob mac = Crypto.generateMac(algorithmName,  Blob.valueOf(inputStr), Blob.valueOf(privateKey));
String macUrl = EncodingUtil.urlEncode(EncodingUtil.base64Encode(mac), 'UTF-8');
string encodedMac = EncodingUtil.base64Encode(mac);
system.debug('mac-->'+encodedMac);
system.debug('macUrl----->'+macUrl);
string finalUrl = GoogleBaseUrl +domain+query+'&signature='+encodedMac;
system.debug('finalUrl--->'+finalUrl);

Http obj_Http = new Http();
HttpRequest http_Req = new HttpRequest();
http_Req.setEndpoint(finalUrl);
http_Req.setMethod('GET');
http_Req.setTimeout(60000);  
HttpResponse http_Res = obj_Http.send(http_Req);
System.debug('STATUS:'+http_Res .getStatus());
System.debug('STATUS_CODE:'+http_Res .getStatusCode());
System.debug('BODY: '+http_Res .getBody());

 

I have tried usind encodedmac and macUrl but result is same :(.

Best Answer chosen by Admin (Salesforce Developers) 
nasknask

I was finally was able to fix my issue.  please see the fixed code below:

 

string origin = 'sk1+2lg';
string destination = 'm13+0ws';
string clientid = 'YOUR CLIENT ID';
string GoogleBaseUrl = 'http://maps.googleapis.com';  
string domain = '/maps/api/distancematrix/json?sensor=false&units=imperial';
string query = '&origins='+origin+'&destinations='+destination+'&client='+clientid;
string privateKey = 'YOUR PRIVATE KEY';
privateKey = privateKey.replace('-', '+');
privateKey = privateKey.replace('_', '/');
Blob privateKeyBlob = EncodingUtil.base64Decode(privateKey);
string inputStr = domain+query;
String algorithmName = 'hmacSHA1';
Blob signatureBlob = Crypto.generateMac(algorithmName,  Blob.valueOf(inputStr), privateKeyBlob);
String signature =EncodingUtil.base64Encode(signatureBlob);
signature = signature.replace('+', '-');
signature = signature.replace('/', '_');
string finalUrl = GoogleBaseUrl + inputStr + '&signature='+signature;
Http obj_Http = new Http();
HttpRequest http_Req = new HttpRequest();
http_Req.setEndpoint(finalUrl);
http_Req.setMethod('GET');
http_Req.setTimeout(60000);  
HttpResponse http_Res = obj_Http.send(http_Req);
System.debug('STATUS:'+http_Res .getStatus());
System.debug('STATUS_CODE:'+http_Res .getStatusCode());
System.debug('BODY: '+http_Res .getBody());