使用WebView进行postUrl请求发送参数过程中数据丢失或错误的问题。

这几天在使用webview进行postUrl的时候出现参数丢失的问题。

最近公司的项目,进行对接第三方支付。具体流程是客户端请求后台接口,把后台返回的参数拼接到Url后与第三方支付进行交互,用webview展示第三方的页面,webview需要post来传递一些参数:

 

String HfSubmitUrl = mBody.getHfSubmitUrl();
String HfPostData = "Version=" + mBody.getVersion() + "&CmdId="
+ mBody.getCmdId() + "&MerCustId=" + mBody.getMerCustId()
+ "&RetUrl=" + mBody.getRetUrl() + "&BgRetUrl="
+ mBody.getBgRetUrl() + "&UsrId=" + mBody.getUsrId()
+ "&UsrName=" + mBody.getUsrName() + "&IdType="
+ mBody.getIdType() + "&IdNo=" + mBody.getIdNo() + "&MerPriv="
+ mBody.getMerPriv() + "&PageType=" + mBody.getPageType()
+ "&ChkValue=" + mBody.getChkValue();
mView.postUrl(HfSubmitUrl,EncodingUtils.getBytes(HfPostDatas, "base64"));

但是不同的账号请求后台返回的参数里会不同,在于第三方支付交互的时候出现了问题,参数明明传的没有问题。从后台解析中发现是参数错误。

仔细查看过后,原来是在数据进行base64加密的时候出现了问题,参数中带有"+"号的全都不翼而飞了,变成了空格,第三方接收到的参数不对,页面也就会报错。

随后在网上查了资料,上面说"+"号在url中属于特殊符号可能在服务器端无法获得正确的参数值,包括还有“=”、空格、“%”、“&”、“#”。于是

 

try {
	postData = URLEncoder.encode(data.toString(), "utf-8");
     } 
catch (UnsupportedEncodingException e) 
{
	e.printStackTrace();
}

  URLEncoder就对字符进行了比较好的处理了。

但是,有些情况是可以这么处理,如果处理一整串,那就会把其他的字符也换转换,参数又会错误。所以最终的办法就是用replaceAll把带有“+”号的地方全部替换成“%2B”String HfPostDatas = HfPostData.replaceAll("\\+", "%2B");

这样就能完美的解决这个问题了。

附加:

+    URL 中+号表示空格                        %2B   
空格 URL中的空格可以用+号或者编码    %20 
/   分隔目录和子目录                            %2F     
?    分隔实际的URL和参数                     %3F     
%    指定特殊字符                               %25     
#    表示书签                                      %23     
&    URL 中指定的参数间的分隔符         %26     
=    URL 中指定参数的值                      %3D


  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值