مهدی رجلانی
4 سال پیش توسط مهدی رجلانی مطرح شد
4 پاسخ

استفاده از ماژول ارسال سریع sms.ir در پکیج tzsk.sms

سلام
من برای ارسال پیامک از پکیج زیر استفاده می کنم
https://github.com/khanzadimahdi/sms
سایت sms.ir یک ماژول ارسال سریع پیامک به همراه قالب داره که از فانکشن UltraFastSendSetting استفاده می کنه.
https://ip.sms.ir/#/User/RestWebService
امکانش هست این تابع را به صورت یک درایور جدید در پکیج پیامک تعریف کنم؟
@khanzadimahdi


ثبت پرسش جدید
mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 4 سال پیش مطرح شد
0

سلام. بعله. بهتره که کلا یک درایور جدید بسازید. دقت کنید من از توسعه دهنده های این پکیج هستم و پکیج اصلی در ادرس زیر قرار داره

https://github.com/tzsk/sms

درایور جدید رو با نامی مثلا smsir-ultrafast قرار بدید که دوستان متوجه بشن که درایور شما از این روش استفاده میکنه.


مهدی رجلانی
تخصص : طراح و توسعه دهنده وب
@mehdirajolani 4 سال پیش مطرح شد
0

@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

mahdi khanzadi
تخصص : Software engineer
@khanzadimahdi 4 سال پیش مطرح شد
0

@mehdirajolani

اگه دقت کرده باشید پکیج به صورت پروکسی عمل میکنه و متدی که شما روی Sms ران میکنید رو به درایور منتقل میکنه و سینتکسش به صورت زیر هست

Sms::send("this message")->to(['Number 1', 'Number 2'])->dispatch();

متد send یک پارامتر قبول میکنه!


فرشید
@pinpaper.ir 3 سال پیش مطرح شد
0

@khanzadimahdi
سلام درایور ارسال سریع رو اضافه نکردین؟


برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام