> Java > java지도 시간 > 본문

Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명

php是最好的语言
풀어 주다: 2018-08-09 13:59:35
원래의
4580명이 탐색했습니다.

1. 시나리오: 회사는 웹사이트에서 Alipay 결제를 해야 합니다.
2. API: Alipay의 개방형 플랫폼인 즉시 결제 인터페이스의 결제 기능을 사용하세요. Alipay 오픈 플랫폼 링크
3. 분석:

1. Alipay의 문서는 비교적 읽기 쉽습니다. 주로 제가 보고 있는 DEMO는 JAVA-UTF-8 버전입니다.

Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명

2. DEMO를 가져와 해당 파트너를 입력하고 com.alipay.config(해당 판매자 백엔드에서 얻음)를 입력하면 결제 프로세스를 직접 실행하고 이해할 수 있습니다.

Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명

3. 다시 작성: 여기서는 springmvc+mybatis를 사용하고 있습니다. 제품이 구매(Alipay로 결제)를 시작하고 Alipay로 이동하며 Alipay가 결제 상태를 다시 호출합니다.

4. 구현:

1. 제품 구매 요청을 시작합니다(DEMO 페이지를 직접 사용).

[javascript] 일반 보기 복사


  1.      

    class

    ="헤더" >

  2.         

    class

    ="컨테이너 블랙">  

  3.             

    class

    ="qrcode">  

  4.                 

    class

    ="littlecode">  

  5.                    Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명"16px" src="img/little_qrcode.jpg" id="licode" >  

  6.                    

    class

    ="showqrs" id="showqrs">  

  7.                        

    class

    ="shtoparrow">

      
  8.                       

    class

    ="guanzhuqr">  

  9.                           Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명"img/guanzhu_qrcode.png" width="80">  

  10. /& lt;/p & gt; 하단: 5px;" & gt;

  11. 중요한 정보 수신 t & lt;/p & gt;

  12. & lt;/p & gt;

  13. & lt;/p & gt; & lt;/p & gt;

  14.             

      
  15.         

      
  16.         

    class

    ="container">  

  17.             

    class

    ="nav">  

  18.                 "https://www.alipay.com/" class="logo">Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명" img/alipay_logo.png" height="30px">  

  19.                 class="pier">  

  20.                 "http://open.alipay.com/platform/home.htm" class="open" 대상 =" _blank">开放平台  

  21.                 

      class
    ="navbar">  

  22.                    

  23. "https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1"
  24.  target= "_blank ">지금 线文档

      
  25.                    

  26. "https://cschannel.alipay.com/portal.htm?sourceId=213"
  27.  target="_blank">技术支持

      
  28.                   

  29.             

      
  30.         

      
  31.         

    class

    ="컨테이너 파란색">  

  32.             

    class

    ="title">支付宝即时到账(create_direct_pay_by_user)

      
  33.         

      
  34.     

      
  35.     

    class

    ="content">  

    ㅋㅋ ~                    Â
  36. target =

    "_blank">              >                    p>

  37.             

    class

    ="element">  

  38.                 

    class

    ="etitle">商户订单号:

      
  39.                 

    class

    ="einput">"text" name= "WIDout_trade_no" id=" out_trade_no">

      
  40.                 
      

  41. p

  42. class
  43. = "etitle"

  44. & gt; 제품 이름 : & lt;/p & gt;ㅋㅋ > gt;
  45.                                                                                                  >참고: 제품 이름(제목 ) 필수(중국어, 영어, 숫자 권장, 특수문자 포함 불가)

    ㅋㅋ >
  46. B & lt; br & gt;
  47. & lt; pclass =

    & & gt; (형식: 1.00, 제발, 제발, 제발, 제발, 제발, 제발, 제발, 제발, 제발, 제발 가장 가까운 분까지 정확함)
  48.                                                                    class="제목" >제품 설명:

  49.                             name="WIDbody" id= "위드바디" value=

    "즉시 신용 테스트"
  50. >

  51. & gt; 결제 확인">

  52.                                                                   

  53.                                                                   
  54.     

    class

    ="footer">  

  55.         

    class

    ="footer-sub">  

  56.             "http://ab.alipay.com/i/index.htm" target="_blank">关于支付宝 |  

  57.             "https://e.alipay.com/index.htm" target="_blank">商家中心|스팬>  

  58.             "https://job.alibaba.com/zhaopin/index.htm" target="_blank">诚征英才 a> ;|  

  59.             "http://ab.alipay.com/i/lianxi.htm" target="_blank">联系我们  

  60.             "#" id="international" target="_blank">국제 비즈니스< ;/a>|  

  61.             "http://ab.alipay.com/i/jieshao.htm#en" target="_blank">Alipay 정보> ;  

  62.             
      

  63.              支付宝版权所有  

  64.             class="footer-date">2004-2016  

  65.             "http://fun.alipay.com/certificate/jyxkz.htm" target="_blank">ICP 설명:沪B2-20150087  

    "
  66.                                                                                                
  67. 2. 결제 확인을 클릭한 후 ajax를 통해 백그라운드를 요청하고 반환된 html 코드를 위의

    에 직접 입력하면 자동으로 양식이 생성됩니다. 제출된.
  68. [javascript]
  69. 일반보기

    copy

  70. $(

  71. function
  72. (){


$("#sbumitBtn" ).on(

'click'

, function

(){


                 유형 :
  1. "post"

  2.             데이터 : {  

  3.               WIDout_trade_no : $('#out_trade_no').val(),  

  4.                 WIDsubject: $('#WIDsubject'). val(),  

  5.                WIDtotal_fee : $('#WIDtotal_fee').val(),  

  6.                 WIDbody : $('#WIDbody').val( )  

  7.             },  

  8.            url : "${ctx}/aliPay/open",  

  9.             성공 : function(데이터) {  

  10.                $('#returnAli').append(data.sHtmlText);  

  11.             },  

  12. 오류: function(da){

  13. }

  14. })

  15. })

  16. });


