`
fangzhu19880123
  • 浏览: 30686 次
  • 性别: Icon_minigender_2
  • 来自: 上海
社区版块
存档分类
最新评论

ISAG webservice接口发送彩信附件问题

阅读更多
工作需要,使用电信提供的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前后各加一字符,问题解决,但至今未知原因
分享到:
评论
3 楼 Lance0512 2014-05-16  
我的邮箱是 :521881857@qq.com 
2 楼 Lance0512 2014-05-16  
你好 ,我现在也在做电信彩信发送的功能,您这里能提供一下 wsdl文件吗,或者给我一个生成的客户端,你这个代码不能用
1 楼 Callo_xu 2014-01-09  
你好~本人也因工作问题正在搞彩信这块~彩信是能发,但彩信展示效果没有按smil文件定义的展示~请问什么原因呢?本人QQ:502268897,请加我帮我解决一下~谢谢~

相关推荐

    ISAG接入彩信接口(C#)上行

    首先,我们关注的是彩信上行,即用户设备向ISAG发送彩信的过程。在C#中,这通常涉及到HTTP或SMTP协议的使用,因为彩信通常基于这些协议进行传输。开发时,你需要创建一个客户端程序,模拟手机设备,通过HTTP POST...

    ISAG接入彩信接口(C#)下行

    本项目聚焦于C#语言实现的ISAG(Integrated Service Access Gateway,综合业务接入网关)接入彩信接口的下行功能,即从服务器向移动终端发送彩信。 标题“ISAG接入彩信接口(C#)下行”表明,这个项目是针对ISAG设备...

    中国电信ISAG接口开发文档

    在中国电信的网络运营中,ISAG(Inter-Service Provider Access Gateway)扮演着至关重要的角色,它作为服务提供商(SP)与基础电信网络之间的接口,负责处理不同SP之间的数据传输和服务接入。ISAG接口开发文档是...

    ISAG 接口demo

    下面我们将详细探讨ISAG接口的原理、功能以及与短信、WAP Push和彩信开发包的关系。 ISAG接口的设计目的是为了标准化不同厂商的应用网关之间如何交换数据和服务。通过这种方式,它确保了跨系统的兼容性,降低了集成...

    sp与ISAG接口的开发包-新

    "sp与ISAG接口的开发包-新"显然是一个专为SP与ISAG接口集成而设计的软件开发资源包。这个开发包的出现,意味着开发者可以利用它来构建或升级SP与ISAG之间的连接,以便更好地提供服务和实现系统的无缝对接。 ISAG...

    ISAG 短信接口demo

    1、电信提供的isag 接口只有java 实例; 2、wsdl说明文件有问题,必须手工编辑; 3、文档和代码不对应; 4、该资源本人已经联调测试通过; 5、提供了wsdl 生成C#本地代码的批处理; 6、通过测短信发送demo;

    中国电信sp接入ISAG平台彩信开发实例

    3. **接口对接**:ISAG提供API接口供SP调用,用于发送和接收彩信。SP需要开发适配这些接口的应用程序,确保数据传输的正确性和完整性。 4. **参数设置**:SP在ISAG平台注册并配置相关参数,例如SP代码、业务代码、...

    电信 isag 接口文档 包含(sms mms wap push)

    3. **彩信接口**:《中国电信综合业务接入网关_ISAG_开放接口协议03-MMS V2.0.pdf》专注于彩信服务。MMS相对于SMS增加了多媒体内容支持,如图片、音频和视频。文档会涉及MMS协议栈(如OMA MMS Protocol)、彩信中心...

    中国电信ISAG MMS 接口规范

    - 该规范详细规定了如何通过ISAG的API(应用接口)进行消息的发送、接收和通知。 - 包含序列图、数据类型定义、接口定义、差错处理和服务策略。 3. 接口规范的作用: - 规范为ISAG设备提供者、内容提供商和服务...

    中国电信综合业务接入网关_ISAG_开放接口协议01-总册V2.0

    ### 中国电信综合业务接入网关(ISAG)开放接口协议概览 #### 一、引言 中国电信综合业务接入网关(ISAG)是一项关键的技术组件,它为中国电信的网络提供了标准化且统一化的业务开发接口。ISAG的目标是将电信网络的...

    中国电信综合业务管理平台ISMP、ISAG接口规范

    在中国电信的综合业务管理平台(ISMP, Integrated Service Management Platform)中,ISMP和ISAG是两个重要的组件,它们之间的接口规范对于确保整个平台的高效运行和业务协同至关重要。ISMP通常负责集中管理网络服务和...

    isag综合接入开发事例

    因为短信也是ISAG的一个接入的一个基本功能,而且相对WAP PUSH和彩信接口比 较简单,接口与彩信和WAP PUSH相近,理解ISAG短信接入的接口协议也有利于了解整 个ISAG的接口协议。所以这里还是就ISAG接入短信业务进行...

    ISAG接入开发指南(推荐).

    #### 四、彩信接口开发 **4.1 彩信的构成** 彩信(MMS)是一种包含多媒体内容的消息,它可以包括图片、音频、视频等多种类型的文件。相比于普通的短信,彩信提供了更多的表现形式和信息容量。 **4.2 彩信在电信网络...

    中国电信综合业务接入网关_ISAG_开放接口协议03-MMS V2.0

    为了确保ISAG接口的可靠性和稳定性,文档中还定义了一系列差错代码,用于指示接口调用过程中可能出现的问题。同时,服务策略部分阐述了ISAG的服务范围、限制条件以及优先级处理机制,这对于理解ISAG的服务能力和使用...

    wsdl_isag开发文档

    综上所述,"wsdl_isag开发文档"是一组关键资源,对于理解ISAG系统提供的Web服务接口以及构建与之交互的应用程序至关重要。开发者需要深入理解WSDL的结构和内容,以便有效地利用这些文件进行开发工作。

    中国电信综合业务接入网关_ISAG_开放接口协议汇总

    SMS接口规范了ISAG与短信中心(SMSC)之间的通信,使得ISAG能够处理用户的短信发送和接收请求。该接口支持点对点和广播消息,同时涵盖短信的编码、解码、存储转发等功能,确保短信在复杂网络环境中的可靠传输。 2....

    中国电信综合业务接入网关_ISAG_开放接口协议03-MMS1 RC1 V1.0.1

    7. **接口定义**:详细描述了ISAG向第三方提供的业务接口,包括发送消息(`SENDMESSAGE`)、获取消息(`GETMESSAGE`)、消息通知(`MESSAGENOTIFICATION`)等具体操作的定义和参数说明。 8. **差错定义**:列举了在接口...

    电信ISAG接口

    可能包括接口的更新内容、新增功能、问题修复等信息,对于系统维护和升级具有参考价值。 ISAG接口的设计和实现涉及到许多复杂的协议和流程,如SS7 MAP(移动应用部分)、SCTP(Stream Control Transmission ...

Global site tag (gtag.js) - Google Analytics