Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 2
CRAP
0.00% covered (danger)
0.00%
0 / 1
MessageBirdSmsProvider
0.00% covered (danger)
0.00%
0 / 29
0.00% covered (danger)
0.00%
0 / 2
30
0.00% covered (danger)
0.00%
0 / 1
 __construct
0.00% covered (danger)
0.00%
0 / 4
0.00% covered (danger)
0.00%
0 / 1
2
 send
0.00% covered (danger)
0.00%
0 / 25
0.00% covered (danger)
0.00%
0 / 1
20
1<?php
2// App/Services/Communication/Providers/Sms/Global/MessageBirdSmsProvider.php
3
4namespace App\Services\Communication\Providers\Sms\Global;
5
6use App\Services\Communication\Contracts\SmsProviderInterface;
7
8class MessageBirdSmsProvider implements SmsProviderInterface
9{
10    private string $apiUrl;
11    private string $apiKey;
12    private string $senderId;
13
14    public function __construct()
15    {
16        $config = config('CommunicationProviders');
17
18        $this->apiUrl   = $config->messagebird['api_url']   ?? 'https://rest.messagebird.com/messages';
19        $this->apiKey   = $config->messagebird['api_key']   ?? '';
20        $this->senderId = $config->messagebird['sender_id'] ?? 'MessageBird';
21    }
22
23    public function send(string $to, string $message): bool
24    {
25        try {
26            $client = \Config\Services::curlrequest();
27
28            $response = $client->post($this->apiUrl, [
29                'headers' => [
30                    'Authorization' => 'AccessKey ' . $this->apiKey,
31                    'Content-Type'  => 'application/json',
32                    'Accept'        => 'application/json',
33                ],
34                'json' => [
35                    'originator' => $this->senderId,
36                    'recipients' => [$to],
37                    'body'       => $message,
38                ],
39            ]);
40
41            $status = $response->getStatusCode();
42
43            if ($status !== 201) {
44                log_message('error', '[MessageBirdSmsProvider] Échec envoi — HTTP ' . $status);
45                return false;
46            }
47
48            $body = json_decode($response->getBody(), true);
49
50            // MessageBird retourne les erreurs même en 201
51            if (!empty($body['errors'])) {
52                log_message('error', '[MessageBirdSmsProvider] Erreurs API : ' . json_encode($body['errors']));
53                return false;
54            }
55
56            return true;
57
58        } catch (\Throwable $e) {
59            log_message('error', '[MessageBirdSmsProvider] ' . $e->getMessage());
60            return false;
61        }
62    }
63}