支付中心验签失败,因编码不同
在线支付接口对接过程中,e游客调用,跳转到支付中心提示“支付中心验签失败”。溢+接口开发找到我,说以前都好好的,可以调通。而且,复制请求form表单到一个html文件里,也是没问题的。
这让我想到,当时在对接kubao时,他们要求的编码是GBK。
那么,看来,这个问题也正是编码不同了。
两个应用编码不同,一个是GBK编码,另一个是UTF-8编码。现在要在GBK编码的应用里使用表单向UTF-8编码的应用里提交数据,很显然,如果不做特殊处理的话,会出现乱码。
解决方案就是在GBK编码的页面里编写如下代码:
<form method="post" action="..." accept-charset="utf-8"> ... </form>
假定一个文本域里存放的值是“溢加支付”,即:
<input type="hidden" name="goodsName" value="溢加支付" />
那么,
用<form id="payForm" action="http://192.168.10.27:898//PayAndRefund/PayPage.aspx" method="post" accept-charset="utf-8">,
支付中心收到的goodsName=%u6ea2%u52a0%u652f%u4ed8
用<form id="payForm" action="http://192.168.10.27:898//PayAndRefund/PayPage.aspx" method="post" accept-charset="GBK">,
支付中心收到的goodsName=%ufffd%ufffd%ufffd%u05a7%ufffd%ufffd
所以,在对参数验签时自然是不会通过的。
附:请求支付中心在线支付接口页的form表单:
<html>
<head></head>
<body>
<form id="payForm" action="http://192.168.10.27:898//PayAndRefund/PayPage.aspx" method="post" accept-charset="utf-8">
<input type="hidden" name="backAddress" value="http://192.168.10.27:8090//OrderPayBack/PayResult" />
<input type="hidden" name="bankAcctName" value="" />
<input type="hidden" name="bankCode" value="" />
<input type="hidden" name="bankIdNo" value="" />
<input type="hidden" name="bankIdType" value="" />
<input type="hidden" name="businessCode" value="1" />
<input type="hidden" name="cardNo" value="" />
<input type="hidden" name="goodsName" value="溢加支付" />
<input type="hidden" name="orderDateTime" value="20170315141621" />
<input type="hidden" name="orderNo" value="KB201703150000197" />
<input type="hidden" name="payMoney" value="100.00" />
<input type="hidden" name="paySource" value="1" />
<input type="hidden" name="platform" value="5" />
<input type="hidden" name="plattype" value="1" />
<input type="hidden" name="remark" value="小明的店保证金" />
<input type="hidden" name="returnUrl" value="http://192.168.10.27:8090//OrderPayBack/PayResultShow" />
<input type="hidden" name="riskData" value="" />
<input type="hidden" name="sharingData" value="" />
<input type="hidden" name="sign" value="9d708cf1c2f3533494b3675ce725dde4" />
<input type="hidden" name="systemId" value="5" />
<input type="hidden" name="userName" value="888010015200014" />
<input type="submit" style="display:none;" />
<script>document.forms['payForm'].submit();</script>
</form>
</body>
</html>