3

我正在使用 OnlineCity SMPP 客户端库来发送 SMS。它工作正常。但是根据TRAI的新指南,我们需要在发送短信时添加以下新的TLV参数

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 库的代码中做到这一点,还是应该做其他事情?

4

2 回答 2

0

您需要检查您的 octect 字符串是否以 null 结尾,默认情况下,库假设它会终止。因此,如果您的提供程序不以 null 结尾,则需要重置一个变量 $sms_null_terminate_octetstrings。

Asterisk 集成商推荐的上述代码更改说明了同样的事情。如果您可以根据需要重置标志,而不是更改代码,那应该可以解决问题。

对于其他想要添加新的强制参数的人,应该使用 smpp-php 库添加这样的内容。

$tags = array(
            new SmppTag(0x1400, your_pe_id),
            new SmppTag(0x1401, your_template_id)
        );
$message_id = $smpp->sendSMS($from, $to, $encodedMessage, $tags);
于 2021-04-15T09:02:53.887 回答
-1

从smppclient.class.php文件中删除“ +(self::$sms_null_terminate_octetstrings ? 1 : 0)

实际代码: $pdu = pack('a1cca'.(strlen($source->value)+1).'cca'.(strlen($destination->value)+1).'ccc'.($scheduleDeliveryTime ? 'a16x' : 'a1').($validityPeriod ? 'a16x' : 'a1').'ccccca'.(strlen($short_message)+(self::$sms_null_terminate_octetstrings ? 1 : 0))

更新代码:
$pdu = pack('a1cca'.(strlen($source->value)+1).'cca'.(strlen($destination->value)+1).'ccc'.($scheduleDeliveryTime ? 'a16x' : 'a1').($validityPeriod ? 'a16x' : 'a1').'ccccca'.(strlen($short_message))

于 2020-12-13T17:42:58.790 回答