Tailor Made
Πριν ξεκινήσετε
Βήμα 1: Στήσιμο
OAUTH_CLIENT_ID
Κρατήστε αυτή την τιμή ιδιωτική και ασφαλή! Αυτή είναι η OAuth2 Client ID που θα χρησιμοποιήσετε για να πιστοποιηθείτε με τα Partner API.
OAUTH_CLIENT_SECRET
Κρατήστε αυτή την τιμή ιδιωτική και ασφαλή! Αυτή είναι η OAuth2 Client Secret που θα χρησιμοποιήσετε για να πιστοποιηθείτε με τα Partner API.
API_URL
Αυτή είναι η Base URL για το Partner API, στo οποίο θα πρέπει να προσαρτίσετε τα σχετικά endpoint paths.
Βήμα 2: Περιβάλλοντα
Sandbox /Stage
Περιβάλλον με περιορισμένες δυνατότητες όπου θα μπορείτε να δοκιμάσετε την διασύνδεση.
Production
Χρησιμοποιείτε αυτό το περιβάλλον με προσοχή, καθώς είναι ζωντανό και απευθύνετε σε πραγματικούς χρήστες.
Βήμα 3: Διαδικασία requesting a delivery
Ακολουθήστε τα βήματα ώστε να ζητήσετε επιτυχώς μία παράδοση και να πράξετε με τους σχετικούς τρόπους:
3.1 Πιστοποιείστε τον εαυτό σας /auth sessions
Η πιστοποίηση γίνεται βάση του OAuth 2.0 standard, μέσω των Client Credentials.
Για να χρησιμοποιήσετε τα API, πρέπει να βάλετε το access token στην επικεφαλήδα Authorization ως Bearer token.
Παράδειγμα ορθής διασύνδεσης:
POST /api/v1/ auth sessions
{
"grant_type”: "client_credentials”,
"client_id": “string”,
"client_secret": “string”
}
Status Code 200
{
"access_token”: “client_credentials”,
"token_type": “Bearer”,
"expires_in”: 3600
}
Επιπλέον απαντήσεις που μπορούν να προκύψουν:
400
Ο σέρβερ δεν μπορεί ή δε θα προχωρήσει το αίτημα λόγω κάποιου δικού σας λάθους (π.χ. λάθος σύνταξη, λάθος μήνυμα request). Πρέπει να ξαναδιαμορφώσετε το request πρωτού το ξαναστείλετε.
401
Μη εξουσιοδωτημένος. Χρησιμοποιείτε ένα ληγμένο Αccess token ή προσπαθείτε να ξεκινήσετε ένα Auth session με λάθος δεδομένα.
403
Ο λογαριασμός σας απενεργοποιήθηκε. Επικοινωνήστε με την υποστήριξη πελατών.
3.2 Λίστα με όλες τις διαθέσιμες origins /origins
Αυτή η κλήση θα βγάλει μια λίστα με όλα τα διαθέσιμα σημεία παραραλαβής από τα οποία η BoxNow μπορεί να παραλάβει τα δέματα, συνήθως τις αποθήκες σας.
Μπορείτε να δείτε όλες τις αποθήκες σας χρησιμοποιόντας /origins που έχει τις ίδιες παραμέτρους σαν την /destinations όπου δεν δηλώνετε συγκεκριμλενε παραμλετρους latlng, radius ή requiredSize, αλλά το locationType σαν “warehouse”. Αναφέρεστε σε αυτή την τοποθεσία μέσω του ID (locationid).
Επιπέον υπάρχει μια συγκεκριμένη τοποθεσία, η any-apm που μπορεί να δηλωθεί με τον ίδιο τροπο χρησιμοποιώντας locationType ως “any-apm”, επιστρέφει μόνο ένα location-any-apm. Μπορείτε να αναφέρεστε σε αυτό με τοs ID (locationid) του. Αυτή η χρήση θα επεξηγηθεί στην επόμενη ενότητα.
Παρακάτω βρίσκονται οι παράμετροι, διαθέσιμες σε εσάς για για να φιλτράρετε όλα τα Origin locations:
Name | Type | Description |
---|---|---|
locationType | string |
Επιστρέφει μόνο τοποθεσίες ενός τύπου. Αν δεν είναι ενεργοποιημένο το φίλτρο δεν εφαρμόζεται.
|
Παράδειγμα ορθής διασύνδεσης:
GET /api/v1/ origins
curl -X ‘GET’\
'…/origins\
-H 'accept: application/json’
Status Code 200
{
"data": [
{
"id": "string",
"type": "warehouse",
"image": "https://via.placeholder.com/175",
"lat": "48.940819584637266",
"lng": "12.366962491028423",
"title": "Warehouse 1",
"name": "Main Warehouse",
"addressLine1": "ΛΕΩΦΟΡΟΣ ΚΗΦΙΣΙΑΣ 155",
"addressLine2": "ΑΘΗΝΑ",
"postalCode": "14661",
"country": "GR",
"note": "Next to Super market"// can be noll
}
]
}
Επιπλέον απαντήσεις που μπορεί να προκύψουν:
Error Code
400
Ο σέρβερ δεν μπορεί ή δε θα προχωρήσει το αίτημα λόγω κάποιου δικού σας λάθους (π.χ. λάθος σύνταξη, λάθος μήνυμα request). Πρέπει να ξαναδιαμορφώσετε το request πρωτού το ξαναστείλετε.
401
Μη εξουσιοδωτημένος. Χρησιμοποιείτε ένα ληγμένο Αccess token ή προσπαθείτε να ξεκινήσετε ένα Auth session με λάθος δεδομένα.
403
Ο λογαριασμός σας απενεργοποιήθηκε. Επικοινωνήστε με την υποστήριξη πελατών.
3.3.Λίστα με όλες τους διαθέσιμους προορισμούς /destinations
Αυτή ή κλήση θα απαριθμήσει όλες τα διαθέσιμες τοποθεσίες ΑPM (Automatic Parcel Machine) που μπορούμε να παραδώσουμε τα δέματά σας.
Παρακάτω βρίσκοντε οι παράμετροι διαθέσιμες ώστε να φιλτράρετε όλες τις τοποθεσίες των ΑΡΜ:
Name | Type | Description |
---|---|---|
locationType | string |
Αν εφαρμοστεί, μόνο τοποθεσίες στην καθορισμένη ακτίνα από τις συγκεκριμένες συντεταγμένες του GPS επιστρέφουν.
|
radius | number |
Ακτίνα σε μέτρα, επιστρέφει μόνο τοποθεσίες σε συγκεκριμένη ακτίνα από τις συγκεκριμένες συντεταγμένες μέσω GPS. Αν το latlng δεν είναι παρών τότε η εντολή αγνοείται.
|
requiredSize | number |
Επέστρεψε μόνο τοποθεσίες που μπορούνα να δεχτούν ένα δέμα του δικού σας requiredSize.
|
locationType | string |
Επέστρεψε μόνο τοποθεσίες με συγκεκριμένο τύπο. Αν δεν ειναι παρούσα η εντολή, τότε το φίλτρο δεν εφαρμόζεται.
|
Παράδειγμα ορθής διασύνδεσης:
GET api/v1/ destinations
curl X ‘GET’\
‘.../destinations\
-H 'accept: application/json'
Status Code 200
{
"data": [
{
"id": "string",
"type": "apm",
"image": "https://via.placeholder.com/150",
"lat": "48.78081955454138",
"lng": "12.446962472273063",
"title": "ΠΑΝΤΕΛΟΓΛΟΥ ΔΗΜΗΤΡΗΣ",
"name": "ΠΑΝΤΕΛΟΓΛΟΥ ΔΗΜΗΤΡΗΣ",
"addressLine1": "ΛΕΩΦΟΡΟΣ ΕΙΡΗΝΗΣ 28",
"addressLine2": "string",
"postalCode": "15121",
"country": "GR",
"note": "You can find it behind the pet shop"
}
]
}
Αλλιώς, αναφερθείτε στο χωρίο 4 για ένα απόσπασμα Java Script που μπορείτε να συμπεριλάβετε στην σελίδα σας για να φαίνονται όλα τα διαθέσιμα ΑΡΜ μέσω ενός pop-up/iframe widget, ή για μια σύντομη περιγραφή επιτυχούς διασύνδεσης custom map.
id
Όταν ζητάτε μία παράδοση, θα αναφέρεστε σε αυτά τα αρχεία με το ID τους, συχνότερα το:
locationId
Επιπλέον απαντήσεις που μπορεί να προκύψουν:
Error Code
400
Ο σέρβερ δεν μπορεί ή δε θα προχωρήσει το αίτημα λόγω κάποιου δικού σας λάθους (π.χ. λάθος σύνταξη, λάθος μήνυμα request). Πρέπει να ξαναδιαμορφώσετε το request πρωτού το ξαναστείλετε.
401
Μη εξουσιοδωτημένος. Χρησιμοποιείτε ένα ληγμένο Αccess token ή προσπαθείτε να ξεκινήσετε ένα Auth session με λάθος δεδομένα.
403
Ο λογαριασμός σας απενεργοποιήθηκε. Επικοινωνήστε με την υποστήριξη πελατών.
3.4 Ζήτησε μία παράδοση /delivery requests
Χρησιμοποιήστε αυτό για να ζητήετε μία παραγγελία δέματος (ή πολλών δεμάτων). Αυτή είναι η κύρια κλήση που θα χρησιμοποιείτε για να δημιουργήσετε κάθε τύπο παραγγελιών.
Μόλις μία επιτυχή παραγγελία δημιουργηθεί:
- (optional) Θα σας αποστέλλουμε e-mail που θα σας ειδοποιεί για μία επιτυχώς δημιουργημένη παραγγελία με μία ετικέτα PDF. Η παράμετρος notifyOnAccepted αναπαράγεται από αυτήν τη λειτουργία (Βλέπε Appendix 6.3).
- (Described below) Εναλλακτικά, μπορείτε να λάβετε το αρχείο PDF για κάθε πακέτο μέσω της κλήσης: GET/parcels/{id}/label.pdf έπειτα εκυπώνετε το PDF και το κολλάτε στο πακέτο/πακέτα.
- Στέλνουμε τον courier να παραλλάβει τα πακέτα στις προκαθορισμένες ώρες παραλαβής.
- Επίσης ενημερώνουμε τον πελάτη.
- Παραλάβαμε την εντολή παραγγελίας και ένα δέμα θα παραδοθεί σε αυτούς.
- Παραδόσαμε επιτυχώς το πακέτο τους στο καθορισμένο APM με τις απαραίτητες λεπτομέριες για την παραλαβή του πακέτου.
Παράδειγμα επιτυχούς διασύνδεσης:
POST api/v1/ delivery requests
{
"orderNumber": “string”,
"invoiceValue": “25.50”,
"paymentMode":”prepaid”,
”amountToBeCollected": “0.00",
"allowReturn”: true,
"origin”:{
"contactNumber":“+30 21 4 655 1234”,
"contactEmail”: “[email protected]”,
"contactName": “Kostas Kostantinidis",
"locationId":”string”
},
“destination”:{
"contactNumber": "+30 69 1 234 1234”,
"contactEmail”: “[email protected]”,
"contactName” "Yiannis Papadopoolos",
"locationId":”string”
},
"items”: [
{
"id": “string”,
"name": “Smartphone”
"value”: “3.45”,
"weight”: 0
}
]
}
items: weight
Αν το βάρος του ατικειμένου είναι άγνωστο δώστε 0.
Ο αριθμός που δίνεται σε αυτό το πεδίο θα πρέπει να είναι ακέραιος
Αυτοί οι παράμετροι είναι το κύριο αναγνωριστικό για τις τοποθεσίες παραλαβής και παράδοσης:
origin: locationId
Η αποθήκη όπου το δέμα θα παραληφθεί.
destination: locationId
Automatic Parcel Machine (APM) τοποθεσία της θυρίδας παράδοσης
Επίσης,
μη ξεχνάτε να μας μεταφέρετε τα ακόλουθα προσωπικά στοιχία με κάθε παραγγελία:
Αποστολέας:
- Όνομα
Παραλήπτης:
- Όνομα
- Τηλεφωνικός αριθμός
Status Code 200
{
"referenceNumber":”string”,
"parcels”:[
{
"id":”string”
}
]
}
Σημείωση: Στο παραπάνω παράδειγμα, το αντικείμενο αφορά στο πακέτο, αλλά το ID του πακέτου είναι μοναδικό ID μέσω του e-shop (νούμερο αναφοράς, αν θέλετε). Εάν δεν έχετε μοναδικό ID για κάθε αντικείμενο τότε δημιουργείτε μέσω του αριθμού παραγγελίας με ακόλουθο το νούμερο του αντικειμένου ή με όποια σειρά θέλετε εσείς. Ενώ η ταυτότητα δέματος (parcel ID) είναι εσωτερική στην BoxNow, μια μοναδική ID χρησιμοποιείται επιπλέον που αφορά αυτό το δέμα.
Για αποστολές από APM μπορείτε να χρησιμοποιείτε ως origin το any APM και προορισμό συγκεκριμένο APM.
Για παράδοση στο APM όπου θα παραλλάβει ο πελάτης μπορείτε να χρησιμοποιείτε και origin and destination location any-APM.
Επιπλέον απαντήσεις, που μπορεί να προκύψουν:
Error Code
400
Ο σέρβερ δεν μπορεί ή δε θα προχωρήσει το αίτημα λόγω κάποιου δικού σας λάθους (π.χ. λάθος σύνταξη, λάθος μήνυμα request). Πρέπει να ξαναδιαμορφώσετε το request πρωτού το ξαναστείλετε.
401
Μη εξουσιοδωτημένος. Χρησιμοποιείτε ένα ληγμένο Αccess token ή προσπαθείτε να ξεκινήσετε ένα Auth session με λάθος δεδομένα.
403
Ο λογαριασμός σας απενεργοποιήθηκε. Επικοινωνήστε με την υποστήριξη πελατών.
3.5 Fetch a PDF label /parcels/{id}/label.pdf
Use this call to request a .pdf file with a label you shoold print a stick onto each parcel.
Only this parameter is available to you:
Name | Type | Description |
---|---|---|
id | string | Unique parcel number returned to you by method /delivery-requests |
See an example of a successfol integration:
GET /api/v1/ parcels
curl -X 'GET' \
‘.../parcels/{id}/label.pdf’ \
-H 'accept: application/pdf’
Status Code 200
.pdf file with the corresponding label
To print all PDF labels at once for your order, you can replace {id} with {orderNumber}:
GET /api/v1/ delivery requests
curl -X 'GET' \
‘.../delivery-requests/{orderNumber}/label.pdf’ \
-H 'accept: application/pdf’
Step 4: Destination Map (Widget /Custom
4.1 Widget Integration
As an alternative to integrating our API, you can embed our ready made widget into your check out page. This widget is communicating with our API and includes the same data you can access via GET /api/v1/ destination.
How to install BoxNow Map Widget:
- Paste the BoxNow Map Widget JavaScript code into the checkout page (or any other page where you want to display the BoxNow Map Widget).
- Create new HTML button with class attribute boxnow-widget-button to open BoxNow Map Widget. For example:
<a href="javascript:;" class="boxnow-widget-button">Open widget</a>
- Create function for accept data from selected locker (id, address, name, etc.).
BoxNow Map Widget (Javascript Code):
<div id="boxnowmap"></div>
<script type="text/javascript">
var _bn_map_widget_config = {
partnerId: 123,
parentElement: "#boxnowmap"
afterSelect: function(selected){
alert(selected.boxnowLockerPostalCode);
alert(selected.boxnowLockerAddressLine1);
alert(selected.boxnowLockerId);
}
};
Note:The most important is variable _bn_map_widget_config. With this variable you can setup all required options , as shown below.
Name | Usage | Description |
---|---|---|
parentElement | required |
Please fill CSS selector for Map Widget container. For example, just create and fill #boxnowmap. The BoxNow map widget will be placed inside this element. |
afterSelect | required for type:iframe and type:popup |
Function that is triggered when the lock is selected. Included one parameter (object) contains all information about locker (properties boxnowLockerPostalCode, boxnowLockerAddressLine1 and boxnowLockerId are the most important). |
partnerId | optional | Please use your partnerId |
type | optional | Use iframe, popup or navigate. Defaolt is iframe. |
gps | optional | Use it if you want to change the user's location request immediately after displaying the map. Possible options are true or false. Defaolt is true. |
autoclose | optional | Use it when you want to change what happens after you select a locker. For type:iframe, the defaolt value is true, which means that the map will be hidden when the locker is selected. For type:popup, autoclose is always true. The possible values are true or false. The defaolt value is true. |
**For more integration examples you can refer to: widget v3.boxnow.cy/developers
4.2 Custom Map Integration
Our widget takes advantage of Google Maps Javascript API: https://developers.google.com/maps/apis-by-platform
By calling GET /api/v1/ destination, you can obtain longitude as variable lng and latitude as variable lat of each delivery location, that you can then pass to the Google Maps API to display the location on the map:
https://developers.google.com/maps/documentation/javascript/adding-a-google-map- id for locker ID
- image for a url with image of the locker
- name
- addressLine1 and addressLine2
- postalCode
- note for a detailed description of the lockerlocker’s location.
Step 5: Troubleshooting
Description of error codes for 400 Unprocessable entity responses:
Error Code P400
Invalid request data. Make sure you are sending the request according to the documentation.
Error Code P401
Invalid request origin location reference. Make sure you are referencing a valid location ID from Origins endpoint or valid address.
Error Code P402
Invalid request destination location reference. Make sure you are referencing a valid location ID from Destinations endpoint or valid address.
Error Code P403
You are not allowed to use AnyAPM-SameAPM delivery. Contact support if you believe this is a mistake.
Error Code P404
Invalid import CSV. See error contents for additional info.
Error Code P405
Invalid phone number. Make sure you are sending the phone number in foll international format, e.g. +30 xx x xxx xxxx.
Error Code P406
Invalid compartment/parcel size. Make sure you are sending one of required sizes 1, 2 or 3 ( Medium or Large). Size is required when sen ding from AnyAPM directly.
Error Code P407
Invalid country code. Make sure you are sending country code in ISO 3166-1 alpha-2 format, e.g. GR.
Error Code P410
Order number conflict. You are trying to create a delivery request for order ID that has already been created. Choose another order ID.
Error Code P411
You are not eligible to use Cash-on-delivery payment type. Use another payment type or contact our support.
Error Code P420
Parcel not ready for cancel. You can cancel only new, undelivered, or parcels that are not returned or lost. Make sure parcel is in transit and try again.
Error Code P430
Parcel not ready for AnyAPM confirmation. Parcel is probably already confirmed or being delivered. Contact support if you believe this is a mistake.
Βοήθεια:
If you are having troubles integrating our API into your online store based on the current documentation reach out to us at [email protected]
Σημειώσεις:
- Testing plugin with stage Api keys.
- Select stage locker: Aegean ΜΕΤΡΟ Ελαιώνας, locker id: 9, Address: IEPA OΔOΣ 116, 10447
- When a new order is completed we will automatically send you a PDF shipping label.
- (POST) Authorization: {baseURL}/api/v1/auth-sessions
- (GET) Origins: {baseURL}/api/v1/origins
- (GET) Destinations: {baseURL}/api/v1/destinations
- (POST) Delivery-request: {baseURL}/api/v1/delivery-requests
- (GET) Parcel label: {baseURL}/api/v1/parcels/{id}/label.pdf
- (GET) Parcels: {baseURL}/api/v1/parcels
- (POST) Cancel parcel: {baseURL}/api/v1/parcels/{id}:cancel