建行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

建行B2B支付回调参数乱码现象解析相关推荐

  1. 建行B2B支付回调参数乱码现象解析(转)

    建行B2B支付采用Java开发,页面回调采用POST提交方式,编码为GBK.而我们的系统为ASP.NET,编码UTF-8.通过Request获取的参数是乱码,无奈之下,只能从InputStream解析 ...

  2. [转]建行B2B支付回调参数乱码现象解析

    问题是这样出现的:在进行建行B2B网银在线支付时,建行在回调时采用POST方式提交,编码方式为GBK,而我们的系统为ASP.NET,编码UTF-8.通过Request获取的参数是乱码. 题是这 解决办 ...

  3. Request 接收参数乱码原理解析

    起因: 今天早上被同事问了一个问题:说接收到的参数是乱码,让我帮着解决一下. 实际情景: 同事负责的平台是Ext.js框架搭建的,web.config配置文件里配置了全局为"GB2312&q ...

  4. 关于支付回调的一些思考

    前段时间在工作中又一次接触到了公司关于支付相关的业务领域,于是又一次重新回顾了工作中使用的支付框架. 之前写过的很多篇文章都是先介绍整体背景,再深入到每一点去做分析,今天打算换种方式,尝试从 why ...

  5. 微信,支付宝支付回调的入参处理方法

    微信的支付回调为xml格式.支付宝回调为json格式.返回的格式如何处理 首先看下回调的入参经过处理后长啥样. 微信的支付回调: 支付宝的支付回调: 微信的支付回调处理: StringBuilder ...

  6. 微信支付配置参数:支付授权目录、回调支付URL

    一.开通微信支付的首要条件是:认证服务号或政府媒体类认证订阅号(一般认证订阅号无法申请微信支付) 二.微信支付分为老版支付和新版支付,除了较早期申请的用户为老版支付,现均为新版微信支付. 三.公众平台 ...

  7. 七牛文件上传回调以及解析回调参数

    可参考七牛官网文档:https://developer.qiniu.com/kodo/sdk/1239/java 实现以下功能要引入七牛的sdk <!-- 七牛客户端组件包 -->< ...

  8. 企业微信通讯录回调密文解析及微信支付回调密文解析异常处理

    企业微信通讯录回调密文解析及微信支付回调密文解析异常处理 产生异常表现: javax.crypto.IllegalBlockSizeException: Input length must be mu ...

  9. 汉字乱码现象的分类解析

    一.汉字乱码现象的分类 汉字乱码现象大致可分成四类:网页.文本.文档和文件乱码.第一类是由于港台的繁体中文大五码(BIG5)与大陆简体中文(GB2312)不通用造成的:第二类是Win9X/Win2K系 ...

最新文章

  1. 从程序语言排行榜来解读IT及Web的发展
  2. Pokemon Go火了,他却要破产了...
  3. APPium-Xpath,swipe练习
  4. 曲线相似度衡量——曲线距离计算Fréchet distance详解与python计算
  5. mysql性能测试工具之sysbench
  6. 透明png图片和素材免费下载网站
  7. 分类,等级,或者有序变量如何进行多因素Cox回归 变量的类型决定了最终结果的reference
  8. 端到端语音识别 ESPnet ASR脚本流程(asr.sh)
  9. 什么是DOM0,DOM2,DOM3?
  10. js问号点的作用(?.)和问号问号(??)的用法
  11. 传奇服务器人物技能怎么修改,传奇服务端上线0级技能,直接设置3级技能的设置方法...
  12. 2022-2027中国内科缝合线行业应用形势与需求前景预测报告
  13. opencv-python——调用摄像头录制并保存视频
  14. 【Shader特效10】体积雾特效的使用
  15. Kubernetes单机创建MySQL+Tomcat演示程序:《Kubernetes权威指南》第一章demo报错踩坑
  16. Vue 艺术字体下载、设置
  17. 微信小程序登录一键登录,出现异常,报错40029,状态消息
  18. 以太坊柏林升级前的紧急刹车
  19. 江西省中小学生学籍管理使用相关
  20. java开发台球的图片_Java模拟桌球打击处理及绘制

热门文章

  1. ftp文档服务器设置,ftp服务器基本设置
  2. html文字置顶标签,HTML的marquee标签怎么用?
  3. 在java中添加源_关于Java:如何在Android Studio中添加链接的源文件夹?
  4. zip转直链php,蓝奏网盘直链转换器
  5. WIN10远程连接时提示内部错误
  6. WebStorm使用教程
  7. js获取checkbox值的方法
  8. 解决未知的服务器标记“asp:ListView”。
  9. PHP企业级开发环境配置全攻略-IDE+SVN++(转)
  10. android dialog 点击确定不消失,AlertDialog点击按钮不消失的实现方法