Este artículo comparte el código específico del módulo de pago del centro comercial Java Online para su referencia. El contenido específico es el siguiente
1. Preparación de pago
Public String PagagePre (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioexception {req.setTribute ("orden", orderService.load (req.getParameter ("oid"))); return "f: /jsps/order/pay.jsp";}2. Método de pago
Pago de cadena pública (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioException {Properties props = new Properties (); PropS.Load (this.getClass (). GetClassLoader (). GetResourceasStream ("Payment.Properties")); /** 1. Prepare 13 parámetros*/string p0_cmd = "buy"; // negocio de negocios, valor fijo compra buy string p1_merid = props.getProperty ("p1_merid"); // el código de número de negocio, identificación única en yibao string p2_order = req.getParameter ("oid"); // orden de orden string p3_amt = "0.01 string"; p4_cur = "cny"; // comercial moneda, valor fijo cny string p5_pid = "" "; // Nombre del producto Cadena p6_pcat =" "; // Tipo de producto Cadena p7_pdesc =" "; // Descripción del producto Descripción String P8_URL = propspSproperty (" P8_URL "); // después del pago es exitoso, yibao acceso a esta dirección. Cadena p9_saf = ""; // dirección de envío cadena pa_mp = ""; // Información extendida cadena pd_frpid = req.getParameter ("yh"); // canal de pago cadena pr_needresponse = "1" ;/ mecanismo de respuesta, valor fijo 1/ * * 2. Cálculo de HMAC * 13 Parámetros se requieren * Se requiere * KeyValue es requerido * Encrryción CONCELTION. keyValue = props.getProperty ("keyValue"); String hmac = paymentUtil.BuildHMAC (P0_CMD, P1_MERID, P2_ORDER, P3_AMT, P4_CUR, P5_PID, P6_PCAT, P7_PDESC, P8_URL, P9_SAF, PA_MP, PD_FRPID, PR_NEEDRESPONSE, KEYVALUE); /** 3. Redirige a la pasarela de pago de Yibao*/StringBuilder sb = new StringBuilder ("https://www.yeepay.com/app-merchant-proxy/node"); sb.append ("?"). append ("p0_cmd ="). append (p0_cmd); sb.append ("&"). append ("p1_merid ="). append (p1_merid); sb.append ("&"). append ("p2_order ="). append (p2_order); sb.append ("&"). append ("p3_amt ="). append (p3_amt); sb.append ("&"). append ("p4_cur ="). append (p4_cur); sb.append ("&"). append ("p5_pid ="). append (p5_pid); sb.append ("&"). append ("p6_pcat ="). append (p6_pcat); sb.append ("&"). append ("p7_pdesc ="). append (p7_pdesc); sb.append ("&"). append ("p8_url ="). append (p8_url); sb.append ("&"). append ("p9_saf ="). append (p9_saf); sb.append ("&"). append ("pa_mp ="). append (pa_mp); sb.append ("&"). append ("pd_frpid ="). append (pd_frpid); sb.append ("&"). append ("pr_needResponse ="). append (pr_needResponse); sb.append ("&"). append ("hmac ="). append (hmac); resp.sendedirect (SB.ToString ()); devolver nulo;}3. Método de retroalimentación
Cuando el pago sea exitoso, Yibao accederá a él de dos maneras:
1. Guíe el navegador del usuario para redirigir (si el usuario cierra el navegador, no podrá acceder a esto)
2. El servidor de Yibao accederá a este método utilizando una comunicación punto a punto. (Debe devolver el éxito, de lo contrario, el servidor Yibao seguirá llamando a este método)
Public String Back (httpservletRequest req, httpservletResponse resp) lanza ServletException, ioexception { /** 1. Obtener 12 parámetros* / string p1_merid = req.getParameter ("p1_merid"); Cadena r0_cmd = req.getParameter ("r0_cmd"); Cadena r1_code = req.getParameter ("r1_code"); Cadena r2_trxid = req.getParameter ("r2_trxid"); Cadena r3_amt = req.getParameter ("r3_amt"); Cadena r4_cur = req.getParameter ("r4_cur"); Cadena r5_pid = req.getParameter ("r5_pid"); Cadena r6_order = req.getParameter ("R6_order"); Cadena r7_uid = req.getParameter ("r7_uid"); Cadena r8_mp = req.getParameter ("r8_mp"); Cadena r9_btype = req.getParameter ("r9_btype"); Cadena hmac = req.getParameter ("HMAC"); / * * 2. Obtenga KeyValue */ Properties Props = New Properties (); PropS.Load (this.getClass (). GetClassLoader (). GetResourceasStream ("Payment.Properties")); String keyValue = props.getProperty ("keyValue"); / * * 3. Llame al método de verificación de PayayUtil para verificar la identidad de la persona que llama *> Si la verificación falla: Guarde el mensaje de error y reenvíelo a msg.jsp *> Si la verificación pasa: * * Determine si el método de acceso está redirigido o punto a punto, si redirigió * modificar el estado del pedido, guardar la información, reenviarlo a msg.jsp * * si es un punto a punto: modificar el pedido y volver a poner el estado * bool = paymentUtil.verifyCallback (HMAC, P1_MERID, R0_CMD, R1_CODE, R2_TRXID, R3_AMT, R4_CUR, R5_PID, R6_ORDER, R7_UID, R8_MP, R9_BTYPE, KeyValue); if (! bool) {req.SetAttribute ("código", "error"); req.SetAttribute ("Msg", "Firma inválida, el pago falló! (No es una buena persona)"); return "f: /jsps/msg.jsp"; } if (r1_code.equals ("1")) {OrderService.Updatestatus (R6_order, 2); if (r9_btype.equals ("1")) {req.setAttribute ("código", "éxito"); req.SetAttribute ("Msg", "¡Felicitaciones, el pago es exitoso!"); return "f: /jsps/msg.jsp"; } else if (r9_btype.equals ("2")) {resp.getwriter (). print ("éxito"); }} return null;}4.pay.jsp
<%@ page lenguaje = "java" import = "java.util.*" pageEncoding = "gbk"%> <%@ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <! doctype html público "-// w3c // dtd html Transitional // en "> <html> <fead> <title> pay.jsp </title> <meta http-equiv =" pragma "content =" no-cache "> <meta http-equiv =" cache-confontrol "content =" no-cache "> <meta http-oquiv =" expira "contenido =" 0 "> <meta http-equtp =" keys "keys" Content = "Keyword1, Keyword2, Keyword3"> <meta http-equiv = "Descripción" Content = "Esta es mi página"> <!-<Link rel = "Stylesheet" type = "text/css" href = "Styles.css">-> <link rel = "stylesheet" type = "text/css" href = "<c: url valor = '/jss/css/orden/pay.css'/> "> <script type =" text/javaScript "src =" <c: url value = '/jQuery/jQuery-1.5.1.js/> "> </script> <script type =" text/javaScript "> $ (function () {$ (" IMG "). Click (click (() () $ (this) .attr ("name")). attr ("checked", true);});}); </script> </thead> <body> <div> <span> cantidad de pago: </span> <span> $ {orden.total} </span> <span> número: $ {orden.oid} </span> </iv> <form Action = "<c: orlsewe método = "post" id = "form1" target = "_ top"> <input type = "hidden" name = "método" valor = "pago"/> <input type = "hidden" name = "oid" valor = "$ {orden.oid}"/> <div> <div> seleccione Banca en línea </div> <divsy style = "Margin-ft: 20px;"> <div style = "MARGING-BOT id = "icbc-net-b2c" type = "radio" name = "yh" value = "icbc-net-b2c" checked = "checked"/> <img name = "icbc-net-b2c" align = "middle" src = "<c: url value = '/bank_img/icbc.bmp'/>"/> <input id = "cmbcina-netb" name = "yh" value = "cmbchina-net-b2c"/> <img name = "cmbchina-net-b2c" align = "medio" src = "<c: url valor = '/bank_img/cmb.bmp/>"/> <input id = "abc-b2c-b2c" type = "name =" yh "valor =" valor = "valor =" valor = "ABC-netb"/"/" ABC-B2C "Type =" Nombre de radio = "YH" valor = "Value =" ABC-NETB "/IMg"/". name="ABC-NET-B2C" align="middle" src="<c:url value='/bank_img/abc.bmp'/>"/> <input id="CCB-NET-B2C" type="radio" name="yh" value="CCB-NET-B2C"/> <img name="CCB-NET-B2C" align="middle" src="<c:url value='/bank_img/ccb.bmp'///> </div> <div style="margin-bottom: 20px;"> <input id="BCCB-NET-B2C" type="radio" name="yh" value="BCCB-NET-B2C"/> <img name="BCCB-NET-B2C" align="middle" src="<c:url valor = '/bank_img/bj.bmp' /// input id = "boco-net-b2c" type = "radio" name = "yh" value = "boco-net-b2c"/> <img name = "boco-net-b2c" align = "medio" src = "<c: valor url = '/bank_img/bcc.bmp'/// id = "boco-net-b2c"/> <input id = "cib-net-b2c" type = "radio" name = "yh" value = "cib-net-b2c"/> <img name = "cib-net-b2c" align = "medio" src = "<c: url value = '/bank_img/cib.bmp' /// input id =" nJcbb "netbbb" type = "Radio" name = "yh" value = "njcb-net-b2c"/> <img name = "njcb-net-b2c" align = "medio" src = "<c: url value = '/bank_img/nanjing.bmp' //// input id =" ID ID = "njcbbbb-net-b2c" tipo = "name =" name "name" yh "yh" yh "yh" yh "yh" value = "njcb-net-b2c"/> <img name = "njcb-net-b2c" align = "middle" src = "<c: url value = '/bank_img/nanjing.bmp' //// indiv> <div style =" margen-bottom: 20px; "> <input id =" cmbc-net-b2c "type =" nomin " valor = "cmbc-net-b2c"/> <img name = "cmbc-net-b2c" align = "medio" src = "<c: url value = '/bank_img/cmbc.bmp' //"/> <input id = "ceb-net-b2c" tipo = "radio" name = "yh" value = "cebnet-b2c"/> <img " name="CEB-NET-B2C" align="middle" src="<c:url value='/bank_img/guangda.bmp'///"/> <input id="BOC-NET-B2C" type="radio" name="yh" value="BOC-NET-B2C"/> <img name="BOC-NET-B2C" align="middle" src="<c:url valor valor = '/bank_img/bc.bmp' //// "/> <> <input id =" pinganBank-net "type =" radio "name =" yh "valor =" pinganBank-net "/> <img name =" pinganbank-net "align =" medio "src =" <c: url valor = '/bancos estilo = "margen-bottom: 20px;"> <input id = "cbhb-net-b2c" type = "radio" name = "yh" value = "cbhb-net-b2c"/> <img name = "cbhb-net-b2c" align = "medio" src = "<c: url valor = '/bank_img/bh.bmp id = "hkbea-net-b2c" type = "radio" name = "yh" value = "hkbea-net-b2c"/> <img name = "hkbea-net-b2c" align = "middle" src = "<c: url value = '/bank_img/dy.bmp' ////"/> "/input id =" nbcbbbbbbb-net-b2c "type" " name = "yh" value = "nbcb-net-b2c"/> <img name = "nbcb-net-b2c" align = "medio" src = "<c: url value = '/bank_img/ningbo.bmp' ///////> <input id =" Ecitic-net-b2c "type =" name "name =" yh "valor =" valor = "valor =" valor = "valor =" valor = "valor =" valor = "valor =" value = "ecitic-b"/b2c " <img name = "Ecitic-Net-B2C" align = "Middle" src = "<c: url value = '/bank_img/zx.bmp' ///"/> </div> <div style = "margin-bottom: 20px;"> <input id = "sdb-net-b2c" type = "name =" yh "value =" sdb-net-net "/"/iMg-net-net-net " name = "sdb-net-b2c" align = "middle" src = "<c: url value = '/bank_img/sfz.bmp' ///"/> <input id = "gdb-net-b2c" type = "radio" name = "yh" value = "gdb-net-b2c"/> <iMg name = "gdb-net-b2c" aline " src = "<c: url value = '/bank_img/gf.bmp' ///"/> <input id = "shb-net-b2c" type = "radio" name = "yh" valor = "shb-net-b2c"/> <img name = "shb-net-b2c" align = "medio" src = "<c: url value='/bank_img/sh.bmp'///"/> <input id="SPDB-NET-B2C" type="radio" name="yh" value="SPDB-NET-B2C"/> <img name="SPDB-NET-B2C" align="middle" src="<c:url value='/bank_img/shpd.bmp'///"/> </div> <div style = "margin-bottom: 20px;"> <input id = "post-net-b2c" type = "radio" name = "yh" value = "post-net-b2c"/> <img name = "post-net-b2c" align = "medio" src = "<c: url value = '/bank_img/post.bmp' //"/> "/input id =" BJCbcbcbcbbcbcbbbcbbbbcbbbbbbbn "" " type = "radio" name = "yh" value = "bjrcb-net-b2c"/> <img name = "bjrcb-net-b2c" align = "medio" src = "<c: url value = '/bank_img/beijingnongshang.bmp' //"/> "/input id =" hxb-net-b2c "tyte =" name "y" name "y" "y" "name" "y" "" y "" n. value="HXB-NET-B2C"/> <img name="HXB-NET-B2C" align="middle" src="<c:url value='/bank_img/hx.bmp'///"/> <input id="CZ-NET-B2C" type="radio" name="yh" value="CZ-NET-B2C"/> <img name="CZ-NET-B2C" align = "Middle" src = "<c: url value = '/bank_img/zheshang.bmp' /////// div> <div> <div style =" margin: 40px; "> <a href =" javascript: void $ ('#form1'). Subt (); "> next </a> </div> </div> </formulpago. Propiedades
p1_merid = 10001126856KeyValue = 69CL522AV6Q613II4W6U8K6XUW8VM1N6BFGYV769220IUYE9U37N4Y7RI4PLP8_URL = http/: // localhost/: 8080/bienes/órdenes?
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.