ホームページ  >  記事  >  Java  >  JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明

JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明

php是最好的语言
php是最好的语言オリジナル
2018-08-09 13:59:354583ブラウズ

1. シナリオ: 会社は Web サイトで Alipay 支払いを行う必要があります。
2. API: Alipay のオープン プラットフォームの支払い機能、つまり即時支払いインターフェイスを使用します。 Alipay オープン プラットフォーム リンク
3. 分析:

1. Alipay のドキュメントは、主に対応するデモがあるため、比較的読みやすいです。ここで見ているデモは JAVA-UTF-8 バージョンです。

JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明

2. デモをインポートし、対応するパートナーを入力し、com.alipay.config (対応する販売者のバックエンドから取得) を入力すると、支払いプロセスを直接実行して理解することができます。

JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明

3. 書き直し: ここでは springmvc+mybatis を使用しています。製品が購入 (Alipay による支払い) を開始し、Alipay にジャンプし、Alipay が支払いステータスをコールバックします。

4. 実装:

1. 製品の購入リクエストを開始します (デモのページを直接使用します)。

[javascript] プレーンを表示


  1. クラス=「ヘッダー」 >

  2. class

    =「コンテナブラック」>  

  3. class

    ="qrcode">  

  4. クラス

    =「リトルコード」>  

  5. JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明"16px" src="img/little_qrcode.jpg" id="licode" >  

  6. class

    ="showqrs" id="showqrs">  

  7. class

    ="shtoparrow">

      
  8. class

    ="guanzhuqr">  

  9. JavaがAlipay決済インターフェースを呼び出すケースの詳細な説明"img/guanzhu_qrcode.png" width="80">  

  10. /</p> Bottom: 5px;" & gt;

    重要な情報を受け取る t & lt;/p & gt;
  11. & lt;/p & gt;
  12. & lt;/p & gt;
  13. & lt;/p & gt;

  14.   
  15.   
  16. class

    =「コンテナ」>  

  17. class

    ="nav">  

  18. "https://www.alipay.com/" class="logo">" img/alipay_logo.png" height="30px">  

  19. class="桟橋">  

  20. "http://open.alipay.com/platform/home.htm" class="open"ターゲット=" _blank">开放平台  

    • class
    ="navbar">  

  21. "https://doc.open.alipay.com/doc2/detail?treeId=62&articleId=103566&docType=1"
  22. target= "_空白">在線上文档

      
  23. "https://cschannel.alipay.com/portal.htm?sourceId=213"
  24. target="_blank">テクニック术支持

      
  25.   

  26.   
  27.   
  28. class

    =「コンテナブルー」>  

  29. class

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

      
  30.   
  31.   
  32. class

    =「コンテンツ」>  

  33. ターゲット= "_blank"> ;

  34. class

    ="要素">  

  35. class

    ="etitle">商户订单号:

      
  36. class

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

      

  37.   

  38. =

    "権利"
  39. >商品名:
  40. id="WIDsubject" value="テスト製品 123"&g t;

    >注: 製品名 (件名) ) は必須です (中国語、英語、数字が推奨され、特殊文字は使用できません)

    class

    =
  41. "element"

  42. >/p > B & lt; & lt; p =

    & & gt;埋め込み (形式: 1.00、お願いします、お願いします、お願いします、お願いします、お願いします、お願いします、お願いします、お願いします、最も近い分まで正確です)
  43. クラス="資格" >商品説明:

  44. name="WIDbody" id= 「WIDbody」 value=「インスタント信用テスト」

  45. >
  46. >支払いを確認します>

  47. class

    ="フッター">  

  48. class

    ="footer-sub">  

  49. "http://ab.alipay.com/i/index.htm"target="_blank">サポート付宝について |  

  50. "https://e.alipay.com/index.htm"target="_blank">商家中心|スパン>  

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

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

  53. "#" id="インターナショナル"target="_blank">インターナショナル ビジネス|  

  54. "http://ab.alipay.com/i/jieshao.htm#en"target="_blank">Alipayについて ;  


  55.   

  56. 支付宝版权すべて  

  57. class="フッター-日付">2004-2016  

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

  59. 2.クリックして支払いを確認した後、ajax を通じてバックグラウンドをリクエストし、返された HTML コードを上記の

    に直接入力すると、フォームが自動的に作成されます。提出されました。

    [javascript]
  60. プレーン表示
  61. コピー

  62. $(

    関数
  63. (){

    $(
  64. "#sbumitBtn"

).on(
'click',

function

(){


type: "post"

,
  1. data : {

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

  3. WIDsubject : $('#WIDsubject')。 val(),

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

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

  6. },

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

  8. 成功 : 関数(データ) {

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

  10. }、

  11. エラー: 関数(da){

  12. }

  13. })

  14. });

  15. 3. バックグラウンドコントローラーでは、基本的にデモの alipayapi.jsp を直接使用します。違いは、パラメーターの転送が独自に定義されている点です。 apringmvc の要件に応じて、未払いステータスの注文情報がビジネス ニーズに応じて保存されます。


