دعونا نشكو:
من الصعب حقًا فهم واجهة ALIPAY و WeChat Demo والمستندات. إنه فوضوي ولا أعرف أين أجد ما أريد. في الأيام الأخيرة ، تحتاج شركتنا إلى القيام بتطورات مماثلة. كرائد ، أخذت زمام المبادرة في حل مشكلة دمج واجهات الدفع Java Alipay و Wechat.
بيئة العمل الخاصة بنا: موقع JSP + واجهة الدفع. واجهة Alipay الحالية هي 20160912 و WeChat هي إصدار V3. إذا واجهت ترقية الإصدار ، فيرجى الاتصال بموظفي خدمة العملاء في المؤسسة ذات الصلة للترقية.
تقدم هذه المقالة واجهة JSP+Alipay ، والتي ليست أصلية.
كن على دراية بالمبتدئين:
1. عنوان الواجهة والمعلمات المستخدمة في هذه المقالة هي عنوان صندوق الرمل. سواء كنت تستخدم صندوق الرمل أو العنوان الرسمي ، تأكد من التحقق من استخدام عنوان الواجهة والمعلمات ، ولا تعتبره أمرا مفروغا منه.
2. يستخدم هذا المقال حزمة جرة:
Alipay-SDK-Java20160912220103.jar
العموم-كودك -1.6. جار
العموم HTTPCLIENT-3.0.1.JAR
العموم-الانحناء -1.1.1.jar
Fastjson -1.2.7.Jar
JSON-LIB-2.2.3-JDK13.JAR
json.jar
JSP-API.JAR
servlet-api.jar
يوضح:
Alipay-SDK-Java هو الدفع الرسمي SDK. يرجى تنزيله على الموقع الرسمي. تستخدم هذه المقالة الإصدار 20160912
استدعاء الصفحة الرئيسية:
<Body> <٪ cspay pay = 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.alipaytRadePrecreatequest ؛ استيراد 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.alipaytRadePrecreateSponse ؛ استيراد com.alipay.api.response.alipayTradequeryResponse ؛ استيراد com.alipay.api.response.alipayTradErefundResponse ؛ الفئة العامة alipayclientfactory {private alipayclient client alipayclient = new defaultalipayclient (config.url ، config.appid ، config.rsa_rrivate_key ، config.format ، config.charset ، config.alipay_public_key) ؛ alipayclient alipayclient العامة getalipayclientinstance () {return client ؛ } /** * appauthtoken * إذا استدعى ISV واجهة الدفع وجهاً لوجه بدلاً من التاجر ، فيجب إحضار App_auth_Token الذي تم الحصول عليه بعد التاجر ؛ إذا كان التاجر يتقدم بطلب للدفع وجهاً لوجه ، فسوف يمرر BizContent Null * معلمات طلب JSON Format Merchant * // // PLUST WEBPLICE STRING PROBLE YDANDPC_PAY (MAP ، String> MAPS) RISTHORS ALIPayApiexception {alipaytRadeweRquest alipayrequest = new alipayTRADERQUESTER () سلسلة إخطار = maps.get ("إخطار") ؛ String returnurl = maps.get ("returnurl") ؛ // رد الاتصال الخلفي if (! stringUtils.isempty (إخطار)) {alipayRequest.setNotifyUrl (etrifyurl) ؛ // public parameter maps.remove ("eletifyurl") ؛ // BizContent لا يتطلب خرائط المعلمة العامة. }. // public parameter maps.remove ("returnurl") ؛ } String bizcon = json.tojsonstring (خرائط) ؛ alipayrequest.setBizContent (bizcon) ؛ نموذج السلسلة = "" ؛ جرب {form = alipayclientFactory.getalIpayClientInstance () .pageExecute (alipayRequest) .getBody () ؛ } catch (alipayapiexception e) {form = "err" ؛ E.PrintStackTrace () ؛ } // اتصل بـ SDK لإنشاء نموذج إرجاع النموذج ؛ } // Query حالة الطلب العامة alipaytradequeryResponse استعلام (سلسلة appauthtoken ، سلسلة bizcontent) يلقي alipayapiexception {alipaytradequeryrequest request = new alipaytradequeryrequest () ؛ request.putothertextparam ("app_auth_token" ، appauthtoken) ؛ request.setBizContent (bizcontent) ؛ إرجاع alipayclientfactory.getalipayclientinstance (). تنفيذ (طلب) ؛ } // barcode payment public alipaytradepayresponse pay (string appauthtoken ، string bizcontent) يلقي alipayapiexception {alipaytradepayrequest request = new alipaytradepayrequest () ؛ request.putothertextparam ("app_auth_token" ، appauthtoken) ؛ request.setBizContent (bizcontent) ؛ إرجاع alipayclientfactory.getalipayclientinstance (). تنفيذ (طلب) ؛ }. request.putothertextparam ("app_auth_token" ، appauthtoken) ؛ request.setBizContent (bizcontent) ؛ إرجاع alipayclientfactory.getalipayclientinstance (). تنفيذ (طلب) ؛ }. request.putothertextparam ("app_auth_token" ، appauthtoken) ؛ request.setBizContent (bizcontent) ؛ إرجاع alipayclientfactory.getalipayclientinstance (). تنفيذ (طلب) ؛ }. request.putothertextparam ("app_auth_token" ، appauthtoken) ؛ request.setBizContent (bizcontent) ؛ إرجاع alipayclientfactory.getalipayclientinstance (). تنفيذ (طلب) ؛ } suppressWarnings ("غير مستخدمة") الفراغ الثابت العام (سلسلة [] args) {alipayclientFactory c = new alipayclientFactory () ؛ حاول {map <string ، string> map = new hashmap <string ، string> () ؛ map.put ("Out_trade_no" ، "20160914113218") ؛ سلسلة bizcontent = json.tojsonstring (map) ؛ System.err.println (bizcontent) ؛ alipaytradequeryResponse rp = c.query (null ، bizcontent) ؛ } catch (alipayapiexception e) {E.PrintStackTrace () ؛ }}} حزمة com.luozhuang.alipay ؛ تهيئة الفئة العامة {// مطور يطبق المفتاح الخاص. تقوم Java بتكوين تنسيق PKCS8 ، وتكوين لغة PHP/.NET المفتاح الخاص الأصلي في ملف RSA_PRIVAN_KEY.PEM. السلسلة النهائية الثابتة العامة RSA_RRIPATION_KEY = "Luozhuang" ؛ // بوابة طلب واجهة. تعتبر واجهات الدفع الشخصية والاستعلام والاسترداد والإلغاء قيمًا ثابتة عن url static string url = "https://openapi.alipaydev.com/gateway.do" ؛ // تطبيق Merchant Appid ، طالما أن التطبيق الخاص بك يحتوي على واجهة دفع شخص للوجه وهو في حالة التنشيط ، يمكنك استخدام Appid المقابل لهذا التطبيق. يمكن للمطورين تسجيل الدخول إلى التطبيق المتعلق بمركز إدارة المنصة المفتوحة لعرض السلسلة النهائية الثابتة العامة appid = "luozhuang" ؛ // مجموعة الأحرف المشفرة. الافتراضي UTF-8 Static Final String charset = "UTF-8" ؛ // إرجاع التنسيق. الافتراضي JSON Public Static Final Format = "Json" ؛ // يتم استخدام مفتاح Alipay العام للحصول على معلومات إرجاع متزامنة للتحقق من التحقق مما إذا كانت المعلومات التي تم إرسالها بواسطة Alipay. السلسلة النهائية الثابتة العامة 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 ؛ / ** * فئة تنفيذ Servlet CSPAY */ فئة عامة CSPAY يمتد httpservlet {private static final long serialversionuid = 1L ؛ / ** * seee httpservlet#doget (طلب httpservletrequest ، httpservletresponse * الاستجابة) */ public void doget (httpservletrequest request ، httpservletresponse) رمي servlexception ، ioexception {dopost (طلب ، استجابة) ؛ } / ** * see @see httpservlet#dopost (httpservletrequest request ، httpservletponse * response) * / public void dopost (httpservletrequest request ، httpservletspons hashmap <string ، string> () ؛ maps.put ("Out_trade_no" ، utildate.getordernum ()) ؛ Maps.put ("Total_amount" ، "0.01") ؛ Maps.put ("الموضوع" ، "iPhone6 16g") ؛ maps.put ("body" ، "iPhone6 16G") ؛ maps.put ("product_code" ، "quick_wap_pay") ؛ // لا ينبغي كتابة مفتاح المعلمتين التاليتين بشكل عشوائي باستخدام maps.put ("returnurl" ، "http://domain.com/callback/return_url.jsp") ؛ maps.put ("DeforeUrl" ، "http://domain.com/callback/notify_url.jsp") ؛ حاول {alipayclientFactory ali = new alipayclientFactory () ؛ نموذج السلسلة = ali.ydandpc_pay (خرائط) ؛ if (! form.equals ("err")) {response.setContentType ("text/html ؛ charset = utf-8") ؛ استجابة. }} catch (alipayapiexception e) {E.PrintStackTrace () ؛ }}} حزمة com.luozhuang.alipay ؛ استيراد java.util.arraylist ؛ استيراد java.util.collections ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ الفئة العامة csutil { / ** * فرز جميع عناصر الصفيف وربطها في سلاسل في "المعلمة = قيمة المعلمة" نمط * * param params * التي يجب فرزها ومشاركتها في الربط الحرفي * @سلسلة * ArrayList <string> (params.keyset ()) ؛ Collections.sort (Keys) ؛ سلسلة prester = "" ؛ لـ (int i = 0 ؛ i <keys.size () ؛ i ++) {string key = keys.get (i) ؛ قيمة السلسلة = params.get (مفتاح) ؛ if (i == keys.size () - 1) {// عند الربط ، لا يتم تضمين الحرف الأخير والشخصية prester = key + "=" + value ؛ } else {prester = prester + key + "=" + value + "&" ؛ }} return prester ؛ }} حزمة com.luozhuang.alipay ؛ استيراد java.util.date ؛ استيراد java.util.random ؛ استيراد java.text.simpledateformat ؛ استيراد java.text.dateformat ؛ / * * * اسم الفئة: utildate * الوظيفة: فئة الطلب المخصصة * التفاصيل: فئة الأدوات ، والتي يمكن استخدامها للحصول على تواريخ النظام ، أرقام الطلبات ، إلخ. يمكن للتجار الكتابة وفقًا لاحتياجات موقع الويب الخاص بهم ووفقًا للوثائق الفنية ، وليس من الضروري استخدام هذا الرمز. *هذا الرمز مخصص للتعلم والبحث في واجهة alipay فقط ، ولا يتم توفيره إلا كمرجع. */ public class utildate {/ ** year ، month ، day ، ساعة ، دقيقة ، والثانية (بدون ترسيح) yyymmddhhmmss*/ سلسلة ثابتة ثابتة dtlong = "yyymmddhhmmss" ؛ / ** بدوام كامل yyyy-mm-dd hh: mm: ss*/ public static final String Simple = "Yyyy-MM-DD HH: mm: ss" ؛ / ** السنة ، الشهر ، اليوم ، (لا يوجد سطحي) yyyymmdd*/ السلسلة النهائية الثابتة العامة dtshort = "yyyymmdd" ؛ / *** إرجاع الوقت الحالي للنظام (دقيق إلى milliseconds) ، كرقم ترتيب فريد* @REGRINT* وقت النظام الحالي في تنسيق yyyymmddhhmmss*/ سلسلة ثابتة عامة getordernum () {date date = new date () ؛ DateFormat df = new SimplEdateFormat (dtlong) ؛ إرجاع df.format (التاريخ) ؛ } / ** * احصل على التاريخ الحالي للنظام (دقيق إلى milliseconds) ، التنسيق: yyyy-mm-dd hh: mm: ss * regurn * / static string public getDateFormatter () {date date = new date () ؛ DateFormat df = new SimplEdateFormat (بسيط) ؛ إرجاع df.format (التاريخ) ؛ } / ** * احصل على العام الحالي ، الشهر ، يوم النظام (دقيق لليوم) ، التنسيق: YyyyMMDD * @RETURN * / public static string getDate () {date date = new date () ؛ DateFormat df = new SimplEdateFormat (dtshort) ؛ إرجاع df.format (التاريخ) ؛ } / *** قم بإنشاء رقم عشوائي من ثلاثة أرقام* @RETURN* / سلسلة ثابتة عامة getThree () {random rad = new Random () ؛ إرجاع rad.nextint (1000)+"" ؛ }}ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.