├── .github ├── FUNDING.yml └── workflows │ ├── changelog.yml │ └── php-version-installation-pipeline.yml ├── .gitignore ├── CHANGELOG.md ├── LICENSE ├── composer.json ├── img ├── Project-home-page-screenshot.png └── installation.png ├── readme.md └── src ├── Config └── sms.php ├── Database └── migrations │ └── create_laravelbd_sms_table.php.stub ├── Facades ├── Logger.php ├── Request.php └── SMS.php ├── Handler ├── ParameterException.php ├── RenderException.php └── ValidationException.php ├── Helper └── Helper.php ├── Job └── SendSmsJob.php ├── LaravelBDSmsServiceProvider.php ├── Log └── Log.php ├── Models └── LaravelBDSmsLog.php ├── Provider ├── AbstractProvider.php ├── Adn.php ├── AjuraTech.php ├── Alpha.php ├── BDBulkSms.php ├── Banglalink.php ├── BoomCast.php ├── Brilliant.php ├── BulkSmsBD.php ├── CustomGateway.php ├── DhorolaSms.php ├── DianaHost.php ├── DianaSms.php ├── DnsBd.php ├── DurjoySoft.php ├── EAmarseba.php ├── ElitBuzz.php ├── Esms.php ├── Grameenphone.php ├── GreenWeb.php ├── Infobip.php ├── Lpeek.php ├── MDL.php ├── Metronet.php ├── MimSms.php ├── Mobireach.php ├── Mobishasra.php ├── Muthofun.php ├── NovocomBd.php ├── Onnorokom.php ├── ProviderRoadmap.php ├── QuickSms.php ├── RedmoItSms.php ├── Robi.php ├── SMSNoc.php ├── SendMySms.php ├── SmartLabSms.php ├── Sms4BD.php ├── SmsBangladesh.php ├── SmsNet24.php ├── SmsNetBD.php ├── SmsQ.php ├── SmsinBD.php ├── SongBird.php ├── Ssl.php ├── Tense.php ├── TruboSms.php ├── Twenty4BulkSms.php ├── TwentyFourBulkSmsBD.php ├── Viatech.php ├── WinText.php └── ZamanIt.php ├── Request.php ├── SMS.php └── Sender.php /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: arif98741 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: https://www.buymeacoffee.com/arif98741 13 | -------------------------------------------------------------------------------- /.github/workflows/changelog.yml: -------------------------------------------------------------------------------- 1 | name: Generate changelog 2 | on: 3 | release: 4 | types: [created, edited] 5 | jobs: 6 | generate-changelog: 7 | runs-on: ubuntu-latest 8 | steps: 9 | - uses: actions/checkout@v2 10 | with: 11 | fetch-depth: 0 12 | - uses: BobAnkh/auto-generate-changelog@master 13 | with: 14 | REPO_NAME: 'arif98741/laravelbdsms' 15 | ACCESS_TOKEN: ${{secrets.ACCESS_TOKEN}} 16 | PATH: 'CHANGELOG.md' 17 | COMMIT_MESSAGE: 'docs(CHANGELOG): update release notes' 18 | TYPE: 'feat:Feature,fix:Bug Fixes,docs:Documentation,refactor:Refactor,perf:Performance Improvements' 19 | -------------------------------------------------------------------------------- /.github/workflows/php-version-installation-pipeline.yml: -------------------------------------------------------------------------------- 1 | name: Check Composer Compatibility for PHP 8.0, 8.1, 8.2, 8.3, 8.4 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | pull_request: 8 | branches: 9 | - master 10 | 11 | jobs: 12 | check-php-versions: 13 | runs-on: ubuntu-latest 14 | 15 | strategy: 16 | matrix: 17 | php-version: [8.0, 8.1, 8.2, 8.3, 8.4] # Added PHP 8.0 to the matrix 18 | 19 | steps: 20 | # Step 1: Check out the code 21 | - name: Checkout code 22 | uses: actions/checkout@v2 23 | 24 | # Step 2: Set up PHP version 25 | - name: Set up PHP ${{ matrix.php-version }} 26 | uses: shivammathur/setup-php@v2 27 | with: 28 | php-version: ${{ matrix.php-version }} 29 | extensions: mbstring, intl, bcmath, curl, json # Add any required PHP extensions 30 | 31 | # Step 3: Install Composer 32 | - name: Install Composer 33 | run: curl -sS https://getcomposer.org/installer | php 34 | 35 | # Step 4: Install dependencies using Composer 36 | - name: Install dependencies with Composer 37 | run: php composer.phar install --no-progress --prefer-dist 38 | 39 | # Step 5: Run tests or any checks (optional) 40 | - name: Run PHPUnit tests (if applicable) 41 | run: vendor/bin/phpunit --configuration phpunit.xml.dist || true # Adjust as needed 42 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | .vscode 3 | *.log 4 | *.iml 5 | *.zip 6 | src/Test.php 7 | src/Test 8 | vendor/ 9 | .phpintel 10 | *.lock 11 | composer.lock 12 | .phpunit.result.cache 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Ariful Islam 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /composer.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "xenon/laravelbdsms", 3 | "description": "This is package for sending sms to Bangladeshi mobile numbers using laravel application", 4 | "type": "library", 5 | "license": "MIT", 6 | "authors": [ 7 | { 8 | "name": "Ariful islam", 9 | "email": "arif98741@gmail.com" 10 | } 11 | ], 12 | "require": { 13 | "guzzlehttp/guzzle": "^6.3|^7.3", 14 | "ext-json": "*", 15 | "ext-curl": "*", 16 | "php": "^8.0" 17 | }, 18 | "autoload": { 19 | "psr-4": { 20 | "Xenon\\LaravelBDSms\\": "src/" 21 | } 22 | }, 23 | "extra": { 24 | "laravel": { 25 | "providers": [ 26 | "Xenon\\LaravelBDSms\\LaravelBDSmsServiceProvider" 27 | ], 28 | "aliases": { 29 | "SMS": "Xenon\\LaravelBDSms\\Facades\\SMS", 30 | "LaravelBDSms": "Xenon\\LaravelBDSms\\Facades\\SMS" 31 | } 32 | } 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /img/Project-home-page-screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arif98741/laravelbdsms/4c5ac74d96614964f0e3c5e2a8930a2bd1d143ee/img/Project-home-page-screenshot.png -------------------------------------------------------------------------------- /img/installation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/arif98741/laravelbdsms/4c5ac74d96614964f0e3c5e2a8930a2bd1d143ee/img/installation.png -------------------------------------------------------------------------------- /src/Config/sms.php: -------------------------------------------------------------------------------- 1 | false, 75 | 76 | /* 77 | *----------------------------------------------------------------------------------------------- 78 | | Sms log will be saved in database(lbs_log table) or file(storage/logs/laravel.log). 79 | | You can choose one according to need 80 | |----------------------------------------------------------------------------------------------- 81 | */ 82 | 'log_driver' => 'database', //database, file 83 | 84 | /* 85 | *----------------------------------------------------------------------------------------------- 86 | | Default provider will be used during usage of facade( Xenon\LaravelBDSms\Facades\SMS ) 87 | |----------------------------------------------------------------------------------------------- 88 | */ 89 | 'default_provider' => env('SMS_DEFAULT_PROVIDER', Ssl::class), 90 | /* 91 | *--------------------------------------------------------------------------------------------------------------- 92 | | Providers are companies or gateways those provide sms credentials as well as sell sms to customers. 93 | | This providers key store all the necessary credentials needed for using inside .env file; Be sure to use this 94 | | credentials in your .env file before sending sms. This will be used while you are sending sms using 95 | | facade(Xenon\LaravelBDSms\Facades\SMS) 96 | |--------------------------------------------------------------------------------------------------------------- 97 | */ 98 | 'providers' => [ 99 | Adn::class => [ 100 | 'senderid' => env('SMS_ADN_SENDER_ID', ''), 101 | 'api_key' => env('SMS_ADN_API_KEY', ''), 102 | 'api_secret' => env('SMS_ADN_API_SECRET', ''), 103 | 'request_type' => env('SMS_ADN_API_REQUEST_TYPE', 'SINGLE_SMS'), //SINGLE_SMS, OTP, GENERAL_CAMPAIGN, MULTIBODY_CAMPAIGN 104 | 'message_type' => env('SMS_ADN_API_MESSAGE_TYPE', 'TEXT'), 105 | ], 106 | AjuraTech::class => [ 107 | 'apikey' => env('SMS_AjuraTechReveSms_API_KEY', ''), 108 | 'secretkey' => env('SMS_AjuraTechReveSms_API_SECRET_KEY', ''), 109 | 'callerID' => env('SMS_AjuraTechReveSms_CALLER_ID', ''), 110 | ], 111 | Alpha::class => [ 112 | 'api_key' => env('SMS_ALPHA_SMS_API_KEY'), 113 | ], 114 | Banglalink::class => [ 115 | 'userID' => env('SMS_BANGLALINK_USERID', ''), 116 | 'passwd' => env('SMS_BANGLALINK_PASSWD', ''), 117 | 'sender' => env('SMS_BANGLALINK_SENDER', ''), 118 | ], 119 | BDBulkSms::class => [ 120 | 'token' => env('SMS_BD_BULK_SMS_TOKEN', ''), 121 | ], 122 | BoomCast::class => [ 123 | 'url' => env('SMS_BOOM_CAST_URL', ''), 124 | 'username' => env('SMS_BOOM_CAST_USERNAME', ''), 125 | 'password' => env('SMS_BOOM_CAST_PASSWORD', ''), 126 | 'masking' => env('SMS_BOOM_CAST_MASKING', ''), 127 | ], 128 | Brilliant::class => [ 129 | 'SenderId' => env('SMS_BRILLIANT_SENDER_ID', ''), 130 | 'ApiKey' => env('SMS_BRILLIANT_API_KEY', ''), 131 | 'ClientId' => env('SMS_BRILLIANT_CLIENT_ID', ''), 132 | ], 133 | BulkSmsBD::class => [ 134 | 'api_key' => env('SMS_BULK_SMS_BD_API_KEY', ''), 135 | 'senderid' => env('SMS_BULK_SMS_BD_SENDERID', ''), 136 | ], 137 | CustomGateway::class => [ 138 | 139 | ], 140 | DianaHost::class => [ 141 | 'senderid' => env('SMS_DIANA_HOST_SENDER_ID', ''), 142 | 'api_key' => env('SMS_DIANA_HOST_API_KEY', ''), 143 | 'type' => env('SMS_DIANA_HOST_TYPE', ''), 144 | ], 145 | DianaSms::class => [ 146 | 'SenderId' => env('SMS_DIANA_SMS_SENDER_ID', ''), 147 | 'ApiKey' => env('SMS_DIANA_SMS_API_KEY', ''), 148 | 'ClientId' => env('SMS_DIANA_SMS_CLIENT_ID', ''), 149 | ], 150 | DhorolaSms::class => [ 151 | 'apikey' => env('SMS_DHOROLA_SMS_APIKEY', ''), 152 | 'sender' => env('SMS_DHOROLA_SMS_SENDERID', ''), 153 | ], 154 | DnsBd::class => [], 155 | DurjoySoft::class => [ 156 | 'ApiKey' => env('SMS_DURJOYSOFT_SMS_API_KEY', ''), 157 | 'SenderID' => env('SMS_DURJOYSOFT_SMS_SENDER_ID', ''), 158 | ], 159 | EAmarseba::class => [ 160 | 'x-app-key' => env('SMS_EAMARSEBA_X_APP_KEY', ''), 161 | 'x-app-secret' => env('SMS_EAMARSEBA_X_APP_SECRET', ''), 162 | 'is_maksing' => env('SMS_EAMARSEBA_IS_MASKING', ''), 163 | 'masking_name' => env('SMS_EAMARSEBA_MASKING_NAME', ''), 164 | ], 165 | ElitBuzz::class => [ 166 | 'url' => env('SMS_ELITBUZZ_URL', ''), 167 | 'senderid' => env('SMS_ELITBUZZ_SENDER_ID', ''), 168 | 'type' => env('SMS_ELITBUZZ_TYPE', ''), 169 | 'api_key' => env('SMS_ELITBUZZ_API_KEY', ''), 170 | ], 171 | Esms::class => [ 172 | 'sender_id' => env('SMS_ESMS_SENDER_ID', ''), 173 | 'api_token' => env('SMS_ESMS_API_TOKEN', ''), 174 | ], 175 | Grameenphone::class => [ 176 | 'username' => env('SMS_GRAMEENPHONE_USERNAME', ''), 177 | 'password' => env('SMS_GRAMEENPHONE_PASSWORD', ''), 178 | 'messagetype' => env('SMS_GRAMEENPHONE_MESSAGETYPE', 1), 179 | ], 180 | GreenWeb::class => [ 181 | 'token' => env('SMS_GREEN_WEB_TOKEN', ''), 182 | ], 183 | Infobip::class => [ 184 | 'base_url' => env('SMS_INFOBIP_BASE_URL', ''), 185 | 'user' => env('SMS_INFOBIP_USER', ''), 186 | 'password' => env('SMS_INFOBIP_PASSWORD', ''), 187 | 'from' => env('SMS_INFOBIP_FROM', ''), 188 | ], 189 | Lpeek::class => [ 190 | 'acode' => env('SMS_LPEEK_ACODE', ''), 191 | 'apiKey' => env('SMS_LPEEK_APIKEY', ''), 192 | 'requestID' => env('SMS_LPEEK_REQUESTID', ''), 193 | 'masking' => env('SMS_LPEEK_MASKING', ''), 194 | 'is_unicode' => env('SMS_LPEEK_IS_UNICODE', '0'), 195 | 'transactionType' => env('SMS_LPEEK_TRANSACTIONTYPE', 'T'), 196 | ], 197 | MDL::class => [ 198 | 'senderid' => env('SMS_MDL_SENDER_ID', ''), 199 | 'api_key' => env('SMS_MDL_API_KEY', ''), 200 | 'type' => env('SMS_MDL_TYPE', ''), 201 | ], 202 | Metronet::class => [ 203 | 'api_key' => env('SMS_METRONET_API_KEY', ''), 204 | 'mask' => env('SMS_METRONET_MASK', ''), 205 | ], 206 | MimSms::class => [ 207 | 'SenderName' => env('SMS_MIM_SMS_SENDER_NAME', ''), 208 | 'ApiKey' => env('SMS_MIM_SMS_API_KEY', ''), 209 | 'UserName' => env('SMS_MIM_SMS_API_USERNAME', ''), 210 | 'TransactionType' => env('SMS_MIM_SMS_API_TRANSACTION_TYPE', 'T'), 211 | 'CampaignId' => env('SMS_MIM_SMS_API_CAMPAIGN_ID', ''), 212 | 'CampaignName' => env('SMS_MIM_SMS_API_CAMPAIGN_NAME', ''), 213 | ], 214 | Mobireach::class => [ 215 | 'Username' => env('SMS_MOBIREACH_USERNAME', ''), 216 | 'Password' => env('SMS_MOBIREACH_PASSWORD', ''), 217 | 'From' => env('SMS_MOBIREACH_FROM', ''), 218 | ], 219 | Mobishasra::class => [ 220 | 'user' => env('SMS_MOBISHASTRA_USERNAME', ''), 221 | 'pwd' => env('SMS_MOBISHASTRA_PASSWORD', ''), 222 | 'senderid' => env('SMS_MOBISHASTRA_SENDER_ID', ''), 223 | ], 224 | Muthofun::class => [ 225 | 'api_key' => env('SMS_MUTHOFUN_API_KEY'), 226 | 'sender_id' => env('SMS_MUTHOFUN_SENDER_ID'), 227 | ], 228 | NovocomBd::class => [ 229 | 'SenderId' => env('SMS_NOVOCOMBD_SENDER_ID', ''), 230 | 'ApiKey' => env('SMS_NOVOCOMBD_API_KEY', ''), 231 | 'ClientId' => env('SMS_NOVOCOMBD_CLIENT_ID', ''), 232 | ], 233 | Onnorokom::class => [ 234 | 'userName' => env('SMS_ONNOROKOM_USERNAME', ''), 235 | 'userPassword' => env('SMS_ONNOROKOM_PASSWORD', ''), 236 | 'type' => env('SMS_ONNOROKOM_TYPE', ''), 237 | 'maskName' => env('SMS_ONNOROKOM_MASK', ''), 238 | 'campaignName' => env('SMS_ONNOROKOM_CAMPAIGN_NAME', ''), 239 | ], 240 | QuickSms::class => [ 241 | 'api_key' => env('SMS_QUICKSMS_API_KEY'), 242 | 'senderid' => env('SMS_QUICKSMS_SENDER_ID'), 243 | 'type' => env('SMS_QUICKSMS_SENDER_ID'), 244 | 'scheduledDateTime' => env('SMS_QUICKSMS_SCHEDULED_DATE_TIME'), 245 | ], 246 | RedmoItSms::class => [ 247 | 'sender_id' => env('SMS_REDMOIT_SENDER_ID', ''), 248 | 'api_token' => env('SMS_REDMOIT_API_TOKEN', ''), 249 | 'type' => env('SMS_REDMOIT_TYPE', 'string'), 250 | ], 251 | SendMySms::class => [ 252 | 'user' => env('SMS_SENDMYSMS_USER', ''), 253 | 'key' => env('SMS_SENDMYSMS_PASSWORD', ''), 254 | ], 255 | SmartLabSms::class => [ 256 | 'user' => env('SMS_SMARTLAB_USER', ''), 257 | 'password' => env('SMS_SMARTLAB_PASSWORD', ''), 258 | 'sender' => env('SMS_SMARTLAB_SENDER', ''), 259 | ], 260 | Sms4BD::class => [ 261 | 'publickey' => env('SMS_SMS4BD_PUBLIC_KEY', ''), 262 | 'privatekey' => env('SMS_SMS4BD_PRIVATE_KEY', ''), 263 | 'type' => env('SMS_SMS4BD_TYPE', ''), 264 | 'sender' => env('SMS_SMS4BD_SENDER', ''), 265 | 'delay' => env('SMS_SMS4BD_DELAY', ''), 266 | ], 267 | SmsBangladesh::class => [ 268 | 'user' => env('SMS_BANGLADESH_USER', ''), 269 | 'password' => env('SMS_BANGLADESH_PASSWORD', ''), 270 | 'from' => env('SMS_BANGLADESH_FROM', ''), 271 | ], 272 | SmsNet24::class => [ 273 | 'user_id' => env('SMS_SMSNET24_USER_ID', ''), 274 | 'user_password' => env('SMS_SMSNET24_USER_PASSWORD', ''), 275 | 'route_id' => env('SMS_SMSNET24_ROUTE_ID', ''), 276 | 'sms_type_id' => env('SMS_SMSNET24_SMS_TYPE_ID', ''), 277 | ], 278 | SMSNoc::class => [ 279 | 'sender_id' => env('SMSNOC_SENDER_ID', ''), 280 | 'bearer_token' => env('SMSNOC_BEARER_TOKEN', ''), 281 | 282 | ], 283 | SmsinBD::class => [ 284 | 'api_token' => env('SMSINBD_API_TOKEN', ''), 285 | 'senderid' => env('SMSINBD_SENDERID', ''), 286 | ], 287 | SmsNetBD::class => [ 288 | 'api_key' => env('SMS_NET_BD_API_KEY'), 289 | ], 290 | SmsQ::class => [ 291 | 'sender_id' => env('SMS_SMSQ_SENDER_ID', ''), 292 | 'api_key' => env('SMS_SMSQ_API_KEY', ''), 293 | 'client_id' => env('SMS_SMSQ_CLIENT_ID', ''), 294 | ], 295 | SongBird::class => [ 296 | 'apikey' => env('SMS_SONGBIRD_API_KEY', ''), 297 | 'secretkey' => env('SMS_SONGBIRD_SECRET_KEY', ''), 298 | 'callerID' => env('SMS_SONGBIRD_CALLER_ID', ''), 299 | ], 300 | Ssl::class => [ 301 | 'api_token' => env('SMS_SSL_API_TOKEN', ''), 302 | 'sid' => env('SMS_SSL_SID', ''), 303 | 'csms_id' => env('SMS_SSL_CSMS_ID', ''), 304 | 'batch_csms_id ' => env('SMS_SSL_BATCH_CSMS_ID ', ''), 305 | ], 306 | Tense::class => [ 307 | 'user' => env('SMS_TENSE_USER', ''), 308 | 'password' => env('SMS_TENSE_PASSWORD', ''), 309 | 'campaign' => env('SMS_TENSE_CAMPAIGN', ''), 310 | 'masking' => env('SMS_TENSE_MASKING', ''), 311 | ], 312 | TruboSms::class => [ 313 | 'sender_id' => env('SMS_TRUBOSMS_SENDER_ID', ''), 314 | 'api_token' => env('SMS_TRUBOSMS_API_TOKEN', ''), 315 | 'type' => env('SMS_TRUBOSMS_TYPE', 'string'), 316 | ], 317 | TwentyFourBulkSmsBD::class => [ 318 | 'apiKey' => env('SMS_TWENTYFOURSMSBD_APIKEY', ''), 319 | 'sender_id' => env('SMS_TWENTYFOURSMSBD_SENDER_ID', ''), 320 | ], 321 | Viatech::class => [ 322 | 'api_key' => env('SMS_VIATECH_API_KEY', ''), 323 | 'mask' => env('SMS_VIATECH_MASK', ''), 324 | ], 325 | Twenty4BulkSms::class => [ 326 | 'sender_id' => env('SMS_TWENTYFOUR_BULKSMS_SENDER_ID', ''), 327 | 'user_email' => env('SMS_TWENTYFOUR_BULKSMS_USER_EMAIL', ''), 328 | 'api_key' => env('SMS_TWENTYFOUR_BULKSMS_APP_KEY', ''), 329 | ], 330 | WinText::class => [ 331 | 'token' => env('SMS_WINTEXT_TOKEN', ''), 332 | 'messagetype' => env('SMS_WINTEXT_MESSAGE_TYPE', ''), 333 | 'ismasking' => env('SMS_WINTEXT_IS_MASKING', ''), 334 | 'masking' => env('SMS_WINTEXT_MASKING', ''), 335 | ], 336 | ZamanIt::class => [ 337 | 'api_key' => env('SMS_ZAMANIT_API_KEY', ''), 338 | 'type' => env('SMS_ZAMANIT_TYPE', ''), 339 | 'senderid' => env('SMS_ZAMANIT_SENDER_ID', ''), 340 | ], 341 | ] 342 | ]; 343 | 344 | -------------------------------------------------------------------------------- /src/Database/migrations/create_laravelbd_sms_table.php.stub: -------------------------------------------------------------------------------- 1 | increments('id'); 22 | $table->text('provider'); 23 | $table->text('request_json'); 24 | $table->text('response_json'); 25 | $table->timestamps(); 26 | }); 27 | } 28 | 29 | /** 30 | * Reverse the Migrations. 31 | * 32 | * @return void 33 | */ 34 | public function down() 35 | { 36 | Schema::dropIfExists('lbs_log'); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/Facades/Logger.php: -------------------------------------------------------------------------------- 1 | jobDetails = $jobDetails; 49 | if (isset($jobDetails['tries']) && is_integer($jobDetails['tries'])) { 50 | $this->tries = $jobDetails['tries']; 51 | } 52 | if (isset($jobDetails['backoff']) && is_integer($jobDetails['backoff'])) { 53 | $this->backoffSeconds = $jobDetails['backoff']; 54 | } 55 | } 56 | 57 | /** 58 | * Execute the job. 59 | * 60 | * @return void 61 | * @throws GuzzleException|JsonException 62 | */ 63 | public function handle() 64 | { 65 | 66 | if ($this->jobDetails['method'] == 'post') { 67 | $this->postMethodHandler(); 68 | } else { 69 | $this->getMethodHandler(); 70 | } 71 | 72 | } 73 | 74 | /** 75 | * @return void 76 | * @throws JsonException 77 | */ 78 | private function postMethodHandler() 79 | { 80 | $client = new Client([ 81 | 'base_uri' => $this->jobDetails['requestUrl'], 82 | 'timeout' => $this->jobDetails['timeout'], 83 | ]); 84 | try { 85 | $response = $client->request('post', '', $this->jobDetails); 86 | $body = $response->getBody(); 87 | $smsResult = $body->getContents(); 88 | $log = [ 89 | 'provider' => $this->jobDetails['requestUrl'], 90 | 'request_json' => json_encode($this->jobDetails['query'], JSON_THROW_ON_ERROR), 91 | 'response_json' => json_encode($smsResult, JSON_THROW_ON_ERROR) 92 | ]; 93 | } catch (GuzzleException|JsonException $e) { 94 | 95 | $log = [ 96 | 'provider' => $this->jobDetails['requestUrl'], 97 | 'request_json' => json_encode($this->jobDetails['query'], JSON_THROW_ON_ERROR), 98 | 'response_json' => json_encode($e->getMessage()), 99 | ]; 100 | } 101 | $this->insertLoggerLog($log); 102 | } 103 | 104 | /** 105 | * @return void 106 | * @throws GuzzleException 107 | * @throws \JsonException 108 | */ 109 | private function getMethodHandler() 110 | { 111 | $client = new Client([ 112 | 'base_uri' => $this->jobDetails['requestUrl'], 113 | 'timeout' => $this->jobDetails['timeout'], 114 | ]); 115 | 116 | try { 117 | $response = $client->request('GET', '', $this->jobDetails); 118 | $body = $response->getBody(); 119 | $smsResult = $body->getContents(); 120 | $log = [ 121 | 'provider' => $this->jobDetails['requestUrl'], 122 | 'request_json' => json_encode($this->jobDetails['query'], JSON_THROW_ON_ERROR), 123 | 'response_json' => json_encode($smsResult, JSON_THROW_ON_ERROR) 124 | ]; 125 | } catch (GuzzleException $e) { 126 | $log = [ 127 | 'provider' => $this->jobDetails['requestUrl'], 128 | 'request_json' => json_encode($this->jobDetails['query'], JSON_THROW_ON_ERROR), 129 | 'response_json' => json_encode($e->getMessage(), JSON_THROW_ON_ERROR), 130 | ]; 131 | } 132 | 133 | $this->insertLoggerLog($log); 134 | } 135 | 136 | /** 137 | * @param array $log 138 | * @return void 139 | */ 140 | private function insertLoggerLog(array $log): void 141 | { 142 | $config = Config::get('sms'); 143 | if ($config['sms_log']) { 144 | 145 | if (array_key_exists('log_driver', $config)) { 146 | 147 | if ($config['log_driver'] === 'database') { 148 | Logger::createLog($log); 149 | } else if ($config['log_driver'] === 'file') { 150 | LaravelLog::info('laravelbdsms', $log); 151 | } 152 | } else { 153 | Logger::createLog($log); 154 | } 155 | } 156 | } 157 | 158 | /** 159 | * Calculate the number of seconds to wait before retrying the job. 160 | */ 161 | public function backoff(): int 162 | { 163 | return $this->backoffSeconds; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /src/LaravelBDSmsServiceProvider.php: -------------------------------------------------------------------------------- 1 | app->bind('LaravelBDSms', function () { 30 | $provider = config('sms.default_provider'); 31 | $provider = Helper::ensurePrefix($provider); 32 | $sender = Sender::getInstance(); 33 | $sender->setProvider($provider); 34 | $sender->setConfig(config('sms.providers')[$provider]); 35 | return new SMS($sender); 36 | }); 37 | 38 | $this->app->bind('LaravelBDSmsLogger', function () { 39 | return new Log; 40 | }); 41 | 42 | $this->app->bind('LaravelBDSmsRequest', function () { 43 | return new Request; 44 | }); 45 | 46 | } 47 | 48 | /** 49 | * Bootstrap services. 50 | * 51 | * @return void 52 | * @version v1.0.32 53 | * @since v1.0.31 54 | */ 55 | public function boot(): void 56 | { 57 | $this->publishes([ 58 | __DIR__ . '/Config/sms.php' => config_path('sms.php'), 59 | ], 'config'); 60 | 61 | $fileNamePattern = '_create_laravelbd_sms_table.php'; 62 | $migrationFilename = date('Y_m_d_His') . $fileNamePattern; 63 | 64 | if (!$this->laravelBDSmsMigrationFileExist($fileNamePattern)) { 65 | $this->publishes([ 66 | __DIR__ . '/Database/migrations/create_laravelbd_sms_table.php.stub' => database_path('migrations/' . $migrationFilename), 67 | ], 'migrations'); 68 | } 69 | } 70 | 71 | /** 72 | * Check if a migration file with the same pattern exists inside database/migrations/* 73 | * 74 | * @param string $filename 75 | * @return bool 76 | */ 77 | private function laravelBDSmsMigrationFileExist(string $filename): bool 78 | { 79 | $existingMigrations = glob(database_path('migrations/') . '*_create_laravelbd_sms_table.php'); 80 | 81 | foreach ($existingMigrations as $migration) { 82 | if (str_contains($migration, $filename)) { 83 | return true; 84 | } 85 | } 86 | return false; 87 | } 88 | 89 | } 90 | -------------------------------------------------------------------------------- /src/Log/Log.php: -------------------------------------------------------------------------------- 1 | first(); 32 | } 33 | 34 | /** 35 | * @return Collection 36 | * @since v1.0.35 37 | * @version v1.0.35 38 | */ 39 | public function viewAllLog() 40 | { 41 | return LaravelBDSmsLog::all(); 42 | } 43 | 44 | /** 45 | * @since v1.0.35 46 | * @version v1.0.35 47 | */ 48 | public function clearLog() 49 | { 50 | DB::statement("SET foreign_key_checks=0"); 51 | LaravelBDSmsLog::truncate(); 52 | DB::statement("SET foreign_key_checks=1"); 53 | } 54 | 55 | /** 56 | * @param $provider 57 | * @return Builder[]|Collection|\Illuminate\Support\Collection|LaravelBDSmsLog[] 58 | * @since v1.0.35 59 | * @version v1.0.35 60 | */ 61 | public function logByProvider($provider) 62 | { 63 | return LaravelBDSmsLog::where('provider', $provider)->get(); 64 | } 65 | 66 | /** 67 | * @return Builder[]|Collection|\Illuminate\Support\Collection|LaravelBDSmsLog[] 68 | * @since v1.0.35 69 | * @version v1.0.35 70 | */ 71 | public function logByDefaultProvider() 72 | { 73 | $provider = config('sms.default_provider'); 74 | return LaravelBDSmsLog::where('provider', config('sms.providers')[$provider])->get(); 75 | } 76 | 77 | /** 78 | * @return int 79 | * @since v1.0.35 80 | * @version v1.0.35 81 | */ 82 | public function total(): int 83 | { 84 | return LaravelBDSmsLog::count(); 85 | } 86 | 87 | /** 88 | * @param $object 89 | * @return mixed 90 | * @since v1.0.35 91 | * @version v1.0.35 92 | */ 93 | public function toArray($object) 94 | { 95 | return $object->toArray(); 96 | } 97 | 98 | /** 99 | * @since v1.0.35 100 | * @version v1.0.35 101 | */ 102 | public function toJson() 103 | { 104 | 105 | } 106 | } 107 | -------------------------------------------------------------------------------- /src/Models/LaravelBDSmsLog.php: -------------------------------------------------------------------------------- 1 | json([ 47 | 'status' => 'response', 48 | 'response' => $result, 49 | 'provider' => get_class($this), 50 | 'send_time' => date('Y-m-d H:i:s'), 51 | 'mobile' => $data['number'], 52 | 'message' => $data['message'] 53 | ]); 54 | } 55 | 56 | /** 57 | * @return mixed 58 | */ 59 | abstract public function errorException(); 60 | 61 | /** 62 | * Return Report As Array 63 | */ 64 | public function toArray(): array 65 | { 66 | return [ 67 | 68 | ]; 69 | } 70 | 71 | /** 72 | * Return Report As Json 73 | * @throws \JsonException 74 | * @deprecated 75 | */ 76 | public function toJson($data) 77 | { 78 | return json_encode($data, JSON_THROW_ON_ERROR); 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/Provider/Adn.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries = $this->senderObject->getTries(); 42 | $backoff = $this->senderObject->getBackoff(); 43 | $query = []; 44 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [ 45 | 'Accept' => 'application/json' 46 | ], $queueName, $tries, $backoff); 47 | 48 | $requestObject->setFormParams([ 49 | 'api_key' => $config['api_key'], 50 | 'api_secret' => $config['api_secret'], 51 | 'request_type' => $config['request_type'], 52 | 'message_type' => $config['message_type'], 53 | 'senderid' => $config['senderid'] ?? null, 54 | 'mobile' => $number, 55 | 'message_body' => $text, 56 | ]); 57 | 58 | $response = $requestObject->post(); 59 | if ($queue) { 60 | return true; 61 | } 62 | $body = $response->getBody(); 63 | $smsResult = $body->getContents(); 64 | 65 | $data['number'] = $number; 66 | $data['message'] = $text; 67 | return $this->generateReport($smsResult, $data)->getContent(); 68 | } 69 | 70 | /** 71 | * @throws ParameterException 72 | */ 73 | public function errorException() 74 | { 75 | $configArray = $this->senderObject->getConfig(); 76 | 77 | if (!array_key_exists('api_key', $configArray)) { 78 | throw new ParameterException('api_key is absent in configuration'); 79 | } 80 | if (!array_key_exists('api_secret', $configArray)) { 81 | throw new ParameterException('api_secret key is absent in configuration'); 82 | } 83 | if (!array_key_exists('request_type', $configArray)) { 84 | throw new ParameterException('request_type key is absent in configuration'); 85 | } 86 | if (!array_key_exists('message_type', $configArray)) { 87 | throw new ParameterException('message_type key is absent in configuration'); 88 | } 89 | 90 | $allowedRequestTypes = ['SINGLE_SMS', 'OTP', 'GENERAL_CAMPAIGN', 'MULTIBODY_CAMPAIGN']; 91 | 92 | if (!in_array($configArray['request_type'], $allowedRequestTypes)) { 93 | throw new ParameterException('request_type key is invalid. Allowed request_type values are ' . implode(', ', $allowedRequestTypes)); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Provider/AjuraTech.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 33 | } 34 | 35 | /** 36 | * Send Request To Api and Send Message 37 | * @return false|string 38 | * @throws GuzzleException 39 | * @throws RenderException 40 | * @since v1.0.34 41 | * @version v1.0.34 42 | */ 43 | public function sendRequest() 44 | { 45 | $number = $this->senderObject->getMobile(); 46 | $text = $this->senderObject->getMessage(); 47 | $config = $this->senderObject->getConfig(); 48 | $queue = $this->senderObject->getQueue(); 49 | $queueName = $this->senderObject->getQueueName(); 50 | $tries=$this->senderObject->getTries(); 51 | $backoff=$this->senderObject->getBackoff(); 52 | $query = [ 53 | 'apikey' => $config['apikey'], 54 | 'secretkey' => $config['secretkey'], 55 | 'callerID' => $config['callerID'], 56 | 'toUser' => $number, 57 | 'messageContent' => $text, 58 | ]; 59 | 60 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 61 | $response = $requestObject->get(); 62 | if ($queue) { 63 | return true; 64 | } 65 | 66 | $body = $response->getBody(); 67 | $smsResult = $body->getContents(); 68 | 69 | $data['number'] = $number; 70 | $data['message'] = $text; 71 | return $this->generateReport($smsResult, $data)->getContent(); 72 | } 73 | 74 | /** 75 | * @throws ParameterException 76 | * @version v1.0.34 77 | * @since v1.0.34 78 | */ 79 | public function errorException() 80 | { 81 | if (!array_key_exists('apikey', $this->senderObject->getConfig())) { 82 | throw new ParameterException('apikey is absent in configuration'); 83 | } 84 | if (!array_key_exists('secretkey', $this->senderObject->getConfig())) { 85 | throw new ParameterException('secretkey is absent in configuration'); 86 | } 87 | if (!array_key_exists('callerID', $this->senderObject->getConfig())) { 88 | throw new ParameterException('callerID is absent in configuration'); 89 | } 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /src/Provider/Alpha.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 36 | } 37 | 38 | /** 39 | * Send Request To Api and Send Message 40 | * @throws RenderException 41 | */ 42 | public function sendRequest() 43 | { 44 | $mobile = $this->senderObject->getMobile(); 45 | $text = $this->senderObject->getMessage(); 46 | $config = $this->senderObject->getConfig(); 47 | $queue = $this->senderObject->getQueue(); 48 | $queueName = $this->senderObject->getQueueName(); 49 | $tries=$this->senderObject->getTries(); 50 | $backoff=$this->senderObject->getBackoff(); 51 | 52 | $query = [ 53 | 'api_key' => $config['api_key'], 54 | 'msg' => $text, 55 | 'to' => $mobile, 56 | ]; 57 | 58 | /** 59 | * The schedule date and time to send your message. Date and time must be formatted as Y-m-d H:i:s(eg. 2023-10-05 01:36:03) 60 | */ 61 | if (isset($config['schedule'])) { 62 | $query['schedule'] = $config['schedule']; 63 | } 64 | 65 | /** 66 | * If you have an approved Sender ID, you can use this parameter to set your Sender ID as from in you messages. 67 | */ 68 | if (isset($config['sender_id'])) { 69 | $query['sender_id'] = $config['sender_id']; 70 | } 71 | if (is_array($mobile)) { 72 | $query['to'] = implode(',', $mobile); 73 | } 74 | 75 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 76 | 77 | $response = $requestObject->post(); 78 | if ($queue) { 79 | return true; 80 | } 81 | $body = $response->getBody(); 82 | $smsResult = $body->getContents(); 83 | $data['number'] = $mobile; 84 | $data['message'] = $text; 85 | return $this->generateReport($smsResult, $data)->getContent(); 86 | } 87 | 88 | /** 89 | * @throws RenderException 90 | */ 91 | public function errorException(): void 92 | { 93 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 94 | throw new RenderException('api_key key is absent in configuration'); 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/Provider/BDBulkSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request TO Server 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'token' => $config['token'], 46 | 'to' => $number, 47 | 'message' => $text, 48 | ]; 49 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 50 | 51 | $response = $requestObject->get(); 52 | if ($queue) { 53 | return true; 54 | } 55 | 56 | $body = $response->getBody(); 57 | $smsResult = $body->getContents(); 58 | 59 | $data['number'] = $number; 60 | $data['message'] = $text; 61 | return $this->generateReport($smsResult, $data)->getContent(); 62 | 63 | } 64 | 65 | /** 66 | * @return void 67 | * @throws ParameterException 68 | */ 69 | public function errorException() 70 | { 71 | if (!array_key_exists('token', $this->senderObject->getConfig())) { 72 | throw new ParameterException('token key is absent in configuration'); 73 | } 74 | } 75 | } 76 | -------------------------------------------------------------------------------- /src/Provider/Banglalink.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $formParams = [ 47 | 'userID' => $config['userID'], 48 | 'passwd' => $config['passwd'], 49 | 'sender' => $config['sender'], 50 | 'msisdn' => $number, 51 | 'message' => $text, 52 | ]; 53 | 54 | $requestObject = new Request($this->apiEndpoint, [], $queue, [], $queueName,$tries,$backoff); 55 | $requestObject->setFormParams($formParams); 56 | $response = $requestObject->post(); 57 | if ($queue) { 58 | return true; 59 | } 60 | 61 | $body = $response->getBody(); 62 | $smsResult = $body->getContents(); 63 | 64 | $data['number'] = $number; 65 | $data['message'] = $text; 66 | return $this->generateReport($smsResult, $data)->getContent(); 67 | } 68 | 69 | /** 70 | * @throws ParameterException 71 | */ 72 | public function errorException() 73 | { 74 | if (!array_key_exists('userID', $this->senderObject->getConfig())) { 75 | throw new ParameterException('userID key is absent in configuration'); 76 | } 77 | 78 | if (!array_key_exists('passwd', $this->senderObject->getConfig())) { 79 | throw new ParameterException('passwd key is absent in configuration'); 80 | } 81 | if (!array_key_exists('sender', $this->senderObject->getConfig())) { 82 | throw new ParameterException('sender key is absent in configuration'); 83 | } 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/Provider/BoomCast.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 22 | } 23 | 24 | /** 25 | * @return false|string 26 | * @throws GuzzleException 27 | * @throws RenderException 28 | * @version v1.0.37 29 | * @since v1.0.31 30 | */ 31 | public function sendRequest() 32 | { 33 | $number = $this->senderObject->getMobile(); 34 | $text = $this->senderObject->getMessage(); 35 | $config = $this->senderObject->getConfig(); 36 | $queue = $this->senderObject->getQueue(); 37 | $queueName = $this->senderObject->getQueueName(); 38 | $tries=$this->senderObject->getTries(); 39 | $backoff=$this->senderObject->getBackoff(); 40 | 41 | $query = [ 42 | "masking" => $config['masking'], 43 | "userName" => $config['username'], 44 | "password" => $config['password'], 45 | "MsgType" => "TEXT", 46 | "receiver" => $number, 47 | "message" => $text, 48 | ]; 49 | 50 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 51 | 52 | $response = $requestObject->get(); 53 | if ($queue) { 54 | return true; 55 | } 56 | 57 | $body = $response->getBody(); 58 | $smsResult = $body->getContents(); 59 | 60 | $data['number'] = $number; 61 | $data['message'] = $text; 62 | return $this->generateReport($smsResult, $data)->getContent(); 63 | } 64 | 65 | /** 66 | * @throws RenderException 67 | * @version v1.0.32 68 | * @since v1.0.31 69 | */ 70 | public function errorException() 71 | { 72 | $config = $this->senderObject->getConfig(); 73 | 74 | if (!array_key_exists('masking', $config)) { 75 | throw new RenderException('masking key is absent in configuration'); 76 | } 77 | 78 | if (!array_key_exists('username', $config)) { 79 | throw new RenderException('username key is absent in configuration'); 80 | } 81 | 82 | if (!array_key_exists('password', $config)) { 83 | throw new RenderException('password key is absent in configuration'); 84 | } 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/Provider/Brilliant.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'ApiKey' => $config['ApiKey'], 46 | 'ClientId' => $config['ClientId'], 47 | 'SenderId' => $config['SenderId'], 48 | 'MobileNumbers' => $number, 49 | 'Message' => $text, 50 | 'Is_Unicode' => true, 51 | ]; 52 | 53 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 54 | $response = $requestObject->get(); 55 | if ($queue) { 56 | return true; 57 | } 58 | 59 | $body = $response->getBody(); 60 | $smsResult = $body->getContents(); 61 | 62 | $data['number'] = $number; 63 | $data['message'] = $text; 64 | return $this->generateReport($smsResult, $data)->getContent(); 65 | } 66 | 67 | /** 68 | * @throws ParameterException 69 | */ 70 | public function errorException() 71 | { 72 | if (!array_key_exists('ApiKey', $this->senderObject->getConfig())) { 73 | throw new ParameterException('ApiKey is absent in configuration'); 74 | } 75 | if (!array_key_exists('ClientId', $this->senderObject->getConfig())) { 76 | throw new ParameterException('ClientId key is absent in configuration'); 77 | } 78 | if (!array_key_exists('SenderId', $this->senderObject->getConfig())) { 79 | throw new ParameterException('SenderId key is absent in configuration'); 80 | } 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /src/Provider/BulkSmsBD.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws GuzzleException|RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'api_key' => $config['api_key'], 48 | 'senderid' => $config['senderid'], 49 | 'type' => 'text', 50 | 'number' => $number, 51 | 'message' => $text, 52 | ]; 53 | 54 | if (array_key_exists('senderid', $config)) { 55 | $query ['senderid'] = $config['senderid']; 56 | } 57 | 58 | if (is_array($number)) { 59 | $query['number'] = implode(',', $number); 60 | } 61 | 62 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 63 | $response = $requestObject->get(); 64 | if ($queue) { 65 | return true; 66 | } 67 | 68 | $body = $response->getBody(); 69 | $smsResult = $body->getContents(); 70 | 71 | $data['number'] = $number; 72 | $data['message'] = $text; 73 | return $this->generateReport($smsResult, $data)->getContent(); 74 | } 75 | 76 | /** 77 | * @throws ParameterException 78 | */ 79 | public function errorException() 80 | { 81 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 82 | throw new ParameterException('api_key key is absent in configuration'); 83 | } 84 | 85 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 86 | throw new ParameterException('senderid key is absent in configuration'); 87 | } 88 | 89 | 90 | 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/Provider/CustomGateway.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 28 | } 29 | 30 | /** 31 | * Send Request To Api and Send Message 32 | * @throws RenderException|GuzzleException 33 | */ 34 | public function sendRequest() 35 | { 36 | $mobile = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | $query = $config; 44 | 45 | $requestObject = new Request($this->senderObject->url, $query, $queue, [], $queueName,$tries,$backoff); 46 | 47 | if (isset($this->senderObject->headers)) { 48 | $requestObject->setHeaders($this->senderObject->headers); 49 | $this->senderObject->contentTypeJson && $requestObject->setContentTypeJson(true); 50 | } 51 | 52 | $response = $this->senderObject->method === 'post' ? $requestObject->post() : $requestObject->get(); 53 | 54 | if ($queue) { 55 | return true; 56 | } 57 | 58 | $body = $response->getBody(); 59 | $smsResult = $body->getContents(); 60 | $data['number'] = $mobile; 61 | $data['message'] = $text; 62 | return $this->generateReport($smsResult, $data)->getContent(); 63 | } 64 | 65 | /** 66 | * @throws RenderException 67 | */ 68 | final public function errorException(): void 69 | { 70 | if (!isset($this->senderObject->url)) { 71 | throw new RenderException("Url missing for custom gateway. Use setUrl() to set sms gateway endpoint "); 72 | } 73 | } 74 | } 75 | -------------------------------------------------------------------------------- /src/Provider/DhorolaSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 34 | } 35 | 36 | /** 37 | * Send Request To Api and Send Message 38 | * @throws RenderException 39 | */ 40 | public function sendRequest() 41 | { 42 | $number = $this->senderObject->getMobile(); 43 | $text = $this->senderObject->getMessage(); 44 | $config = $this->senderObject->getConfig(); 45 | $queue = $this->senderObject->getQueue(); 46 | $queueName = $this->senderObject->getQueueName(); 47 | $tries = $this->senderObject->getTries(); 48 | $backoff = $this->senderObject->getBackoff(); 49 | 50 | $query = [ 51 | 'apikey' => $config['apikey'], 52 | 'sender' => $config['sender'], 53 | 'msisdn' => $number, 54 | 'smstext' => $text, 55 | ]; 56 | 57 | if (is_array($number)) { 58 | $query['msisdn'] = implode(',', $number); 59 | } 60 | 61 | $headers = [ 62 | 'Content-Type' => 'application/json', 63 | 'verify' => false, 64 | ]; 65 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 66 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 67 | $response = $requestObject->post(); 68 | if ($queue) { 69 | return true; 70 | } 71 | 72 | $body = $response->getBody(); 73 | $smsResult = $body->getContents(); 74 | 75 | $data['number'] = $number; 76 | $data['message'] = $text; 77 | return $this->generateReport($smsResult, $data)->getContent(); 78 | } 79 | 80 | /** 81 | * @throws ParameterException 82 | */ 83 | public function errorException() 84 | { 85 | if (!array_key_exists('apikey', $this->senderObject->getConfig())) { 86 | throw new ParameterException('apikey key is absent in configuration'); 87 | } 88 | if (!array_key_exists('sender', $this->senderObject->getConfig())) { 89 | throw new ParameterException('sender key is absent in configuration'); 90 | } 91 | 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/Provider/DianaHost.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'api_key' => $config['api_key'], 46 | 'type' => $config['type'], 47 | 'senderid' => $config['senderid'], 48 | 'contacts' => $number, 49 | 'msg' => $text, 50 | ]; 51 | 52 | 53 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 54 | $response = $requestObject->get(); 55 | if ($queue) { 56 | return true; 57 | } 58 | 59 | $body = $response->getBody(); 60 | $smsResult = $body->getContents(); 61 | 62 | $data['number'] = $number; 63 | $data['message'] = $text; 64 | return $this->generateReport($smsResult, $data)->getContent(); 65 | } 66 | 67 | /** 68 | * @throws ParameterException 69 | */ 70 | public function errorException() 71 | { 72 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 73 | throw new ParameterException('api_key is absent in configuration'); 74 | } 75 | if (!array_key_exists('type', $this->senderObject->getConfig())) { 76 | throw new ParameterException('type key is absent in configuration'); 77 | } 78 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 79 | throw new ParameterException('senderid key is absent in configuration'); 80 | } 81 | } 82 | 83 | } 84 | -------------------------------------------------------------------------------- /src/Provider/DianaSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @throws RenderException 34 | * @throws GuzzleException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'ApiKey' => $config['ApiKey'], 48 | 'ClientId' => $config['ClientId'], 49 | 'SenderId' => $config['SenderId'], 50 | 'MobileNumbers' => $number, 51 | 'Message' => $text, 52 | ]; 53 | 54 | $requestObject = new Request('https://q.dianasms.com/api/v2/SendSMS', $query, $queue, [], $queueName,$tries,$backoff); 55 | $response = $requestObject->get(); 56 | if ($queue) { 57 | return true; 58 | } 59 | 60 | $body = $response->getBody(); 61 | $smsResult = $body->getContents(); 62 | 63 | $data['number'] = $number; 64 | $data['message'] = $text; 65 | return $this->generateReport($smsResult, $data)->getContent(); 66 | 67 | } 68 | 69 | /** 70 | * @throws ParameterException 71 | */ 72 | public function errorException() 73 | { 74 | if (!array_key_exists('ApiKey', $this->senderObject->getConfig())) { 75 | throw new ParameterException('ApiKey is absent in configuration'); 76 | } 77 | if (!array_key_exists('ClientId', $this->senderObject->getConfig())) { 78 | throw new ParameterException('ClientId key is absent in configuration'); 79 | } 80 | if (!array_key_exists('SenderId', $this->senderObject->getConfig())) { 81 | throw new ParameterException('SenderId key is absent in configuration'); 82 | } 83 | } 84 | 85 | } 86 | -------------------------------------------------------------------------------- /src/Provider/DnsBd.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @return bool|string 36 | * @throws GuzzleException 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $text = $this->senderObject->getMessage(); 42 | $number = $this->senderObject->getMobile(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries=$this->senderObject->getTries(); 47 | $backoff=$this->senderObject->getBackoff(); 48 | 49 | $query = [ 50 | 'ApiKey' => $config['ApiKey'], 51 | 'SenderID' => $config['SenderID'], 52 | 'number' => $number, 53 | 'sms' => $text, 54 | 'IsUnicode' => 2, 55 | ]; 56 | 57 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 58 | $response = $requestObject->get(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['number'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('ApiKey', $this->senderObject->getConfig())) { 77 | throw new ParameterException('ApiKey is absent in configuration'); 78 | } 79 | if (!array_key_exists('SenderID', $this->senderObject->getConfig())) { 80 | throw new ParameterException('SenderID key is absent in configuration'); 81 | } 82 | } 83 | 84 | } 85 | -------------------------------------------------------------------------------- /src/Provider/EAmarseba.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries = $this->senderObject->getTries(); 44 | $backoff = $this->senderObject->getBackoff(); 45 | 46 | if (!is_array($number)){ 47 | $number = [$number]; 48 | } 49 | 50 | $query = [ 51 | 'contacts' => $number, 52 | 'text' => $text, 53 | ]; 54 | if (array_key_exists('is_masking',$config)){ 55 | $query['is_masking'] = $config['is_masking']; 56 | } 57 | if (array_key_exists('masking_name',$config)){ 58 | $query['masking_name'] = $config['masking_name']; 59 | } 60 | 61 | $headers = [ 62 | 'x-app-key' => $config['x-app-key'], 63 | 'x-app-secret' => $config['x-app-secret'], 64 | ]; 65 | 66 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 67 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 68 | $response = $requestObject->post(); 69 | if ($queue) { 70 | return true; 71 | } 72 | 73 | $body = $response->getBody(); 74 | $smsResult = $body->getContents(); 75 | 76 | $data['number'] = $number; 77 | $data['message'] = $text; 78 | return $this->generateReport($smsResult, $data)->getContent(); 79 | } 80 | 81 | /** 82 | * @throws ParameterException 83 | */ 84 | public function errorException() 85 | { 86 | if (!array_key_exists('x-app-key', $this->senderObject->getConfig())) { 87 | throw new ParameterException('x-app-key is absent in configuration'); 88 | } 89 | 90 | if (!array_key_exists('x-app-secret', $this->senderObject->getConfig())) { 91 | throw new ParameterException('x-app-secret key is absent in configuration'); 92 | } 93 | } 94 | 95 | } 96 | -------------------------------------------------------------------------------- /src/Provider/ElitBuzz.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 20 | } 21 | 22 | /** 23 | * @return false|string 24 | * @throws RenderException 25 | * @version v1.0.32 26 | * @since v1.0.31 27 | */ 28 | public function sendRequest() 29 | { 30 | $mobile = $this->senderObject->getMobile(); 31 | $text = $this->senderObject->getMessage(); 32 | $config = $this->senderObject->getConfig(); 33 | $queue = $this->senderObject->getQueue(); 34 | $queueName = $this->senderObject->getQueueName(); 35 | $tries=$this->senderObject->getTries(); 36 | $backoff=$this->senderObject->getBackoff(); 37 | 38 | $formParams = [ 39 | "api_key" => $config['api_key'], 40 | "type" => $config['type'], 41 | "senderid" => $config['senderid'], 42 | "contacts" => $mobile, 43 | "msg" => $text, 44 | ]; 45 | 46 | $requestUrl = $config['url'] . "/smsapi"; 47 | $requestObject = new Request($requestUrl, [], $queue, [], $queueName,$tries,$backoff); 48 | $requestObject->setFormParams($formParams); 49 | $response = $requestObject->post(false, 60); 50 | if ($queue) { 51 | return true; 52 | } 53 | 54 | 55 | $body = $response->getBody(); 56 | $smsResult = $body->getContents(); 57 | 58 | $data['number'] = $mobile; 59 | $data['message'] = $text; 60 | return $this->generateReport($smsResult, $data)->getContent(); 61 | } 62 | 63 | /** 64 | * @throws RenderException 65 | * @version v1.0.32 66 | * @since v1.0.31 67 | */ 68 | public function errorException() 69 | { 70 | $config = $this->senderObject->getConfig(); 71 | 72 | if (!array_key_exists('url', $config)) { 73 | throw new RenderException('url key is absent in configuration'); 74 | } 75 | 76 | if (!array_key_exists('api_key', $config)) { 77 | throw new RenderException('api_key key is absent in configuration'); 78 | } 79 | 80 | if (!array_key_exists('senderid', $config)) { 81 | throw new RenderException('senderid key is absent in configuration'); 82 | } 83 | 84 | if (!array_key_exists('type', $config)) { 85 | throw new RenderException('type key is absent in configuration'); 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/Provider/Esms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @throws RenderException 34 | */ 35 | public function sendRequest() 36 | { 37 | $number = $this->senderObject->getMobile(); 38 | $text = $this->senderObject->getMessage(); 39 | $config = $this->senderObject->getConfig(); 40 | $queue = $this->senderObject->getQueue(); 41 | $queueName = $this->senderObject->getQueueName(); 42 | $tries=$this->senderObject->getTries(); 43 | $backoff=$this->senderObject->getBackoff(); 44 | 45 | $query = [ 46 | 'sender_id' => $config['sender_id'], 47 | 'recipient' => $number, 48 | 'message' => $text, 49 | ]; 50 | 51 | $headers = [ 52 | 'Authorization' => 'Bearer ' . $config['api_token'], 53 | 'Content-Type' => 'application/json' 54 | ]; 55 | 56 | $requestObject = new Request($this->apiEndPoint, $query, $queue, [], $queueName,$tries,$backoff); 57 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 58 | $response = $requestObject->post(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['number'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('api_token', $this->senderObject->getConfig())) { 77 | throw new ParameterException('api_token is absent in configuration'); 78 | } 79 | 80 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 81 | throw new ParameterException('sender_id key is absent in configuration'); 82 | } 83 | } 84 | 85 | } 86 | -------------------------------------------------------------------------------- /src/Provider/Grameenphone.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 36 | } 37 | 38 | /** 39 | * Send Request To Api and Send Message 40 | * @throws RenderException 41 | */ 42 | public function sendRequest() 43 | { 44 | $number = $this->senderObject->getMobile(); 45 | $text = $this->senderObject->getMessage(); 46 | $config = $this->senderObject->getConfig(); 47 | $queue = $this->senderObject->getQueue(); 48 | $queueName = $this->senderObject->getQueueName(); 49 | $tries=$this->senderObject->getTries(); 50 | $backoff=$this->senderObject->getBackoff(); 51 | 52 | $formParams = [ 53 | 'username' => $config['username'], 54 | 'password' => $config['password'], 55 | 'apicode' => 1, //1 – For Sending, 2 – Check CLI, 3 - For check credit balance, 4 – For Delivery report status, 5 - for SMS submit with delivery request, 6 - for SMS submit without delivery 56 | 'msisdn' => $number, 57 | 'countrycode' => "880", //880 for Bangladesh 58 | 'cli' => 2222, //2222 cli code 59 | 'messagetype' => $config['messagetype'], //1 – for Text, 3 – for Unicode(Bangla), 2 – for Flash 60 | 'messageid' => 0, 61 | 'message' => $text, 62 | ]; 63 | 64 | $requestObject = new Request($this->apiEndpoint, $formParams, $queue, [], $queueName,$tries,$backoff); 65 | $requestObject->setContentTypeJson(true); 66 | $response = $requestObject->post(); 67 | if ($queue) { 68 | return true; 69 | } 70 | 71 | $body = $response->getBody(); 72 | $smsResult = $body->getContents(); 73 | 74 | $data['number'] = $number; 75 | $data['message'] = $text; 76 | return $this->generateReport($smsResult, $data)->getContent(); 77 | } 78 | 79 | /** 80 | * @throws ParameterException 81 | */ 82 | public function errorException() 83 | { 84 | if (!array_key_exists('username', $this->senderObject->getConfig())) { 85 | throw new ParameterException('username key is absent in configuration'); 86 | } 87 | 88 | if (!array_key_exists('password', $this->senderObject->getConfig())) { 89 | throw new ParameterException('password key is absent in configuration'); 90 | } 91 | 92 | if (!array_key_exists('messagetype', $this->senderObject->getConfig())) { 93 | throw new ParameterException('messagetype key is absent in configuration. 1 for Text, 2 for Flash, 3 for Unicode(Bangla)'); 94 | } 95 | 96 | $configMessageType = $this->senderObject->getConfig()['messagetype']; 97 | $validMessageTypes = [1,2,3]; 98 | 99 | if (!in_array($configMessageType, $validMessageTypes)) { 100 | throw new ParameterException('Invalid messagetype. Set value 1 for Text, 2 for Flash, 3 for Unicode(Bangla)'); 101 | } 102 | 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/Provider/GreenWeb.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'token' => $config['token'], 46 | 'to' => $number, 47 | 'message' => $text, 48 | ]; 49 | 50 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 51 | $response = $requestObject->get(); 52 | if ($queue) { 53 | return true; 54 | } 55 | 56 | $body = $response->getBody(); 57 | $smsResult = $body->getContents(); 58 | 59 | $data['number'] = $number; 60 | $data['message'] = $text; 61 | return $this->generateReport($smsResult, $data)->getContent(); 62 | } 63 | 64 | /** 65 | * @throws ParameterException 66 | */ 67 | public function errorException() 68 | { 69 | if (!array_key_exists('token', $this->senderObject->getConfig())) { 70 | throw new ParameterException('token key is absent in configuration'); 71 | } 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /src/Provider/Infobip.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 21 | } 22 | 23 | /** 24 | * @param $config 25 | * @return string[] 26 | * @version v1.0.32 27 | * @since v1.0.31 28 | */ 29 | private function getHeaders($config): array 30 | { 31 | return [ 32 | 'accept' => "application/json", 33 | 'authorization' => 'Basic ' . base64_encode($config['user'] . ':' . $config['password']), 34 | 'content-type' => 'application/json' 35 | ]; 36 | } 37 | 38 | /** 39 | * @return false|string 40 | * @throws RenderException 41 | * @version v1.0.32 42 | * @since v1.0.31 43 | */ 44 | public function sendRequest() 45 | { 46 | $mobile = $this->senderObject->getMobile(); 47 | $text = $this->senderObject->getMessage(); 48 | $config = $this->senderObject->getConfig(); 49 | $queue = $this->senderObject->getQueue(); 50 | $queueName = $this->senderObject->getQueueName(); 51 | $tries=$this->senderObject->getTries(); 52 | $backoff=$this->senderObject->getBackoff(); 53 | 54 | $url = $config['base_url'] . "/sms/2/text/single"; 55 | $headers = $this->getHeaders($config); 56 | $query = [ 57 | 'from' => $config['from'], 58 | 'to' => "+88" . $mobile, 59 | 'text' => $text 60 | ]; 61 | 62 | $requestObject = new Request($url, $query, $queue, [], $queueName,$tries,$backoff); 63 | $requestObject->setHeaders($headers) 64 | ->setContentTypeJson(true); 65 | $response = $requestObject->post(); 66 | if ($queue) { 67 | return true; 68 | } 69 | 70 | $body = $response->getBody(); 71 | $smsResult = $body->getContents(); 72 | 73 | $data['number'] = $mobile; 74 | $data['message'] = $text; 75 | return $this->generateReport($smsResult, $data)->getContent(); 76 | } 77 | 78 | /** 79 | * @throws RenderException 80 | * @version v1.0.32 81 | * @since v1.0.31 82 | */ 83 | public function errorException() 84 | { 85 | $config = $this->senderObject->getConfig(); 86 | 87 | if (!array_key_exists('base_url', $config)) { 88 | throw new RenderException('base_url key is absent in configuration'); 89 | } 90 | 91 | if (!array_key_exists('from', $config)) { 92 | throw new RenderException('from key is absent in configuration'); 93 | } 94 | 95 | if (!array_key_exists('user', $config)) { 96 | throw new RenderException('user key is absent in configuration'); 97 | } 98 | 99 | if (!array_key_exists('password', $config)) { 100 | throw new RenderException('password key is absent in configuration'); 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /src/Provider/Lpeek.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @throws RenderException 36 | */ 37 | public function sendRequest() 38 | { 39 | $number = Helper::ensureNumberStartsWith88($this->senderObject->getMobile()); 40 | 41 | $text = $this->senderObject->getMessage(); 42 | $config = $this->senderObject->getConfig(); 43 | $queue = $this->senderObject->getQueue(); 44 | $queueName = $this->senderObject->getQueueName(); 45 | $tries=$this->senderObject->getTries(); 46 | $backoff=$this->senderObject->getBackoff(); 47 | 48 | $data = [ 49 | 'auth' => [ 50 | 'acode' => $config['acode'], 51 | 'apiKey' => $config['apiKey'], 52 | ], 53 | 'smsInfo' => [ 54 | 'requestID' => $config['requestID'], 55 | 'message' => $text, 56 | 'is_unicode' => $config['is_unicode'] ?? 0, 57 | 'masking' => $config['masking'], 58 | 'msisdn' => $number, 59 | 'transactionType' => $config['transactionType'] ?? 'T', 60 | ], 61 | ]; 62 | 63 | $requestObject = new Request($this->apiEndpoint, $data, $queue, [], $queueName,$tries,$backoff); 64 | $requestObject->setContentTypeJson(true); 65 | $response = $requestObject->post(); 66 | if ($queue) { 67 | return true; 68 | } 69 | 70 | $body = $response->getBody(); 71 | $smsResult = $body->getContents(); 72 | 73 | $data['number'] = $number; 74 | $data['message'] = $text; 75 | return $this->generateReport($smsResult, $data)->getContent(); 76 | } 77 | 78 | /** 79 | * @throws ParameterException 80 | */ 81 | public function errorException() 82 | { 83 | if (!array_key_exists('acode', $this->senderObject->getConfig())) { 84 | throw new ParameterException('acode is absent in configuration'); 85 | } 86 | 87 | if (!array_key_exists('apiKey', $this->senderObject->getConfig())) { 88 | throw new ParameterException('apiKey key is absent in configuration'); 89 | } 90 | if (!array_key_exists('requestID', $this->senderObject->getConfig())) { 91 | throw new ParameterException('requestID key is absent in configuration'); 92 | } 93 | if (!array_key_exists('masking', $this->senderObject->getConfig())) { 94 | throw new ParameterException('masking key is absent in configuration'); 95 | } 96 | } 97 | 98 | } 99 | -------------------------------------------------------------------------------- /src/Provider/MDL.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $text = $this->senderObject->getMessage(); 37 | $number = $this->senderObject->getMobile(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'api_key' => $config['api_key'], 46 | 'type' => $config['type'], 47 | 'senderid' => $config['senderid'], 48 | 'contacts' => $number, 49 | 'msg' => $text, 50 | ]; 51 | 52 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 53 | $response = $requestObject->get(); 54 | if ($queue) { 55 | return true; 56 | } 57 | 58 | $body = $response->getBody(); 59 | $smsResult = $body->getContents(); 60 | 61 | $data['number'] = $number; 62 | $data['message'] = $text; 63 | return $this->generateReport($smsResult, $data)->getContent(); 64 | } 65 | 66 | /** 67 | * @throws RenderException 68 | */ 69 | public function errorException() 70 | { 71 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 72 | throw new RenderException('api_key is absent in configuration'); 73 | } 74 | if (!array_key_exists('type', $this->senderObject->getConfig())) { 75 | throw new RenderException('type key is absent in configuration'); 76 | } 77 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 78 | throw new RenderException('senderid key is absent in configuration'); 79 | } 80 | 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/Provider/Metronet.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @return bool|string 36 | * @throws GuzzleException 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $number = $this->senderObject->getMobile(); 42 | $text = $this->senderObject->getMessage(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries=$this->senderObject->getTries(); 47 | $backoff=$this->senderObject->getBackoff(); 48 | 49 | $query = [ 50 | 'api_key' => $config['api_key'], 51 | 'mask' => $config['mask'], 52 | 'recipient' => $number, 53 | 'message' => $text, 54 | ]; 55 | 56 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 57 | $response = $requestObject->get(); 58 | if ($queue) { 59 | return true; 60 | } 61 | 62 | $body = $response->getBody(); 63 | $smsResult = $body->getContents(); 64 | 65 | $data['number'] = $number; 66 | $data['message'] = $text; 67 | return $this->generateReport($smsResult, $data)->getContent(); 68 | } 69 | 70 | /** 71 | * @throws ParameterException 72 | */ 73 | public function errorException() 74 | { 75 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 76 | throw new ParameterException('api_key is absent in configuration'); 77 | } 78 | if (!array_key_exists('mask', $this->senderObject->getConfig())) { 79 | throw new ParameterException('mask key is absent in configuration'); 80 | } 81 | } 82 | } 83 | -------------------------------------------------------------------------------- /src/Provider/MimSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 39 | } 40 | 41 | /** 42 | * Send Request To Api and Send Message 43 | * @return bool|string 44 | * @throws GuzzleException 45 | * @throws RenderException 46 | * @version v1.0.20 47 | * @since v1.0.20 48 | */ 49 | public function sendRequest() 50 | { 51 | $config = $this->senderObject->getConfig(); 52 | 53 | $queue = $this->senderObject->getQueue(); 54 | $queueName = $this->senderObject->getQueueName(); 55 | $tries = $this->senderObject->getTries(); 56 | $backoff = $this->senderObject->getBackoff(); 57 | $text = $this->senderObject->getMessage(); 58 | $number = $this->senderObject->getMobile(); 59 | 60 | $queryArray = [ 61 | 'ApiKey' => $config['ApiKey'], 62 | 'SenderName' => $config['SenderName'], 63 | 'UserName' => $config['UserName'], 64 | 'TransactionType' => $config['TransactionType'] ?? 'T', 65 | 'CampaignId' => $config['CampaignId'] ?? 'null', 66 | 'CampaignName' => $config['CampaignName'] ?? "", 67 | 'MobileNumber' => $number, 68 | 'Message' => $text, 69 | ]; 70 | 71 | $requestObject = new Request($this->apiEndpoint, $queryArray, $queue, [], $queueName, $tries, $backoff); 72 | $requestObject->setContentTypeJson(true); 73 | 74 | $response = $requestObject->post(); 75 | if ($queue) { 76 | return true; 77 | } 78 | 79 | $body = $response->getBody(); 80 | $smsResult = $body->getContents(); 81 | 82 | $data['number'] = $number; 83 | $data['message'] = $text; 84 | return $this->generateReport($smsResult, $data)->getContent(); 85 | } 86 | 87 | /** 88 | * @throws ParameterException 89 | * @version v1.0.20 90 | * @since v1.0.20 91 | */ 92 | public function errorException() 93 | { 94 | 95 | if (!array_key_exists('ApiKey', $this->senderObject->getConfig())) { 96 | throw new ParameterException('ApiKey is absent in configuration'); 97 | } 98 | if (!array_key_exists('SenderName', $this->senderObject->getConfig())) { 99 | throw new ParameterException('SenderName key is absent in configuration'); 100 | } 101 | if (!array_key_exists('UserName', $this->senderObject->getConfig())) { 102 | throw new ParameterException('UserName key is absent in configuration'); 103 | } 104 | 105 | } 106 | 107 | } 108 | -------------------------------------------------------------------------------- /src/Provider/Mobireach.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @return bool|string 36 | * @throws GuzzleException 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $number = $this->senderObject->getMobile(); 42 | $text = $this->senderObject->getMessage(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries = $this->senderObject->getTries(); 47 | $backoff = $this->senderObject->getBackoff(); 48 | 49 | $query = [ 50 | 'Username' => $config['Username'], 51 | 'Password' => $config['Password'], 52 | 'From' => $config['From'], 53 | 'To' => $number, 54 | 'Message' => $text, 55 | ]; 56 | 57 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 58 | $response = $requestObject->get(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['number'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('Username', $this->senderObject->getConfig())) { 77 | throw new ParameterException('Username is absent in configuration'); 78 | } 79 | 80 | if (!array_key_exists('Password', $this->senderObject->getConfig())) { 81 | throw new ParameterException('Password is absent in configuration'); 82 | } 83 | 84 | if (!array_key_exists('From', $this->senderObject->getConfig())) { 85 | throw new ParameterException('From is absent in configuration'); 86 | } 87 | 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/Provider/Mobishasra.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @throws GuzzleException|RenderException 36 | */ 37 | public function sendRequest() 38 | { 39 | $number = $this->senderObject->getMobile(); 40 | $text = $this->senderObject->getMessage(); 41 | $config = $this->senderObject->getConfig(); 42 | $queue = $this->senderObject->getQueue(); 43 | $queueName = $this->senderObject->getQueueName(); 44 | $tries = $this->senderObject->getTries(); 45 | $backoff = $this->senderObject->getBackoff(); 46 | $query = [ 47 | 'user' => $config['user'], 48 | 'pwd' => $config['pwd'], 49 | 'senderid' => $config['senderid'], 50 | 'mobileno' => '88' . $number, 51 | 'msgtext' => $text, 52 | 'priority' => 'High', 53 | 'CountryCode' => 'ALL', 54 | ]; 55 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 56 | 57 | $response = $requestObject->get(); 58 | if ($queue) { 59 | return true; 60 | } 61 | $body = $response->getBody(); 62 | $smsResult = $body->getContents(); 63 | 64 | $data['number'] = $number; 65 | $data['message'] = $text; 66 | return $this->generateReport($smsResult, $data)->getContent(); 67 | } 68 | 69 | /** 70 | * @return void 71 | * @throws ParameterException 72 | */ 73 | public function errorException() 74 | { 75 | if (!array_key_exists('user', $this->senderObject->getConfig())) { 76 | throw new ParameterException('user key is absent in configuration'); 77 | } 78 | if (!array_key_exists('pwd', $this->senderObject->getConfig())) { 79 | throw new ParameterException('pwd key is absent in configuration'); 80 | } 81 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 82 | throw new ParameterException('senderid key is absent in configuration'); 83 | } 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/Provider/Muthofun.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @throws RenderException 34 | */ 35 | public function sendRequest() 36 | { 37 | $mobile = $this->senderObject->getMobile(); 38 | $text = $this->senderObject->getMessage(); 39 | $config = $this->senderObject->getConfig(); 40 | $queue = $this->senderObject->getQueue(); 41 | $queueName = $this->senderObject->getQueueName(); 42 | $tries = $this->senderObject->getTries(); 43 | $backoff = $this->senderObject->getBackoff(); 44 | 45 | $query = [ 46 | 'sender_id' => $config['sender_id'], 47 | 'remove_duplicate' => true, 48 | 'receiver' => $mobile, 49 | 'message' => $text, 50 | ]; 51 | 52 | if (is_array($mobile)) { 53 | $query['receiver'] = implode(',', $mobile); 54 | } 55 | 56 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 57 | 58 | if (!str_starts_with($config['api_key'], "Token ")) { 59 | $config['api_key'] = "Token " . $config['api_key']; 60 | } 61 | $requestObject->setHeaders(['Authorization' => $config['api_key']])->setContentTypeJson(true); 62 | 63 | $response = $requestObject->post(); 64 | if ($queue) { 65 | return true; 66 | } 67 | $body = $response->getBody(); 68 | $smsResult = $body->getContents(); 69 | $data['number'] = $mobile; 70 | $data['message'] = $text; 71 | return $this->generateReport($smsResult, $data)->getContent(); 72 | } 73 | 74 | /** 75 | * @throws RenderException 76 | */ 77 | public function errorException(): void 78 | { 79 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 80 | throw new RenderException('sender_id key is absent in configuration'); 81 | } 82 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 83 | throw new RenderException('api_key key is absent in configuration'); 84 | } 85 | 86 | } 87 | } 88 | -------------------------------------------------------------------------------- /src/Provider/NovocomBd.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @return bool|string 36 | * @throws GuzzleException 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $text = $this->senderObject->getMessage(); 42 | $number = $this->senderObject->getMobile(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries=$this->senderObject->getTries(); 47 | $backoff=$this->senderObject->getBackoff(); 48 | 49 | $query = [ 50 | 'ApiKey' => $config['ApiKey'], 51 | 'ClientId' => $config['ClientId'], 52 | 'SenderId' => $config['SenderId'], 53 | 'MobileNumbers' => $number, 54 | 'Message' => $text, 55 | 'Is_Unicode' => true, 56 | ]; 57 | 58 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 59 | $response = $requestObject->get(); 60 | if ($queue) { 61 | return true; 62 | } 63 | 64 | $body = $response->getBody(); 65 | $smsResult = $body->getContents(); 66 | 67 | $data['number'] = $number; 68 | $data['message'] = $text; 69 | return $this->generateReport($smsResult, $data)->getContent(); 70 | } 71 | 72 | /** 73 | * @throws ParameterException 74 | */ 75 | public function errorException() 76 | { 77 | if (!array_key_exists('ApiKey', $this->senderObject->getConfig())) { 78 | throw new ParameterException('ApiKey is absent in configuration'); 79 | } 80 | if (!array_key_exists('ClientId', $this->senderObject->getConfig())) { 81 | throw new ParameterException('ClientId key is absent in configuration'); 82 | } 83 | if (!array_key_exists('SenderId', $this->senderObject->getConfig())) { 84 | throw new ParameterException('SenderId key is absent in configuration'); 85 | } 86 | } 87 | 88 | } 89 | -------------------------------------------------------------------------------- /src/Provider/Onnorokom.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 34 | } 35 | 36 | /** 37 | * Send Request To Server 38 | * @throws RenderException|\SoapFault 39 | */ 40 | public function sendRequest() 41 | { 42 | $data = [ 43 | 'number' => $this->senderObject->getMobile(), 44 | 'message' => $this->senderObject->getMessage() 45 | ]; 46 | 47 | if (!extension_loaded('soap')) { //check if soap extension is enabled for onnorokom provider 48 | throw new RenderException("Soap extension is not enabled in your server. Please install/enable it before using onnorokom sms client"); 49 | } 50 | 51 | $soapClient = new SoapClient($this->apiEndpoint); 52 | $config = $this->senderObject->getConfig(); 53 | $mobile = $this->senderObject->getMobile(); 54 | $message = $this->senderObject->getMessage(); 55 | $paramArray = array( 56 | 'userName' => $config['userName'], 57 | 'userPassword' => $config['userPassword'], 58 | 'type' => $config['type'], 59 | 'maskName' => $config['maskName'], 60 | 'campaignName' => $config['campaignName'], 61 | 'mobileNumber' => $mobile, 62 | 'smsText' => $message, 63 | ); 64 | $smsResult = $soapClient->__call("OneToOne", array($paramArray)); 65 | 66 | return $this->generateReport($smsResult, $data); 67 | } 68 | 69 | /** 70 | * @throws RenderException 71 | */ 72 | public function errorException() 73 | { 74 | if (!extension_loaded('soap')) { 75 | throw new RenderException('Soap client is not installed or loaded'); 76 | } 77 | 78 | if (!array_key_exists('userName', $this->senderObject->getConfig())) { 79 | throw new RenderException('userName key is absent in configuration'); 80 | } 81 | 82 | if (!array_key_exists('userPassword', $this->senderObject->getConfig())) { 83 | throw new RenderException('userPassword key is absent in configuration'); 84 | } 85 | 86 | if (!array_key_exists('type', $this->senderObject->getConfig())) { 87 | throw new RenderException('type key is absent in configuration'); 88 | } 89 | 90 | if (!array_key_exists('maskName', $this->senderObject->getConfig())) { 91 | throw new RenderException('maskName key is absent in configuration'); 92 | } 93 | 94 | if (!array_key_exists('campaignName', $this->senderObject->getConfig())) { 95 | throw new RenderException('campaignName key is absent in configuration'); 96 | } 97 | 98 | } 99 | 100 | } 101 | -------------------------------------------------------------------------------- /src/Provider/ProviderRoadmap.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @throws RenderException 34 | */ 35 | public function sendRequest() 36 | { 37 | $mobile = $this->senderObject->getMobile(); 38 | $text = $this->senderObject->getMessage(); 39 | $config = $this->senderObject->getConfig(); 40 | $queue = $this->senderObject->getQueue(); 41 | $queueName = $this->senderObject->getQueueName(); 42 | $tries=$this->senderObject->getTries(); 43 | $backoff=$this->senderObject->getBackoff(); 44 | 45 | $query = [ 46 | 'api_key' => $config['api_key'], 47 | 'senderid' => $config['senderid'], 48 | 'contacts' => $mobile, 49 | 'msg' => $text, 50 | ]; 51 | 52 | if (array_key_exists('type', $config)) { 53 | $query ['type'] = $config['type']; 54 | } 55 | 56 | if (array_key_exists('scheduledDateTime', $config)) { 57 | $query ['scheduledDateTime'] = $config['scheduledDateTime']; 58 | } 59 | 60 | if (is_array($mobile)) { 61 | $query['contacts'] = implode(',', $mobile); 62 | } 63 | 64 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 65 | $requestObject->setContentTypeJson(true); 66 | 67 | $response = $requestObject->post(); 68 | if ($queue) { 69 | return true; 70 | } 71 | $body = $response->getBody(); 72 | $smsResult = $body->getContents(); 73 | $data['number'] = $mobile; 74 | $data['message'] = $text; 75 | return $this->generateReport($smsResult, $data)->getContent(); 76 | } 77 | 78 | /** 79 | * @throws RenderException 80 | */ 81 | public function errorException(): void 82 | { 83 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 84 | throw new RenderException('api_key key is absent in configuration'); 85 | } 86 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 87 | throw new RenderException('senderid key is absent in configuration'); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/Provider/RedmoItSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'sender_id' => $config['sender_id'], 48 | 'recipient' => $number, 49 | 'message' => $text, 50 | ]; 51 | 52 | $headers = [ 53 | 'Authorization' => 'Bearer ' . $config['api_token'], 54 | 'Content-Type' => 'application/json' 55 | ]; 56 | 57 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 58 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 59 | $response = $requestObject->post(); 60 | if ($queue) { 61 | return true; 62 | } 63 | 64 | $body = $response->getBody(); 65 | $smsResult = $body->getContents(); 66 | 67 | $data['number'] = $number; 68 | $data['message'] = $text; 69 | return $this->generateReport($smsResult, $data)->getContent(); 70 | } 71 | 72 | /** 73 | * @throws ParameterException 74 | */ 75 | public function errorException() 76 | { 77 | if (!array_key_exists('api_token', $this->senderObject->getConfig())) { 78 | throw new ParameterException('api_token is absent in configuration'); 79 | } 80 | 81 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 82 | throw new ParameterException('sender_id key is absent in configuration'); 83 | } 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/Provider/Robi.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 31 | } 32 | 33 | /** 34 | * Send Request To Api and Send Message 35 | * @throws RenderException 36 | */ 37 | public function sendRequest() 38 | { 39 | $number = $this->senderObject->getMobile(); 40 | $text = $this->senderObject->getMessage(); 41 | $config = $this->senderObject->getConfig(); 42 | $queue = $this->senderObject->getQueue(); 43 | $queueName = $this->senderObject->getQueueName(); 44 | $tries = $this->senderObject->getTries(); 45 | $backoff = $this->senderObject->getBackoff(); 46 | 47 | 48 | $formParams = [ 49 | 'username' => $config['username'], 50 | 'password' => $config['password'], 51 | 'To' => $number, 52 | 'Message' => $text, 53 | ]; 54 | 55 | $requestObject = new Request($this->apiEndpoint, [], $queue, [], $queueName, $tries, $backoff); 56 | $requestObject->setFormParams($formParams); 57 | $response = $requestObject->post(); 58 | if ($queue) { 59 | return true; 60 | } 61 | 62 | $body = $response->getBody(); 63 | $smsResult = $body->getContents(); 64 | 65 | $data['number'] = $number; 66 | $data['message'] = $text; 67 | return $this->generateReport($smsResult, $data)->getContent(); 68 | } 69 | 70 | /** 71 | * @throws ParameterException 72 | */ 73 | public function errorException() 74 | { 75 | if (!array_key_exists('username', $this->senderObject->getConfig())) { 76 | throw new ParameterException('username key is absent in configuration'); 77 | } 78 | if (!array_key_exists('password', $this->senderObject->getConfig())) { 79 | throw new ParameterException('password key is absent in configuration'); 80 | } 81 | if (!array_key_exists('telcom_from', $this->senderObject->getConfig())) { 82 | throw new ParameterException('telcom_from key is absent in configuration'); 83 | } 84 | 85 | } 86 | } 87 | -------------------------------------------------------------------------------- /src/Provider/SMSNoc.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 22 | } 23 | 24 | /** 25 | * @param $config 26 | * @return string[] 27 | * @version v1.0.32 28 | * @since v1.0.31 29 | */ 30 | private function getHeaders($config): array 31 | { 32 | return [ 33 | 'Authorization' => 'Bearer ' . $config['bearer_token'], 34 | 'Content-Type' => 'application/json', 35 | ]; 36 | } 37 | 38 | /** 39 | * @return false|string 40 | * @throws RenderException 41 | * @version v1.0.32 42 | * @since v1.0.31 43 | */ 44 | public function sendRequest() 45 | { 46 | $config = $this->senderObject->getConfig(); 47 | $queue = $this->senderObject->getQueue(); 48 | $queueName = $this->senderObject->getQueueName(); 49 | $tries=$this->senderObject->getTries(); 50 | $backoff=$this->senderObject->getBackoff(); 51 | $text = $this->senderObject->getMessage(); 52 | $number = $this->senderObject->getMobile(); 53 | 54 | $query = [ 55 | 'recipient' => '+88'.$number, 56 | 'message' => $text, 57 | 'type' => "plain", 58 | 'sender_id' => $config['sender_id'], 59 | ]; 60 | 61 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 62 | $requestObject->setHeaders($this->getHeaders($config))->setContentTypeJson(true); 63 | 64 | $response = $requestObject->post(); 65 | if ($queue) { 66 | return true; 67 | } 68 | 69 | $body = $response->getBody(); 70 | $smsResult = $body->getContents(); 71 | 72 | $data['number'] = $number; 73 | $data['message'] = $text; 74 | return $this->generateReport($smsResult, $data)->getContent(); 75 | } 76 | 77 | /** 78 | * @throws RenderException 79 | * @version v1.0.32 80 | * @since v1.0.31 81 | */ 82 | public function errorException() 83 | { 84 | $config = $this->senderObject->getConfig(); 85 | 86 | if (!array_key_exists('sender_id', $config)) { 87 | throw new RenderException('sender_id key is absent in configuration'); 88 | } 89 | if (!array_key_exists('bearer_token', $config)) { 90 | throw new RenderException('bearer_token key is absent in configuration'); 91 | } 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /src/Provider/SendMySms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 33 | } 34 | 35 | /** 36 | * Send Request To Api and Send Message 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $number = $this->senderObject->getMobile(); 42 | $text = $this->senderObject->getMessage(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries = $this->senderObject->getTries(); 47 | $backoff = $this->senderObject->getBackoff(); 48 | 49 | $query = [ 50 | 'user' => $config['user'], 51 | 'key' => $config['key'], 52 | 'to' => $number, 53 | 'msg' => $text, 54 | ]; 55 | 56 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 57 | $requestObject->setFormParams($query); 58 | $response = $requestObject->post(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['number'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('user', $this->senderObject->getConfig())) { 77 | throw new ParameterException('user key is absent in configuration'); 78 | } 79 | if (!array_key_exists('key', $this->senderObject->getConfig())) { 80 | throw new ParameterException('key is absent in configuration'); 81 | } 82 | 83 | } 84 | } 85 | -------------------------------------------------------------------------------- /src/Provider/SmartLabSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 32 | } 33 | 34 | /** 35 | * Send Request To Api and Send Message 36 | * @throws GuzzleException|RenderException 37 | */ 38 | public function sendRequest() 39 | { 40 | $mobile = $this->senderObject->getMobile(); 41 | $text = $this->senderObject->getMessage(); 42 | $config = $this->senderObject->getConfig(); 43 | $queue = $this->senderObject->getQueue(); 44 | $queueName = $this->senderObject->getQueueName(); 45 | $tries = $this->senderObject->getTries(); 46 | $backoff = $this->senderObject->getBackoff(); 47 | 48 | $query = [ 49 | 'user' => $config['user'], 50 | 'password' => $config['password'], 51 | 'sender' => $config['sender'], 52 | 'smstext' => $text, 53 | ]; 54 | 55 | if (!is_array($mobile)) { 56 | $this->apiEndpoint .= '/smsapi'; 57 | $query['msisdn'] = Helper::ensureNumberStartsWith88($mobile); 58 | } else { 59 | $this->apiEndpoint .= '/smsapiv2'; 60 | foreach ($mobile as $element) { 61 | $tempMobile[] = Helper::ensureNumberStartsWith88($element); 62 | } 63 | $query['msisdn'] = implode(',', $tempMobile); 64 | } 65 | 66 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 67 | $response = $requestObject->get(); 68 | if ($queue) { 69 | return true; 70 | } 71 | 72 | $body = $response->getBody(); 73 | $smsResult = $body->getContents(); 74 | 75 | $data['number'] = $mobile; 76 | $data['message'] = $text; 77 | return $this->generateReport($smsResult, $data)->getContent(); 78 | } 79 | 80 | /** 81 | * @throws ParameterException 82 | */ 83 | public function errorException() 84 | { 85 | if (!array_key_exists('user', $this->senderObject->getConfig())) { 86 | throw new ParameterException('user key is absent in configuration'); 87 | } 88 | if (!array_key_exists('password', $this->senderObject->getConfig())) { 89 | throw new ParameterException('password key is absent in configuration'); 90 | } 91 | 92 | if (!array_key_exists('sender', $this->senderObject->getConfig())) { 93 | throw new ParameterException('sender key is absent in configuration'); 94 | } 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Provider/Sms4BD.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | */ 34 | public function sendRequest() 35 | { 36 | $number = $this->senderObject->getMobile(); 37 | $text = $this->senderObject->getMessage(); 38 | $config = $this->senderObject->getConfig(); 39 | $queue = $this->senderObject->getQueue(); 40 | $queueName = $this->senderObject->getQueueName(); 41 | $tries=$this->senderObject->getTries(); 42 | $backoff=$this->senderObject->getBackoff(); 43 | 44 | $query = [ 45 | 'publickey' => $config['publickey'], 46 | 'privatekey' => $config['privatekey'], 47 | 'type' => $config['type'], 48 | 'sender' => $config['sender'], 49 | 'delay' => $config['delay'], 50 | 'receiver' => $number, 51 | 'message' => $text, 52 | ]; 53 | 54 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 55 | $response = $requestObject->get(); 56 | if ($queue) { 57 | return true; 58 | } 59 | $body = $response->getBody(); 60 | $smsResult = $body->getContents(); 61 | $data['number'] = $number; 62 | $data['message'] = $text; 63 | return $this->generateReport($smsResult, $data)->getContent(); 64 | } 65 | 66 | /** 67 | * @throws RenderException 68 | */ 69 | public function errorException() 70 | { 71 | if (!array_key_exists('publickey', $this->senderObject->getConfig())) { 72 | throw new RenderException('publickey is absent in configuration'); 73 | } 74 | if (!array_key_exists('privatekey', $this->senderObject->getConfig())) { 75 | throw new RenderException('privatekey is absent in configuration'); 76 | } 77 | if (!array_key_exists('type', $this->senderObject->getConfig())) { 78 | throw new RenderException('type key is absent in configuration'); 79 | } 80 | if (!array_key_exists('sender', $this->senderObject->getConfig())) { 81 | throw new RenderException('sender key is absent in configuration'); 82 | } 83 | if (!array_key_exists('delay', $this->senderObject->getConfig())) { 84 | throw new RenderException('delay key is absent in configuration'); 85 | } 86 | 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/Provider/SmsBangladesh.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 23 | } 24 | 25 | /** 26 | * @return false|string 27 | * @throws RenderException 28 | * @version v1.0.32 29 | * @since v1.0.31 30 | */ 31 | public function sendRequest() 32 | { 33 | $mobile = $this->senderObject->getMobile(); 34 | $text = $this->senderObject->getMessage(); 35 | $config = $this->senderObject->getConfig(); 36 | $queue = $this->senderObject->getQueue(); 37 | $queueName = $this->senderObject->getQueueName(); 38 | $tries = $this->senderObject->getTries(); 39 | $backoff = $this->senderObject->getBackoff(); 40 | 41 | $formParams = [ 42 | "user" => $config['user'], 43 | "password" => $config['password'], 44 | "from" => $config['from'], 45 | "text" => urlencode($text), 46 | ]; 47 | 48 | if (!is_array($mobile)) { 49 | $formParams['to'] = Helper::ensureNumberStartsWith88($mobile); 50 | } else { 51 | foreach ($mobile as $element) { 52 | $tempMobile[] = Helper::ensureNumberStartsWith88($element); 53 | } 54 | $formParams['to'] = implode(',', $tempMobile); 55 | } 56 | 57 | $requestObject = new Request($this->apiEndpoint, [], $queue, [], $queueName, $tries, $backoff); 58 | $requestObject->setFormParams($formParams); 59 | $response = $requestObject->post(false, 60); 60 | if ($queue) { 61 | return true; 62 | } 63 | 64 | 65 | $body = $response->getBody(); 66 | $smsResult = $body->getContents(); 67 | 68 | $data['number'] = $mobile; 69 | $data['message'] = $text; 70 | return $this->generateReport($smsResult, $data)->getContent(); 71 | } 72 | 73 | /** 74 | * @throws RenderException 75 | * @version v1.0.32 76 | * @since v1.0.31 77 | */ 78 | public function errorException() 79 | { 80 | $config = $this->senderObject->getConfig(); 81 | 82 | if (!array_key_exists('user', $config)) { 83 | throw new RenderException('user key is absent in configuration'); 84 | } 85 | 86 | if (!array_key_exists('password', $config)) { 87 | throw new RenderException('password key is absent in configuration'); 88 | } 89 | 90 | if (!array_key_exists('from', $config)) { 91 | throw new RenderException('from key is absent in configuration'); 92 | } 93 | } 94 | } 95 | -------------------------------------------------------------------------------- /src/Provider/SmsNet24.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $mobile = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'user_id' => $config['user_id'], 48 | 'user_password' => $config['user_password'], 49 | 'sms_text' => $text, 50 | ]; 51 | 52 | if (is_array($mobile)) { 53 | $query['sms_receiver'] = Helper::getCommaSeperatedNumbers($mobile); 54 | $explodeMobileNumbers = explode(',', $query['sms_receiver']); 55 | foreach ($explodeMobileNumbers as $arrayData) 56 | { 57 | $newMobiles[] = Helper::checkMobileNumberPrefixExistence($arrayData); 58 | } 59 | $query['sms_receiver'] = implode(',', $newMobiles); 60 | }else{ 61 | $query['sms_receiver'] = Helper::checkMobileNumberPrefixExistence($mobile); 62 | } 63 | 64 | if (array_key_exists('route_id', $config)) { 65 | $query['route_id'] = $config['route_id']; 66 | } 67 | if (array_key_exists('sms_type_id', $config)) { 68 | $query['sms_type_id'] = $config['sms_type_id']; 69 | } 70 | 71 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 72 | $response = $requestObject->post(); 73 | if ($queue) { 74 | return true; 75 | } 76 | $body = $response->getBody(); 77 | $smsResult = $body->getContents(); 78 | $data['number'] = $mobile; 79 | $data['message'] = $text; 80 | return $this->generateReport($smsResult, $data)->getContent(); 81 | } 82 | 83 | /** 84 | * @throws RenderException 85 | */ 86 | public function errorException() 87 | { 88 | if (!array_key_exists('user_id', $this->senderObject->getConfig())) { 89 | throw new RenderException('user_id key is absent in configuration'); 90 | } 91 | 92 | if (!array_key_exists('user_password', $this->senderObject->getConfig())) { 93 | throw new RenderException('user_password key is absent in configuration'); 94 | } 95 | 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/Provider/SmsNetBD.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 36 | } 37 | 38 | /** 39 | * Send Request To Api and Send Message 40 | * @throws RenderException 41 | */ 42 | public function sendRequest() 43 | { 44 | $mobile = $this->senderObject->getMobile(); 45 | $text = $this->senderObject->getMessage(); 46 | $config = $this->senderObject->getConfig(); 47 | $queue = $this->senderObject->getQueue(); 48 | $queueName = $this->senderObject->getQueueName(); 49 | $tries=$this->senderObject->getTries(); 50 | $backoff=$this->senderObject->getBackoff(); 51 | 52 | $query = [ 53 | 'api_key' => $config['api_key'], 54 | 'msg' => $text, 55 | 'to' => $mobile, 56 | ]; 57 | 58 | /** 59 | * The schedule date and time to send your message. Date and time must be formatted as Y-m-d H:i:s(eg. 2023-10-05 01:36:03) 60 | */ 61 | if (isset($config['schedule'])) { 62 | $query['schedule'] = $config['schedule']; 63 | } 64 | 65 | /** 66 | * If you have an approved Sender ID, you can use this parameter to set your Sender ID as from in you messages. 67 | */ 68 | if (isset($config['sender_id'])) { 69 | $query['sender_id'] = $config['sender_id']; 70 | } 71 | if (is_array($mobile)) { 72 | $query['to'] = implode(',', $mobile); 73 | } 74 | 75 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 76 | 77 | $response = $requestObject->post(); 78 | if ($queue) { 79 | return true; 80 | } 81 | $body = $response->getBody(); 82 | $smsResult = $body->getContents(); 83 | $data['number'] = $mobile; 84 | $data['message'] = $text; 85 | return $this->generateReport($smsResult, $data)->getContent(); 86 | } 87 | 88 | /** 89 | * @throws RenderException 90 | */ 91 | public function errorException(): void 92 | { 93 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 94 | throw new RenderException('api_key key is absent in configuration'); 95 | } 96 | } 97 | } 98 | -------------------------------------------------------------------------------- /src/Provider/SmsQ.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'SenderId' => $config['sender_id'], 48 | 'ApiKey' => $config['api_key'], 49 | 'ClientId' => $config['client_id'], 50 | 'Message' => $text, 51 | 'MobileNumbers' => $number, 52 | ]; 53 | 54 | $headers = [ 55 | 'Content-Type' => 'application/json' 56 | ]; 57 | 58 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 59 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 60 | $response = $requestObject->post(); 61 | if ($queue) { 62 | return true; 63 | } 64 | 65 | $body = $response->getBody(); 66 | $smsResult = $body->getContents(); 67 | 68 | $data['number'] = $number; 69 | $data['message'] = $text; 70 | return $this->generateReport($smsResult, $data)->getContent(); 71 | } 72 | 73 | /** 74 | * @throws ParameterException 75 | */ 76 | public function errorException() 77 | { 78 | 79 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 80 | throw new ParameterException('sender_id key is absent in configuration'); 81 | } 82 | 83 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 84 | throw new ParameterException('api_key key is absent in configuration'); 85 | } 86 | 87 | if (!array_key_exists('client_id', $this->senderObject->getConfig())) { 88 | throw new ParameterException('client_id key is absent in configuration'); 89 | } 90 | 91 | } 92 | 93 | } 94 | -------------------------------------------------------------------------------- /src/Provider/SmsinBD.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'api_token' => $config['api_token'], 48 | 'senderid' => $config['senderid'], 49 | 'contact_number' => $number, 50 | 'message' => $text, 51 | ]; 52 | 53 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 54 | $response = $requestObject->post(); 55 | if ($queue) { 56 | return true; 57 | } 58 | 59 | $body = $response->getBody(); 60 | $smsResult = $body->getContents(); 61 | 62 | $data['number'] = $number; 63 | $data['message'] = $text; 64 | return $this->generateReport($smsResult, $data)->getContent(); 65 | } 66 | 67 | /** 68 | * @throws ParameterException 69 | */ 70 | public function errorException() 71 | { 72 | if (!array_key_exists('api_token', $this->senderObject->getConfig())) { 73 | throw new ParameterException('api_token is absent in configuration'); 74 | } 75 | 76 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 77 | throw new ParameterException('senderid key is absent in configuration'); 78 | } 79 | } 80 | 81 | } 82 | -------------------------------------------------------------------------------- /src/Provider/SongBird.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 33 | } 34 | 35 | /** 36 | * Send Request To Api and Send Message 37 | * @throws RenderException 38 | */ 39 | public function sendRequest() 40 | { 41 | $number = $this->senderObject->getMobile(); 42 | $text = $this->senderObject->getMessage(); 43 | $config = $this->senderObject->getConfig(); 44 | $queue = $this->senderObject->getQueue(); 45 | $queueName = $this->senderObject->getQueueName(); 46 | $tries = $this->senderObject->getTries(); 47 | $backoff = $this->senderObject->getBackoff(); 48 | 49 | 50 | $formParams = [ 51 | 'apikey' => $config['apikey'], 52 | 'secretkey' => $config['secretkey'], 53 | 'callerID' => $config['callerID'], 54 | 'toUser' => $number, 55 | 'messageContent' => $text, 56 | ]; 57 | 58 | $requestObject = new Request($this->apiEndpoint, $formParams, $queue, [], $queueName, $tries, $backoff); 59 | $requestObject->setContentTypeJson(true); 60 | $response = $requestObject->post(); 61 | if ($queue) { 62 | return true; 63 | } 64 | 65 | $body = $response->getBody(); 66 | $smsResult = $body->getContents(); 67 | 68 | $data['number'] = $number; 69 | $data['message'] = $text; 70 | return $this->generateReport($smsResult, $data)->getContent(); 71 | } 72 | 73 | /** 74 | * @throws ParameterException 75 | */ 76 | public function errorException() 77 | { 78 | if (!array_key_exists('apikey', $this->senderObject->getConfig())) { 79 | throw new ParameterException('apikey key is absent in configuration'); 80 | } 81 | 82 | if (!array_key_exists('secretkey', $this->senderObject->getConfig())) { 83 | throw new ParameterException('secretkey key is absent in configuration'); 84 | } 85 | 86 | if (!array_key_exists('callerID', $this->senderObject->getConfig())) { 87 | throw new ParameterException('callerID key is absent in configuration.'); 88 | } 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /src/Provider/Ssl.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @throws RenderException 34 | */ 35 | public function sendRequest() 36 | { 37 | $mobile = $this->senderObject->getMobile(); 38 | $text = $this->senderObject->getMessage(); 39 | $config = $this->senderObject->getConfig(); 40 | $queue = $this->senderObject->getQueue(); 41 | $queueName = $this->senderObject->getQueueName(); 42 | $tries = $this->senderObject->getTries(); 43 | $backoff = $this->senderObject->getBackoff(); 44 | 45 | $query = [ 46 | 'api_token' => $config['api_token'], 47 | 'sid' => $config['sid'], 48 | 'msisdn' => $mobile, 49 | 'csms_id' => $config['csms_id'], 50 | 'sms' => $text, 51 | 'batch_csms_id' => $config['batch_csms_id'] ?? null, 52 | ]; 53 | 54 | $requestObject = new Request($this->apiEndpoint . (is_array($mobile) ? '/bulk' : ''), $query, $queue, [], $queueName, $tries, $backoff); 55 | $requestObject->setHeaders([ 56 | 'Content-Type' => 'application/json', 57 | ])->setContentTypeJson(true); 58 | 59 | $response = $requestObject->post(); 60 | if ($queue) { 61 | return true; 62 | } 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | $data['number'] = $mobile; 66 | $data['message'] = $text; 67 | return $this->generateReport($smsResult, $data)->getContent(); 68 | } 69 | 70 | /** 71 | * @throws RenderException 72 | */ 73 | public function errorException() 74 | { 75 | if (!array_key_exists('api_token', $this->senderObject->getConfig())) { 76 | throw new RenderException('api_token key is absent in configuration'); 77 | } 78 | 79 | if (!array_key_exists('sid', $this->senderObject->getConfig())) { 80 | throw new RenderException('sid key is absent in configuration'); 81 | } 82 | 83 | if (!array_key_exists('csms_id', $this->senderObject->getConfig())) { 84 | throw new RenderException('csms_id key is absent in configuration'); 85 | } 86 | 87 | if (is_array($this->senderObject->getMobile()) && !array_key_exists('batch_csms_id', $this->senderObject->getConfig())) { 88 | throw new RenderException('batch_csms_id key is absent in configuration. This is required if you send array of receivers'); 89 | } 90 | 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/Provider/Tense.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 29 | } 30 | 31 | /** 32 | * Send Request To Api and Send Message 33 | * @since v1.0.25 34 | */ 35 | public function sendRequest() 36 | { 37 | $number = $this->senderObject->getMobile(); 38 | $text = $this->senderObject->getMessage(); 39 | $config = $this->senderObject->getConfig(); 40 | $queue = $this->senderObject->getQueue(); 41 | $queueName = $this->senderObject->getQueueName(); 42 | $tries=$this->senderObject->getTries(); 43 | $backoff=$this->senderObject->getBackoff(); 44 | $query = [ 45 | 'user' => $config['user'], 46 | 'password' => $config['password'], 47 | 'campaign' => $config['campaign'], 48 | 'masking' => $config['masking'], 49 | 'number' => $number, 50 | 'text' => $text, 51 | ]; 52 | 53 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 54 | $response = $requestObject->get(); 55 | if ($queue) { 56 | return true; 57 | } 58 | 59 | $body = $response->getBody(); 60 | $smsResult = $body->getContents(); 61 | 62 | $data['number'] = $number; 63 | $data['message'] = $text; 64 | return $this->generateReport($smsResult, $data)->getContent(); 65 | } 66 | 67 | /** 68 | * @throws ParameterException 69 | * @since v1.0.25 70 | */ 71 | public function errorException() 72 | { 73 | if (!array_key_exists('user', $this->senderObject->getConfig())) { 74 | throw new ParameterException('user is absent in configuration'); 75 | } 76 | if (!array_key_exists('password', $this->senderObject->getConfig())) { 77 | throw new ParameterException('password key is absent in configuration'); 78 | } 79 | if (!array_key_exists('campaign', $this->senderObject->getConfig())) { 80 | throw new ParameterException('campaign key is absent in configuration'); 81 | } 82 | if (!array_key_exists('masking', $this->senderObject->getConfig())) { 83 | throw new ParameterException('masking key is absent in configuration'); 84 | } 85 | } 86 | 87 | } 88 | -------------------------------------------------------------------------------- /src/Provider/TruboSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | $number = $this->senderObject->getMobile(); 39 | $text = $this->senderObject->getMessage(); 40 | $config = $this->senderObject->getConfig(); 41 | $queue = $this->senderObject->getQueue(); 42 | $queueName = $this->senderObject->getQueueName(); 43 | $tries=$this->senderObject->getTries(); 44 | $backoff=$this->senderObject->getBackoff(); 45 | 46 | $query = [ 47 | 'recipient' => '+88'.$number, 48 | 'sender_id' => $config['sender_id'], 49 | 'message' => $text, 50 | ]; 51 | 52 | $headers = [ 53 | 'Authorization' => 'Bearer ' . $config['api_token'], 54 | 'Content-Type' => 'application/json' 55 | ]; 56 | 57 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 58 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 59 | $response = $requestObject->post(); 60 | if ($queue) { 61 | return true; 62 | } 63 | 64 | $body = $response->getBody(); 65 | $smsResult = $body->getContents(); 66 | 67 | $data['number'] = $number; 68 | $data['message'] = $text; 69 | return $this->generateReport($smsResult, $data)->getContent(); 70 | } 71 | 72 | /** 73 | * @throws ParameterException 74 | */ 75 | public function errorException() 76 | { 77 | if (!array_key_exists('api_token', $this->senderObject->getConfig())) { 78 | throw new ParameterException('api_token is absent in configuration'); 79 | } 80 | 81 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 82 | throw new ParameterException('sender_id key is absent in configuration'); 83 | } 84 | } 85 | 86 | } 87 | -------------------------------------------------------------------------------- /src/Provider/Twenty4BulkSms.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 35 | } 36 | 37 | /** 38 | * Send Request To Api and Send Message 39 | * @throws RenderException 40 | */ 41 | public function sendRequest() 42 | { 43 | $number = $this->senderObject->getMobile(); 44 | $text = $this->senderObject->getMessage(); 45 | $config = $this->senderObject->getConfig(); 46 | $queue = $this->senderObject->getQueue(); 47 | $queueName = $this->senderObject->getQueueName(); 48 | $tries=$this->senderObject->getTries(); 49 | $backoff=$this->senderObject->getBackoff(); 50 | 51 | $query = [ 52 | 'api_key' => $config['api_key'], 53 | 'type' => 'text', 54 | 'number' => $number, 55 | 'message' => $text, 56 | 'sender_id' => $config['sender_id'], 57 | 'user_email' => $config['user_email'], 58 | 'mobile_no' => $number, 59 | 60 | ]; 61 | 62 | $headers = [ 63 | 'Content-Type' => 'application/json', 64 | ]; 65 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName,$tries,$backoff); 66 | $requestObject->setHeaders($headers)->setContentTypeJson(true); 67 | $response = $requestObject->post(); 68 | if ($queue) { 69 | return true; 70 | } 71 | 72 | $body = $response->getBody(); 73 | $smsResult = $body->getContents(); 74 | 75 | $data['number'] = $number; 76 | $data['message'] = $text; 77 | return $this->generateReport($smsResult, $data)->getContent(); 78 | } 79 | 80 | /** 81 | * @throws ParameterException 82 | */ 83 | public function errorException() 84 | { 85 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 86 | throw new ParameterException('api_key key is absent in configuration'); 87 | } 88 | if (!array_key_exists('sender_id', $this->senderObject->getConfig())) { 89 | throw new ParameterException('sender_id key is absent in configuration'); 90 | } 91 | if (!array_key_exists('user_email', $this->senderObject->getConfig())) { 92 | throw new ParameterException('user_email key is absent in configuration'); 93 | } 94 | 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /src/Provider/TwentyFourBulkSmsBD.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 34 | } 35 | 36 | /** 37 | * Send Request To Api and Send Message 38 | * @return bool|string 39 | * @throws RenderException 40 | */ 41 | public function sendRequest() 42 | { 43 | $number = $this->senderObject->getMobile(); 44 | $text = $this->senderObject->getMessage(); 45 | $config = $this->senderObject->getConfig(); 46 | $queue = $this->senderObject->getQueue(); 47 | $queueName = $this->senderObject->getQueueName(); 48 | $tries = $this->senderObject->getTries(); 49 | $backoff = $this->senderObject->getBackoff(); 50 | $query = [ 51 | 'customer_id' => $config['customer_id'], 52 | 'api_key' => $config['api_key'], 53 | 'mobile_no' => (is_array($number)) ? implode(',',$number) : $number, 54 | 'message' => $text, 55 | ]; 56 | 57 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 58 | $response = $requestObject->post(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['number'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('customer_id', $this->senderObject->getConfig())) { 77 | throw new ParameterException('customer_id key is absent in configuration'); 78 | } 79 | 80 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 81 | throw new ParameterException('api_key key is absent in configuration'); 82 | } 83 | 84 | } 85 | } 86 | -------------------------------------------------------------------------------- /src/Provider/Viatech.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 23 | } 24 | 25 | /** 26 | * @return false|string 27 | * @throws GuzzleException 28 | * @throws RenderException 29 | * @version v1.0.38 30 | * @since v1.0.38 31 | */ 32 | public function sendRequest() 33 | { 34 | $number = $this->senderObject->getMobile(); 35 | $text = $this->senderObject->getMessage(); 36 | $config = $this->senderObject->getConfig(); 37 | $queue = $this->senderObject->getQueue(); 38 | $queueName = $this->senderObject->getQueueName(); 39 | $tries = $this->senderObject->getTries(); 40 | $backoff = $this->senderObject->getBackoff(); 41 | 42 | $query = [ 43 | "api_key" => $config['api_key'], 44 | "mask" => $config['mask'], 45 | "recipient" => $number, 46 | "message" => $text, 47 | ]; 48 | 49 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 50 | $response = $requestObject->get(); 51 | if ($queue) { 52 | return true; 53 | } 54 | 55 | $body = $response->getBody(); 56 | $smsResult = $body->getContents(); 57 | 58 | $data['number'] = $number; 59 | $data['message'] = $text; 60 | return $this->generateReport($smsResult, $data)->getContent(); 61 | } 62 | 63 | /** 64 | * @throws RenderException 65 | * @version v1.0.32 66 | * @since v1.0.31 67 | */ 68 | public function errorException() 69 | { 70 | $config = $this->senderObject->getConfig(); 71 | if (!array_key_exists('api_key', $config)) { 72 | throw new RenderException('api_key key is absent in configuration'); 73 | } 74 | 75 | if (!array_key_exists('mask', $config)) { 76 | throw new RenderException('mask key is absent in configuration'); 77 | } 78 | 79 | } 80 | } 81 | -------------------------------------------------------------------------------- /src/Provider/WinText.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 23 | } 24 | 25 | /** 26 | * @return false|string 27 | * @throws RenderException 28 | * @version v1.0.32 29 | * @since v1.0.31 30 | */ 31 | public function sendRequest() 32 | { 33 | $mobile = $this->senderObject->getMobile(); 34 | $text = $this->senderObject->getMessage(); 35 | $config = $this->senderObject->getConfig(); 36 | $queue = $this->senderObject->getQueue(); 37 | $queueName = $this->senderObject->getQueueName(); 38 | $tries = $this->senderObject->getTries(); 39 | $backoff = $this->senderObject->getBackoff(); 40 | 41 | $formParams = [ 42 | "token" => $config['token'], 43 | "messagetype" => $config['messagetype'] ?? 1, 44 | "ismasking" => $config['ismasking'] ?? 'false', 45 | "masking" => $config['masking'] ?? 'null', 46 | "SMSText" => $text, 47 | ]; 48 | 49 | if (!is_array($mobile)) { 50 | $formParams['mobileno'] = Helper::ensureNumberStartsWith88($mobile); 51 | } else { 52 | /*foreach ($mobile as $element) { 53 | $tempMobile[] = Helper::ensureNumberStartsWith88($element); 54 | } 55 | $formParams['mobileno'] = implode(',', $tempMobile);*/ 56 | } 57 | 58 | //dd($this->apiEndpoint, $formParams); 59 | $requestObject = new Request($this->apiEndpoint, [], $queue, [], $queueName, $tries, $backoff); 60 | $requestObject->setFormParams($formParams); 61 | $response = $requestObject->post(false, 60); 62 | if ($queue) { 63 | return true; 64 | } 65 | 66 | 67 | $body = $response->getBody(); 68 | $smsResult = $body->getContents(); 69 | 70 | $data['number'] = $mobile; 71 | $data['message'] = $text; 72 | return $this->generateReport($smsResult, $data)->getContent(); 73 | } 74 | 75 | /** 76 | * @throws RenderException 77 | * @version v1.0.32 78 | * @since v1.0.31 79 | */ 80 | public function errorException() 81 | { 82 | $config = $this->senderObject->getConfig(); 83 | 84 | if (!array_key_exists('token', $config)) { 85 | throw new RenderException('token key is absent in configuration'); 86 | } 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /src/Provider/ZamanIt.php: -------------------------------------------------------------------------------- 1 | senderObject = $sender; 30 | } 31 | 32 | /** 33 | * Send Request To Api and Send Message 34 | * @throws RenderException 35 | */ 36 | public function sendRequest() 37 | { 38 | 39 | 40 | $number = $this->senderObject->getMobile(); 41 | $text = $this->senderObject->getMessage(); 42 | $config = $this->senderObject->getConfig(); 43 | $queue = $this->senderObject->getQueue(); 44 | $queueName = $this->senderObject->getQueueName(); 45 | $tries = $this->senderObject->getTries(); 46 | $backoff = $this->senderObject->getBackoff(); 47 | 48 | $query = [ 49 | 'api_key' => $config['api_key'], 50 | 'type' => $config['type'], 51 | 'senderid' => $config['senderid'], 52 | 'phone' => $number, 53 | 'message' => $text, 54 | ]; 55 | 56 | $requestObject = new Request($this->apiEndpoint, $query, $queue, [], $queueName, $tries, $backoff); 57 | 58 | $response = $requestObject->post(); 59 | if ($queue) { 60 | return true; 61 | } 62 | 63 | $body = $response->getBody(); 64 | $smsResult = $body->getContents(); 65 | 66 | $data['phone'] = $number; 67 | $data['message'] = $text; 68 | return $this->generateReport($smsResult, $data)->getContent(); 69 | } 70 | 71 | /** 72 | * @throws ParameterException 73 | */ 74 | public function errorException() 75 | { 76 | if (!array_key_exists('api_key', $this->senderObject->getConfig())) { 77 | throw new ParameterException('api_key is absent in configuration'); 78 | } 79 | 80 | if (!array_key_exists('type', $this->senderObject->getConfig())) { 81 | throw new ParameterException('type key is absent in configuration'); 82 | } 83 | 84 | if (!array_key_exists('senderid', $this->senderObject->getConfig())) { 85 | throw new ParameterException('senderid key is absent in configuration'); 86 | } 87 | 88 | } 89 | 90 | } 91 | -------------------------------------------------------------------------------- /src/Request.php: -------------------------------------------------------------------------------- 1 | requestUrl = $requestUrl; 52 | $this->query = $query; 53 | $this->queue = $queue; 54 | $this->headers = $headers; 55 | $this->queueName = $queueName; 56 | $this->tries = $tries; 57 | $this->backoff = $backoff; 58 | } 59 | 60 | 61 | /** 62 | * @param false $verify 63 | * @throws GuzzleException 64 | * @throws RenderException 65 | */ 66 | 67 | public function get(bool $verify = false, float $timeout = 10.0) 68 | { 69 | $client = new Client([ 70 | 'base_uri' => $this->requestUrl, 71 | 'timeout' => $timeout, 72 | ]); 73 | 74 | $requestOptions = $this->optionsGetRequest($verify, $timeout); 75 | if ($this->getQueue()) { 76 | dispatch(new SendSmsJob($requestOptions))->onQueue($this->queueName); 77 | } else { 78 | 79 | try { 80 | return $client->request('get', $this->requestUrl, $requestOptions); 81 | } catch (GuzzleException|ClientException $e) { 82 | throw new RenderException($e->getMessage()); 83 | } 84 | } 85 | 86 | } 87 | 88 | /** 89 | * @param bool $verify 90 | * @param float $timeout 91 | * @return ResponseInterface 92 | * @throws RenderException 93 | */ 94 | public function post(bool $verify = false, float $timeout = 20.0) 95 | { 96 | $client = new Client([ 97 | 'base_uri' => $this->requestUrl, 98 | 'timeout' => $timeout, 99 | ]); 100 | 101 | $requestOptions = $this->optionsPostRequest($verify, $timeout); 102 | 103 | try { 104 | if ($this->getQueue()) { 105 | dispatch(new SendSmsJob($requestOptions))->onQueue($this->queueName); 106 | } else { 107 | return $client->request('post', $this->requestUrl, $requestOptions); 108 | } 109 | 110 | } catch (GuzzleException|ClientException $e) { 111 | throw new RenderException($e->getMessage()); 112 | } 113 | } 114 | 115 | /** 116 | * @return bool 117 | */ 118 | public 119 | function getQueue(): bool 120 | { 121 | return $this->queue; 122 | } 123 | 124 | /** 125 | * @param bool $queue 126 | * @return void 127 | */ 128 | public function setQueue(bool $queue) 129 | { 130 | $this->queue = $queue; 131 | } 132 | 133 | /** 134 | * @return string 135 | */ 136 | public function getRequestUrl(): string 137 | { 138 | return $this->requestUrl; 139 | } 140 | 141 | /** 142 | * @param mixed $requestUrl 143 | */ 144 | public function setRequestUrl($requestUrl): void 145 | { 146 | $this->requestUrl = $requestUrl; 147 | } 148 | 149 | /** 150 | * @return array 151 | */ 152 | public function getQuery(): array 153 | { 154 | return $this->query; 155 | } 156 | 157 | /** 158 | * @param mixed $query 159 | */ 160 | public function setQuery($query): void 161 | { 162 | $this->query = $query; 163 | } 164 | 165 | /** 166 | * @return array 167 | */ 168 | public function getHeaders(): array 169 | { 170 | return $this->headers; 171 | } 172 | 173 | /** 174 | * @param array $headers 175 | * @return Request 176 | */ 177 | public function setHeaders(array $headers): Request 178 | { 179 | $this->headers = $headers; 180 | return $this; 181 | } 182 | 183 | /** 184 | * @return bool 185 | */ 186 | public function isContentTypeJson(): bool 187 | { 188 | return $this->contentTypeJson; 189 | } 190 | 191 | /** 192 | * @param bool $contentTypeJson 193 | * @return Request 194 | */ 195 | public function setContentTypeJson(bool $contentTypeJson): Request 196 | { 197 | $this->contentTypeJson = $contentTypeJson; 198 | return $this; 199 | } 200 | 201 | /** 202 | * @return array 203 | */ 204 | public function getFormParams(): array 205 | { 206 | return $this->form_params; 207 | } 208 | 209 | /** 210 | * @param array $form_params 211 | * @return Request 212 | */ 213 | public function setFormParams(array $form_params): Request 214 | { 215 | $this->form_params = $form_params; 216 | return $this; 217 | } 218 | 219 | /** 220 | * @param bool $verify 221 | * @param mixed $timeout 222 | * @return array 223 | */ 224 | private function optionsGetRequest(bool $verify, float $timeout): array 225 | { 226 | $options = [ 227 | 'requestUrl' => $this->requestUrl, 228 | 'query' => $this->query, 229 | 'verify' => $verify, 230 | 'timeout' => $timeout, 231 | 'method' => 'get', 232 | 'tries' => $this->tries, 233 | 'backoff' => $this->backoff 234 | ]; 235 | if (!empty($this->headers)) { 236 | $options['headers'] = $this->headers; 237 | } 238 | 239 | if ($this->isContentTypeJson()) { 240 | unset($options['query']); 241 | $options[RequestOptions::JSON] = $this->query; 242 | } 243 | return $options; 244 | } 245 | 246 | /** 247 | * @param bool $verify 248 | * @param mixed $timeout 249 | * @return array 250 | */ 251 | private function optionsPostRequest(bool $verify, float $timeout): array 252 | { 253 | $options = [ 254 | 'requestUrl' => $this->requestUrl, 255 | 'query' => $this->query, 256 | 'verify' => $verify, 257 | 'timeout' => $timeout, 258 | 'method' => 'post', 259 | 'tries' => $this->tries, 260 | 'backoff' => $this->backoff 261 | ]; 262 | if (!empty($this->headers)) { 263 | $options['headers'] = $this->headers; 264 | } 265 | 266 | if (!empty($this->form_params)) { 267 | $options['form_params'] = $this->form_params; 268 | } 269 | 270 | if ($this->isContentTypeJson()) { 271 | $options[RequestOptions::JSON] = $this->query; 272 | } 273 | return $options; 274 | } 275 | 276 | } 277 | -------------------------------------------------------------------------------- /src/SMS.php: -------------------------------------------------------------------------------- 1 | sender = $sender; 19 | } 20 | 21 | /** 22 | * @throws Handler\RenderException 23 | * @throws Exception 24 | * @version v1.0.32 25 | * @since v1.0.31 26 | */ 27 | public function via($provider): SMS 28 | { 29 | $this->sender->setProvider($provider); 30 | $this->sender->setConfig(config('sms.providers')[$provider]); 31 | return $this; 32 | } 33 | 34 | /** 35 | * @throws Handler\ParameterException 36 | * @throws Exception 37 | * @version v1.0.32 38 | * @since v1.0.31 39 | */ 40 | public function shoot(string $number, string $text) 41 | { 42 | $this->sender->setMobile($number); 43 | $this->sender->setMessage($text); 44 | return $this->sender->send(); 45 | } 46 | 47 | /** 48 | * @throws Handler\ParameterException 49 | * @throws Exception 50 | * @version v1.0.46-dev 51 | * @since v1.0.46-dev 52 | */ 53 | public function shootWithQueue(string $number, string $text, string $queueName = 'default', int $tries = 3, int $backoff = 60) 54 | { 55 | $this->sender->setMobile($number); 56 | $this->sender->setMessage($text); 57 | $this->sender->setQueue(true); 58 | $this->sender->setQueueName($queueName); 59 | 60 | if (isset($tries)) { 61 | $this->sender->setTries($tries); 62 | } 63 | if (isset($backoff)) { 64 | $this->sender->setBackoff($backoff); 65 | } 66 | return $this->sender->send(); 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /src/Sender.php: -------------------------------------------------------------------------------- 1 | method; 114 | } 115 | 116 | /** 117 | * @param mixed $method 118 | */ 119 | public function setMethod($method) 120 | { 121 | $this->method = $method; 122 | return self::$instance; 123 | } 124 | 125 | /** 126 | * @return int 127 | */ 128 | public function getTries() 129 | { 130 | return $this->tries; 131 | } 132 | 133 | /** 134 | * @param int $tries 135 | * @return $this 136 | */ 137 | public function setTries(int $tries) 138 | { 139 | $this->tries = $tries; 140 | return $this; 141 | } 142 | 143 | /** 144 | * @return int 145 | */ 146 | public function getBackoff() 147 | { 148 | return $this->backoff; 149 | } 150 | 151 | /** 152 | * @param int $backoff 153 | * @return $this 154 | */ 155 | public function setBackoff(int $backoff) 156 | { 157 | $this->backoff = $backoff; 158 | return $this; 159 | } 160 | 161 | /** 162 | * @return mixed 163 | */ 164 | public function getConfig() 165 | { 166 | return $this->config; 167 | } 168 | 169 | /** 170 | * @param mixed $config 171 | * @return Sender 172 | * @throws Exception 173 | * @since v1.0.0 174 | */ 175 | public function setConfig($config): Sender 176 | { 177 | $this->config = $config; 178 | return $this; 179 | } 180 | 181 | /** 182 | * @param bool $queue 183 | * @return Sender 184 | * @since v1.0.41.6-dev 185 | */ 186 | public function setQueue(bool $queue): Sender 187 | { 188 | $this->queue = $queue; 189 | return $this; 190 | } 191 | 192 | /** 193 | * @param string $queueName 194 | * @return $this 195 | */ 196 | public function setQueueName(string $queueName): Sender 197 | { 198 | $this->queueName = $queueName; 199 | return $this; 200 | } 201 | 202 | /** 203 | * @return bool 204 | * @since v1.0.41.6-dev 205 | */ 206 | public function getQueue() 207 | { 208 | return $this->queue; 209 | 210 | } 211 | 212 | /** 213 | * @param array $headers 214 | * @param bool $contentTypeJson 215 | * @return Sender 216 | * @throws RenderException 217 | * @since v1.0.55.0-beta 218 | */ 219 | public function setHeaders(array $headers, bool $contentTypeJson = true): Sender 220 | { 221 | $this->headers = $headers; 222 | $this->contentTypeJson = $contentTypeJson; 223 | return self::getInstance(); 224 | } 225 | 226 | /** 227 | * Send Message Finally 228 | * @throws ParameterException 229 | * @since v1.0.5 230 | */ 231 | public function send() 232 | { 233 | 234 | if (!is_array($this->getConfig())) { 235 | throw new ParameterException('config must be an array'); 236 | } 237 | 238 | if (!$this->provider instanceof CustomGateway) { //empty check for all providers mobile and message 239 | if (empty($this->getMobile())) { 240 | throw new ParameterException('Mobile number should not be empty'); 241 | } 242 | 243 | if (empty($this->getMessage())) { 244 | throw new ParameterException('Message text should not be empty'); 245 | } 246 | } 247 | 248 | $this->provider->errorException(); 249 | 250 | $config = Config::get('sms'); 251 | 252 | $response = $this->provider->sendRequest(); 253 | if (!$this->getQueue()) { 254 | $this->logGenerate($config, $response); 255 | } 256 | 257 | return $response; 258 | } 259 | 260 | /** 261 | * @return mixed 262 | * @since v1.0.0 263 | */ 264 | public function getMobile() 265 | { 266 | return $this->mobile; 267 | } 268 | 269 | /** 270 | * @param mixed $mobile 271 | * @return Sender 272 | * @throws RenderException 273 | * @since v1.0.0 274 | */ 275 | public function setMobile($mobile): Sender 276 | { 277 | $this->mobile = $mobile; 278 | return self::getInstance(); 279 | } 280 | 281 | /** 282 | * @return mixed 283 | * @since v1.0.0 284 | */ 285 | public function getMessage() 286 | { 287 | return $this->message; 288 | } 289 | 290 | /** 291 | * @param mixed $message 292 | * @return Sender 293 | * @throws RenderException 294 | * @since v1.0.0 295 | */ 296 | public function setMessage($message = ''): Sender 297 | { 298 | 299 | $this->message = $message; 300 | return self::getInstance(); 301 | } 302 | 303 | /** 304 | * @param string $url 305 | * @return $this 306 | * @throws RenderException 307 | */ 308 | public function setUrl(string $url) 309 | { 310 | $this->url = $url; 311 | return self::getInstance(); 312 | } 313 | 314 | /** 315 | * @return mixed 316 | * @since v1.0.0 317 | */ 318 | public function getProvider() 319 | { 320 | return $this->provider; 321 | } 322 | 323 | /** 324 | * Return this class object 325 | * @param $providerClass 326 | * @return Sender 327 | * @throws RenderException 328 | * @since v1.0.0 329 | */ 330 | public function setProvider($providerClass): Sender 331 | { 332 | try { 333 | 334 | $providerClass = Helper::ensurePrefix($providerClass); 335 | 336 | if (!class_exists($providerClass)) { 337 | throw new RenderException("Sms Gateway Provider '$providerClass' not found. "); 338 | } 339 | 340 | if (!is_subclass_of($providerClass, AbstractProvider::class)) { 341 | throw new RenderException("Provider '$providerClass' is not a " . AbstractProvider::class); 342 | } 343 | } catch (RenderException $exception) { 344 | 345 | throw new RenderException($exception->getMessage()); 346 | } 347 | 348 | $this->provider = new $providerClass($this); 349 | return $this; 350 | } 351 | 352 | /** 353 | * @param $config 354 | * @param $response 355 | * @return void 356 | * @throws JsonException 357 | * @throws RenderException 358 | */ 359 | private function logGenerate($config, $response): void 360 | { 361 | 362 | if ($config['sms_log']) { 363 | 364 | if (is_object($response)) { 365 | $object = json_decode($response->getContent()); 366 | } else { 367 | $object = json_decode($response); 368 | } 369 | 370 | $providerResponse = $object->response; 371 | 372 | $providerClass = get_class($this->provider); 373 | $requestData = [ 374 | 'config' => $config['providers'][$providerClass], 375 | 'mobile' => $this->getMobile(), 376 | 'message' => $this->getMessage() 377 | ]; 378 | 379 | $logData = [ 380 | 'provider' => $providerClass, 381 | 'request_json' => json_encode($requestData, JSON_THROW_ON_ERROR), 382 | 'response_json' => json_encode($providerResponse, JSON_THROW_ON_ERROR) 383 | ]; 384 | 385 | if (array_key_exists('log_driver', $config)) { 386 | 387 | if ($config['log_driver'] === 'database') { 388 | Logger::createLog($logData); 389 | } elseif ($config['log_driver'] === 'file') { 390 | $logData['request_json'] = $requestData; 391 | $logData['response_json'] = $providerResponse; 392 | LaravelLog::info('laravelbdsms', $logData); 393 | } 394 | } else { 395 | 396 | Logger::createLog($logData); 397 | } 398 | 399 | } 400 | } 401 | 402 | /** 403 | * @return string 404 | */ 405 | public function getQueueName(): string 406 | { 407 | return $this->queueName; 408 | } 409 | 410 | } 411 | --------------------------------------------------------------------------------