3. 데모의 alipayapi.jsp를 기본적으로 직접 사용하고 있으며, 반환 방식은 에 따릅니다. apringmvc 요구 사항 및 미지급 상태의 주문 정보는 비즈니스 요구에 따라 저장됩니다.

[javascript] 일반 보기 복사


  1. @RequestMapping("open")

  2. public ResponseEntity open(모델 모델, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee,

  3. String WIDbody) {

  4. ​​​​///////////////////////////////////// 요청 매개변수/ ////// ///////////////////////////

  5. // 판매자 웹사이트 주문 시스템의 유일한 주문 번호인 판매자 주문 번호, 필수

  6. String out_trade_no = WIDout_trade_no;

  7. // 주문 이름, 필수 //

  8. String subject = WIDsubject;

  9. // 결제 금액, 필수

  10. String total_fee = WIDtotal_ fee;

  11. //제품 설명, 비어 있을 수 있음

    String body = WIDbody;
  12. // 요청 매개변수를 배열로 압축합니다.
  13. 지도< ;String, String> sParaTemp =

    new
  14. HashMap()

    sParaTemp.put(

    "service"
  15. , AlipayConfig.service);
  16.     sParaTemp.put("partner", AlipayConfig.partner);  

  17.     sParaTemp.put("seller_id", AlipayConfig.seller_id);  

  18.     sParaTemp.put("_input_charset", AlipayConfig.input_charset);  

  19.     sParaTemp.put("지불_유형", AlipayConfig.지불_유형);  

  20.     sParaTemp.put("notify_url", AlipayConfig.notify_url);  

  21.     sParaTemp.put("return_url", AlipayConfig.return_url);  

  22.     sParaTemp.put("anti_phishing_key", AlipayConfig.anti_phishing_key);  

  23.     sParaTemp.put("exter_invoke_ip", AlipayConfig.exter_invoke_ip);  

  24.     sParaTemp.put("out_trade_no", out_trade_no);  

  25.     sParaTemp.put("subject", subject);  

  26.     sParaTemp.put("total_fee", total_fee);  

  27. sParaTemp.put("body", body);

  28. // 기타 비즈니스 매개변수는 온라인 개발 문서에 따라 추가됩니다: https://doc.open. alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1

  29. // sParaTemp .put("매개변수 이름","매개변수 값 ");

  30. String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get", "확인"

    );
  31. model.addAttribute("sHtmlText",sHtmlText)

  32. //결제 기록 저장
  33. hysWebMeetingAliService.insertSelective(sPara 임시);
  34. return newResponseEntity(model, HttpStatus.OK)

  35. }


4. 콜백: 또한 DEMO의 inform_url.jsp에서 Java 코드를 직접 가져와 약간 수정하고 비즈니스 코드(상태 수정 등)를 추가했습니다.

@ResponseBody


public

