【问题标题】:look for a way to return DeliverSmResp with error codes from cloudhopper smpp server寻找一种从 cloudhopper smpp 服务器返回带有错误代码的 DeliverSmResp 的方法
【发布时间】:2019-04-22 06:40:32
【问题描述】:

我正在寻找一种将 SMPP 错误代码从服务器发送到连接的客户端的方法。 我的流程是: 1.客户端发送到我的服务器短信 2.我把它发送到另一个系统 3. 当我得到消息状态时(最多可能需要 72 小时) 我想将结果发送回作为接收器连接的客户端。 当我将它发送给我看到的客户时,我也注意到了:

默认处理是丢弃意外响应 PDU: (submit_sm_resp:

public void sendResponsePdu(String dlrId, String status) throws RecoverablePduException, SmppChannelException, UnrecoverablePduException, InterruptedException {
        PduResponse pdu = dlrs.remove(dlrId);
        if (pdu != null) {
            pdu.setResultMessage("0xa");
            sendResponsePdu(pdu);
        }
    }

我想办法在发生错误时在方法 sendResponsePdu 上返回 SMPP 错误代码

我希望在客户端看到错误代码 0xa 这意味着“无效的源地址” 但像往常一样获得 ESME_ROK 我从 C# 项目中获取图像,在那里我可以看到响应的样子 从 SMSC 发送时

更新 我使用下一个代码返回 DLR,但我找不到设置“err”、“stat”和 messageid 的方法 enter link description here

【问题讨论】:

    标签: java smpp


    【解决方案1】:

    这是设置所有 DLR 字段并将其发送回客户端的解决方案

     byte[] textBytes = "-".getBytes();
    
            DeliverSm deliver = new DeliverSm();
    
            deliver.setSourceAddress(new Address((byte) 0x03, (byte) 0x00, pduResponseWrapper.getFromNumber()));
            deliver.setDestAddress(new Address((byte) 0x01, (byte) 0x01, pduResponseWrapper.getToNumber()));
            deliver.setShortMessage(textBytes);
            deliver.setDataCoding(pduResponseWrapper.getDataCoding());
            deliver.setSequenceNumber(pduResponseWrapper.getDeliverSm().getSequenceNumber());
            deliver.setEsmClass((byte) 0x04);
            deliver.setProtocolId((byte) 0x00);
            deliver.setPriority((byte) 0x00);
            deliver.setScheduleDeliveryTime(null);
            deliver.setValidityPeriod(null);
            deliver.setRegisteredDelivery((byte) 0x00);
            deliver.setReplaceIfPresent((byte) 0x00);
            deliver.setDefaultMsgId((byte) 0x00);
    
            DateTime submitDate = new DateTime();
            DateTime doneDate = new DateTime();
            byte state=SmppConstants.STATE_DELIVERED;
            String errorCode="000";
            DeliveryReceipt deliveryReceipt = new DeliveryReceipt(dlrId, 1,
                    1, submitDate, doneDate,
                    state, errorCode, "");
    
    
    
            String shortMessage = deliveryReceipt.toShortMessage();
            deliver.setShortMessage(CharsetUtil.encode(shortMessage, CharsetUtil.CHARSET_GSM));  deliver.calculateAndSetCommandLength();
    
    
    
            DataSmResp dd=new DataSmResp();
            DeliveryReceipt deliveryReceipt=new DeliveryReceipt();
            DeliverSmResp deliverSmResp = new DeliverSmResp();*/
    
    
            WindowFuture<Integer, PduRequest, PduResponse> future = session.sendRequestPdu(deliver, 10000, false);
            if (!future.await()) {
                logger.error("Failed to receive deliver_sm_resp within specified time");
            } else if (future.isSuccess()) {
                DeliverSmResp deliverSmResp = (DeliverSmResp) future.getResponse();
                logger.info("deliver_sm_resp: commandStatus [" + deliverSmResp.getCommandStatus() + "=" + deliverSmResp.getResultMessage() + "]");
            } else {
                logger.error("Failed to properly receive deliver_sm_resp: " + future.getCause());
            }
        } catch (Exception e) {
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-13
      • 2019-11-14
      • 2014-01-17
      • 1970-01-01
      • 2021-07-06
      • 2020-07-13
      相关资源
      最近更新 更多