PureBasic
PureBasic
Shippo Validate Global Address
See more Shippo Examples
Demonstrates how to validate a global address.Chilkat PureBasic Downloads
IncludeFile "CkHttpResponse.pb"
IncludeFile "CkHttp.pb"
IncludeFile "CkStringBuilder.pb"
IncludeFile "CkJsonObject.pb"
IncludeFile "CkHttpRequest.pb"
Procedure ChilkatExample()
success.i = 0
; This example assumes the Chilkat API to have been previously unlocked.
; See Global Unlock Sample for sample code.
http.i = CkHttp::ckCreate()
If http.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
; Implements the following CURL command:
; curl https://api.goshippo.com/addresses/ \
; -H "Authorization: ShippoToken <API_TOKEN>" \
; -d name="Shawn Ippotle" \
; -d company="Shippo" \
; -d street1="Kortrijksesteenweg 1005" \
; -d city="Gent" \
; -d zip=9000 \
; -d country="BE" \
; -d email="shippotle@goshippo.com"\
; -d validate=true
req.i = CkHttpRequest::ckCreate()
If req.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpRequest::setCkHttpVerb(req, "POST")
CkHttpRequest::setCkPath(req, "/addresses/")
CkHttpRequest::setCkContentType(req, "application/x-www-form-urlencoded")
CkHttpRequest::ckAddParam(req,"name","Shawn Ippotle")
CkHttpRequest::ckAddParam(req,"company","Shippo")
CkHttpRequest::ckAddParam(req,"street1","Kortrijksesteenweg 1005")
CkHttpRequest::ckAddParam(req,"city","Gent")
CkHttpRequest::ckAddParam(req,"zip","9000")
CkHttpRequest::ckAddParam(req,"country","BE")
CkHttpRequest::ckAddParam(req,"email","shippotle@goshippo.com")
CkHttpRequest::ckAddParam(req,"validate","true")
CkHttpRequest::ckAddHeader(req,"Authorization","ShippoToken <API_TOKEN>")
resp.i = CkHttpResponse::ckCreate()
If resp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
success = CkHttp::ckHttpReq(http,"https://api.goshippo.com/addresses/",req,resp)
If success = 0
Debug CkHttp::ckLastErrorText(http)
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
ProcedureReturn
EndIf
sbResponseBody.i = CkStringBuilder::ckCreate()
If sbResponseBody.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkHttpResponse::ckGetBodySb(resp,sbResponseBody)
jResp.i = CkJsonObject::ckCreate()
If jResp.i = 0
Debug "Failed to create object."
ProcedureReturn
EndIf
CkJsonObject::ckLoadSb(jResp,sbResponseBody)
CkJsonObject::setCkEmitCompact(jResp, 0)
Debug "Response Body:"
Debug CkJsonObject::ckEmit(jResp)
respStatusCode.i = CkHttpResponse::ckStatusCode(resp)
Debug "Response Status Code = " + Str(respStatusCode)
If respStatusCode >= 400
Debug "Response Header:"
Debug CkHttpResponse::ckHeader(resp)
Debug "Failed."
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
CkStringBuilder::ckDispose(sbResponseBody)
CkJsonObject::ckDispose(jResp)
ProcedureReturn
EndIf
; Sample JSON response:
; (Sample code for parsing the JSON response is shown below)
; {
; "object_created": "2017-07-26T17:52:37.305Z",
; "object_updated": "2017-07-26T17:52:37.351Z",
; "object_id": "b7f9709df3914d1ca6efe4c30e7b0572",
; "is_complete": true,
; "validation_results": {
; "is_valid": true,
; "messages": [
; {
; "source": "Shippo Address Validator",
; "type": "address_correction",
; "code": "administrative_area_change",
; "text": "The administrative area (state or province) was added or changed."
; },
; {
; "source": "Shippo Address Validator",
; "code": "geocoded_rooftop",
; "text": "The record was geocoded down to rooftop level, meaning the point is within the property boundaries (most often the center)."
; },
; {
; "source": "Shippo Address Validator",
; "code": "premises_full",
; "text": "The address has been verified to the Premise (House or Building) Level, which is the highest level possible with the reference data."
; }
; ]
; },
; "object_owner": "hippo@goshippo.com",
; "name": "Hippo Shippo",
; "company": "Shippo",
; "street_no": "2",
; "street1": "Unter den Linden",
; "street2": "",
; "street3": "",
; "city": "Berlin",
; "state": "",
; "zip": "10117",
; "country": "DE",
; "longitude": "13.39751",
; "latitude": "52.51785",
; "phone": "14151234567",
; "email": "hippo@goshippo.com",
; "is_residential": null,
; "metadata": "",
; "test": false
; }
; Sample code for parsing the JSON response...
; Use the following online tool to generate parsing code from sample JSON:
; Generate Parsing Code from JSON
source.s
v_type.s
code.s
text.s
object_created.s = CkJsonObject::ckStringOf(jResp,"object_created")
object_updated.s = CkJsonObject::ckStringOf(jResp,"object_updated")
object_id.s = CkJsonObject::ckStringOf(jResp,"object_id")
is_complete.i = CkJsonObject::ckBoolOf(jResp,"is_complete")
validation_resultsIs_valid.i = CkJsonObject::ckBoolOf(jResp,"validation_results.is_valid")
object_owner.s = CkJsonObject::ckStringOf(jResp,"object_owner")
name.s = CkJsonObject::ckStringOf(jResp,"name")
company.s = CkJsonObject::ckStringOf(jResp,"company")
street_no.s = CkJsonObject::ckStringOf(jResp,"street_no")
street1.s = CkJsonObject::ckStringOf(jResp,"street1")
street2.s = CkJsonObject::ckStringOf(jResp,"street2")
street3.s = CkJsonObject::ckStringOf(jResp,"street3")
city.s = CkJsonObject::ckStringOf(jResp,"city")
state.s = CkJsonObject::ckStringOf(jResp,"state")
zip.s = CkJsonObject::ckStringOf(jResp,"zip")
country.s = CkJsonObject::ckStringOf(jResp,"country")
longitude.s = CkJsonObject::ckStringOf(jResp,"longitude")
latitude.s = CkJsonObject::ckStringOf(jResp,"latitude")
phone.s = CkJsonObject::ckStringOf(jResp,"phone")
email.s = CkJsonObject::ckStringOf(jResp,"email")
is_residential.s = CkJsonObject::ckStringOf(jResp,"is_residential")
metadata.s = CkJsonObject::ckStringOf(jResp,"metadata")
test.i = CkJsonObject::ckBoolOf(jResp,"test")
i.i = 0
count_i.i = CkJsonObject::ckSizeOfArray(jResp,"validation_results.messages")
While i < count_i
CkJsonObject::setCkI(jResp, i)
source = CkJsonObject::ckStringOf(jResp,"validation_results.messages[i].source")
v_type = CkJsonObject::ckStringOf(jResp,"validation_results.messages[i].type")
code = CkJsonObject::ckStringOf(jResp,"validation_results.messages[i].code")
text = CkJsonObject::ckStringOf(jResp,"validation_results.messages[i].text")
i = i + 1
Wend
CkHttp::ckDispose(http)
CkHttpRequest::ckDispose(req)
CkHttpResponse::ckDispose(resp)
CkStringBuilder::ckDispose(sbResponseBody)
CkJsonObject::ckDispose(jResp)
ProcedureReturn
EndProcedure