您的位置:首页 > 业界新闻

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

2016-12-25 19:57 441 查看
互联网支付中无论我们做消费还是退款,商户名称和商户地址要展示出来,但是我们的代码中如果这两个字段是中文就会发生验签失败的错误,这边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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  互联网支付