最近用中兴的MM7API接口调试移动彩信接口
调试了接近一周,总算调通。没有多大的成就感,因为配置文件很少。就几个简单的配置。废话不说。直接上代码。
在测试过程中,MM7API可能会报出-102 ,4007等诸多问题。原因只有一个,配置文件没有填对。
<?xml version="1.0"?>
<vasp:MM7Config xmlns:vasp="http://mms.chinamobile.com/mm7ConfigSchema">
<AuthenticationMode>0</AuthenticationMode>
<UserName></UserName> //做的时候是内部测试,不鉴权模式
<Password></Password>
<MaxMessageSize>100000</MaxMessageSize>
<LogPath>/root/</LogPath>
<logLevel>0</logLevel>
<Charset>UTF-8</Charset> //GB2312和UTF-8都可以试试,我之前写GB2312发过去是乱码
<mmscURL>/vas</mmscURL> //原来是mm7不过貌似mm7和vas都是可以的。具体原因不详
<mmscIP>110.138.89.20:8088</mmscIP> //填写彩信中心ip:端口
<MmscID>999000</MmscID> //此处需要和彩信中心联系获得
<UseSSL>false</UseSSL>
<ListenIP>221.181.32.7</ListenIP> //本机ip
<ListenPort>8088</ListenPort>
<BackLog>50</BackLog>
<TimeOut>90000</TimeOut>
<ReSendCount>2</ReSendCount>
<LogNum>100</LogNum>
<LogInterval>120</LogInterval>
<LogSize>1000</LogSize>
</vasp:MM7Config>
package com.cmcc.mm7.vasp.conf;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.LinkedList;
import java.util.List;
import java.util.Properties;
import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.MMContent;
import com.cmcc.mm7.vasp.message.MM7RSRes;
import com.cmcc.mm7.vasp.message.MM7SubmitReq;
import com.cmcc.mm7.vasp.message.MM7SubmitRes;
import com.cmcc.mm7.vasp.service.MM7Sender;
public class MMSApiTest {
private MM7Config mm7Config;
//private SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
private String senderAddress;
private String transactionID;
private String VASPID;
private String VASID;
private String serviceCode;
public MMSApiTest(String mm7ConfigFilename, String mm7ConnConfigFilename, String mm7SPInfofilename) throws IOException {
mm7Config = new MM7Config(mm7ConfigFilename);
mm7Config.setConnConfigName(mm7ConnConfigFilename);
Properties pp = new Properties();
pp.load(new FileInputStream(mm7SPInfofilename));
senderAddress = pp.getProperty("senderAddress");
transactionID = pp.getProperty("transactionID");
VASPID = pp.getProperty("VASPID");
VASID = pp.getProperty("VASID");
serviceCode = pp.getProperty("serviceCode");
}
public boolean sendMMS(String[] destNumber, String subject, List ids, List types, List contents) {
MM7SubmitReq submit = new MM7SubmitReq();
for (int i = 0; i < destNumber.length; i++) {
submit.addTo(destNumber[i]);
}
//set important attributes
//关联标识
submit.setTransactionID(transactionID);
//SP代码
submit.setVASPID(VASPID);
//服务代码
submit.setVASID(VASID);
//业务代码
submit.setServiceCode(serviceCode);
//MM始发方的地址
submit.setSenderAddress(senderAddress);
submit.setChargedParty((byte)1);
submit.setDeliveryReport(false);
//设置消息体的subject和content
submit.setSubject(subject);
MMContent content = new MMContent();
content.setContentType(MMConstants.ContentType.MULTIPART_RELATED);
content.setContentID("MMS");
/**
MMContent subSmil = MMContent.createFromFile("D:\\test\\MMSApiTest\\smil1.smil");
subSmil.setContentID("smil1.smil");
subSmil.setContentType(MMConstants.ContentType.SMIL);
MMContent sub2 = MMContent.createFromFile("D:\\test\\MMSApiTest\\6.jpg");
sub2.setContentID("<02.jpg>");
sub2.setContentLocation("02.jpg");
sub2.setContentType(MMConstants.ContentType.JPEG);
**/
MMContent sub1 = MMContent.createFromString("testing!!!!!");
sub1.setContentID("<01.txt>");
sub1.setContentType(MMConstants.ContentType.TEXT);
sub1.setContentLocation("01.txt");
MMContent sub4 = MMContent.createFromFile("/root/workspace/mmapi/config/12.jpg");
sub4.setContentID("5.jpg");
sub4.setContentLocation("5.jpg");
sub4.setContentType(MMConstants.ContentType.JPEG);
content.addSubContent(sub1);
// content.addSubContent(sub2);
// content.addSubContent(sub3);
content.addSubContent(sub4);
submit.setContent(content);
try {
MM7Sender mm7Sender = new MM7Sender(mm7Config);
MM7RSRes rsRes;
rsRes = (MM7RSRes) mm7Sender.send(submit);
if (rsRes instanceof MM7SubmitRes) {
MM7SubmitRes submitRes = (MM7SubmitRes) rsRes;
int code = submitRes.getStatusCode();
System.out.println("submitRes.statuscode=" + rsRes.getStatusCode() + ";submitRes.statusText=" + rsRes.getStatusText());
if (code == 1000) return true;
else return false;
} else {
System.out.println("不正确消息!rsRes.statuscode=" + rsRes.getStatusCode() + ";rsRes.statusText=" + rsRes.getStatusText());
return false;
}
/*
MM7CancelReq cancelReq = new MM7CancelReq();
cancelReq.setTransactionID(submitRes.getTransactionID());
cancelReq.setMessageID(submitRes.getMessageID());
cancelReq.setVASID("4444");
cancelReq.setVASPID("804444");
cancelReq.setSenderAddress("4444");
rsRes = MMSSender.send(cancelReq);
if(rsRes instanceof MM7CancelRes)
{
MM7CancelRes cancelRes = (MM7CancelRes)rsRes;
System.out.println("-----------------------");
System.out.println(cancelRes.toString());
System.out.println("cancelRes!statuscode="+cancelRes.getStatusCode()+";statustext="+cancelRes.getStatusText());
}else{
System.out.println("不正确消息!rsRes.statuscode="+rsRes.getStatusCode() + ";rsRes.statusText=" + rsRes.getStatusText());
}
*/
/*
MM7ReplaceReq replaceReq = new MM7ReplaceReq();
replaceReq.setTransactionID(submitRes.getTransactionID());
replaceReq.setMessageID(submitRes.getMessageID());
replaceReq.setVASID("4444");
replaceReq.setVASPID("804444");
replaceReq.setServiceCode("123");
content = new MMContent();
content.setContentType(MMConstants.ContentType.MULTIPART_RELATED);
content.setContentID("mm7Test");
ss = "这是一个Replace MMS";
bb = null;
bb = ss.getBytes();
input = new ByteArrayInputStream(bb);
sub2 = MMContent.createFromStream(input);
sub2.setContentID("2.txt");
sub2.setContentType(MMConstants.ContentType.TEXT);
content.addSubContent(sub2);
replaceReq.setContent(content);
rsRes = MMSSender.send(replaceReq);
if(rsRes instanceof MM7ReplaceRes)
{
MM7ReplaceRes replaceRes = (MM7ReplaceRes)rsRes;
System.out.println("Replace!res.statuscode="+replaceRes.getStatusCode()+";res.statustext="+replaceRes.getStatusText());
}else{
System.out.println("不正确消息!rsRes.statuscode="+rsRes.getStatusCode() + ";rsRes.statusText=" + rsRes.getStatusText());
}
*/
} catch (Exception e) {
System.out.println(e);
}
return false;
}
public static void main(String[] args) throws IOException {
String[] destNumber = new String[]{"138000000"}; //发送电话号码
if (args != null && args.length == 1) {
destNumber[0] = args[0];
}
for (int i = 0; i < destNumber.length; i++) {
System.out.println("准备发送,手机号:" + destNumber[i]);
}
LinkedList ids = new LinkedList();
LinkedList types = new LinkedList();
LinkedList contents = new LinkedList();
ids.add("1.txt");
ids.add("2.jpg");
ids.add("3.jpg");
types.add("text");
types.add("jpg");
types.add("jpg");
contents.add("你好abc".getBytes());
contents.add(new byte[]{0, -1, -1, 1, 2});
contents.add(new byte[]{0, -1, -1, 1, 2});
String dir = "/root/workspace/mmapi/config/";
MMSApiTest mMSApiTest = new MMSApiTest(dir + "mm7Config.xml", dir + "ConnConfig.xml", dir + "mm7.properties");
mMSApiTest.sendMMS(destNumber, "10086", ids, types, contents);
System.out.println("发送完毕");
}
}
submit.setVASPID(VASPID);
//服务代码
submit.setVASID(VASID);
//业务代码
submit.setServiceCode(serviceCode);
//MM始发方的地址
submit.setSenderAddress(senderAddress);
submit.setChargedParty((byte)1);
submit.setDeliveryReport(false);
这几处是关键啊。之前一直报4007原来是收费不对。需要设置下收费模式。因为是给移动内部做,这个只是标示而已。但是需要写。