#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. Пожалуйста, правильно отформатируйте свой код и объясните цель любых предлагаемых изменений.