저지에서 Alipay 비동기 콜백 알림 문제 처리: java.lang.IllegalArgumentException: 미디어 유형 'application/x-www-form-urlencoded; text/html, charset=UTF-8' 구문 분석 오류
4572 단어 신청
tcpflow는 요청 내용을 흐름 단위로 분석하므로 서버 측 인터페이스 서비스가 문제를 확인하는 데 매우 적합합니다.
이번에 발생한 문제는 Alipay 결제 후 콜백 포스트 결과와 관련이 있습니다.
타오바오 코드 예시:
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");
서버는 저지를 사용하고 @FormParam 유형 매개변수를 직접 사용하고 게시 요청을 수신하지만 콘텐츠를 처리할 수 없고 로그에 오류가 표시됩니다.java.lang.IllegalArgumentException: 미디어 유형 '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을 사용할 수 없으므로 install 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에 문제가 있어 저지를 인식할 수 없고 구문 분석할 수 없습니다. "Content-Type: application/x-www-form-urlencoded; text/html; charset=UTF-8"저지는 유형을 application으로 구문 분석한 다음 구분 기호 "/"를 읽습니다. x-www-form-urlencoded는 하위 유형이고, 구분자가 "="가 아니고 인식할 수 없기 때문에 후속 값은 parameterMap "text/html"입니다. HttpHeaderReader.nextSeparator는 오류를 보고합니다. alipay용 저지 소스 코드를 수정할 수 없나요?
2 별도의 저지 포스트 어노테이션 방식의 경우 타오바오의 자바 예제에 따라 파라미터를 처리할 수 없으며 get 방식의 url에 추가한 후 code2 방식으로만 처리할 수 있다.
검색 Alipay 알림, Google은 유효한 정보를 얻지 못합니다.
클라이언트 아웃소싱 동료가 제공한 패키지 이름인 Alipay ws_secure_pay를 검색하여 튜토리얼을 찾으면 Alipay 포럼 http://club.alipay.com/thread-htm-fid-로 이동해야 합니다. 703.html
저지 방식은 소비를 쓰지 않는 것으로 판명되었으며 기본값은 */*이지만 여전히 여러 유형을 인식할 수 없으며 서블릿은 콘텐츠 유형을 처리하지 않습니다. 결국 서블릿을 사용하여 결제를 구현합니다. Taobao 예에 따른 프로세스.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
CRT는 힙 버퍼가 끝난 후 애플리케이션이 메모리에 쓴 것을 감지했습니다.많은 사람들이 다른 설명을 가지고 있습니다. 제가 겪은 문제는 열려있는 메모리 공간이 작동을 위한 메모리 공간보다 작습니다. 즉, 여유 메모리가 범위를 벗어났습니다. 이것은 연결 목록 구조의 메모리를 여는 코드입니다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.