关于httputlConnection与form表单提交数据的区别

本文介绍了一种通过HTTPURLConnection实现的支付接口交互过程,包括设置请求属性、发送支付信息、处理响应数据及后续的业务逻辑处理。

<pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java"><span>		</span>URL url = new URL(pathUrl);
<span>		</span><strong>//httpURLConnection打开链接</strong>
                 HttpURLConnection httpConn = (HttpURLConnection) url.openConnection();
<span>		</span><strong>//<span style="color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif, tahoma, 'Microsoft YaHei'; font-size: 14px; line-height: 24px;">是否连接遵循重定向</span></strong>
                 httpConn.setInstanceFollowRedirects(true);
<span>		</span>//设置提交数据的编码方式,相当于form表单提交时的enctype
<span>		</span>//<span style="font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 18px; background-color: rgb(249, 249, 249);">默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。</span>
                 httpConn.setRequestProperty("Content-type", "application/x-www-form-urlencoded");
                 httpConn.setDoOutput(true);// 使用 URL 连接进行输出
                 httpConn.setDoInput(true);// 使用 URL 连接进行输入
                 httpConn.connect();
<span>		</span>//设置请求输出流的形式,将字符串以流的形式输出
                  DataOutputStream dataOutputStream = new DataOutputStream(httpConn.getOutputStream());
                //设置请求需要的参数,注意,提交的时候需要对参数进行unicode编码。  
<span>		</span>String CS = "merReqData="+URLEncoder.encode(payInfo,"UTF-8");
<span>		</span>//输出字符串流
                 dataOutputStream.writeBytes(CS);
                 dataOutputStream.flush();
                 dataOutputStream.close();
                 
                 // 获得响应状态
                 int responseCode = httpConn.getResponseCode();
                 if (HttpURLConnection.HTTP_OK == responseCode) {
                 // 当正确响应时处理数据
                  StringBuffer sb = new StringBuffer();
                  String readLine;
                  BufferedReader responseReader;
                 // 处理响应流,必须与服务器响应流输出的编码一致
                 responseReader = new BufferedReader(new InputStreamReader(httpConn.getInputStream(), "GBK"));
                 while ((readLine = responseReader.readLine()) != null) {
                 sb.append(readLine).append("\n");
                  }
                    responseReader.close();
                    logger.info("接受银行的数据为********************"+sb.toString());
                     String sign = sb.toString();
                    //解密的字符串
                     String xmlData  = BJBankUtil.getVerifier(sign);
                    logger.info("解密之后的数据为"+xmlData);
                    //将返回的xml字符串解密后进行xml属性解析
                     Map<String, String> resMap = ParseRefundXMLUtil.getRefundResponseByBank(xmlData.getBytes());
                    
                    if("0000".equals(resMap.get("value"))){
                        logger.info("订单生成成功正在进入手机银行支付..."+resMap.get("orderNo"));
                         String random = resMap.get("randomData");//获取到的随机数
                        //进入手机银行支付页面需提交参数
                        
                        return "";
                     }else if("zf0110024".equals(resMap.get("value"))){
                        logger.info("重复提交的订单..."+resMap.get("orderNo"));
                        return "payResultFail";
                     }
                    else if("zf000001".equals(resMap.get("value"))){
                        logger.info("订单生成失败正在进入失败页面..."+resMap.get("orderNo"));
                        return "payResultFail";
                     }else{
                        
                        return "payResultFail";
                     }
                  }else{
                    return "payResultFail";
                  }






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值