Search code examples
scalacurleasypost

Easypost in scala


I am trying to get shipping charges from user location to a warehouse location by providing only their zip codes. I've to implement it in scala so I am trying to use their Java API. Below is the code I am using -

var fromAddressMap:HashMap[String,Object]=new util.HashMap[String,Object]
fromAddressMap.put("zip",warehouse_zip)
var toAddressMap:HashMap[String,Object]=new util.HashMap[String,Object]
toAddressMap.put("zip",user_zip)
var parcelMap:HashMap[String,Object]=new util.HashMap[String,Object]
parcelMap.put("weight", "22")
parcelMap.put("height", "12")
parcelMap.put("width", "8")
parcelMap.put("length", "19")
val fromAddress:Address=Address.create(fromAddressMap)
val toAddress:Address=Address.create(toAddressMap)
val parcel:Parcel = Parcel.create(parcelMap)
val shipmentMap:HashMap[String,Object]=new util.HashMap[String,Object]
shipmentMap.put("to_address",toAddress)
shipmentMap.put("from_address",fromAddress)
shipmentMap.put("parcel", parcel)
val buyCarriers= new util.ArrayList[String]
buyCarriers.add("USPS")
val buyServices= new util.ArrayList[String]
buyServices.add("PriorityMailInternational")
var shipment = Shipment.create(shipmentMap)
shipment = shipment.buy(shipment.lowestRate(buyCarriers, buyServices))
println("Price is "+shipment.prettyPrint())

All I am getting is an exception saying :

com.easypost.exception.EasyPostException: Unable to find lowest rate matching required criteria.

I even tried using curl command like :

curl -X POST https://api.easypost.com/v2/shipments \
  -u <Easypost api key>: \
  -d 'shipment[to_address][name]=Dr. Steve Brule' \
   -d 'shipment[to_address][street1]=179 N Harbor Dr' \
   -d 'shipment[to_address][city]=Redondo Beach' \
   -d 'shipment[to_address][state]=CA' \
   -d 'shipment[to_address][zip]=90277' \
   -d 'shipment[to_address][country]=US' \
   -d 'shipment[to_address][phone]=8573875756' \
   -d 'shipment[to_address][email][email protected]' \
   -d 'shipment[from_address][name]=EasyPost' \
   -d 'shipment[from_address][street1]=417 Montgomery Street' \
   -d 'shipment[from_address][street2]=5th Floor' \
   -d 'shipment[from_address][city]=San Francisco' \
   -d 'shipment[from_address][state]=CA' \
   -d 'shipment[from_address][zip]=94104' \
   -d 'shipment[from_address][country]=US' \
   -d 'shipment[from_address][phone]=4153334445' \
   -d 'shipment[from_address][email][email protected]' \
   -d 'shipment[parcel][length]=20.2' \
   -d 'shipment[parcel][width]=10.9' \
   -d 'shipment[parcel][height]=5' \
   -d 'shipment[parcel][weight]=65.9'

It is given in their examples. But I am getting error :

curl: (77) error setting certificate verify locations:
  CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

Any idea how can I make it work ?


Solution

  • I was receiving the same error in but with the Java SDK I implemented a getLowestRate() method myself rather than use EasyPost here is a java example:

    Rate selectedRate = null;
    for(Rate r : shipment.getRates()) {
      if(selectedRate == null) {
        selectedRate = r;
      }
      if(r.getRate() < selectedRate.getRate()) {
        selectedRate = r;
      }
    }
    
    if(selectedRate == null) {
      log.error("Selected rate is null could not find any rates to iteRATE through...");
    }
    
    try {
      return shipment.buy(selectedRate);
    } catch(EasyPostException e) {
      log.error("Failed to purchase a shipment at the lowest rate for shipment: {}", shipment);
    }