互联网支付-B2C商户名称显示中文问题

来源:互联网 发布:js分离文件 编辑:程序博客网 时间:2024/05/08 07:13

互联网支付中无论我们做消费还是退款,商户名称和商户地址要展示出来,但是我们的代码中如果这两个字段是中文就会发生验签失败的错误,这边B2C的模式是输入了除银行卡号之外的所有信息之后就点击下一步(不截图了)往银联发报文请求,才能跳转到银联的界面,才开始还没跳转到这个jsp页面,就发生验签失败的错误,认为是后台对这两个中文字段的编码和解码有问题,使劲改后台代码,发现不奏效,后来认真分析日志发现,日志中在利用我们发送给银联的报文字段,动态拼接jsp页面,也就是点击下一步后跳转的页面,查看该页面的源代码。不是正常的jsp的格式,都是获取数据,来动态拼接的。这个页面里面有两处地方存在编码格式,下面的源代码已经修改。我们修改了jsp的编码格式,不再报验签失败,能够正常跳转到银联的页面。 当然其他的支付方式可能就不是简简单单改改jsp页面的编码格式就能完成了,可能要改后台代码什么的,不能一概而论,这里只是记述一种修改方法。

<%@ page language="java" import="java.util.*,com.murong.ecp.app.cashier.util.*,org.apache.commons.lang.*"pageEncoding="UTF-8"%><%@ include file="/include/page.jsp"%><%    HashMap root = (HashMap)request.getAttribute("EDB");    //out.println("root:[" + root.toString() + "]");    //out.println("===================================================");    String bankStr;    HashMap bank   = new HashMap();    if( root != null )     {       bankStr        = (String)root.get("bank_str");             //out.println("bank_STR:"+bankStr);       if (bankStr != null)       {          //首先用<hi:$$>分割          //String[] items = bankStr.split("[<hi:$$>]{7}");          bankStr = bankStr.replaceAll(SystemUtils.LINE_SEPARATOR,"");          String[] items = StringUtils.splitByWholeSeparator(bankStr,"<hi:$$>");          if (items!=null)          {             //out.println("items len:"+items.length);             for (int i=0;i<items.length;i++)             {                String item = (String)items[i];                if (item!=null)                {                   //每个参数的名字和值用<hi:=>分割                   //String[] element = item.split("[<hi:=>]{6}");                   //String[] element = StringUtils.splitByWholeSeparator(item,"<hi:=>");                   String[] element=item.split("<hi:=>");                   if (element!=null && element.length==2)                   {                      //out.println("name:"+element[0]+" value:"+element[1]);                      //把值放在MAP中                      bank.put(element[0],element[1]);                   }                }             }          }       }       request.setAttribute("bank",bank);    }%><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><script language="JavaScript" type="text/JavaScript">var sumbit_flg = true;function dosubmit() {var url = "${bank.url}";if (url == null) {alert("银行URL地址为空!")return;}if (sumbit_flg) {document.turn2bank.submit();}sumbit_flg = false;}</script></head><body onload="dosubmit()" ><form name="turn2bank" action="${bank.url}" method="${bank.method}"><table style="width:100%"><c:forEach items="${bank}" var="li"><c:if test="${li.key != 'url'}"><c:if test="${li.key != 'method'}"><input type="text" name="${li.key}" value="${li.value}" /></c:if></c:if></c:forEach></table></form></body></html>


0 0