联通一信通短信平台接口调用
- 起承转
- 准备工作
- 主要调用功能
- 发送短信
- 接收回复短信
起承转
业务需要调用联通一信通短信接口。
准备工作
调用接口前需要一系列准备工作,步骤如下:
- 企业账户相关信息,你需要有相应的账户和密码 官网入口;
- 工作台选择接口业务;
- 接口配置中主要就是接口接入ip白名单和发送短信相关配置选项(无法自己修改,直接致电主页里的服务热线);
- 发送模板则用来预先配置你的短信模板;
- 接口申请即申请接口开发权限页面,另外调用接口的密钥也在这里,ps(因为在我接手之前已经申请好了,所以我也不太清楚具体流程,想了解的可以咨询联通客服);
- 开发教程下载接口规范和demo程序。
主要调用功能
发送短信
参考demo写的定时任务(quartz),其中需要注意的是发送短信的内容一定要和之前定义的模板格式相同
public static String company = "***";
public static String userName = "****";
public static String pwd = "****";
public static SmsStub stub = null;
static{
try {
stub = new SmsStub("http://sms.api.ums86.com:8899/sms_hb/services/Sms?wsdl");//高并发时注意使用单实例
stub._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, true);//高并发时设置成true
} catch (AxisFault e) {
e.printStackTrace();
}
}
public void execute(JobExecutionContext context) throws JobExecutionException {
//crm系统中查询出请求参数
String resource = "mybatis-crm-config.xml";
InputStream inputStream = null;
List<Satisfaction> list = new ArrayList<Satisfaction>();
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e) {
e.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession();
DateControl dateControl = new DateControl();
String searchTime = dateControl.getHalfHourBefore();
list = sqlSession.selectList("com.xzzx.liminghua.dao.SatisfactionDao.SelectSatisfactionParam", searchTime);
if(!list.isEmpty()) {
//调用发送短信接口
SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmssSSS");
SimpleDateFormat formatTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
//发送接口,高并发请采用多线程提交
SmsStub.Sms sms0 = new SmsStub.Sms();
//重新加载数据源
resource = "mybatis-amdb-config.xml";
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e1) {
e1.printStackTrace();
}
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
sqlSession = sqlSessionFactory.openSession();
SmsStub.SmsResponse resp;
int num = 0;
//循环插入参数并发送短信,同时上传至数据库
for(int index = 0;index<list.size();index++) {
//若为军品服务不发送短信,跳过循环
if(list.get(index).customerPhone.startsWith("★★★")) {
continue;
}
//流水号
String serialId = "000"+format.format(new Date());
//当前发送时间
String sendSmsTime = formatTime.format(new Date());
//企业编号
sms0.setIn0(company);
//登录名
sms0.setIn1(userName);
//密码
sms0.setIn2(pwd);
//转换时间格式
String receiveProblemTime = null;
try {
receiveProblemTime = dateControl.formateDate(list.get(index).getReceiveProblemTime());
} catch (ParseException e1) {
e1.printStackTrace();
}
//拼接短信内容
sms0.setIn3("尊敬的客户,您好,您于"+receiveProblemTime+"发起的"+list.get(index).getProductId()+"("+
list.get(index).getVinName()+")信息单已服务完毕,为改善和提升服务质量,邀请您对本次服务过程进行评价: 1.非常满意 2.满意 3.不满意,回复数字即可,感谢您的支持。");
//手机号码
sms0.setIn4(list.get(index).getCustomerPhone());
//流水号
sms0.setIn5(serialId);
//立即发送
sms0.setIn6(sendSmsTime);
//设置上传参数
//将短信流水号作为唯一标识id
list.get(index).setId(serialId);
//将发送信息时间赋到要插入的满意度信息中
list.get(index).setSendSmsTime(sendSmsTime);
sms0.setIn7("1");
sms0.setIn8("");
sms0.setIn9("");
//执行发送操作
try {
resp = stub.Sms(sms0);
//发送成功
if(resp.getOut().startsWith("result=0")) {
//设置调研状态 0-已发送短信 1-客户已回复
list.get(index).setResearchState("0");
num = num+sqlSession.insert("com.xzzx.liminghua.dao.SatisfactionDao.insertToAmdb", list.get(index));
sqlSession.commit();
//发送失败
}else {
System.out.println("发送失败,错误代码:"+resp.getOut());
}
stub.cleanup();//使用完后cleanup
} catch (RemoteException e) {
e.printStackTrace();
}
}
System.out.println("上传"+num+"条数据成功");
}else {
System.out.println("无可发送客户列表");
}
}
接收回复短信
public static String company = "***";
public static String userName = "***";
public static String pwd = "***";
public static SmsStub stub = null;
static{
try {
stub = new SmsStub("http://sms.api.ums86.com:8899/sms_hb/services/Sms?wsdl");//高并发时注意使用单实例
stub._getServiceClient().getOptions().setProperty(HTTPConstants.REUSE_HTTP_CLIENT, false);//高并发时设置成true
} catch (AxisFault e) {
e.printStackTrace();
}
}
public void execute(JobExecutionContext context) throws JobExecutionException {
//获取用户回复
SmsStub.ReplyRequest replyRequest = new SmsStub.ReplyRequest();
SmsStub.ReplyResponse resp1 = null;
replyRequest.setIn0(company);//企业编号
replyRequest.setIn1(userName);//登录名
replyRequest.setIn2(pwd);//密码
//存放回复信息的中间变量实例化
ArrayList<ReplyInfo> replyList = new ArrayList<ReplyInfo>();
//获取客户回复信息
try {
resp1 = stub.Reply(replyRequest);
} catch (RemoteException e) {
e.printStackTrace();
}
//执行结果
System.out.println("查询客户回复完毕,结果状态代码:"+resp1.getResult());
//得到客户信息并存放进中间变量
SmsStub.Reply[] replys = resp1.getReplys();
if(replys!=null){
for(int i=0;i<replys.length;i++){
ReplyInfo replyInfo = new ReplyInfo();
replyInfo.setCustomerPhone(replys[i].getMdn());
replyInfo.setReplyTime(replys[i].getReply_time());
replyInfo.setReplyContent(replys[i].getContent());
replyList.add(replyInfo);
}
}
//调用Mybatis进行jdbc操作
String resource = "mybatis-amdb-config.xml";
InputStream inputStream = null;
try {
inputStream = Resources.getResourceAsStream(resource);
} catch (IOException e1) {
e1.printStackTrace();
}
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
SqlSession sqlSession = sqlSessionFactory.openSession(false);
//若存在回复信息,则执行更新操作,根据回复信息中的手机号码进行客户满意度调查数据更新
if(!replyList.isEmpty()){
for(int i=0;i<replyList.size();i++) {
sqlSession.update("com.xzzx.liminghua.dao.SatisfactionDao.updateSatisfaction", replyList.get(i));
sqlSession.commit();
}
}else {
System.out.println("无客户回复信息");
}
//回复确认,以便下一次获取新的客户回复信息
SmsStub.ReplyConfirmRequest confirm = new SmsStub.ReplyConfirmRequest();
confirm.setIn0(company);//企业编号
confirm.setIn1(userName);//登录名
confirm.setIn2(pwd);//密码
confirm.setIn4(resp1.getId());//上一次得到客户回复信息中最后一条的id值
SmsStub.ReplyConfirmResponse resp2 = null;
try {
resp2 = stub.ReplyConfirm(confirm);
System.out.println("确认完毕,状态代码:"+resp2.getResult());
} catch (RemoteException e) {
e.printStackTrace();
}
}
需要调用的类如图
相关的包和类都在链接里链接里 >一信通demo 突然发现上传的资源终于可以设置不要积分了哈哈哈很好很好-