String inform(HttpServletRequest request){

  1. //POST을 통해 Alipay로부터 피드백 받기

  2.     Map params = new HashMap();  

  3.     Map requestParams = request.getParameterMap();  

  4.     for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  

  5.         문자열 이름 =(문자열) iter.next() ;  

  6.         String[] values = (String[]) requestParams.get(name);  

  7.         문자열 valueStr = "";  

  8.         for (int i = 0; i 

  9.             valueStr = (i == values.length - 1) ? valueStr + 값[i]  

  10.                    : valueStr + 값[i] + ",";  

  11.         }  

  12. ​​​​​​​​​//잘못된 코드 해결 방법, 이 코드는 잘못된 문자가 나타날 때 사용됩니다. mysign과 sign이 같지 않으면 이 코드를 사용하여

  13. //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk")로 변환할 수도 있습니다. ;

  14. params.put(name, valueStr)

  15. }

  16. ​​
  17. //Alipay의 알림 반환 매개변수를 가져오려면 다음을 참조하세요. 기술 문서 페이지 점프 동기화 알림 매개변수 목록(다음은 참고용입니다) //

  18. //가맹점 주문 번호

  19. 문자열 out_trade_no = 요청.getParameter(
  20. "out_trade_no"

    )

  21. 문자열 trade_no = request.getParameter (

    "trade_no"
  22. )

  23. String trade_status = request.getParam eter("trade_status");

  24. /Get Alipay의 알림 반환 매개변수를 참조하세요. 기술적인 페이지 점프 문서 동기 알림 매개변수 목록 (위 내용은 참고용임) //

  25. if(AlipayNotify.verify(params)){//확인 성공

  26. ​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​///// ///////////////////////////////////////////////// ///////////////////////////// 

  27. ​​​​​​​​ //가맹점의 비즈니스 로직 프로그램 코드를 여기에 추가해주세요​​​​​

  28. ​​​​​​​​
  29. ​​​​​​​ /——귀하의 요구에 따라 프로그램을 작성해 주십시오. 비즈니스 로직 (아래 코드는 참고용입니다)——

  30. ㅋㅋ                          가맹점 홈페이지에서 주문이 처리되었는지 여부

  31. 做 没有 // 처리되지 않은 경우 주문번호(OUT_TRADE_NO)에 따라 가맹점 홈페이지의 주문시스템에서 주문내역을 확인하실 수 있습니다 그리고 판매자의 비즈니스 프로그램을 구현하세요 //요청 시 total_fee 및 Seller_id가 알림 시 얻은 total_fee 및 Seller_id와 일치하는지 확인하세요. ㅋㅋㅋ // 환불 날짜가 환불 기간(예: 3개월)을 초과한 후 Alipay 시스템에서 거래 상태 알림을 보냅니다

  32.                                                                                            ~              // 가맹점 웹사이트에서 주문이 접수되었는지 확인 처리되지 않은 경우, 처리되지 않은 경우 가맹점 웹사이트의 주문 시스템에서 주문 내역을 다음 절차에 따라 확인합니다. 주문 번호(out_trade_no) 및 가맹점의 업무 프로그램 수행必 务 // 요청 시 TOTAL_FEE, SELLER_ID 및 Total_fee, Seller_ID를 반드시 확인하시기 바랍니다. 업무 절차                                                  

    ​​​​​​
  33. //결제가 완료된 후 Alipay 시스템에서 거래 상태 알림을 보내드립니다
  34. ​​​​​​​                                    订 // 주문번호에 따라 주문상태 및 Alipay 기록표가 유료로 변경되었습니다

  35. FLG = HyswebMeetingaliservice.ChangeordAlistAccess (out_trade_no);

                                      ~                                           

  36.                                              //out.print("success");      // 수정하거나 삭제하지 마세요
  37.                   ~           

  38. "성공"
  39. }else

  40. {
  41. ㅋㅋ                    

  42. ///////////// //////////////////////// ///////////////////////////////////////////////// //////

  43. }else

  44. {
  45. //확인 실패

  46. //out.print("f 아프다");

  47. "실패";

  48. }
  49. }

  50. 5. return_url: 페이지 이동 동기화 알림 페이지 경로는 결제 성공 후 Alipay가 다시 이동하는 페이지입니다. "http:// 형식의 전체 경로가 필요하며, ?id=123 등의 맞춤 매개변수를 추가할 수 없습니다. 외부 네트워크에 정상적으로 접근할 수 있어야 합니다." 알리페이에서는 반송되는 페이지 이후에는 맞춤 매개변수를 추가할 수 없다고 명확히 규정하고 있습니다. 등이 있기 때문에 우리 중 일부는 일부 유형을 기준으로 점프를 판단하는 것이 약간 번거롭습니다. 여기에 트릭을 적용했습니다. 먼저 return_url.jsp에서 Java 코드를 직접 이동하고 약간 수정합니다(springmvc 메서드로 변경). 반송 주소는 IP/aliPay/returnUrl이고 새 ModelAndView("redirect:/meeting/info")입니다. ) 우리가 생각하고 있는 URL로 리디렉션합니다(매개변수 문제는 아래 요약의 4번 항목 참조).

    [javascript] 일반 보기 복사


    1. @RequestMapping("returnUrl")

    2. publicModelAndView returnUrl( HttpservletRequest 요청) {

    3. ModlandView MV =

      New ModratView( "리디렉션:/회의/정보" )

    4. // Alipay에서 피드백 받기

    5.         Map params = new HashMap();  

    6.         Map requestParams = request.getParameterMap();  

    7.         for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {  

    8.             문자열 이름 = (문자열) iter.next() ;  

    9.             String[] values = (String[]) requestParams.get(name);  

    10.             문자열 valueStr = "";  

    11.             for (int i = 0; i 

  51.                 valueStr = (i == values.length - 1) ? valueStr + values[i]  

  52.                       : valueStr + values[i] + ",";  ㅋㅋ ~   ​MySign과 Sign이 같지 않으면 이 코드를 사용하여

  53. // valueStr = New String

  54. params.put(name, valueStr) ;

    }
  55.                                                                                                                                                   ​문서의 페이지 이동 알림 매개변수 목록(다음 참고용입니다) //
  56.                  String out_trade_no = request.getParameter(
  57. "out_trade_no"

    )

  58. .getParameter(

    "trade_no")

  59. ㅋㅋ ~ >                           = L "COLOR:#FF0000;"

  60. & GT; Request.getparameter (

    "Extra_common_param") > verify_result = AlipayNotify.verify(params);

  61.                                                          ㅋㅋ      /////////////// /////////////////////////////// /////////////////////////////////////
  62. ㅋㅋ | | trade_status.equals("TRADE_SUCCESS"

    )){
  63. 做没유 // 처리되지 않은 경우 주문번호(OUT_TRADE_NO)에 따라 가맹점 홈페이지의 주문시스템에서 주문내역을 찾아 가맹점의 업무프로그램을 수행합니다.做 有 // 했다면 판매자의 업무 절차를 수행하지 마세요

  64. }}

  65. // 이 페이지는 페이지 아티스트로 사용할 수 있습니다 편집

  66. // out.println("확인 성공
    ");

  67. //——비즈니스 로직을 기반으로 작성하세요. 프로그램 (위 코드는 참고용입니다)——

  68. /////////////////////// ////////////////////////////////////////////

  69.                     
  70. //이 페이지는 페이지 아트로 편집할 수 있습니다

  71. // out.println("확인 실패");

  72. }
  73. ㅋㅋ >

  74. 2. 디버깅 시, 특히 콜백 시 프로젝트는 외부 네트워크에서 액세스할 수 있는 서버에 배포되어야 합니다.

  75. 3. 위와 같은 설명할 수 없는 문제가 발생하지 않은 경우 저에게 연락하거나 Eclipse 원격 디버깅에 대한 이 기사를 읽어 문제를 추적할 수 있습니다.

    4. 페이지 이동 알림 페이지 경로를 동기화할 때 매개변수를 전달해야 하면 어떻게 해야 합니까? 처음에 매개변수를 사용자 정의했지만 얻지 못했습니다. 그런 다음 DEMO에서 다음과 같은 주석을 보았습니다. [javascript] view plain copy

