This package is deprecated and outdated. Do not use it.
Simple PHP package for integrating SMSA Web Services (SECOM).
Include the package via composer :
composer require mohannadnaj/smsa-sdk
Use the static class SmsaSDK\Smsa
:
<?php
use SmsaSDK\Smsa;
$result = Smsa::key('my-smsa-key')
->getRTLCities()
->getGetRTLCitiesResult()
->getAny();
print_r($result);
SMSA Provides a SOAP Web Service for processing shipment-related services. SMSA Express mostly recognized on Saudi Arabia.
In PHP, integrating SMSA can be done using the built-in PHP's SoapClient. However, usually there is some caveats and issues on the process. This package helps to reduce this issues.
- Each Soap service method and response is a dedicated class. Dealing with classes is easier than the magical objects generated during the runtime, at least in your code editor's opinion. (this was possible thanks to wsdl2phpgenerator).
- Validating data before submission, and meaningful messages on exceptions.
- Unified one entrypoint for all your Smsa requests, through the static class
Smsa
. - Testable.
- Easily Configurable.
As a client of SMSA, you will receive a pass key
that you will use for your operations to SMSA Web Services (SECOM).
After Including this package, set up this pass key
before initiating the first SECOM request:
<?php
use SmsaSDK\Smsa;
Smsa::key('my-smsa-key');
Usually you want to do that in the boot
of your application.
If you are using Laravel, a good place for this configuration is the AppServiceProvider
and setting the key in the .env
file.
.env:
SMSA_PASSKEY="my-smsa-key"
AppServiceProvider.php
<?php
namespace App\Providers;
use SmsaSDK\Smsa;
use Illuminate\Support\ServiceProvider;
class AppServiceProvider extends ServiceProvider
{
public function boot()
{
Smsa::key(env('SMSA_PASSKEY'));
}
}
<?php
use SmsaSDK\Smsa;
// set up the key
Smsa::key('my-smsa-key');
// SECOM WSDL address, set by default to the url: http://track.smsaexpress.com/SECOM/SMSAwebService.asmx?wsdl
Smsa::uri('http://track.smsaexpress.com/SECOM/SMSAwebService.asmx?wsdl');
// or just use the setup method
Smsa::setUp(['key' => 'my-smsa-key','uri' => 'http://track.smsaexpress.com/SECOM/SMSAwebService.asmx?wsdl']);
// Set the null values, the ignored arguments in a SECOM method call, to an empty string
Smsa::nullValues('');
}
<?php
use SmsaSDK\Smsa;
Smsa::key('my-smsa-key'); // Setting up the SMSA Key
// Since we are not filling all the SECOM method arguments
// as defined in the WSDL, here we are telling SMSA SDK to
// fill the null values by an empty string
Smsa::nullValues('');
$shipmentData = [
'refNo' => 'my_app_name' . time(), // shipment reference in your application
'cName' => 'Mohannad Najjar', // customer name
'cntry' => 'SA', // shipment country
'cCity' => 'JEDDAH', // shipment city, try: Smsa::getRTLCities() to get the supported cities
'cMobile' => '0555555555', // customer mobile
'cAddr1' => 'ALNAHDA DIST, ...detailed address here', // customer address
'cAddr2' => 'ALBAWADI DIST, ...detailed address here', // customer address 2
'shipType' => 'DLV', // shipment type
'PCs' => 1, // quantity of the shipped pieces
'cEmail' => '[email protected]', // customer email
'codAmt' => '50', // payment amount if it's cash on delivery, 0 if not cash on delivery
'weight' => '10', // pieces weight
'itemDesc' => 'Foo Bar', // extra description will be printed
];
/** @var SmsaSDK\Methods\addShipmentResponse $shipment */
$shipment = Smsa::addShipment($shipmentData);
$awbNumber = $shipment->getAddShipmentResult();
echo "shipment AWB: " . $awbNumber ;
echo "\r\n";
$status = Smsa::getStatus(['awbNo' => $awbNumber])->getGetStatusResult();
echo "shipment Status: " . $status;
}
This package shipped with a custom SoapClient that will redirect the calls to the testing/mocked client if it's provided.
<?php
use SmsaSDK\SoapClient;
SoapClient::setTestingClient($myMockedClient);
// do stuff will affect the mocked client only..
SoapClient::turnOffTestingClient();
// turn off testing, do stuff with the real soap client
print_r(SoapClient::$lastCall); // whether in testing or not, access all the arguments passed to the SoapClient