• 关于税控的一些问题总结


    这次做了一个关于socket方式的税控接口,让人伤心的是,他们的接口文档总是不成熟,各种各样的错。

    先说说需要注意的地方。

    第一:关于socket传送的xml字符串时候应该注意的格式。要不然中文会乱码。

     /// <summary>
            /// 发送XML数据
            /// </summary>
            /// <param name="xml"></param>
            /// <param name="ip"></param>
            /// <param name="port"></param>
            /// <returns>发送XML数据结果</returns>
            public string SocketGetXML(string xml, string ip, string port)
            {
                byte[] result = new byte[1024];
                IPAddress ipAdress = IPAddress.Parse(ip);
                Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                clientSocket.Connect(new IPEndPoint(ipAdress, Convert.ToInt32(port)));
                clientSocket.Send(Encoding.GetEncoding("GB2312").GetBytes(xml));
                Thread.Sleep(1000);
                int receiveLength = clientSocket.Receive(result);
                clientSocket.Close();
                return Encoding.GetEncoding("GB2312").GetString(result, 0, receiveLength);
            }

    第二:关于模态化窗口传递中文参数应该注意的问题

    在前台js:

    var message = window.showModalDialog("InvoiceCharge.aspx?Kpr=" + encodeURI(encodeURI(Kpr)) + "&Je=" + Je + "&InvoVersion=" + InvoVersion + "&InvoNumber=" + fph, "", "dialogHeight:100px;dialogWidth:200px;status:no;center:yes;");

    后台C#处理时候:

    string Kpr = HttpUtility.UrlDecode(Request["Kpr"]);         

    string Je = Request["Je"];         

    string InvoVersion = Request["InvoVersion"];    

    string InvoNumber = Request["InvoNumber"];

    但是如果传递的参数中包含了—号或者%号等一些特别的符号,这时造成无法解析。可以在前台用encodeURIComponent(parameters)转化就行了。

    第三:关于模态化窗体的取值:

    可以在C#后台,将需要传递的值传递给一个隐藏域,

    同时在页面前台用用js获取他的值,但是这个js必须放在body的onload中加载。如:

      <script language="javascript" type="text/javascript">
           function onload() {
               var messsage = document.getElementById("HiddenField2").value;
            window.returnValue = messsage;
                window.close();
            }
        </script>
    </head>
    <body onload="onload();">

    第四:关于js解析xml字符串的问题。

    首先要把xml字符串转化为xml对象。然后解析

    //字符串转化为xml对象
    function toXmlDom(source) {
        var xmlDoc = null;
        if (window.ActiveXObject) {
            var ARR_ACTIVEX = ["MSXML4.DOMDocument", "MSXML3.DOMDocument", "MSXML2.DOMDocument", "MSXML.DOMDocument", "Microsoft.XmlDom"];
            var XmlDomflag = false;
            for (var i = 0; i < ARR_ACTIVEX.length && !XmlDomflag; i++) {
                try {
                    var objXML = new ActiveXObject(ARR_ACTIVEX[i]);
                    xmlDoc = objXML; XmlDomflag = true;
                } catch (e) { }
            } if (xmlDoc) {
                xmlDoc.async = false;
                xmlDoc.loadXML(source);
            }
        } else {
            var parser = new DOMParser();
            var xmlDoc = parser.parseFromString(source, "text/xml");
        }
        return xmlDoc;
    }

    这是一个适合各种浏览器的转化方法,兼容了IE和火狐。

    然后:

     function getAttributeValue(xmlNode, attrName) {
                if (!xmlNode) return "";
                if (!xmlNode.attributes) return "";
                if (xmlNode.attributes[attrName] != null)
                    return xmlNode.attributes[attrName].value;
                if (xmlNode.attributes.getNamedItem(attrName) != null)
                    return xmlNode.attributes.getNamedItem(attrName).value; return "";
            }

    这是获取相应节点中的属性值。


                              var  xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
                                xmlDoc.async = "false";
                                xmlDoc.loadXML(aryBill[i]);
                                var Je = (getAttributeValue(xmlDoc.getElementsByTagName("ITEM")[0].childNodes[55], "VALUE")).split(':')[1].toString();
                                var Kpr = (getAttributeValue(xmlDoc.getElementsByTagName("ITEM")[0].childNodes[70], "VALUE")).split(' ')[0].toString();
                                var fpbbh = InvoVersion;
                                var fph = getAttributeValue(xmlDoc.getElementsByTagName("ITEM")[0].childNodes[95], "VALUE");

    这是如何获取其中的值。

  • 相关阅读:
    第27课二阶构造模式(上)---------出现的背景
    第26课 静态成员函数
    第25课类的静态成员变量
    第24课经典问题解析(下)--------类的成员函数和成员变量隶属某个具体对象吗
    第24课经典问题(中)-----关于const对象的疑问
    第24课经典的问题(上)---------对象的构造顺序与析构顺序
    第23课 神秘的临时对象
    断剑重铸007
    DG on Windows 10 S: 执行任意代码
    断剑重铸006
  • 原文地址:https://www.cnblogs.com/selfimprove/p/4017769.html
Copyright © 2020-2023  润新知