public class SharinPixTokenDecoder {
@InvocableMethod
public static void decodeToken(List<Parameters> paramsList) {
SObject obj;
List<SObject> sObjectsToUpdate = new List<SObject>();
for(Parameters params : paramsList) {
obj = params.recordId.getSObjectType().newSObject(params.recordId);
String payload = params.encodedToken.split('\\.')[1];
payload = payload.replace('-', '+');
payload = payload.replace('_', '/');
string jsonPayload = EncodingUtil.base64decode(payload).toString();
Map<String, Object> decodeTokenObject = (Map<String, Object>) JSON.deserializeUntyped(jsonPayload);
obj.put(params.decodedTokenFieldName, decodeTokenObject.toString());
sObjectsToUpdate.add(obj);
}
update sObjectsToUpdate;
}
public with sharing class Parameters{
@InvocableVariable(label='Record ID' description='ID of record.' required=true)
public Id recordId;
@InvocableVariable(label='Encoded Token' description='The encoded token.' required=true)
public String encodedToken;
@InvocableVariable(label='Decoded Token Field API Name' description='API name of field storing the decoded token.' required=true)
public String decodedTokenFieldName;
}
}