programmertowheed/bd-courier-fraud-checker
Laravel package for checking Bangladesh courier fraud by querying courier info/merchant details, helping detect suspicious parcels, senders, or addresses before delivery. Lightweight helper for apps needing basic fraud screening.
Installation
composer require programmertowheed/bd-courier-fraud-checker
Publish the config file (if needed):
php artisan vendor:publish --provider="Programmertowheed\BdCourierFraudChecker\BdCourierFraudCheckerServiceProvider" --tag="config"
Configuration
Edit .env or config/bd-courier-fraud-checker.php with your API credentials:
BD_COURIER_API_KEY=your_api_key_here
BD_COURIER_API_SECRET=your_api_secret_here
First Use Case Check a customer’s courier details in real-time during order placement:
use Programmertowheed\BdCourierFraudChecker\Facades\BdCourierFraudChecker;
$customerData = [
'phone' => '+88017XXXXXXXX',
'address' => 'Dhaka, Bangladesh',
];
$result = BdCourierFraudChecker::checkFraud($customerData);
dd($result); // Returns fraud status, risk score, and courier metadata
Order Validation Middleware
Attach to Illuminate\Http\Request to auto-check fraud before processing:
use Programmertowheed\BdCourierFraudChecker\Http\Middleware\CheckFraud;
protected $middleware = [
CheckFraud::class, // Runs on all routes
];
Event-Based Checks
Trigger checks on order.created or user.registered:
use Programmertowheed\BdCourierFraudChecker\Events\FraudCheckFailed;
event(new FraudCheckFailed($customer, $result));
Batch Processing
Use the BulkChecker for large datasets (e.g., CSV imports):
$bulkChecker = new \Programmertowheed\BdCourierFraudChecker\BulkChecker();
$results = $bulkChecker->checkMultiple($customerDataArray);
Courier Metadata: Augment user profiles with courier-specific data (e.g., last_delivery_date):
$user->courier_data = BdCourierFraudChecker::getCourierMetadata($user->phone);
$user->save();
Risk Scoring: Store risk scores in a fraud_risk column for analytics:
$user->fraud_risk = $result['risk_score'];
bd-courier-fraud-checker:webhook event.Cache::remember("fraud_check_{$phone}", now()->addHours(24), function() use ($phone) {
return BdCourierFraudChecker::checkFraud(['phone' => $phone]);
});
API Rate Limits
retry helper or a queue job:
try {
$result = BdCourierFraudChecker::checkFraud($data);
} catch (\Programmertowheed\BdCourierFraudChecker\Exceptions\ApiException $e) {
retry()->times(3)->then(fn() => $result = BdCourierFraudChecker::checkFraud($data));
}
Data Format Mismatch
+88017XXXXXXXX). Strip 0 prefixes if needed:
$phone = str_replace('0', '', $user->phone);
$phone = '+88' . $phone;
False Positives
false_positive events:
if ($result['is_fraud'] && $user->is_verified) {
event(new FalsePositiveDetected($user, $result));
}
Enable Logging
Add to config/bd-courier-fraud-checker.php:
'debug' => env('BD_COURIER_DEBUG', false),
Logs API responses to storage/logs/bd-courier-debug.log.
Mock API Calls For testing, override the HTTP client:
$this->app->singleton(\Programmertowheed\BdCourierFraudChecker\Http\Client::class, function () {
return new \Programmertowheed\BdCourierFraudChecker\Http\MockClient();
});
Custom Risk Rules
Extend the RiskEngine to add business logic:
namespace App\Services;
use Programmertowheed\BdCourierFraudChecker\RiskEngine;
class CustomRiskEngine extends RiskEngine {
protected function checkSuspiciousAddress($data) {
return str_contains($data['address'], 'fake street');
}
}
Bind it in AppServiceProvider:
$this->app->bind(
\Programmertowheed\BdCourierFraudChecker\Contracts\RiskEngine::class,
App\Services\CustomRiskEngine::class
);
Webhook Handling
Create a listener for BdCourierFraudChecker\Events\WebhookReceived:
public function handle(WebhookReceived $event) {
$this->updateUserFraudStatus($event->userId, $event->data);
}
Local Overrides Override the API client for testing/staging:
config(['bd-courier-fraud-checker.client' => \Programmertowheed\BdCourierFraudChecker\Http\LocalClient::class]);
CheckFraudJob::dispatch($customerData)->onQueue('fraud-checks');
How can I help you explore Laravel packages today?