|
@@ -0,0 +1,158 @@
|
|
|
|
+package kd.bos.login.utils;
|
|
|
|
+
|
|
|
|
+import fi.cas.opplugin.TypeUtils;
|
|
|
|
+import kd.bos.dataentity.entity.DynamicObject;
|
|
|
|
+import kd.bos.logging.Log;
|
|
|
|
+import kd.bos.logging.LogFactory;
|
|
|
|
+import kd.bos.login.utils.sms.SMSSender;
|
|
|
|
+import kd.bos.orm.query.QFilter;
|
|
|
|
+import kd.bos.servicehelper.BusinessDataServiceHelper;
|
|
|
|
+import org.json.JSONObject;
|
|
|
|
+import org.json.XML;
|
|
|
|
+import org.w3c.dom.Document;
|
|
|
|
+import org.w3c.dom.Element;
|
|
|
|
+
|
|
|
|
+import javax.xml.parsers.DocumentBuilder;
|
|
|
|
+import javax.xml.parsers.DocumentBuilderFactory;
|
|
|
|
+import javax.xml.transform.OutputKeys;
|
|
|
|
+import javax.xml.transform.Transformer;
|
|
|
|
+import javax.xml.transform.TransformerFactory;
|
|
|
|
+import javax.xml.transform.dom.DOMSource;
|
|
|
|
+import javax.xml.transform.stream.StreamResult;
|
|
|
|
+import java.io.*;
|
|
|
|
+import java.net.Socket;
|
|
|
|
+import java.util.Calendar;
|
|
|
|
+
|
|
|
|
+/**
|
|
|
|
+ * 通用插件
|
|
|
|
+ * 2024-09-02 wangj
|
|
|
|
+ * 主要功能:短信发送扩展调用第三方接口
|
|
|
|
+ */
|
|
|
|
+public class DemoSMSSender implements SMSSender {
|
|
|
|
+ protected static final Log log = LogFactory.getLog(DemoSMSSender.class);
|
|
|
|
+ @Override
|
|
|
|
+ public boolean sendMessage(String phone, String message) {
|
|
|
|
+ Boolean flag = false;
|
|
|
|
+ //1.获取接口链接等信息
|
|
|
|
+ DynamicObject jkpzxx = BusinessDataServiceHelper.loadSingle("nckd_jkpzxx",new QFilter[]{new QFilter("number","=","dxyz")});
|
|
|
|
+ String servername = jkpzxx.getString("nckd_servername");
|
|
|
|
+ String port = jkpzxx.getString("nckd_port");
|
|
|
|
+ //2.获取xml对象
|
|
|
|
+ String bodyxml = createSingleMessageRequest(phone,message);
|
|
|
|
+ //3.调用接口
|
|
|
|
+ JSONObject cbsReturnJson =socketService(servername,port,bodyxml);
|
|
|
|
+ if(cbsReturnJson!=null) {
|
|
|
|
+ JSONObject reMessage = cbsReturnJson.getJSONObject("Message");
|
|
|
|
+ JSONObject reBodyInfo = reMessage.getJSONObject("BodyInfo");
|
|
|
|
+ if ("success".equals(reBodyInfo.getString("Fs_retMsg"))) {//相应成功
|
|
|
|
+ if ("000".equals(reBodyInfo.getString("Fs_retCode"))) {
|
|
|
|
+ flag = true;
|
|
|
|
+ log.info("短信前置机响应成功,前置机接口发送成功");
|
|
|
|
+ } else {
|
|
|
|
+ log.info("短信前置机响应成功,前置机接口发送失败");
|
|
|
|
+ }
|
|
|
|
+ } else {
|
|
|
|
+ log.info("短信发送前置机响应失败");
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ return flag;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String createSingleMessageRequest(String phone, String message) {
|
|
|
|
+ try {
|
|
|
|
+ DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
|
|
|
|
+ DocumentBuilder dBuilder = dbFactory.newDocumentBuilder();
|
|
|
|
+ Document doc = dBuilder.newDocument();
|
|
|
|
+ //创建Message节点
|
|
|
|
+ Element rootElement = doc.createElement("Message");
|
|
|
|
+ doc.appendChild(rootElement);
|
|
|
|
+ //创建BodyInfo节点
|
|
|
|
+ Element body = doc.createElement("BodyInfo");
|
|
|
|
+ rootElement.appendChild(body);
|
|
|
|
+ //拼接报文
|
|
|
|
+ createElement(doc, body, "Fs_channelcode", "JSX"); //渠道号
|
|
|
|
+ createElement(doc, body, "Fs_transcode", "SingleMsg"); //交易码
|
|
|
|
+ createElement(doc, body, "Fs_rpid", ""); //流水号(待提供)
|
|
|
|
+ createElement(doc, body, "Fs_phone", phone); //手机号
|
|
|
|
+ createElement(doc, body, "Fs_ParamCount", "2");//模板数量
|
|
|
|
+ createElement(doc, body, "ParamName1", "SmsVerifyCode");//模板名称1
|
|
|
|
+ createElement(doc, body, "ParamValue1", "");//模板值1
|
|
|
|
+ createElement(doc, body, "ParamName2", "SceneName");//模板名称2
|
|
|
|
+ createElement(doc, body, "ParamValue2", "");//模板值2
|
|
|
|
+
|
|
|
|
+ createElement(doc, body, "Fs_regOrg", "");//发送机构(待提供)
|
|
|
|
+ createElement(doc, body, "Fs_bizId", "00007");//业务类型id
|
|
|
|
+ createElement(doc, body, "Fs_templateld", "2409029227");//模板id
|
|
|
|
+
|
|
|
|
+ Calendar calendar = Calendar.getInstance();
|
|
|
|
+ int year = calendar.get(Calendar.YEAR);
|
|
|
|
+ int month = calendar.get(Calendar.MONTH) + 1;
|
|
|
|
+ int day = calendar.get(Calendar.DAY_OF_MONTH);
|
|
|
|
+ int hour = calendar.get(Calendar.HOUR_OF_DAY);
|
|
|
|
+ int minute = calendar.get(Calendar.MINUTE);
|
|
|
|
+ int second = calendar.get(Calendar.SECOND);
|
|
|
|
+ String Fs_reqDate = String.valueOf(year)+String.valueOf(month)+String.valueOf(day);
|
|
|
|
+ createElement(doc, body, "Fs_reqDate", Fs_reqDate);
|
|
|
|
+ String Fs_regTime = tranTime(hour,minute,second);
|
|
|
|
+ createElement(doc, body, "Fs_regTime", Fs_regTime);
|
|
|
|
+
|
|
|
|
+ TransformerFactory transformerFactory = TransformerFactory.newInstance();
|
|
|
|
+ Transformer transformer = transformerFactory.newTransformer();
|
|
|
|
+ // 指定编码格式为GBK
|
|
|
|
+ transformer.setOutputProperty(OutputKeys.ENCODING, "GBK");
|
|
|
|
+ transformer.setOutputProperty(OutputKeys.INDENT, "yes");
|
|
|
|
+
|
|
|
|
+ DOMSource source = new DOMSource(doc);
|
|
|
|
+ StringWriter writer = new StringWriter();
|
|
|
|
+ StreamResult result = new StreamResult(writer);
|
|
|
|
+ transformer.transform(source, result);
|
|
|
|
+ return writer.toString();
|
|
|
|
+ } catch (Exception e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private String tranTime(int hour, int minute, int second) {
|
|
|
|
+ String Fs_regTime = String.valueOf(hour)+String.valueOf(minute)+String.valueOf(second);
|
|
|
|
+
|
|
|
|
+ return Fs_regTime;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public static JSONObject socketService(String serverName,String port,String xmlData){
|
|
|
|
+ try {
|
|
|
|
+ Socket client = new Socket(serverName, TypeUtils.nullToInt(port));
|
|
|
|
+ OutputStream outToServer = client.getOutputStream();
|
|
|
|
+ PrintWriter out = new PrintWriter(new OutputStreamWriter(outToServer, "GBK"), true);
|
|
|
|
+ out.println(xmlData);
|
|
|
|
+
|
|
|
|
+ InputStream inFromServer = client.getInputStream();
|
|
|
|
+ BufferedReader in = new BufferedReader(new InputStreamReader(inFromServer, "GBK"));
|
|
|
|
+ StringBuilder responseBuilder = new StringBuilder();
|
|
|
|
+ String line;
|
|
|
|
+ while ((line = in.readLine()) != null) {
|
|
|
|
+ responseBuilder.append(line);
|
|
|
|
+ }
|
|
|
|
+ String responseJson = responseBuilder.toString();
|
|
|
|
+ if(responseJson.indexOf("<?xml")>0){
|
|
|
|
+ int index = responseJson.indexOf("<?xml");
|
|
|
|
+ responseJson = responseJson.substring(index);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ JSONObject jsonObject = XML.toJSONObject(responseJson);
|
|
|
|
+ client.close();
|
|
|
|
+ return jsonObject;
|
|
|
|
+ } catch (IOException e) {
|
|
|
|
+ e.printStackTrace();
|
|
|
|
+ log.info("短信发送失败:"+e.getMessage());
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ private static void createElement(Document doc, Element parent, String name, String value) {
|
|
|
|
+ Element element = doc.createElement(name);
|
|
|
|
+ element.appendChild(doc.createTextNode(value));
|
|
|
|
+ parent.appendChild(element);
|
|
|
|
+ }
|
|
|
|
+}
|