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

时间:2025-04-19 20:46:18

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

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

 

String HfSubmitUrl = ();
String HfPostData = "Version=" + () + "&CmdId="
+ () + "&MerCustId=" + ()
+ "&RetUrl=" + () + "&BgRetUrl="
+ () + "&UsrId=" + ()
+ "&UsrName=" + () + "&IdType="
+ () + "&IdNo=" + () + "&MerPriv="
+ () + "&PageType=" + ()
+ "&ChkValue=" + ();
(HfSubmitUrl,(HfPostDatas, "base64"));

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

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

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

 

try {
	postData = ((), "utf-8");
     } 
catch (UnsupportedEncodingException e) 
{
	();
}

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

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

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

附加:

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