Onlinecity SMPP — добавить новые параметры tlv

#php #smpp #tlv

#php #smpp #tlv

Вопрос:

Я использую клиентскую библиотеку OnlineCity SMPP для отправки SMS. Все работало нормально. Но в соответствии с новым руководством TRAI, нам необходимо добавить следующие новые параметры TLV при отправке SMS

 group = smpp-tlv

name = EntityID

tag = 0x1400

type = octetstring

length = 30

smsc-id = ***
 

Я попробовал это

 // Prepare message
    $ENTITY_ID = new SmppTag(0x1400, '****************');
    $tags = array($ENTITY_ID);
    $from = new SmppAddress($SMS_Params['senderid'],SMPP::TON_ALPHANUMERIC);
    $to = new SmppAddress($SMS_Params['phone'],SMPP::TON_INTERNATIONAL,SMPP::NPI_E164);
    $encodedMessage = utf8_encode($SMS_Params['message']);
     // Send
    $return_data = $smpp->sendSMS($from,$to,$encodedMessage,$tags);
 

Я получил успешный ответ, но не получил ни одного СМС. Я связался со своим поставщиком услуг smpp. Они сказали, что дополнительного параметра TLV там нет, и именно поэтому SMS не отправляется.

Ребята, у вас есть какие-нибудь идеи, можем ли мы сделать это в моем текущем коде на основе библиотеки onlinecity или мне следует сделать что-то еще ?.

Комментарии:

1. для получения дополнительных параметров вам придется настроить github.com/onlinecity/php-smpp/blob/master/smppclient.class.php

2. @ankit.jbp 🙂 Я знаю это, я должен изменить smppclient.class.php файл в порядке добавления необязательных параметров. Но где и как? это моя забота. У тебя есть какие-нибудь идеи?

3. приятель, не хотел тебя раздражать: я должен попытаться найти tcpdump, чтобы увидеть отправленный запрос

Ответ №1:

Вам нужно проверить, завершаются ли ваши строки октекта нулем или нет, по умолчанию библиотека предполагает, что это так. Итак, существует переменная $ sms_null_terminate_octetstrings, которую необходимо сбросить, если ваш провайдер не заканчивается на null.

Приведенное выше изменение кода, рекомендованное Asterisk integrator, говорит о том же. Вместо изменения кода, если вы можете сбросить флаг в зависимости от ваших потребностей, это должно решить проблему.

Для других, кто хотел добавить новые обязательные параметры, следует добавить вот так, используя библиотеку smpp-php.

 $tags = array(
            new SmppTag(0x1400, your_pe_id),
            new SmppTag(0x1401, your_template_id)
        );
$message_id = $smpp->sendSMS($from, $to, $encodedMessage, $tags);
 

Ответ №2:

Удалить « (self::$sms_null_terminate_octetstrings ? 1 : 0)» из smppclient.class.php файл

Фактический код: $pdu = pack(‘a1cca’.(strlen($source->значение) 1).’cca’.(strlen($destination->значение) 1).’ccc’.($scheduleDeliveryTime ? ‘a16x’: ‘a1’).($validityPeriod? ‘a16x’: ‘a1′).’ccccca’.(strlen($short_message) (self::$sms_null_terminate_octetstrings ? 1 : 0))

Обновленный код :
$pdu = pack(‘a1cca’.(strlen($source->значение) 1).’cca’.(strlen($destination->значение) 1).’ccc’.($scheduleDeliveryTime ? ‘a16x’: ‘a1’).($validityPeriod? ‘a16x’: ‘a1′).’ccccca’.(strlen($short_message))

Комментарии:

1. Пожалуйста, правильно отформатируйте свой код и объясните цель любых предлагаемых изменений.