推荐公众号

==有彩蛋哦!!!==(或者公众号内点击网赚获取彩蛋)

程序员探索之路

服务商

在网上兜兜转转没有找到免费的网络传真API,只好付费服务商bnetfax

代码

有了API后那其他的就是按照文档开发了没什么难度

发送代码

public static void main(String[] args) throws IOException, ServiceException {

收件人号码

String destnumbers = "********";

发送主题

String title = "代码测试发送传真";

FaxConfig faxConfig = FaxConfig.builder()

企业账号

.bnetaccount("********")

密码

.password("********")

发送者号码

.sendnumber("********")

用户账号

.useraccount("********")

区号

.areaid("********")

.build();

List paths = Lists.newArrayList("test.pdf");

FaxResultDTO faxResultDTO = sendFax(faxConfig, title, destnumbers, paths);

log.info("faxResultDTO=[{}]", faxResultDTO);

}

public static FaxResultDTO sendFax(FaxConfig faxConfig, String title, String destnumbers, List filePath) throws IOException, ServiceException {

Map fileBuffer = getFileBuffer(filePath);

//生成访问Soap传真服务接口的UserTest实例

SoapFaxClient soapFaxClient = new SoapFaxClient();

//通过UserTest.upload()把字节大小和文件名传过去以访问Soap传真服务接口

String xml = soapFaxClient.doSendFax(fileBuffer,

faxConfig.getSendnumber(), title, faxConfig.getUseraccount(), faxConfig.getBnetaccount(),

faxConfig.getPassword(), destnumbers, faxConfig.getAreaid());

//将发送与返回的xml包分开

String[] xmls = xml.split("@@");

// System.out.println("保存服务端返回的xml到request域中" + xmls[0]);

// System.out.println("保存客户端发送的xml到request域中" + xmls[1]);

//xml包解析

FaxResultDTO faxResultDTO = parseFaxResultXml(xmls[0]);

String resultCode = faxResultDTO.getResultCode();

String faxid = faxResultDTO.getFaxid();

String resultdesc = faxResultDTO.getResultdesc();

if (resultCode != null && (!"".equals(resultCode)) && (resultCode.equals("1000"))) {

log.info("faxid=[{}], success", faxid);

} else {

log.info("resultCode:[{}],resultdesc=[{}]", resultCode, resultdesc);

}

faxResultDTO.setRequestXml(xmls[1]);

faxResultDTO.setResponseXml(xmls[0]);

return faxResultDTO;

}

private static FaxResultDTO parseFaxResultXml(String xml) {

ServletClass xmlParser = new ServletClass();

String resultCode = null;

String faxid = null;

String hashcode = null;

String timestamp = null;

String resultdesc = null;

FaxResultDTO faxResultDTO = null;

try {

xmlParser.loadXml(xml);

resultCode = xmlParser.getSingleNodeValue("resultcode");

faxid = xmlParser.getSingleNodeValue("faxid");

hashcode = xmlParser.getSingleNodeValue("hashcode");

timestamp = xmlParser.getSingleNodeValue("timestamp");

resultdesc = xmlParser.getSingleNodeValue("resultdesc");

faxResultDTO = new FaxResultDTO(resultCode, faxid, hashcode, timestamp, resultdesc);

} catch (Exception e) {

log.error("解析fax-result-xml失败", e);

e.printStackTrace();

}

return faxResultDTO;

}

/**

* 返回 key=文件名 value=文件byte数组

* @param path

* @return

* @throws IOException

*/

