banco de desarrollo Java y el uso de Internet ICBC middleware (modo de Carolina del Norte), así como algunos errores Resumen

        Recientemente, la compañía en el sistema SAP, la necesidad de que los bancos y las piezas financiera directamente conectada con el banco, ya que el conector no se puede utilizar la tecnología de SAP, y la firma del banco también debe utilizar el socket tecnología, por lo que utilizar Grails para desarrollar un banco y middleware de Internet del banco, SAP requiere acceso a los datos bancarios.

Los siguientes son los principales códigos de middleware:

 / **

     * Banco banco @description interfaz directa
     * @param Identificación del certificado de ID
     * @param transcodificación código de transacción
     * @param número de banco BankCode casa
     * @param GroupCIS CEI Nº de grupo
     * @param PackageID instrucción número de secuencia de paquetes
     * @param SendTime tiempo de solicitud
     * @param Cert pasar vacía
     * @param reqData petición cadena XML
     * @param checkflag bandera de la firma '0' sin firma; '1' para ser firmado
     * @param versión del protocolo HTTP versión '0.0.1.0' o '0.0.0.1'
     * @return primero determinar el éxito, el éxito determinación cadena XML analizan. La determinación de si las condiciones para el éxito: cadena devuelta contiene "ERRORCODE =" por el fracaso; no incluya "ERRORCODE =" éxito
     * /
    @WebMethod
    @WebResult
    Enviar secuencia (@WebParam cadena de ID, @ WebParam cadena de transcodificar, @ WebParam cadena BankCode, @ WebParam Cuerda GroupCIS, @ WebParam cadena PackageID, @ WebParam cadena SendTime, @ WebParam cadena Cert, @ WebParam cadena reqData, @ WebParam cadena checkflag, @ WebParam versión String)
    {
        println reqData
        println versión


        de cadena resultTag = ""
        cadena encoding = "GBK";
        def url = "http://192.168.101.110:448/servlet/ICBCCMPAPIReqServlet?userID=${id}&PackageID=${packageId}&SendTime=${sendTime}"
        si ( "1" .equals (checkflag)) {
            reqData = commonService.check (reqData,





        NameValuePair [] params = new NameValuePair [9];
        params [0] = new NameValuePair ( 'Version', versión)
        params [1] = new NameValuePair ( 'transcodificar', transcodificar)
        params [2] = new NameValuePair ( 'BankCode', BankCode)
        params [3] = new NameValuePair ( 'GroupCIS', GroupCIS)
        params [4] = new NameValuePair ( 'PackageID', PackageID)
        params [5] = nuevo NameValuePair ( 'Cert', Cert)
        params [6] = new NameValuePair ( 'reqData', reqData)


        params [ 7] = nuevo NameValuePair ( 'ID', id)
        params [8] = new NameValuePair ( 'Content-Type', "application / x-www-form-urlencoded")


        PostMethod postRequest = new PostMethod (url.trim ()) ;


        postRequest.setRequestHeader ( "Content-Type", "application / x-www-form-urlencoded")
        HttpMethodParams p = new HttpMethodParams ()
        p.setVersion (HttpVersion.HTTP_1_1)
        postRequest.setParams (p)
        postRequest.setRequestBody (params);
        responseString = commonService.executeMethod (postRequest, codificación);
        if (! responseString || responseString.toUpperCase (). startsWith ( "ERRORCODE =")) {
            resultTag = responseString
        } else {
            responseString = responseString.substring (8, responseString.length ())
            resultTag = commonService.getContentFromBASE64 (responseString)
        }
        resultTag = resultTag.replaceAll ("", "")
        resultTag = resultTag.replaceAll ( "\ u0000", "")
        println resultTag
        retorno resultTag;

    }


empaquetar cn.com.wz


org.apache.commons.httpclient.Header importación
org.apache.commons.httpclient.HttpClient importación
org.apache.commons.httpclient.HttpException importación
importación org.apache.commons.httpclient.SimpleHttpConnectionManager
org.apache importación .commons.httpclient.methods.PostMethod


clase CommonService {
    / **
     * @description执行poste方法
     * @param s
     * @return
     * @Create huxx 15.07.2014
     * /
    cadena executeMethod (solicitud PostMethod, cadena de codificación) lanza la excepción {
        cadena responseContent = null;
        InputStream responseStream = null;
        BufferedReader rd = null;
        //超时间隔
        60000 connecttimeout = int;
        // make ConnectionManager se cierra cuando la gestión de la conexión httpclientconnection
        Boolean = alwaysClose en false;
        // devuelve los datos que codifican formato


        HttpClient HttpClient cliente nuevo nuevos = (nueva nueva SimpleHttpConnectionManager (alwaysClose));
        el try {
            client.executeMethod (Solicitud);
            SI ( ! encoding = null) {
                responseStream request.getResponseBodyAsStream = ();
                RD = el BufferedReader nuevo nuevo (nuevo nuevo la InputStreamReader (responseStream,
                        que codifica));
                cadena tempLine rd.readLine = ();
                el StringBuffer tempStr la StringBuffer nuevos nuevos = ();
                El System.getProperty CRLF = String ( "line.separator, y es");
                el tiempo (tempLine! = Null)
                {
                    TempStr.append (tempLine);
                    tempStr.append (CRLF);
                    tempLine rd.readLine = ();
                }
                responseContent = tempStr.toString ();
            } else
                responseContent request.getResponseBodyAsString = ();


            Cabecera locationHeader = request.getResponseHeader ( "UBICACIÓN");
            // el código de retorno de 302, 301, indican que la página ya redirigido, la ubicación URL re-petición, que se encuentra en
            / / autorización para tomar algo de la cookie de conexión importante
            IF (locationHeader! = null) {
                return "500"


            }
        } Catch (HttpException e) {
            throw new Excepción (e.getMessage ());
        } Catch (IOException e) {
            throw new Excepción (e.getMessage ());


        } Finally {
            si (rd! = Null)
                try {
                    rd.close ();
                } Catch (IOException e) {
                    throw new Excepción (e.getMessage ());
                }
            If (! ResponseStream = null)
                try {
                    responseStream.close ();
                } Catch (IOException e) {
                    throw new Excepción (e.getMessage ());


                }
        }
        Volver responseContent;
    }


    / **
     * retornos @description utiliza para base64 de descodificación de contenido
     * @param S
     * @return
     * @Create huxx 15.07.2014
     * /
    public String getContentFromBASE64 (String S) {
        IF (S == null)
            devuelto nulo;
        sun.misc.BASE64Decoder nueva nueva sun.misc.BASE64Decoder = decodificador ();
        el try {
            DEF = decoder.decodeBuffer dd (S)
            regresan nueva nueva cadena (dd, "GBK")
        } el catch (Exception e) {
            return null;
        }
    }


    / **
     * @description paquete de firmas XML
     * @param s
     * @Return
     * @Create huxx 15.07.2014
     * /
    def comprobar (def reqData, serie de codificación) {
        Cadena resultado = ""
        camino def = "http://192.168.101.110:449"
        def host = "192.168.101.110 "
        puerto def =" 449"
        socket socket = new socket ()
        BufferedReader BufferedReader;
        BufferedWriter BufferedWriter;
        try {
// def datos = URLEncoder.encode (reqData, que codifican)
            def datos = reqData
// socket = new Socket ( "192.168.101.110", 449); //建立连接,哪个ip,哪个端口号
            SocketAddress dest = new InetSocketAddress ( "192.168.101.110", 449);



            socket.setKeepAlive (true)
            //建立写入流,输出流,向服务器写数据,得到服务器回应
            OutputStream cabo = socket.getOutputStream ();
            OutputStreamWriter StreamWriter = nuevo OutputStreamWriter (socket.getOutputStream (), que codifica);


            BufferedWriter = nuevo BufferedWriter (StreamWriter);


            bufferedWriter.write ( "POST" + camino + "HTTP / 1.1 \ r \ n");
            bufferedWriter.write ( "Host:" + anfitrión + "\ r \ n");
            data.length println ()
            bufferedWriter.write ( "Content-Length:" + data.length () + "\ r \ n");
            bufferedWriter.write ( "Content-Type: INFOSEC_SIGN / 1,0 \ r \ n");
            bufferedWriter.write ( "\ r \ n");

            bufferedWriter.flush ();
            def es = socket.getInputStream ()


            BufferedInputStream StreamReader = nuevo BufferedInputStream (es);
            BufferedReader = new BufferedReader (nuevo InputStreamReader (StreamReader, la codificación));
            Línea de cadena = null;
            line = bufferedReader.readLine ()
            def bandera = 0
            while ((línea! = null))
            {
                si (line.toUpperCase (). indexOf ( "signo <>")> = 0) {
                    bandera = 1
                }
                si (línea. toUpperCase (). indexOf ( "</ SIGN>")> = 0) {
                    bandera = 0
                    descanso
                }


                si (bandera == 1) {
                    resultado + = línea
                }
                line = bufferedReader.readLine ()


            }
            System.out.println (resultado);
            out.close ()
            is.close ()




        } catch (Exception e) {
            e.printStackTrace ();
            ? e.cause .printStackTrace ()
        } finally {
            try {
                si {(socket! = null)
                    Socket.close ();
                    bufferedReader.close ();
                    bufferedWriter.close ();
                    Socket.close ();
                }
            La captura} (Excepción E2) {
                e2.printStackTrace ();
            }
        }
        // determina si la firma exitosa
        Resultado = result.replace ( "<Entrar>", "")
        de retorno Resultado
    }
}

El método básico de la utilización de estos datos se puede transmitir normalmente a la NC.

Cuando se utiliza la forma en Carolina del Norte, un método muy importante de la depuración es httpinfo.txt y signinfo.txt dos archivos de registro generados NC Vista. Podemos ver si el parámetro pasado por los archivos de registro incorrectos o faltantes.

Éstos son algunos buena comprensión de los problemas que tuve en el proceso de desarrollo se resumen:

A, <RetCode> 10385 </ RetCode > <RetMsg> com.icbc.cmp.base.TranFailException: [4066] error de transcodificación, la puerta de entrada antes de enviar a la tabla de conversión campo equivocado </ RetMsg>
Este error se debe a que el banco propagación los datos son incompletos o formato incorrecto
que se han encontrado con situaciones:
1, cuando el valor de versión posterior presentación (0.0.1.0 o 0.0.0.1) error de transmisión. (I hizo que el error de no capitalizado en iniciales Versión, lo que lleva parámetro de versión no se pasa en el pasado)
2, no se puede compensar en frente del cajero No. 0. ICBC a la descripción de interfaz en este campo es 5, si el cajero No. 12 debe escribir xml 12 no puede escribir 00012.


En segundo lugar, el ama de llaves no cuenta sin tener que enviar el número de serie en el xml en AcctSeq (número de cuenta) no introduzca un valor


Publicado 16 artículos originales · ganado elogios 1 · Vistas a 10000 +

Supongo que te gusta

Origin blog.csdn.net/a0604030212/article/details/38057249
Recomendado
Clasificación