1
|
|
|
<?php |
2
|
|
|
|
3
|
|
|
namespace HoomanMirghasemi\Sms\Drivers; |
4
|
|
|
|
5
|
|
|
use Exception; |
6
|
|
|
use HoomanMirghasemi\Sms\Abstracts\Driver; |
7
|
|
|
use Illuminate\Support\Facades\App; |
8
|
|
|
use Illuminate\Support\Facades\Log; |
9
|
|
|
use SoapClient; |
10
|
|
|
use SoapFault; |
11
|
|
|
|
12
|
|
|
class Magfa extends Driver |
13
|
|
|
{ |
14
|
|
|
private SoapClient $soapClient; |
15
|
|
|
|
16
|
|
|
public function __construct(protected array $settings) |
17
|
|
|
{ |
18
|
|
|
$this->from = data_get($this->settings, 'from'); |
19
|
|
|
$this->tryConnectToProvider(); |
20
|
|
|
} |
21
|
|
|
|
22
|
|
|
/** |
23
|
|
|
* Send sms method for Magfa. |
24
|
|
|
* |
25
|
|
|
* This method send sms and save log to db. |
26
|
|
|
* |
27
|
|
|
* @return bool |
28
|
|
|
*/ |
29
|
|
|
public function send(): bool |
30
|
|
|
{ |
31
|
|
|
if (!$this->serviceActive) { |
32
|
|
|
parent::failedConnectToProvider(); |
33
|
|
|
|
34
|
|
|
return false; |
35
|
|
|
} |
36
|
|
|
$response = $this->soapClient->send([$this->getMessage()], [$this->from], [$this->recipient]); |
37
|
|
|
if ($response->status == 0) { |
38
|
|
|
$this->webserviceResponse = "Message has been successfully sent ; MessageId : {$response->messages->id}"; |
39
|
|
|
$this->success = true; |
40
|
|
|
} |
41
|
|
|
|
42
|
|
|
$this->webserviceResponse = "An error occurred \n"; |
43
|
|
|
$this->webserviceResponse .= "Error Code : $response->status ; Error Title : ".$this->getErrors()[$response->status]['title'].' {'.$this->getErrors()[$response->status]['desc'].'}'; |
44
|
|
|
$this->success = false; |
45
|
|
|
|
46
|
|
|
return parent::send(); |
47
|
|
|
} |
48
|
|
|
|
49
|
|
|
/** |
50
|
|
|
* Return the remaining balance of magfa. |
51
|
|
|
* |
52
|
|
|
* @return string |
53
|
|
|
*/ |
54
|
|
|
public function getBalance(): string |
55
|
|
|
{ |
56
|
|
|
if (!$this->serviceActive) { |
57
|
|
|
return 'وب سرویس مگفا با مشکل مواجه شده.'; |
58
|
|
|
} |
59
|
|
|
|
60
|
|
|
try { |
61
|
|
|
$response = $this->soapClient->balance(); |
62
|
|
|
|
63
|
|
|
return $response->balance; |
64
|
|
|
} catch (Exception $e) { |
65
|
|
|
return 'message:'.$e->getMessage().' code: '.$e->getCode(); |
66
|
|
|
} |
67
|
|
|
} |
68
|
|
|
|
69
|
|
|
/** |
70
|
|
|
* Make SoapClient object and connect to magfa wsdl webservices. |
71
|
|
|
* |
72
|
|
|
* @return void |
73
|
|
|
*/ |
74
|
|
|
private function tryConnectToProvider(): void |
75
|
|
|
{ |
76
|
|
|
try { |
77
|
|
|
$this->soapClient = new SoapClient(data_get($this->settings, 'wsdl_url'), [ |
78
|
|
|
'login' => data_get($this->settings, 'username').'/'.data_get($this->settings, 'domain'), |
79
|
|
|
'password' => data_get($this->settings, 'password'), |
80
|
|
|
'cache_wsdl' => WSDL_CACHE_NONE, // -No WSDL Cache |
81
|
|
|
'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP | 5), // -Compression * |
82
|
|
|
'trace' => App::environment(['local', 'staging', 'testing']), // -Optional (debug) |
83
|
|
|
]); |
84
|
|
|
} catch (SoapFault $soapFault) { |
85
|
|
|
Log::error('magfa sms code: '.$soapFault->getCode().' message: '.$soapFault->getMessage()); |
86
|
|
|
$this->serviceActive = false; |
87
|
|
|
} |
88
|
|
|
} |
89
|
|
|
|
90
|
|
|
/** |
91
|
|
|
* Return error messages for SmsMagfa. |
92
|
|
|
* |
93
|
|
|
* @return array |
94
|
|
|
*/ |
95
|
|
|
private function getErrors(): array |
96
|
|
|
{ |
97
|
|
|
$errors = []; |
98
|
|
|
$errors[1]['title'] = 'INVALID_RECIPIENT_NUMBER'; |
99
|
|
|
$errors[1]['desc'] = 'the string you presented as recipient numbers are not valid phone numbers, please check them again'; |
100
|
|
|
|
101
|
|
|
$errors[2]['title'] = 'INVALID_SENDER_NUMBER'; |
102
|
|
|
$errors[2]['desc'] = 'the string you presented as sender numbers(3000-xxx) are not valid numbers, please check them again'; |
103
|
|
|
|
104
|
|
|
$errors[3]['title'] = 'INVALID_ENCODING'; |
105
|
|
|
$errors[3]['desc'] = 'are You sure You\'ve entered the right encoding for this message? You can try other encodings to bypass this error code'; |
106
|
|
|
|
107
|
|
|
$errors[4]['title'] = 'INVALID_MESSAGE_CLASS'; |
108
|
|
|
$errors[4]['desc'] = 'entered MessageClass is not valid. for a normal MClass, leave this entry empty'; |
109
|
|
|
|
110
|
|
|
$errors[6]['title'] = 'INVALID_UDH'; |
111
|
|
|
$errors[6]['desc'] = 'entered UDH is invalid. in order to send a simple message, leave this entry empty'; |
112
|
|
|
|
113
|
|
|
$errors[12]['title'] = 'INVALID_ACCOUNT_ID'; |
114
|
|
|
$errors[12]['desc'] = 'you\'re trying to use a service from another account??? check your UN/Password/NumberRange again'; |
115
|
|
|
|
116
|
|
|
$errors[13]['title'] = 'NULL_MESSAGE'; |
117
|
|
|
$errors[13]['desc'] = 'check the text of your message. it seems to be null'; |
118
|
|
|
|
119
|
|
|
$errors[14]['title'] = 'CREDIT_NOT_ENOUGH'; |
120
|
|
|
$errors[14]['desc'] = 'Your credit\'s not enough to send this message. you might want to buy some credit.call'; |
121
|
|
|
|
122
|
|
|
$errors[15]['title'] = 'SERVER_ERROR'; |
123
|
|
|
$errors[15]['desc'] = 'something bad happened on server side, you might want to call MAGFA Support about this:'; |
124
|
|
|
|
125
|
|
|
$errors[16]['title'] = 'ACCOUNT_INACTIVE'; |
126
|
|
|
$errors[16]['desc'] = 'Your account is not active right now, call -- to activate it'; |
127
|
|
|
|
128
|
|
|
$errors[17]['title'] = 'ACCOUNT_EXPIRED'; |
129
|
|
|
$errors[17]['desc'] = 'looks like Your account\'s reached its expiration time, call -- for more information'; |
130
|
|
|
|
131
|
|
|
$errors[18]['title'] = 'INVALID_USERNAME_PASSWORD_DOMAIN'; // todo : note : one of them are empty |
132
|
|
|
$errors[18]['desc'] = 'the combination of entered Username/Password/Domain is not valid. check\'em again'; |
133
|
|
|
|
134
|
|
|
$errors[19]['title'] = 'AUTHENTICATION_FAILED'; // todo : note : wrong arguments supplied ... |
135
|
|
|
$errors[19]['desc'] = 'You\'re not entering the correct combination of Username/Password'; |
136
|
|
|
|
137
|
|
|
$errors[20]['title'] = 'SERVICE_TYPE_NOT_FOUND'; |
138
|
|
|
$errors[20]['desc'] = 'check the service type you\'re requesting. we don\'t get what service you want to use. your sender number might be wrong, too.'; |
139
|
|
|
|
140
|
|
|
$errors[22]['title'] = 'ACCOUNT_SERVICE_NOT_FOUND'; |
141
|
|
|
$errors[22]['desc'] = 'your current number range does\'t have the permission to use Webservices'; |
142
|
|
|
|
143
|
|
|
$errors[23]['title'] = 'SERVER_BUSY'; |
144
|
|
|
$errors[23]['desc'] = 'Sorry, Server\'s under heavy traffic pressure, try testing another time please'; |
145
|
|
|
|
146
|
|
|
$errors[24]['title'] = 'INVALID_MESSAGE_ID'; |
147
|
|
|
$errors[24]['desc'] = 'entered message-id seems to be invalid, are you sure You entered the right thing?'; |
148
|
|
|
|
149
|
|
|
$errors[25]['title'] = 'INVALID_METHOD_NAME'; |
150
|
|
|
$errors[25]['desc'] = 'the method name call is invalid'; |
151
|
|
|
|
152
|
|
|
$errors[27]['title'] = 'RECEIVER_NUMBER_IN_BLACK_LIST'; |
153
|
|
|
$errors[27]['desc'] = 'the receiver number is in the black list'; |
154
|
|
|
|
155
|
|
|
$errors[28]['title'] = 'PREFIX_RECEIVER_NUMBER_IS_BLOCKED'; |
156
|
|
|
$errors[28]['desc'] = 'the receiver number is in the block list of magfa'; |
157
|
|
|
|
158
|
|
|
$errors[29]['title'] = 'YOU_IP_ADDRESS_NOT_VALID'; |
159
|
|
|
$errors[29]['desc'] = 'server ip address is not valid to use service'; |
160
|
|
|
|
161
|
|
|
$errors[30]['title'] = 'LARGE_SMS_CONTENT'; |
162
|
|
|
$errors[30]['desc'] = 'the sms content is more than 255 character'; |
163
|
|
|
|
164
|
|
|
$errors[101]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_MESSAGE_CLASS_ARRAY_BODIES'; |
165
|
|
|
$errors[101]['desc'] = 'this happens when you try to define MClasses for your messages. in this case you must define one recipient number for each MClass'; |
166
|
|
|
|
167
|
|
|
$errors[102]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_MESSAGE_CLASS_ARRAY'; |
168
|
|
|
$errors[102]['desc'] = 'this happens when you try to define MClasses for your messages. in this case you must define one recipient number for each MClass'; |
169
|
|
|
|
170
|
|
|
$errors[103]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_SENDER_NUMBER_ARRAY'; |
171
|
|
|
$errors[103]['desc'] = 'This error happens when you have more than one sender-number for message. when you have more than one sender number, for each sender-number you must define a recipient number...'; |
172
|
|
|
|
173
|
|
|
$errors[104]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_MESSAGE_ARRAY'; |
174
|
|
|
$errors[104]['desc'] = 'this happens when you try to define UDHs for your messages. in this case you must define one recipient number for each udh'; |
175
|
|
|
|
176
|
|
|
$errors[105]['title'] = 'PRIORITIES_ARRAY_SIZE_NOT_EQUAL_RECEIVERS'; |
177
|
|
|
$errors[105]['desc'] = 'priorities array size not equal receivers'; |
178
|
|
|
|
179
|
|
|
$errors[106]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_IS_NULL'; |
180
|
|
|
$errors[106]['desc'] = 'array of recipient numbers must have at least one member'; |
181
|
|
|
|
182
|
|
|
$errors[107]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_TOO_LONG'; |
183
|
|
|
$errors[107]['desc'] = 'the maximum number of recipients per message is 90'; |
184
|
|
|
|
185
|
|
|
$errors[108]['title'] = 'WEB_SENDER_NUMBER_ARRAY_IS_NULL'; |
186
|
|
|
$errors[108]['desc'] = 'array of sender numbers must have at least one member'; |
187
|
|
|
|
188
|
|
|
$errors[109]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_ENCODING_ARRAY'; |
189
|
|
|
$errors[109]['desc'] = 'this happens when you try to define encodings for your messages. in this case you must define one recipient number for each Encoding'; |
190
|
|
|
|
191
|
|
|
$errors[110]['title'] = 'WEB_RECIPIENT_NUMBER_ARRAY_SIZE_NOT_EQUAL_CHECKING_MESSAGE_IDS__ARRAY'; |
192
|
|
|
$errors[110]['desc'] = 'this happens when you try to define checking-message-ids for your messages. in this case you must define one recipient number for each checking-message-id'; |
193
|
|
|
|
194
|
|
|
$errors[-1]['title'] = 'NOT_AVAILABLE'; |
195
|
|
|
$errors[-1]['desc'] = 'The target of report is not available(e.g. no message is associated with entered IDs)'; |
196
|
|
|
|
197
|
|
|
return $errors; |
198
|
|
|
} |
199
|
|
|
} |
200
|
|
|
|