博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
建行B2B支付回调参数乱码现象解析
阅读量:5124 次
发布时间:2019-06-13

本文共 1446 字,大约阅读时间需要 4 分钟。

       建行B2B支付采用Java开发,页面回调采用POST提交方式,编码为GBK。而我们的系统为ASP.NET,编码UTF-8。通过Request获取的参数是乱码,无奈之下,只能从InputStream解析。解析代码如下:
        log.Debug("Request Absolute Uri:" + this.Request.Url.AbsoluteUri);
            
            //GBK解析
            BinaryReader reader = new BinaryReader(this.Request.InputStream);
            Byte[] bs = reader.ReadBytes((int)this.Request.InputStream.Length);
            String parameter = HttpUtility.UrlDecode(Encoding.GetEncoding("ISO-8859-1").GetString(bs), Encoding.GetEncoding("GBK"));
            NameValueCollection parameterDic = HttpUtility.ParseQueryString(parameter);
            if (parameterDic != null && parameterDic.Count > 0)
            {
                foreach (String key in parameterDic.Keys)
                {
                    log.Debug("Query Param Key:" + key + " Value:" + parameterDic[key]);
                }
            }
服务端通知采用的GET方式,更郁闷的时,建行竟然对中文参数不做UrlEncode操作,直接用GBK编码回调过来,害得我们浪费了很长时间,还是从最原始的字节码出发,代码如下:
           log.Debug("Request Absolute Uri:" + this.Request.Url.AbsoluteUri);
            
            IServiceProvider provider = (IServiceProvider)HttpContext.Current;
            HttpWorkerRequest worker = (HttpWorkerRequest)provider.GetService(typeof(HttpWorkerRequest));
            byte[] bs = worker.GetQueryStringRawBytes();
            String queryString = Encoding.GetEncoding("GBK").GetString(bs);
            log.Debug("Query String:" + queryString);
            NameValueCollection querys = HttpUtility.ParseQueryString(queryString);
            if (querys != null && querys.Count > 0)
            {
                foreach (String key in querys.AllKeys)
                {
                   log.Debug("Query Param Key:" + key + " Value:" + querys[key]);
                }
            }

转载于:https://www.cnblogs.com/heroking2000/archive/2010/05/28/1746343.html

你可能感兴趣的文章
svn在linux下的使用(svn命令行)ubuntu 删除 新增 添加 提交 状态查询 恢复
查看>>
java处理url中的特殊字符%等
查看>>
你的第一个Django程序
查看>>
Tomcat免安装版的环境变量配置以及Eclipse下的Tomcat配置和测试
查看>>
Unity3D性能优化之Draw Call Batching
查看>>
grafana授权公司内部邮箱登录 ldap配置
查看>>
treegrid.bootstrap使用说明
查看>>
[Docker]Docker拉取,上传镜像到Harbor仓库
查看>>
javascript 浏览器类型检测
查看>>
基于easyX的<颜色侵略>小游戏
查看>>
nginx 不带www到www域名的重定向
查看>>
记录:Android中StackOverflow的问题
查看>>
导航,头部,CSS基础
查看>>
[草稿]挂载新硬盘
查看>>
[USACO 2017 Feb Gold] Tutorial
查看>>
关于mysql中GROUP_CONCAT函数的使用
查看>>
OD使用教程20 - 调试篇20
查看>>
Java虚拟机(JVM)默认字符集详解
查看>>
Java Servlet 过滤器与 springmvc 拦截器的区别?
查看>>
(tmp >> 8) & 0xff;
查看>>