[javascript] view plain copy


@RequestMapping(

    "open"
  1. ) public

  2. ResponseEntity open(モデルmodel, String WIDout_trade_no, String WIDsubject, String WIDtotal_fee,
  3. String WIDbody) {

  4. /////////////////////////////////////リクエストパラメータ/////// /////////////////////////////

  5. // 販売者の注文番号、販売者の Web サイトの注文システム内の唯一の注文番号、必須

  6. String out_trade_no = WIDout_trade_no

  7. ;

    //注文名、必須

  8. String subject = WIDsubject;

  9. // 支払い金額、必須

  10. String total_fee = WIDtotal_ 料金
  11. / /商品の説明、空にすることもできます

  12. String body = WIDbody
  13. // リクエストパラメータを配列にパックします
  14. Map sParaTemp =
  15. new
  16. HashMap();

    sParaTemp.put(
  17. "service"
  18. , AlipayConfig.service);

  19. sParaTemp.put("パートナー", AlipayConfig.partner);  

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

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

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

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

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

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

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

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

  28. sParaTemp.put("件名", 件名);  

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

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

  31. // ドキュメントのアドレス: https://doc.open. alipay.com/doc2/detail.htm?spm=a219a.7629140.0.0.O9yorI&treeId=62&articleId=103740&docType=1

  32. // sParaTemp .put("パラメータ名","パラメータ値 ");

  33. String sHtmlText = AlipaySubmit.buildRequest(sParaTemp, "get", "確認"

    );
  34. / /支払い記録を保存 hysWebMeetingAliService.insertSelective(sParaTemp);

  35. return newResponseEntity(model, HttpStatus.OK)

  36. ;

4. コールバック:また、デモのnotify_url.jspのJavaコードを直接取得し、少し変更してビジネスコードを追加しました(ステータスの変更など)


@RequestMapping(
"notify"

)


@ResponseBody

  1. public

    String Notice(HttpServletRequest request){

    //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. String valueStr = "";  

  8. for (int i = 0; i

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

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

  11. }

  12. //コード化け解決策、文字化けが発生した場合に使用するコードです。 mysign と signed が等しくない場合は、このコードを使用して

  13. //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk") を変換することもできます。 ;

  14. params.put(name, valueStr) }

  15. //Alipay の通知リターンパラメータを取得します。を参照してください。技術文書 ページジャンプ同期通知パラメータ一覧(以下は参考用です) //

  16. //Merchant order Number

  17. 文字列 out_trade_no = request.getParameter("out_trade_no"

  18. ); trade_no = request.getParameter (
  19. "trade_no"

    );

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

  21. /Alipayの通知リターンパラメータを取得してください技術資料のページジャンプを参照してください。ドキュメント 同期通知パラメータリスト (上記は参考用です) //

  22. if(AlipayNotify.verify(params)){//検証が成功しました

  23. //////////////// ///////////////////////////////////////////////// /////////////////////////

  24. //販売者の情報を追加してくださいビジネスロジックのプログラムコードはこちら

  25. /——ビジネスロジックに従ってプログラムを書いてください(以下のコードは参照のみ)——

  26. 注文が販売者の Web サイトで処理されたかどうか 做没有 // 処理されていない場合は、注文番号 (OUT_TRADE_NO) に従って、販売者の Web サイトの注文システムで注文の詳細を確認できます。マーチャントのビジネス プログラムを実装します //リクエスト中の total_fee と seller_id が、通知中に取得した total_fee と seller_id と一致していることを確認してください。 ️ // 返金日が返金可能期間 (3 か月など) を超えると、Alipay システムから取引ステータス通知が送信されます

  27. //注文がマーチャントウェブサイトに配置されているかどうかを決定します。処理していない場合、処理されていない場合は、商人ウェブサイトの注文システムの注文の詳細を見つけます。注文番号 (out_trade_no) を入力し、販売者の業務プログラムを実行する必要があります 务 // リクエストが要求された場合は、TOTAL_FEE、SELLER_ID、Total_fee、Seller_ID を必ず判断してください 業務手順

    //支払いが完了した後、Alipayシステムはトランザクションステータスの通知を送信します
  28. 订 // 注文番号に従って、注文ステータスと Alipay レコード テーブルのステータスが有料に変更されました
  29. FLG = HyswebMeetingaliservice.ChangeordAlistAccess (out_trade_no)

  30. //out.print("success ");

    {

  31. ///////////// /////////////////////// ///////////////////////////////////////////////// //////

  32. }else

  33. {
  34. //検証に失敗しました

  35. //out.print("f大変です");

  36. 「失敗」;

  37. }
  38. 5. return_url: ページ ジャンプ同期通知ページのパスは、支払いが成功した後に Alipay が戻るページです。 「http:// 形式の完全なパスが必要であり、?id=123 などのカスタム パラメータは追加できません。外部ネットワークに正常にアクセスできる必要があります。」 Alipay は、バウンスするページの後にカスタム パラメータを追加できないことを明確に規定しています。ジャンプをいくつかのタイプに基づいて判断するのは少し面倒です。ここでトリックを実行しました。まず return_url.jsp の Java コードを直接移動し、少し変更します (springmvc メソッドに変更します)。バウンス アドレスは IP/aliPay/returnUrl で、次に新しい ModelAndView ("redirect:/meeting/info") です。 ) 考えている URL にリダイレクトします (パラメータの問題については、以下の概要のポイント 4 を参照してください)。

    [javascript] view plain copy


    1. @RequestMapping("returnUrl")

    2. publicModelAndView returnUrl( HttpservletRequest リクエスト) {

    3. ModlandView MV = New ModratView ( "リダイレクト:/会議/情報"

    4. );

    5. // Alipay からフィードバックを受け取る

    6. Map params = new HashMap();  

    7. Map requestParams = request.getParameterMap();  

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

    9. 文字列 名前 = (文字列) iter.next() ;  

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

    11. String valueStr = "";  

    12. for (int i = 0; i

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

    14. : valueStr + values[i] + ",";  

    15. MySign と Sign が等しくない場合は、このコードを使用して

    16. // valueStr = New String

    17. params.put(name, valueStr) を変換することもできます。 ;

    18. }

    19. ページジャンプ同期通知パラメータのリストドキュメント (以下は参照のみです) //

    20. String out_trade_no = request.getParameter("out_trade_no"); .getParameter("trade_no"

      ) を使用します。
    21. transactionトランザクションステータス= l "#ff0000;" >

    22. booleanverify_result= alipaynotify.verify(params);

    23. ////////////// ////////////////////////////// ///////////////////////////////////////

    24. (trade_status.equals(" TRADE_FINISHED"

      ) || trade_status.equals(
    25. "トレード_成功"

      )){

    26. やって無し // 処理されなかった場合は、注文番号 (OUT_TRADE_NO) に従って、販売者の Web サイトの注文システムで注文の詳細を確認し、販売者のビジネス プログラムを実装します。做有 // 実行済みの場合は、販売者の業務手続きを行わないでください
    27. }}

    28. // このページはページアーティストとして使用できます 編集

    29. // out.println("検証成功
      ");

    30. //——ビジネスロジックに基づいてくださいプログラム (上記のコードは参考用です)——

    31. /////////////////////// ///////////////////////////////////////////////

    32. //このページはページアートで編集できます

    33. // out.println("検証に失敗しました") ;

    34. }
    35. 5. 概要:
    36. 1. Alipay の統合は比較的簡単です。デモを見て、プロセスを理解すると簡単になります。 2. デバッグ時、特にコールバック時には、プロジェクトを外部ネットワークからアクセスできるサーバーにデプロイする必要があります。

    37. 3. 上記の不可解な問題が発生したことがない場合は、私に連絡するか、Eclipse のリモート デバッグに関するこの記事を読んで問題を追跡してください。 4. ページジャンプ通知ページのパスを同期するときにパラメータを渡す必要がある場合はどうすればよいですか? 最初にパラメータをカスタマイズしましたが、次のようなコメントが表示されました。

      [javascript]
    38. 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. パラメータ body (製品説明)、subject (製品名)、extra_common_param (パブリック戻りパラメータ) には、特殊文字 ( : #、%、&、+)、デリケートな単語、および外国語文字は使用できません (Want Want がサポートしていない外国語: 韓国語、タイ語、チベット語、モンゴル語、アラビア語

    )。

    openメソッド 中間値:

    [javascript] view plain copy


    1. sParaTemp.put(

      "extra_ common_param" 、会議 ID);

    2. returnUrl メソッドの値を取得し、それをリダイレクト パラメーターとして使用します:

    [javascript]

    view plain

    copy


    1. String会議Id = request.getParameter("extra_common_param");

    2. 関連する推奨事項:

      Alipay 支払いインターフェース シングルトランザクションクエリインターフェース

    ECShop 用 Alipay モバイル Web サイト支払いインターフェース

以上がJavaがAlipay決済インターフェースを呼び出すケースの詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。