Skip to main content
Hi I'm working on the integration between AvaTax and our billing system, using the Salesforce Api. 

We have changed to a newSalesforce Organization and are attempting to calculate tax on orders for Canadian customers. This has worked well on other Sandboxes we have tried.

Is there a  reliable way to know why the parametr is not working when sending the Http Request?

I am noticing that for this new Sandbox org we are reciving this message when calculating the tax (See log file segment below) Thanks:

 

DEBUG|{"type":"SalesOrder","lines":[\{"quantity":1.00,"itemCode":"43490","description":"Freight","number":"1","amount":0.00},\{"quantity":1.00,"itemCode":"79345","description":"Puggles Backpack","number":"2","amount":4.1677967793}],"customerCode":"4","companyCode":"awana1","code":"988103","date":"2018-04-25 10:29:52","commit":"false","addresses":{"ShipTo":{"region":"BC","postalCode":"V4P 1H5","line1":"2430 King George Blvd Ste 101","country":null,"city":"Surrey"},"ShipFrom":{"region":"IL","postalCode":"60173","line1":"1620 N Penny Ln","country":"US","city":"Schaumburg"}}}

10:29:51.0 (36237563)|CALLOUT_REQUEST|[1747]|System.HttpRequest[Endpoint=callout:AvalaraTax, Method=POST]

10:29:51.0 (40289120)|EXCEPTION_THROWN|[1747]|System.UnexpectedException: Invalid parameter value "fB0Ni1BVtLnbAD1xVS1udw==" for parameter "Decryption Exception".

10:29:51.0 (40477323)|FATAL_ERROR|System.UnexpectedException: Invalid parameter value "fB0Ni1BVtLnbAD1xVS1udw==" for parameter "Decryption Exception".

The Apex code that makes the call out to Avalara is this:

webservice static Result CalculateTaxOnOpportunity(string OrderId)

{

decimal TaxAmount = null;

// Try to

try

{

// Convert the OpportunitySalesforceId argument provided to a Salesforce ID

ID TempId = OrderId;

// If converting fails, return failure and an error message.

} catch(Exception ex) { return new Result(false,'Please supply a valid Order (15 or 18 character) Salesforce Id. Error Message: '+ex.getMessage()); }

try

{

// Initialize the tax variable to zero.

TaxAmount = 0;

AvalaraTaxJSON Obj = new AvalaraTaxJSON(OrderId);

if(Obj.companyCode != null || Obj.companyCode !='') {

string jsonData = JSON.serialize(Obj);

jsonData = jsonData.replace('AvalaraCurrentDataTime','date');

jsonData = jsonData.replace('Avalara_Commit','commit');

jsonData = jsonData.replaceAll('Avalara_SeqNumber','number');

system.debug(jsonData);

Http h = new Http();

HttpRequest req = new HttpRequest();

req.setEndpoint('callout:AvalaraTax');

req.setBody(jsonData);

req.setHeader('Content-Type','application/json');

req.setMethod('POST');

HttpResponse res = h.send(req);

system.debug(res.getBody());

JSONParser parser = JSON.createParser(res.getBody());

while (parser.nextToken() != null) {

if ((parser.getCurrentToken() == JSONToken.FIELD_NAME) &&

(parser.getText() == 'totalTax')) {

parser.nextToken();

TaxAmount = parser.getDecimalValue();

}

}

return new Result(true,'Success, tax amount calculated',TaxAmount);

}

else

return new Result(false,'The Order must have a valid Shipping Country before calculating tax OR Country must be United States Or Canada');

}

// If an error occurred getting tax

catch (Exception ex)

{

// Return failure and an error message.

return new Result(false,'An error occurred when getting tax from the tax system. Error:'+ex.getMessage());

}

// Otherwise, return Success as true and the Tax Amount calculated by the tax web service.*/

return new Result(true,'Success, tax amount calculated',TaxAmount);

}

The AvalaraTaxJSON object looks like this:

public class AvalaraTaxJSON {

string code;

public string companyCode{get;set;}

string type;

string AvalaraCurrentDataTime;

string customerCode;

string Avalara_Commit;

address addresses;

list<lineItem> lines;

public class address{

public AddressCls ShipFrom;

public AddressCls ShipTo;

}

public class AddressCls{

string line1;

string city;

string region;

string country;

string postalCode;

public AddressCls(string line, string city, string reg, string country, string zipCode){

this.line1 = line;

this.city = city;

this.region = reg;

this.country = country;

this.postalCode = zipCode;

}

}

public class lineItem{

public string Avalara_SeqNumber;

public decimal quantity;

public decimal amount;

public string description;

public string itemCode;

public lineItem(string num,decimal qunt, decimal amt,string itemCode, string des){

this.Avalara_SeqNumber = num;

this.quantity = qunt;

this.amount =amt;

this.description = des;

this.itemCode = itemcode;

}

}

public AvalaraTaxJSON(string orderId){

string isoCode;

//Constructing JSON with OrderLine Items

lines = new list<LineItem>();

list<Order> orderLst = [SELECT ID, Name,Shipping_Street__c, Shipping_City__c,Shipping_State__c, Shipping_Zip_Code__c, Shipping_Country__c, TempOrderNumber__c, LastModifiedById, Error_Log__c,Account.IntacctID__c, Company__c,

(SELECT Line_Type__c, PricebookEntry.Product2Id, PricebookEntry.Product2.ProductCode, PricebookEntry.Product2.Name, Quantity, TotalPrice, Quantity_Given_Away__c FROM Order.OrderItems) FROM Order WHERE ID = :string.escapeSingleQuotes(orderId)];

if(orderLst!=null&& orderLst.size()>0){

Order Ord= orderLst.get(0);

if(Ord.Shipping_Country__c!=null && Ord.Shipping_Country__c.toLowerCase().contains('united states') || Ord.Shipping_Country__c.toLowerCase().contains('canada')){

list<Country__c> countryObj = [SELECT ISO_Code__c FROM Country__c WHERE Name = :Ord.Shipping_Country__c];

if(countryObj!=null && countryObj.size()>0){

isoCode = countryObj.get(0).ISO_Code__c;

}

Awana_Settings__c custSetting = Awana_Settings__c.getValues('AvalaraTaxCompany');

if(custSetting!=null)

this.companyCode = custSetting.value__c;

else

this.companyCode = 'awana1-sb2'; //default value

this.code = Ord.TempOrderNumber__c;

this.customerCode = Ord.Account.IntacctID__c;

this.type = 'SalesOrder';

this.AvalaraCurrentDataTime = String.valueOf(system.now());

this.Avalara_Commit = 'false';

addresses = new address();

addresses.ShipFrom = new AddressCls('1620 N Penny Ln','Schaumburg','IL','US','60173'); //Default Address Present in Cast iron

addresses.ShipTo = new AddressCls(Ord.Shipping_Street__c,Ord.Shipping_City__c,Ord.Shipping_State__c,isoCode,Ord.Shipping_Zip_Code__c);

integer itr =1;

for(OrderItem oli : Ord.OrderItems){

lines.add(new LineItem(string.valueOf(itr),oli.Quantity,Oli.TotalPrice,oli.PricebookEntry.Product2.ProductCode,oli.PricebookEntry.Product2.Name));

itr++;

}

}

}

}

}

 
3 respostas
  1. 19 de jan. de 2019, 19:46
    Yep so using Named Credentials we were able to update this issue
0/9000