Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Bd Courier Fraud Checker Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Getting Started

Minimal Setup

  1. Installation

    composer require programmertowheed/bd-courier-fraud-checker
    

    Publish the config file (if needed):

    php artisan vendor:publish --provider="Programmertowheed\BdCourierFraudChecker\BdCourierFraudCheckerServiceProvider" --tag="config"
    
  2. 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
    
  3. 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
    

Implementation Patterns

Workflow Integration

  1. 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
    ];
    
  2. Event-Based Checks Trigger checks on order.created or user.registered:

    use Programmertowheed\BdCourierFraudChecker\Events\FraudCheckFailed;
    
    event(new FraudCheckFailed($customer, $result));
    
  3. Batch Processing Use the BulkChecker for large datasets (e.g., CSV imports):

    $bulkChecker = new \Programmertowheed\BdCourierFraudChecker\BulkChecker();
    $results = $bulkChecker->checkMultiple($customerDataArray);
    

Data Enrichment

  • 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'];
    

API Integration

  • Webhooks: Listen for courier updates via bd-courier-fraud-checker:webhook event.
  • Rate Limiting: Cache results for 24h to avoid API abuse:
    Cache::remember("fraud_check_{$phone}", now()->addHours(24), function() use ($phone) {
        return BdCourierFraudChecker::checkFraud(['phone' => $phone]);
    });
    

Gotchas and Tips

Pitfalls

  1. API Rate Limits

    • The package doesn’t handle retries by default. Use Laravel’s 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));
      }
      
  2. Data Format Mismatch

    • Ensure phone numbers are in E.164 format (e.g., +88017XXXXXXXX). Strip 0 prefixes if needed:
      $phone = str_replace('0', '', $user->phone);
      $phone = '+88' . $phone;
      
  3. False Positives

    • Test with known-legit courier data to tune your risk thresholds. Log false_positive events:
      if ($result['is_fraud'] && $user->is_verified) {
          event(new FalsePositiveDetected($user, $result));
      }
      

Debugging

  • 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();
    });
    

Extension Points

  1. 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
    );
    
  2. Webhook Handling Create a listener for BdCourierFraudChecker\Events\WebhookReceived:

    public function handle(WebhookReceived $event) {
        $this->updateUserFraudStatus($event->userId, $event->data);
    }
    
  3. Local Overrides Override the API client for testing/staging:

    config(['bd-courier-fraud-checker.client' => \Programmertowheed\BdCourierFraudChecker\Http\LocalClient::class]);
    

Performance Tips

  • Lazy Loading: Defer fraud checks until critical actions (e.g., payment processing).
  • Queue Jobs: Offload checks to a queue for async processing:
    CheckFraudJob::dispatch($customerData)->onQueue('fraud-checks');
    
Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
nasirkhan/laravel-sharekit
directorytree/privacy-filter-classifier
directorytree/privacy-filter
datacore/hub-sdk
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
agtp/agtp-php
agtp/mod-php
splash/sonata-admin
splash/metadata
splash/openapi
splash/scopes
splash/toolkit
testo/output-teamcity
testo/bridge-symfony