// 기타 비즈니스 매개변수는 온라인 개발 문서에 따라 추가됩니다. 문서 주소: https://doc.open.alipay. com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1

그래서 열어서 살펴본 후 공개 반환 매개변수 extra_common_param을 선택했습니다. 나 자신도 알고 있다. 이 분야가 나에게 어떤 의미인지. 하지만 주의를 기울여야 한다고 다른 사람들이 설명했습니다:

[javascript] view plaincopy


  1. 매개변수 본문(제품 설명), 제목(제품 이름), extra_common_param(공개 반환 매개변수)에는 특수 문자(예: : #, %, &, +), 민감한 단어, 외국어 사용 불가(Want Want가 지원하지 않는 외국어, 예: 한국어, 태국어, 티베트어, 몽골어, 아랍어

)

open 메소드 중간 범위 값:

[javascript] view plain


  1. sParaTemp.put("ex tra_common_param" , 회의 ID);

returnUrl 메소드에서 값을 가져와 이를 리디렉션 매개변수로 사용합니다.

[javascript]

view plain copy


  1. String MeetingId = request.getParameter("extra_common_param");

  2. mv.addObject("meetingId" , MeetingId);

관련 추천:

Alipay 결제 인터페이스 단일 거래 쿼리 인터페이스

ECShop용 Alipay 모바일 웹사이트 결제 인터페이스

위 내용은 Alipay 결제 인터페이스를 호출하는 Java 사례에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!