工作需要,使用电信提供的webservice接口发送彩信,调了几天,终于可以把彩信发送出去了,代码如下:
package com.onewaveinc.message;
import java.io.File;
import java.io.FileInputStream;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.util.ByteArrayDataSource;
import org.apache.axis.attachments.AttachmentPart;
import org.apache.axis.message.SOAPHeaderElement;
import org.apache.axis.types.URI;
import com.onewaveinc.pnp.mms.ChargingInformation;
import com.onewaveinc.pnp.mms.DeliveryInformation;
import com.onewaveinc.pnp.mms.MessagePriority;
import com.onewaveinc.pnp.mms.SendMessageBindingStub;
import com.onewaveinc.pnp.mms.SendMessageServiceLocator;
import com.onewaveinc.pnp.mms.SimpleReference;
import com.onewaveinc.properties.PropertiesManage;
import com.onewaveinc.utils.MD5;
public class Message {
public static void main(String[] args) {
SendMessageServiceLocator loc = new SendMessageServiceLocator();
String url = PropertiesManage.getValue("url");
System.out.println("接口地址: " + url);
loc.setSendMessageEndpointAddress(url);
try {
SendMessageBindingStub binding = (SendMessageBindingStub) loc.getSendMessage();
binding.setTimeout(60000);
//添加头信息
String spId = PropertiesManage.getValue("message.header.spId");
String spPassword = PropertiesManage.getValue("message.header.spPassword");
SimpleDateFormat formatter = new SimpleDateFormat("MMddhhmmss");
String timeStamp = formatter.format(Calendar.getInstance().getTime());
//密码加密
spPassword = MD5.compile(spId + spPassword + timeStamp);
System.out.println("密码加密后:" + spPassword);
String productId = PropertiesManage.getValue("message.header.productId");
String SAN = PropertiesManage.getValue("message.header.SAN");
String transactionId = PropertiesManage.getValue("message.header.transactionId");
String transEnd = PropertiesManage.getValue("message.header.transEnd");
String linkId = PropertiesManage.getValue("message.header.linkId");
String OA = PropertiesManage.getValue("message.header.OA");
String FA = PropertiesManage.getValue("message.header.FA");
String multicastMessaging = PropertiesManage.getValue("message.header.multicastMessaging");
SOAPHeaderElement header = new SOAPHeaderElement("http://www.chinatelecom.com.cn/schema/ctcc/common/v2_1", "RequestSOAPHeader");
header.addChildElement("spId").addTextNode(spId);
header.addChildElement("spPassword").addTextNode(spPassword);
header.addChildElement("timeStamp").addTextNode(timeStamp);
header.addChildElement("productId").addTextNode(productId);
header.addChildElement("SAN").addTextNode(SAN);
header.addChildElement("transactionId").addTextNode(transactionId);
header.addChildElement("transEnd").addTextNode(transEnd);
header.addChildElement("linkId").addTextNode(linkId); // linkID
header.addChildElement("OA").addTextNode(OA);
header.addChildElement("FA").addTextNode(FA);
header.addChildElement("multicastMessaging").addTextNode(multicastMessaging);
binding.setHeader(header);
//短信接收者
URI[] uris = new URI[args.length];
for (int i = 0; i < args.length; i++) {
uris[i] = new URI(args[i]);
System.out.println("消息接收号码: " + args[i]);
}
//短信发送者
String sender = PropertiesManage.getValue("message.sender");
//短信主题
String sub = PropertiesManage.getValue("message.subject");
System.out.println("消息内容: " + sub);
//计费信息
ChargingInformation info = new ChargingInformation();
info.setDescription(PropertiesManage.getValue("charging.description"));
info.setAmount(new BigDecimal(Integer.valueOf(PropertiesManage.getValue("charging.amount"))));
info.setCode(PropertiesManage.getValue("charging.code"));
info.setCurrency(PropertiesManage.getValue("charging.currency"));
//状态报告接口
SimpleReference request = null;
if ("on".equals(PropertiesManage.getValue("reference.need"))) {
request = new SimpleReference();
request.setCorrelator(PropertiesManage.getValue("reference.correlator"));
request.setInterfaceName(PropertiesManage.getValue("reference.interfaceName"));
request.setEndpoint(new URI(PropertiesManage.getValue("reference.endpoint")));
}
//彩信内容
if ("on".equals(PropertiesManage.getValue("message.need"))) {
String fileName = PropertiesManage.getValue("message.content");
String[] fileNames = fileName.split(";");
for (String name : fileNames) {
System.out.println("彩信内容: " + name);
File file = new File(name);
DataHandler dh = new DataHandler(new FileDataSource(file));
AttachmentPart ap= new AttachmentPart(dh);
ap.setContentId(file.getName());
ap.setContentLocation(file.getName());
if (file.getName().indexOf("smil") > 0) {
ap.setContentType("application/smil");
} else if (file.getName().endsWith("txt")) {
ap.setContentType("text/plain;charset=utf-8");
} else if (file.getName().endsWith("amr")) {
ap.setContentType("audio/amr");
} else if (file.getName().endsWith("mp3")) {
ap.setContentType("audio/mpeg");
} else {
ap.setContentType(ap.getContentType());
}
binding.addAttachment(ap);
}
}
System.out.println("消息发送中...");
String value = binding.sendMessage(uris, sender, sub, MessagePriority.Default, info, request);
System.out.println("返回的彩信状态查询标识符为:" + value);
} catch (Exception e) {
e.printStackTrace();
}
}
}
但是悲哀的发现这段代码运行起来可以发送图片和文字等信息并且能显示,但是音频文件如amr什么的却只能显示为附件不能直接播放,以为是contenttype的问题,所以添加了设置contenttype的代码ap.setContentType(...);但还是不能解决问题...
测试发现下发的彩信文件名称会少掉第一个字符和最后一个字符,导致amr文件成了am文件,以至于手机播放器不能识别,故将contentid前后各加一字符,问题解决,但至今未知原因
分享到:
相关推荐
首先,我们关注的是彩信上行,即用户设备向ISAG发送彩信的过程。在C#中,这通常涉及到HTTP或SMTP协议的使用,因为彩信通常基于这些协议进行传输。开发时,你需要创建一个客户端程序,模拟手机设备,通过HTTP POST...
本项目聚焦于C#语言实现的ISAG(Integrated Service Access Gateway,综合业务接入网关)接入彩信接口的下行功能,即从服务器向移动终端发送彩信。 标题“ISAG接入彩信接口(C#)下行”表明,这个项目是针对ISAG设备...
在中国电信的网络运营中,ISAG(Inter-Service Provider Access Gateway)扮演着至关重要的角色,它作为服务提供商(SP)与基础电信网络之间的接口,负责处理不同SP之间的数据传输和服务接入。ISAG接口开发文档是...
下面我们将详细探讨ISAG接口的原理、功能以及与短信、WAP Push和彩信开发包的关系。 ISAG接口的设计目的是为了标准化不同厂商的应用网关之间如何交换数据和服务。通过这种方式,它确保了跨系统的兼容性,降低了集成...
"sp与ISAG接口的开发包-新"显然是一个专为SP与ISAG接口集成而设计的软件开发资源包。这个开发包的出现,意味着开发者可以利用它来构建或升级SP与ISAG之间的连接,以便更好地提供服务和实现系统的无缝对接。 ISAG...
1、电信提供的isag 接口只有java 实例; 2、wsdl说明文件有问题,必须手工编辑; 3、文档和代码不对应; 4、该资源本人已经联调测试通过; 5、提供了wsdl 生成C#本地代码的批处理; 6、通过测短信发送demo;
3. **接口对接**:ISAG提供API接口供SP调用,用于发送和接收彩信。SP需要开发适配这些接口的应用程序,确保数据传输的正确性和完整性。 4. **参数设置**:SP在ISAG平台注册并配置相关参数,例如SP代码、业务代码、...
3. **彩信接口**:《中国电信综合业务接入网关_ISAG_开放接口协议03-MMS V2.0.pdf》专注于彩信服务。MMS相对于SMS增加了多媒体内容支持,如图片、音频和视频。文档会涉及MMS协议栈(如OMA MMS Protocol)、彩信中心...
- 该规范详细规定了如何通过ISAG的API(应用接口)进行消息的发送、接收和通知。 - 包含序列图、数据类型定义、接口定义、差错处理和服务策略。 3. 接口规范的作用: - 规范为ISAG设备提供者、内容提供商和服务...
### 中国电信综合业务接入网关(ISAG)开放接口协议概览 #### 一、引言 中国电信综合业务接入网关(ISAG)是一项关键的技术组件,它为中国电信的网络提供了标准化且统一化的业务开发接口。ISAG的目标是将电信网络的...
在中国电信的综合业务管理平台(ISMP, Integrated Service Management Platform)中,ISMP和ISAG是两个重要的组件,它们之间的接口规范对于确保整个平台的高效运行和业务协同至关重要。ISMP通常负责集中管理网络服务和...
因为短信也是ISAG的一个接入的一个基本功能,而且相对WAP PUSH和彩信接口比 较简单,接口与彩信和WAP PUSH相近,理解ISAG短信接入的接口协议也有利于了解整 个ISAG的接口协议。所以这里还是就ISAG接入短信业务进行...
#### 四、彩信接口开发 **4.1 彩信的构成** 彩信(MMS)是一种包含多媒体内容的消息,它可以包括图片、音频、视频等多种类型的文件。相比于普通的短信,彩信提供了更多的表现形式和信息容量。 **4.2 彩信在电信网络...
为了确保ISAG接口的可靠性和稳定性,文档中还定义了一系列差错代码,用于指示接口调用过程中可能出现的问题。同时,服务策略部分阐述了ISAG的服务范围、限制条件以及优先级处理机制,这对于理解ISAG的服务能力和使用...
综上所述,"wsdl_isag开发文档"是一组关键资源,对于理解ISAG系统提供的Web服务接口以及构建与之交互的应用程序至关重要。开发者需要深入理解WSDL的结构和内容,以便有效地利用这些文件进行开发工作。
SMS接口规范了ISAG与短信中心(SMSC)之间的通信,使得ISAG能够处理用户的短信发送和接收请求。该接口支持点对点和广播消息,同时涵盖短信的编码、解码、存储转发等功能,确保短信在复杂网络环境中的可靠传输。 2....
7. **接口定义**:详细描述了ISAG向第三方提供的业务接口,包括发送消息(`SENDMESSAGE`)、获取消息(`GETMESSAGE`)、消息通知(`MESSAGENOTIFICATION`)等具体操作的定义和参数说明。 8. **差错定义**:列举了在接口...