دون مزيد من اللغط ، فقط انظر إلى الكود.
requestHandler requestHandler = new requestHandler (super.getRequest () ، super.getResponse ()) ؛ // احصل على رمز // صالح في غضون ساعتين ، وأعد الرمز المميز بعد ساعتين = requestHandler.getToken () ؛ // تحديث الرمز المميز إلى application requestHandler.getTokenReal () ؛ System.out.println ("WeChat Pay Get Token ============================:" +token) ؛ // requestHandler تهيئة requestHandler.init () ؛ requestHandler.init (AppID ، AppSecret ، AppKey ، PartnerKey ، Key) ؛ الكود: النظام المحلي يولد الطلبات
. packparams.put ("bank_type" ، "wx") ؛ // type type packageparams.put ("body" ، "xxxx") ؛ // Product Description PackageParams.put ("FEE_TYPE" ، "1") ؛ // Bank Currency PackageParams.put ("input_charset" ، "UTF-8") ؛ // مجموعة الأحرف packparams.put ("notify_url" ، "http://xxxx.com/xxxx/wxcallback") ؛ // يتم اختبار عنوان الإخطار هنا باستخدام عنوان الشبكة الخارجية ، وينتبه إلى ما إذا كان المنفذ 80 مفتوحًا. packparams.put ("out_trade_no" ، لا) ؛ // Merchant Order Number PackageParams.put ("Partner" ، PartnerRid) ؛ // تعيين رقم التاجر packageparams.put ("spbill_create_ip" ، super.getRequest (). getRemoteHost ()) ؛ // يشير الجهاز الذي تم إنشاؤه بواسطة الترتيب إلى متصفح المستخدم IP PackageParams.put ("Total_fee" ، string.valueof (rstotal)) ؛ // يتم تقسيم المبلغ الإجمالي للمنتج إلى وحدات // تعيين معلمات الدفع sortedmap <string ، string> signparams = new Treemap <string ، string> () ؛ signparams.put ("appid" ، appid) ؛ signparams.put ("noncestr" ، noncestr) ؛ signparams.put ("traceid" ، propertiesUtils.getorderno ()) ؛ signparams.put ("Timestamp" ، timestamp) ؛ SignParams.put ("Package" ، PackageValue) ؛ signparams.put ("appkey" ، this.appkey) ؛ // لإنشاء توقيع الدفع ، يجب استخدام القيمة الأصلية لعنوان urlencoder لخوارزمية SHA1! علامة سلسلة = "" ؛ حاول {sign = sha1uTil.Createsha1Sign (signparams) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } // إضافة معلمات إضافية للتوقيعات غير المتوقعة إلى signparams.put ("sign_method" ، "sha1") ؛ signparams.put ("app_signature" ، علامة) ؛ // API Package Package ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- الرمز: إنشاء إكمال طلب سريع الدفع مسبقًا
// إنشاء ترتيب سريع الدفع مسبقًا لإكماله ، والعودة إلى Android ، و iOS ، وإسقاط المعلمات المطلوبة لـ WeChat. sortedMap <string ، string> payparams = new treemap <string ، string> () ؛ payparams.put ("appid" ، appid) ؛ payparams.put ("noncestr" ، noncestr) ؛ payparams.put ("package" ، "sign = wxpay") ؛ payparams.put ("PartnerId" ، PartnerRid) ؛ payparams.put ("prepayid" ، إعداد) ؛ payparams.put ("appkey" ، this.appkey) ؛ // الفرق هنا هو 1000 بسبب حد طول المعلمة. int time = (int) (System.CurrentTimeMillis () / 1000) ؛ payparams.put ("timestamp" ، string.valueof (time)) ؛ System.out.println ("Timestamp:" + time) ؛ // Signature String PaySign = "" ؛ حاول {paysign = sha1util.createsha1sign (payparams) ؛ } catch (استثناء e) {E.PrintStackTrace () ؛ } payparams.put ("sign" ، paysign) ؛ // يتم إرجاع بيانات SPOOF JSON إلى Client BasicDBObject BackObject = new BasicDBObject () ؛ backobject.put ("appid" ، appid) ؛ backobject.put ("noncester" ، payparams.get ("noncestr")) ؛ backobject.put ("package" ، "sign = wxpay") ؛ BackObject.put ("PartnerId" ، payparams.get ("PartnerD")) ؛ backobject.put ("prepayid" ، payparams.get ("prepayid")) ؛ backobject.put ("appkey" ، this.appkey) ؛ backobject.put ("timestamp" ، payparams.get ("timestamp")) ؛ backobject.put ("sign" ، payparams.get ("sign")) ؛ String backstr = dataObject.toString () ؛ system.out.println ("backstr:" + backstr) ؛ العودة Backstr. حتى الآن ، تم إنشاء أمر الدفع المسبق وتم إرجاعه إلى العميل ، في انتظار إخطار خادم WeChat. عنوان الإخطار هو الإخطار الذي يولد أمر الدفع المسبق.
ResponseHandler Reshandler = جديد استجابة (طلب ، استجابة) ؛ reshandler.setkey (PartnerKey) ؛ // إنشاء كائن طلب // requestHandler QueryReq = جديد requestHandler (طلب ، استجابة) ؛ //queryreq.init () ؛ if (reshandler.istenpaysign () == true) {// رقم الطلب التاجر سلسلة out_trade_no = reshandler.getParameter ("out_trade_no") ؛ System.out.println ("Out_trade_no:" + out_trade_no) ؛ // TenPay Number Number Transaction_id = reshandler.getParameter ("Transaction_id") ؛ System.out.println ("Transaction_id:" + Transaction_id) ؛ // المبلغ ، في وحدات القسم total_fee = reshandler.getParameter ("Total_fee") ؛ // إذا تم استخدام قسيمة خصم ، فإن الخصم له قيمة ، Total_Fee+Discount = The Total_fee String الأصل المطلوبة = Reshandler.getParameter ("Discount") ؛ // result result string trade_state = reshandler.getParameter ("trade_state") ؛ // ugge التوقيع والنتيجة إذا ("0" .equals (trade_state)) { . -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // إرسال رسالة ناجحة إلى نظام TenPay. لن يقدم نظام TenPay إشعارات لاحقة بعد تلقي هذه النتيجة reshandler.sendtocft ("النجاح") ؛ // إرجاع النجاح إلى خادم WeChat خلاف ذلك 8 إشعارات في 30 دقيقة إرجاع "النجاح" ؛ } آخر {system.out.println ("فشل التحقق من التوقيع") ؛ reshandler.sendtocft ("فشل") ؛ استجابة. setcharacterencoding ("UTF-8") ؛ }} else {system.out.println ("fail -md5 fails") ؛ }ما سبق هو الرمز الذي تقوم Java بتنفيذ خادم الدفع WeChat. آمل أن يدرس الجميع ذلك بعناية لإدراك مدفوعات WeChat.