لاستخدام JSAPI لدفع WeChat ، يجب أولاً الحصول على prepay_id من WeChat ، ثم أكمل الدفع عن طريق الاتصال بـ WeChat's JSAPI. نظرًا للتفاعل التفاعلي مع المعقد ، get_brand_wcpay_request: إلغاء أو get_brand_wcpay_request: يمكن التعامل مع الفشل بشكل موحد للمستخدمين لمواجهة أخطاء أو الاستسلام بنشاط ، دون الحاجة إلى تحسين التمييز.
رمز المثال هو كما يلي:
وظيفة onbridgeready () {weixinjsbridge.invoke ('getBrandwCpayRequest' ، {"appid": "WX2421B1C4370EC43B" ، // تم نقل اسم الحساب العام إلى "Timestamp": "139" 5712654 "数 "noncestr": "E61463F8EFA940B1F366CCFBBB444" ، // 随机串 "Package": "U802345JGFJSDFGSDG888" ، "SignType": "MD5" ، // 微信签名方式: " 34C63FF7FADD89 "// 微信签名} ، وظيفة ( res) {if (res.err_msg == "get_brand_wcpay_request: ok") {} // استخدم الطريقة أعلاه لتحديد عودة الواجهة الأمامية ، سيعود فريق WeChat Selemn: Res.ERR_MSG لكنه لا يضمن ذلك. ) ؛
المعلمات أعلاه لحزمة المعلمة هي prepaay_id
فيما يلي عن الحصول على معلمات للاتصال بـ JSAPI
عندما ندعو JSAPI ، يجب أن نحصل على المستخدم OpenID.
حدد أولاً كائن الطلب:
package com.unstopped.protocol ؛ java.util string_start time_expire ؛ = builder.mch_id ؛ .out_trade der.goods_tag ify_url ؛ void setAppId (string appid) = appid ؛} public void setmch_id (String mch_id) {this .mch_id = mch_id ؛ nonce_str ؛} setSign public void (علامة السلسلة) {this.sign = sign ؛ ch (سلسلة إرفاق) {this.attach = attach ؛} public void setout_trade_no (سلسلة out_trade_no) {this.out_trade_no = out_trade_no ؛} public void setfee_type (string fee_type) ) {this.total_fee = total_fee ؛} public void setSpbill_create_ip (String spbill_create_ip) {this .spbill_create_ip = spban_create_ip ؛} public void settime_start (string_start) {time_start = time_start ؛ void setgoods_tags (string goods_tag) {this.goods_tags_tag; } PUBLIC VOID SETNOTIFY_URL (String Notify_url) {this.notify_url = notify_url;} Public void Settrade_Type (String Trade_type) {This.tr Ade_type = Trade_type;} Public Void SetProduct_id (String Product_id) {this.product_id = product_id ؛} public void setlimit_pay (String limit_pay) {this.limit_pay = limit_pay ؛} public void setOpenId (String openId) {this.openid = openId ؛} map public <string> tom> ap () {MAP <STRING> MAP = NEWHMAP <STRING> () ؛ .get (هذا) ؛ () ؛} خريطة الإرجاع ؛ سلسلة خاصة لا يمكن أن يكون AppId AppID معلمة NULL ") ؛} if (mch_id == null) {throw newalArgumentException (" "" أرقام mch_id لا يمكن أن تكون فارغة ") ؛} if (body == null) {رمي جديد غير شرعي غير unshalalArgumentedException ( لا يمكن أن يكون فارغًا ") ؛} if (out_trade_no == null) {throw newAlArgumentException Numbers Out_trade_no لا يمكن أن يكون فارغًا") ؛} if (total_fee == null) {throw new inchlotalargumentexception ("total_fee لا يمكن أن يكون فارغًا") ؛ == NULL) {throw newalArgumentException ("لا يمكن أن يكون عدد المعلمات spbill_create_ip خالية") ؛} إذا (notify_url == null) {رمي جديد غير aluallargumentedException ( ) لا يمكن أن يكون de_type فارغًا ") ؛} this.appid = appid ؛ this .mch_id = mch_id ؛ this.body = body ؛ this.out_trade_no = out_trade_no ؛ this.total_fee = topal_fee ؛ ate_ip ؛ this.notify_url = notify_url ؛ = trade_type ؛} UnifyReqDatabuilder setDevice_Info) {{this.device_info = device_info ؛ إرفاق هذا ؛ = time_expire ؛ imit_pay = limit_pay ؛ alfulalAlagumentException ("عندما يكون trade_type jsapi ، فإن OpenID هو معلمة ضرورية - يجب -المعلمة -fill ") ؛} إرجاع new infinorderReqData (هذا) ؛}}}}
نظرًا لأن بعض المعلمات مطلوبة ، يتم تحديد بعض المعلمات. ويتعين على علامة الانتظار حتى تمر جميع المعلمات قبل الحساب ، بحيث يتم استخدام وضع البناء هنا. حول وضع البناء.
نختار httpclient لنقل الشبكة.
Package Com.Unstopable.com ؛ log org.apach.commons .hapache.http.config.requestConfig ؛ .conn.connectionpooltextextive ؛ http.httpclients java.security.keystore. توصيل الوقت المهلة ، الافتراضي 10 ثوانٍ ثابتة keystore = keystore.getInstance ("PKCS12") ؛ sslcontexts.custom () .loadkeymaterial (keystore ، config.getCertPassword (). sslconnectionsotfactory.browser_compatible_hostname_verifier) ؛ (SSLSF) .BUILD () ؛ {رمي New Runtimee Xception ("Error Create HttpClient ..." ، E) ؛}} static String public doget (string requesturl) يلقي الاستثناء {httpget httpget = new httpget (requesturl) ؛ . getStatuscode () ؛ الحالة: " + حالة) ؛}}} ؛ إرجاع httpclient.execute (httpget ، reviewHandler) ؛} أخيرًا {httpget.releaseconnection () ؛}} Stric Strice public (url url ، Object2xml) = جديد httppost (url) ؛ يتم تحويل API إلى بيانات تنسيق XML إلى API postdataxml = xstreamforrequestdata .Toxml (Object2xml) ؛ -8 الترميز ، وإلا فإن الصينية من خادم API لا يمكن تحديدها بنجاح. ؛/ قم بتعيين Logger.info لجهاز الطلب ("تنفيذ الطلب" + httppost.getRequestline () ؛ الكيان ، "utf-8") ؛} catch (connectionPooltimeOtexception e) {logger.error ("http get throw connectionpooltimeOtexception (wait time out)" ، e) ؛} catch event e) {logger.error ( "، e) ؛} catch) {logger.error (" "http get the sockettimeoutexception" ، e) ؛} catch (استثناء e) {logger.error ( ABSTR () ؛} نتيجة الإرجاع ؛
ثم هناك مدخلنا العام:
Package Com.Unstopped .ParserConfigurationexception ؛ رمي ioException ، saxexception ، parserconfigutexception {string res) onfigure.unified_order_api ، reqdata) ؛ " ، "mch_id" ، "out_trade_no" ، 1 ، "spaby_create_ip_ip" ، notify_url "،" jsapi ").
XML العائد هو:
<xml> <sturn_code> <! CDATA [10000100]> </mch_id> <nick_str> <! 7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7e8ed7e8ed0. _code> <! </result_code> <preday_id> <!
سيعود Return_Code و Result_Code إلى prepay_id عندما يكونا نجاحًا. جوهر جوهر ، ثم استخدمه في JSAPI. جوهر
تم تنظيم هذه المقالة على "ملخص تطوير JavaScript WeChat" ، وملخص Tutorial Android WeChat Development "، و" ملخص تعليمي Java WeChat Development ".
أوصي برمجي WeChat Mini مع درجة أعلى من الاهتمام للجميع: تم تنظيم محرر "WeChat Mini Development Tutorial" بعناية للجميع.
ما سبق هو كل محتويات هذه المقالة.