سلام
من برای ارسال پیامک از پکیج زیر استفاده می کنم
https://github.com/khanzadimahdi/sms
سایت sms.ir یک ماژول ارسال سریع پیامک به همراه قالب داره که از فانکشن UltraFastSendSetting استفاده می کنه.
https://ip.sms.ir/#/User/RestWebService
امکانش هست این تابع را به صورت یک درایور جدید در پکیج پیامک تعریف کنم؟
@khanzadimahdi
سلام. بعله. بهتره که کلا یک درایور جدید بسازید. دقت کنید من از توسعه دهنده های این پکیج هستم و پکیج اصلی در ادرس زیر قرار داره
درایور جدید رو با نامی مثلا smsir-ultrafast قرار بدید که دوستان متوجه بشن که درایور شما از این روش استفاده میکنه.
@khanzadimahdi
من درایور جدید Ultrafast رو ایجاد کردم و فایل هام بصورت زیر هست ولی پیام ارسال نمیشه.
درایور SmsirUltrafast.php در پوشه App\Packages\SMSDriver
<?php
namespace App\Packages\SMSDriver;
use Tzsk\Sms\Abstracts\Driver;
class SmsirUltrafast extends Driver
{
# You will have to make 2 methods.
/**
* 1. __constructor($settings) # {Mandatory} This settings is your Config Params that you've set.
* 2. send() # (Mandatory) This is the main message that will be sent.
*
* Example Given below:
*/
/**
* @var object
*/
protected $settings;
/**
* @var mixed
*/
protected $client;
protected $template = '';
/**
* Your Driver Config.
*
* @var array $settings
*/
public function __construct($settings)
{
$this->settings = (object) $settings;
# Initialize any Client that you want.
$this->client = new Client(); # Guzzle Client for example.
}
/**
* @return object Ex.: (object) ['status' => true, 'data' => 'Client Response Data'];
*/
public function send()
{
$this->recipients; # Array of Recipients.
$this->body; # SMS Body.
$this->template; # Template Sms.
$token = $this->getToken();
$response = collect();
foreach ($this->recipients as $recipient) {
$result = $this->client->request(
'POST',
$this->settings->url.'api/UltraFastSend',
$this->payload($recipient, $token)
);
$response->put($recipient, $result);
}
return (count($this->recipients) == 1) ? $response->first() : $response;
}
protected function payload($recipient, $token)
{
return [
'json' => [
'Messages' => [$this->body],
'MobileNumbers' => [$recipient],
'template' => $this->template,
'LineNumber' => $this->settings->from,
],
'headers' => [
'x-sms-ir-secure-token' => $token
],
'connect_timeout' => 30
];
}
protected function getToken()
{
$body = [
'UserApiKey' => $this->settings->apiKey,
'SecretKey' => $this->settings->secretKey,
];
$response = $this->client->post(
$this->settings->url.'api/Token',
['json' => $body, 'connect_timeout' => 30]
);
$body = json_decode((string) $response->getBody(), true);
if (empty($body['TokenKey'])) {
throw new \Exception('Smsir token could not be generated.');
}
return $body['TokenKey'];
}
}
فایل sms.php در پوشه config:
<?php
'smsir-ultrafast' => [
'url' => 'https://ws.sms.ir/',
'apiKey' => '********************',
'secretKey' => '**********************',
'from' => '300077',
],
فانکش send استفاده شده در کنترلر
Sms::send("12345",['template' => 27377])->to([$request['phone']])->dispatch();
اما این ارور رو میده:
call_user_func() expects parameter 1 to be a valid callback, array must have exactly two members
اگه دقت کرده باشید پکیج به صورت پروکسی عمل میکنه و متدی که شما روی Sms ران میکنید رو به درایور منتقل میکنه و سینتکسش به صورت زیر هست
Sms::send("this message")->to(['Number 1', 'Number 2'])->dispatch();
متد send یک پارامتر قبول میکنه!
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