jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www-form-urlencoded; text/html; charset=UTF-8'
tcpflow以流为单位分析请求内容,非常适合服务器端接口类服务查问题
这次遇到的问题跟支付宝支付后的回调post结果有关
淘宝的代码例子:
public void doPost(HttpServletRequest request, HttpServletResponse response)throws UnsupportedEncodingException {
//»ñµÃ´ýÇ©ÃûÊý¾ÝºÍÇ©ÃûÖµ
String sign = URLDecoder.decode(request.getParameter("sign"),"utf-8");
String content = URLDecoder.decode(request.getParameter("content"),"utf-8");
服务器用jersey,直接使用 @FormParam 类型参数,收到post请求,但无法处理内容,log显示错误:
java.lang.IllegalArgumentException: Error parsing media type 'application/x-www-form-urlencoded; text/html; charset=UTF-8'
使用curl测试application/x-www-form-urlencoded 是可以解析的
curl -d 'sign=1¬ify_data=yest' "https://passport.ishuangshuang.com/credits/order/notify"
我以为是我代码写法不支持,按照例子更改服务器端代码为:
code2:
public String verify(@Context HttpServletRequest request) {
Map map = request.getParameterMap();
log.info("[alipay] callback,map="+map);
String sign = (String) ((Object[]) map.get("sign"))[0];
String verifyData = (String) ((Object[]) map.get("notify_data"))[0];
仍是同样错误
使用tshark抓包,结果发现在命令行不能使用follow stream 直接查看流内容,于是安装tcpflow,yum install -y tcpflow
使用命令 tcpflow -p dst port 8280,生成8280收到的请求流日志:
X-Host: xxx.com
X-Forwarded-Proto: https
Content-Type: application/x-www-form-urlencoded; text/html; charset=UTF-8
User-Agent: Mozilla/4.0
Host: xxx.com
Content-Length: 1135
LOGID: 5762503519760285696
CLIENTIP: 110.75.141.3
X-FORWARDED-FOR: 110.75.141.3 sign=mYJtdB2XmD57ReoLQkhMhUpIxmMLQltfs0opq%2Bl3prGzkA9xckxpqKMBy7vAHfCZe3ryJq1VoJxBpAv6KsaAarCn2tfcLt2EClfrZDoL967xPzLcz%2BmddlEe7ST4CHvOYg4jNaJBpxEYoDnDTmK3Rk7x%2FbfmJZwulA8OOjqGHac%3D&sign_type=RSA¬ify_data=%3Cnotify%3E%3Cpartner%3E2088901361787590%3C%2Fpartner%3E%3Cdiscount%3E0.00%3C%2Fdiscount%3E%3Cpayment_type%3E1%3C%2Fpayment_type%3E%3Csubject%3E%E7%A7%AF%E5%88%86%E8%B4%AD%E4%B9%B0%3C%2Fsubject%3E%3Ctrade_no%3E2013071530259116%3C%2Ftrade_no%3E%3Cbuyer_email%3E13811437730%3C%2Fbuyer_email%3E%3Cgmt_create%3E2013-07-15+19%3A30%3A59%3C%2Fgmt_create%3E%3Cquantity%3E1%3C%2Fquantity%3E%3Cout_trade_no%3E100027%3C%2Fout_trade_no%3E%3Cseller_id%3E2088901361787590%3C%2Fseller_id%3E%3Ctrade_status%3ETRADE_FINISHED%3C%2Ftrade_status%3E%3Cis_total_fee_adjust%3EN%3C%2Fis_total_fee_adjust%3E%3Ctotal_fee%3E0.01%3C%2Ftotal_fee%3E%3Cgmt_payment%3E2013-07-15+19%3A31%3A01%3C%2Fgmt_payment%3E%3Cseller_email%3Ezhifubao%40fanxer.com%3C%2Fseller_email%3E%3Cgmt_close%3E2013-07-15+19%3A31%3A01%3C%2Fgmt_close%3E%3Cprice%3E0.01%3C%2Fprice%3E%3Cbuyer_id%3E2088502632932163%3C%2Fbuyer_id%3E%3Cuse_coupon%3EN%3C%2Fuse_coupon%3E%3C%2Fnotify%3E
两个问题:
1 Content-Type 确实有问题,这么写会导致jersey无法识别,无法解析。"Content-Type: application/x-www-form-urlencoded; text/html; charset=UTF-8" jersey解析type为application,然后读到分隔符"/",x-www-form-urlencoded为 subtype,往后的数值为parameterMap "text/html"因为分隔符不是"=" 无法识别,HttpHeaderReader.nextSeparator报错。不能让我为了alipay去修改jersey源码吧?
2 对于单独的jersey post注解方法,无法按照淘宝的java例子处理参数,只能以get方式添加在url后,才能以 code2 方式处理。
搜索支付宝 notify ,google不出有效信息,
搜索 支付宝 ws_secure_pay,是客户端外包同事给的包名,才找到教程,原来还得上支付宝论坛 :http://club.alipay.com/thread-htm-fid-703.html
发现jersey 方法里不写consume也还是不行,默认是*/* 还是识别不了多重类型,servlet不会处理content-type,到最后还是按淘宝例子用servlet实现了这个支付流程。
jersey处理支付宝异步回调通知的问题:java.lang.IllegalArgumentException: Error parsing media type 'application/x-www-form-urlencoded; text/html; charset=UTF-8'的更多相关文章
- 异常-----springmvc + ajaxfileupload解决ajax不能异步上传图片的问题。java.lang.ClassCastException: org.apache.catalina.connector.RequestFacade cannot be cast to org.springframework.web.multipart.
说明这个问题产生的原因主要是form表单上传图片的时候必须是Content-Type:"multipart/form-data,这种格式的,但是ajax在页面不刷新的情况下去加载的时候只会把 ...
- Future 异步回调 大起底之 Java Future 与 Guava Future
目录 写在前面 1. Future模式异步回调大起底 1.1. 从泡茶的案例说起 1.2. 何为异步回调 1.2.1. 同步.异步.阻塞.非阻塞 1.2.2. 阻塞模式的泡茶案例图解 1.2.3. 回 ...
- 通知url必须为直接可访问的url,不能携带参数 异步接收微信支付结果通知的回调地址 不能携带参数。 回调地址后是否可以加自定义参数 同步回调地址 异步回调地址 return_url和notify_url的区别
[微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=9_7 通知url必须为直接可访问的 ...
- day88:luffy:支付宝同步结果通知&接收异步支付结果&用户购买记录&我的订单
目录 1.支付宝同步结果通知 2.用户购买记录表 3.接受异步支付结果 4.善后事宜 5.我的订单 1.支付宝同步结果通知 1.get请求支付宝,支付宝返回给你的参数 当用户输入用户名和密码确认支付的 ...
- 支付宝支付后回调通知中responseTxt=true isSign=False可能的问题
在做支付宝的二维码扫码支付功能,生成二维码成功,扫描后也能付款,付款后也能回调通知到我的页面,但是验证签名的时候出错,找了好久终于找到是什么原因: 引用 1. 用的RSA签名验证,默认密钥纯字符,并不 ...
- 支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url.
支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类. A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 B页面跳转通 ...
- 支付宝异步通知(notify_url)与return_url.
支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类. A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 B页面跳转通 ...
- 支付宝接口(扫码支付的原理)使用文档说明 支付宝异步通知(notify_url)与return_url
支付宝接口使用文档说明 支付宝异步通知(notify_url)与return_url. 现支付宝的通知有两类. A服务器通知,对应的参数为notify_url,支付宝通知使用POST方式 B页面跳转通 ...
- 服务器收不到支付宝notify_url异步回调请求的问题排查
小背景 最近在调整支付宝支付的功能时发现,不能够正常接收支付宝付款成功之后的回调通知了,从代码到配置最后到服务器配置都排查了一遍,最终发现问题原因竟然是因为我们的回调地址notify_url是http ...
随机推荐
- [原创]java WEB学习笔记99:Spring学习---Spring Bean配置:自动装配,配置bean之间的关系(继承/依赖),bean的作用域(singleton,prototype,web环境作用域),使用外部属性文件
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- ef第一次启动较慢
解决ef第一次启动较慢的问题: protected void Application_Start() { //禁用第一次ef查询对表__MigrationHistory的问题使用了ef的Code fi ...
- generated clock
内部时钟的定义: create_generated_clock,通过-source,-edges,-divide_by,-multiply_by来执行clock沿. create_generated_ ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数010,obj,对象管理
<zw版·Halcon-delphi系列原创教程> Halcon分类函数010,obj,对象管理 为方便阅读,在不影响说明的前提下,笔者对函数进行了简化: :: 用符号“**”,替换:“p ...
- Spring MVC 学习资料
引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Jav ...
- RecycleView可以策划的Item
public abstract class SwipeMenuViewHolder { /* 从左侧滑出菜单 */ public static final int EDGE_LEFT = 1; /* ...
- SQL学习指南 ——笔记
前言:每章的练习题很实用,跟着练了一遍.答案附录有 1.流行的商业级关系数据库:
- asp.net服务控件的生命周期
1. 初始化 - Init事件 (OnInit 方法) 2. 加载视图状态 - LoadViewState方法 3. 处理回发数据 - LoadPostData方法 对实现 ...
- 20145227&20145201 《信息安全系统设计基础》实验一 开发环境的熟悉
北京电子科技学院(BESTI) 实 验 报 告 课程:信息安全系统设计基础 班级:1452 姓名:李子璇 鄢曼君 学号:20145201 20145227 成绩: 指导教师:娄嘉鹏 实验日期:2016 ...
- noi 6049 买书
题目链接: http://noi.openjudge.cn/ch0206/6049/ 6049:买书 查看 提交 统计 提问 总时间限制: 1000ms 内存限制: 65536kB 描述 小明手里有n ...