文句を言ってみましょう:
AlipayとWechatのデモとドキュメントのインターフェイスを理解するのは非常に難しいです。乱雑で、自分が欲しいものをどこに見つけるかわかりません。最近では、当社は同様の開発を行う必要があります。先駆者として、私はJava Alipayの支払いとWeChat Payment Interfacesを統合するという問題を解決するために主導権を握りました。
私たちの作業環境:JSP Webサイト +支払いインターフェイス。現在のAlipayインターフェイスは20160912、WeChatはV3バージョンです。バージョンのアップグレードに遭遇した場合は、関連する組織のカスタマーサービススタッフに連絡してアップグレードしてください。
この記事では、JSP+Alipayインターフェイスを紹介しますが、これはオリジナルではありません。
初心者に注意してください:
1.この記事で使用されているインターフェイスアドレスとパラメーターは、サンドボックスのアドレスです。サンドボックスまたは公式アドレスを使用している場合でも、インターフェイスアドレスとパラメーターの使用を必ず確認してください。
2。この記事では、JARパッケージを使用しています。
Alipay-SDK-Java20160912220103.jar
Commons-Codec-1.6.jar
commons-httpclient-3.0.1.jar
commons-logging-1.1.1.jar
Fastjson-1.2.7.jar
JSON-LIB-2.2.3-JDK13.JAR
json.jar
jsp-api.jar
サーブレットAPI.jar
説明:
Alipay-Sdk-Javaは公式の支払いSDKです。公式ウェブサイトにダウンロードしてください。この記事では、バージョン20160912を使用しています
ホームページコール:
<body> <%cspay pay = new cspay(); pay.dopost(リクエスト、応答); %> </body>
パッケージcom.luozhuang.alipay; java.util.hashmapをインポートします。 java.util.mapをインポートします。 com.alibaba.fastjson.jsonをインポートします。 com.alipay.api.alipayapiexceptionをインポートします。 com.alipay.api.alipayclientをインポートします。 com.alipay.api.defaultalipayclientをインポートします。 com.alipay.api.internal.util.stringutilsをインポートします。 com.alipay.api.request.alipaytradecancelrequestをインポートします。 com.alipay.api.request.alipaytradepayrequestをインポートします。 com.alipay.api.request.alipaytradeprecreaterequestをインポートします。 com.alipay.api.request.alipaytradequeryRequestをインポートします。 com.alipay.api.request.alipaytraderefundRequestをインポートします。 com.alipay.api.request.alipaytradewappayrequestをインポートします。 com.alipay.api.response.alipaytradecancelresponseをインポートします。 com.alipay.api.response.alipaytradepayresponseをインポートします。 com.alipay.api.response.alipaytradeprecreateresponseをインポートします。 com.alipay.api.response.alipaytradequeryresponseをインポートします。 com.alipay.api.response.alipaytraderefundResponseをインポートします。 public class alipayclientFactory {private static final alipayclient client = new defaultalipayclient(config.url、config.appid、config.rsa_rrivate_key、config.format、config.charset、config.alipay_public_key); public static alipayclient getAlipayClientInstance(){return client; } /** * appauthtoken * ISVが商人の代わりに対面支払いインターフェイスを呼び出す場合、商人が許可された後に取得したapp_auth_tokenは彼と一緒に持ち込まれなければなりません。商人が対面支払いを申請した場合、彼はnull bizcontent * json形式の商人の要求パラメーターを渡します */ //モバイルWeb支払いウェブサイトパブリックストリングydandpc_pay(map <string、string> maps)throws alipayapiexception {alipaytradewappayrequest = new alipaytradewappappaipaipaiped文字列notifyurl = maps.get( "notifyurl"); string returnurl = maps.get( "returnurl"); //バックグラウンドコールバックif(!stringutils.isempty(notifyurl)){alipayrequest.setnotifyurl(notifyurl); // public parameter maps.remove( "Notifyurl"); // bizcontentは、public parameter maps.remove( "notifyurl")を必要としません。 } //ページコールバックif(!stringutils.isempty(returnurl)){alipayrequest.setreturnurl(returnurl); // public parameter maps.remove( "Returnurl"); } string bizcon = json.tojsonstring(マップ); alipayrequest.setBizContent(bizcon);文字列form = ""; try {form = alipayclientfactory.getAlipayClientInstance().pageExecute(alipayRequest).getBody(); } catch(alipayapiexception e){form = "err"; e.printstacktrace(); } // SDKを呼び出してフォームリターンフォームを生成します。 } //照会ステータスパブリックアリパイトレイトレアリスポンセンスクエリ(String appauthtoken、string bizcontent)throws alipayapiexception {alipaytradequeryRequest = new AlipayTradequeryRequest(); request.putothertextparam( "app_auth_token"、appauthtoken); request.setBizContent(bizcontent); AlipayClientFactory.getAlipayClientInstance()。execute(request); } // Barcode Payment Public AlipaytradepayResponse Pay(String Appauthtoken、String bizcontent)Alipayapiexception {alipaytradepayrequest = new alipaytradepayrequest(); request.putothertextparam( "app_auth_token"、appauthtoken); request.setBizContent(bizcontent); AlipayClientFactory.getAlipayClientInstance()。execute(request); } //コードをスキャンして、公開alipaytradeprecreateresponse precreate(string appauthtoken、string bizcontent)を支払うAlipaytradeprecreaterequest = new alipaytradeprecreaterequest(); request.putothertextparam( "app_auth_token"、appauthtoken); request.setBizContent(bizcontent); AlipayClientFactory.getAlipayClientInstance()。execute(request); } //注文の注文public alipaytradecancelresponseキャンセル(String appauthtoken、string bizcontent)throws alipayapiexception {alipaytradecancelrequest request = new alipaytradecancelrequest(); request.putothertextparam( "app_auth_token"、appauthtoken); request.setBizContent(bizcontent); AlipayClientFactory.getAlipayClientInstance()。execute(request); } //払い戻しを申請するpublic alipaytraderefundResponse refund(string appauthtoken、string bizcontent)throws alipayapiexception {alipaytraderefundRequest = new AlipayTradereFundRequest(); request.putothertextparam( "app_auth_token"、appauthtoken); request.setBizContent(bizcontent); AlipayClientFactory.getAlipayClientInstance()。execute(request); } @suppresswarnings( "unused")public static void main(string [] args){alipayclientFactory c = new AlipayClientFactory(); try {map <string、string> map = new hashmap <string、string>(); map.put( "out_trade_no"、 "20160914113218"); string bizcontent = json.tojsonstring(map); System.err.println(bizcontent); alipaytradequeryResponse rp = c.query(null、bizcontent); } catch(alipayapiexception e){e.printstacktrace(); }}}パッケージcom.luozhuang.alipay; public class config {//開発者は秘密鍵を適用します。 JavaはPKCS8形式を構成し、PHP/.NET言語はRSA_PRIVATE_KEY.PEMファイルの元の秘密鍵を構成します。 public static final string rsa_rrivate_key = "luozhuang"; //インターフェイス要求ゲートウェイ。対面支払い、クエリ、払い戻し、および取り消しインターフェイスは固定値ですパブリックスタティック最終文字列url = "https://openapi.alipaydev.com/gateway.do"; // Merchant Application AppIDアプリケーションにFace-Person Payment Interfaceが含まれており、Activate状態にある限り、このアプリケーションの対応するAppidを使用できます。開発者は、オープンなプラットフォーム管理センター関連アプリケーションにログインして、public static final string appid = "luozhuang"を表示できます。 //エンコードされた文字セット。デフォルトのUTF-8パブリック静的最終文字列charset = "utf-8"; //フォーマットを返します。デフォルトjson public static final string format = "json"; // Alipay公開キーは、検証のために同期された返品情報を取得するために使用され、Alipayから送信された情報であるかどうかを確認します。 public static final string alipay_public_key = "luozhuang"; }パッケージcom.luozhuang.alipay; java.io.ioexceptionをインポートします。 java.util.hashmapをインポートします。 java.util.mapをインポートします。 javax.servlet.servletexceptionをインポートします。 javax.servlet.http.httpservletをインポートします。 javax.servlet.http.httpservletrequestをインポートします。 javax.servlet.http.httpservletResponseをインポートします。 com.alipay.api.alipayapiexceptionをインポートします。 / ** *サーブレット実装クラスCspay */ public class cspayはhttpservlet {private static final long serialversionuid = 1l; / ** * @see httpservlet#doget(httpservletrequest request、httpservletresponse * response) } / ** * @see httpservlet#dopost(httpservletrequest request、httpservletresponse * response * response) * / public void dopost(httpservletrequest request、httpservletresponse応答)servletexception、ioexception {// hashmap <string、string>(); maps.put( "out_trade_no"、utildate.getordernum()); maps.put( "total_amount"、 "0.01"); maps.put( "subject"、 "iPhone6 16G"); maps.put( "body"、 "iphone6 16g"); maps.put( "product_code"、 "Quick_wap_pay"); //次の2つのパラメーターのキーは、maps.put( "returnurl"、 "http://domain.com/callback/return_url.jsp")でランダムに記述しないでください。 maps.put( "Notifyurl"、 "http://domain.com/callback/notify_url.jsp"); try {AlipayClientFactory Ali = new AlipayClientFactory();文字列form = ali.ydandpc_pay(マップ); if(!form.equals( "err")){respons.setContentType( "text/html; charset = utf-8"); Response.getWriter()。write(form); //完全なフォームhtmlをページrespons.getwriter()。flush()に直接出力します。 }} catch(alipayapiexception e){e.printstacktrace(); }}}パッケージcom.luozhuang.alipay; java.util.arraylistをインポートします。 java.util.collectionsをインポートします。 java.util.listをインポートします。 java.util.mapをインポートします。 public class csutil { / ** *配列のすべての要素を並べ替えて、「パラメーター=パラメーター値」パターン * * @param params *パラメーターグループに並べ替えて参加する必要があるパラメーターグループ * / public static string createelinkstring(map <string> params> kis = keys = keys = createLinkString(Map <String> Keys = createLinkString)の文字スプライシング * @return文字列に参加する必要があります。 arrayList <String>(params.KeySet()); collections.sort(keys);文字列prestr = ""; for(int i = 0; i <keys.size(); i ++){string key = keys.get(i);文字列値= params.get(key); if(i == keys.size() - 1){//スプライシングの場合、最後の文字が含まれていない場合、prestr = prestr + key + "=" + value; } else {prestr = prestr + key + "=" + value + "&"; }} prestrを返します。 }}パッケージcom.luozhuang.alipay; Import Java.util.date; java.util.randomをインポートします。 java.text.simpledateformatをインポートします。 java.text.dateformatをインポートします。 / * * *クラス名:utildate *機能:カスタムオーダークラス *詳細:ツールクラス。これはシステムの日付、注文番号などを取得するために使用できます。商人は、自分のウェブサイトのニーズに従って、および技術文書に従って書くことができ、このコードを使用する必要はありません。 *このコードは、Alipayインターフェイスのみを学習および調査するためのものであり、参照としてのみ提供されます。 */ public class utildate {/ **年、月、日、時間、分、2番目(アンダースコアなし)yyymmddhhmmss*/ public static final string dtlong = "yyymmddhhmmss"; / **フルタイムyyyy-mm-dd hh:mm:ss*/ public static final string simple = "yyyy-mm-dd hh:mm:ss"; / **年、月、日、(アンダースコアなし)yyyymmdd*/ public static final string dtshort = "yyyymmdd"; / ***一意の注文番号として、システムの現在の時間(Millisecondsに正確)を返します* @return* yyyymmddhhmmss形式の現在のシステム時間*/ public static string getOrderNum(){date date = new date(); dateformat df = new SimpledateFormat(dtlong); df.format(日付)を返します。 } / ** *システムの現在の日付(Millisecondsに正確)、フォーマット:yyyy-mm-dd hh:mm:ss * @return * / public static string getdateformatter(){date date = new date(); dateformat df = new SimpledateFormat(simple); df.format(日付)を返します。 } / ** *現在の年、月、システムの日(日まで正確)、フォーマット:yyyymmdd * @return * / public static string getdate(){date date = new date(); dateformat df = new SimpledateFormat(dtshort); df.format(日付)を返します。 } / ***ランダムな3桁の数字を生成* @return* / public static string getthree(){random rad = new Random(); return rad.nextint(1000)+""; }}上記はこの記事のすべての内容です。みんなの学習に役立つことを願っています。誰もがwulin.comをもっとサポートすることを願っています。