private static Map getFileBuffer(List path) throws IOException {

Map map = Maps.newHashMap();

path.forEach(p -> {

File file1 = new File(p);

FileInputStream fileInputStream = null;

try {

fileInputStream = new FileInputStream(file1);

String filename = file1.getName();

//获取文件大小

int filelength = Integer.valueOf(String.valueOf(file1.length()));

//字节大小

byte[] buffer = new byte[filelength];

InputStream streamIn1 = fileInputStream;

streamIn1.read(buffer);

streamIn1.close();

map.put(filename, buffer);

} catch (FileNotFoundException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

});

return map;

}

客户端请求发送传真件接口

public String doSendFax(Map fileBuffer,

String sendnumber, String title, String useraccount, String bnetaccount, String password,

String destnumbers, String areaid) throws ServiceException, RemoteException {

设置请求访问Soap网络传真接口的url

String endPoint = "*****************";

String xml = null;

Service service = new Service();

Call call = (Call) service.createCall();

call.setTargetEndpointAddress(endPoint);

设置请求访问的url及接口名称

call.setOperationName(new QName(endPoint, "SendFax"));

获取附件

Map fileNamesAndObjects = getFileNamesAndObjects(fileBuffer);

String[] filename = (String[]) fileNamesAndObjects.get("name");

Object[] objects = (Object[]) fileNamesAndObjects.get("object");

MD5 md5 = new MD5();

MD5加密password

password = MDES.encrypt(password);

final String KEY = "*******";

获取系统时间戳

long timestamp = System.currentTimeMillis();

生成哈希码 Md5(useraccount + timestamp + KEY)

StringBuilder inbuf = new StringBuilder(useraccount)

.append(bnetaccount)

.append(timestamp)

.append(KEY);

String hashcode = md5.getMD5ofStr(inbuf.toString());

StringBuffer xmlstring = new StringBuffer(

"<?xml version=\"1.0\" encoding=\"GB2312\" ?>")

.append("\n")

.append("\n" + useraccount + "")

.append("\n" + bnetaccount + "")

.append("\n" + areaid + "")

.append("\n" + password + "")

.append("\n" + destnumbers + "")

.append("\n" + sendnumber + "")

.append("\n

" + title + "")

// xmlstring.append("\n" + piclevel + "");

.append("\n" + timestamp + "")

.append("\n" + hashcode + "")

.append("\n" + filename[0] + "," + filename[1] + ","

+ filename[2] + "," + filename[3] + "," + filename[4] + "," + filename[5]

+ "," + filename[6] + "," + filename[7] + "," + filename[8] + ","

+ filename[9] + "")

.append("\n" + 1 + "")

.append("\n");

log.info("FAX-发送xmL:[{}]", xmlstring.toString());

客户端调用Soap传真服务发送传真件接口

objects[0] = xmlstring.toString();

xml = (String) call.invoke(objects);

xml += "@@" + xmlstring.toString();

return xml;

}

private static Map getFileNamesAndObjects(Map fileBuffer) {

Map map = new HashMap<>();

String[] filename = new String[]{"", "", "", "", "", "", "", "", "", ""};

Object[] objects = new Object[]{"", new byte[0], new byte[0], new byte[0], new byte[0], new byte[0], new byte[0], new byte[0], new byte[0], new byte[0], new byte[0]};

int i = 0;

for (Map.Entry entry : fileBuffer.entrySet()) {

String key = entry.getKey();

byte[] value = entry.getValue();

filename[i] = key;

objects[i + 1] = value;

++i;

}

map.put("name", filename);

map.put("object", objects);

return map;

}

返回成功报文

***********

1000

传输正常

************

**********

回执接口

客户端请求查询传真回执接口

public String queryFaxResult(String faxId) {

设置请求访问Soap网络传真接口的url

String endPoint = "*************";

Call call = null;

String xml = null;

try {

Service service = new Service();

call = (Call) service.createCall();

call.setTargetEndpointAddress(endPoint);

设置请求访问的url及接口名称

call.setOperationName(new QName(endPoint, "queryFaxResult"));

MD5 md5 = new MD5();

final String KEY = "**********";

获取系统时间戳

long timestamp = System.currentTimeMillis();

生成哈希码 Md5(faxid + timestamp + KEY)

String hashcode = md5.getMD5ofStr(faxId + timestamp + KEY);

StringBuffer xmlstring = new StringBuffer(

"<?xml version=\"1.0\" encoding=\"GB2312\" ?>");

xmlstring.append("\n");

xmlstring.append("\n" + faxId + "");

xmlstring.append("\n" + timestamp + "");

xmlstring.append("\n" + hashcode + "");

xmlstring.append("\n");

//System.out.println("\n发送的XML:\n"+xmlstring.toString());

//客户端调用Soap传真服务查询传真回执接口

xml = (String) call.invoke(new Object[]{xmlstring.toString()});

//为了同时返回发送和返回的xml包,将两个包用“@@”连接

xml += "@@" + xmlstring.toString();

} catch (Exception ex) {

ex.printStackTrace();

System.out.println("打印错误:\n" + ex.toString());

}

return xml;

}

回执接口返回报文

N

1000

结果:总共需发送号码1个,已发送0个,未发送1个

**************

*************

@@<?xml version="1.0" encoding="GB2312" ?>

********************

*********

*************

java 浏览器发送传真_java---------发送网络传真相关推荐

  1. Java短信频率_java发送短信系列之限制发送频率

    本篇是发送短信的第二部分, 这里我们介绍一下如何限制向同一个用户(根据手机号和ip)发送短信的频率. 1.使用session 如果是web程序, 那么在session中记录上次发送的时间也可以, 但是 ...

  2. java 限制发送频率_java发送短信如何限制发送频率例子代码

    本篇文章主要是详细介绍了java发送短信系列之怎么限制发送频率示例解析,在此为大家介绍一下怎么样限制向同一个用户(根据手机号和ip)发送短信的频率. 1.使用session 要是web程序那在sess ...

  3. java exchange发邮件_java发送exchange邮件问题

    /** * 发送邀请 * @param cycleModel*/ protected voidsendEmail(CycleMailModel cycleModel) { Properties pro ...

  4. java httpget 传参数_Java 发送http请求(get、post)

    1.情景展示 java发送get请求.post请求(form表单.json数据)至另一服务器: 可设置HTTP请求头部信息,可以接收服务器返回cookie信息,可以上传文件等: 2.代码实现 所需ja ...

  5. java 限制发送频率_java发送短信系列之限制日发送次数

    在前两篇文章中, 我们实现了同步/异步发送短信以及限制发送短信频率.这一篇, 我们介绍一下限制每日向同一个用户(根据手机号和ip判断)发送短信的次数 1.数据表结构 由于需要记录整天的发送记录, 因此 ...

  6. java 手机短信_JAVA发送手机短信

    JAVA发送手机短信,流传有几种方法:(1)使用webservice接口发送手机短信,这个可以使用sina提供的webservice进行发送,但是需要进行注册;(2)使用短信mao的方式进行短信的发送 ...

  7. java发送请求_Java发送Http请求

    直接导入第三方jar commons-httpclient commons-httpclient 3.1 工具类代码 import org.apache.commons.httpclient.Http ...

  8. java http 返回值_java发送http请求,无需等待返回结果

    浮云间 HttpURLConnection有个setReadTimeout的方法可以实现你的需求.publicstaticStringdoGet(StringHTTP_URL,Objectobject ...

  9. java 短信软件_Java 发送短信工具类

    标签: /** * SMS短信组件 * @author Administrator * */ public class SMSSender { protected Logger logger=Logg ...

最新文章

  1. java jmx连接不上_JMX连接服务端失败
  2. from import python3_《Python语言程序设计》 —3.3.2 from import
  3. 突然发现我还有博客园的博客呢哈哈哈哈
  4. 谈谈分布式的场景及分布式事务的解决方案
  5. 嵌入式产品开发设计需要考虑的问题总结
  6. SAP Spartacus的OccCmsPageNormalizer
  7. error c4996: 'fopen' This function or variable may be unsafe如何解决
  8. java自定义错误码类_如何编写和应用Java的自定义异常类
  9. Memcached学习一:Memcached安装使用
  10. ehcache缓存的详细配置
  11. 你如何在PowerShell中注释掉代码?
  12. 3. 线性表的链式结构
  13. unity序列帧动画的粒子特效
  14. 【单片机】2.9 看门狗定时器(WDT)功能简介
  15. ubuntu使用cmake编译coffe
  16. 电子护照阅读器现身出入境办证大厅
  17. 响铃:揭底滴滴们跨界营销“真相”,再教你玩一出好戏
  18. 终于可以舒服的看电子书了
  19. JetBrains PyCharm JetBrains PyCharm 2018.1.3 x64永久破解
  20. python 操作excel2007

热门文章

  1. 2017华为软件精英挑战赛系列一
  2. CQF笔记M1L3泰勒级数和转移概率密度函数
  3. 【AdvancedLocomotionSystemV】第七篇 C++ 实现角色蹲伏和跑步细节
  4. 资源中心:一. 漫画系列
  5. Android Paging3的使用
  6. 华硕飞行堡垒6打开tpm
  7. 接收后台数据并向后台发送数据
  8. MxCAD5.2 2017.2.23更新
  9. nfs:server is not responding, still trying(NFS,不能从服务器读取,mount的问题)
  10. 编写一个判断素数的函数,在主函数输入一个整数时,输出是否素数的信息。