Um JSAPI für die WeChat -Zahlung zu verwenden, müssen Sie zuerst eine Prepay_ID von WeChat erhalten und die Zahlung durch den JSAPI von WeChat abschließen. Aufgrund der komplizierten interaktiven Interaktion mit der komplizierten Front -End -Interaktionen Get_Brand_wcpay_Request: Abbrechen oder get_brand_wcpay_request: Fail kann einheitlich behandelt werden, damit Benutzer Fehler begegnen oder aktiv aufgeben, ohne die Unterscheidung zu verfeinern.
Der Beispielcode lautet wie folgt:
Function onbridgeready () {weixinjsbridge.invoke ('getbrandwcpayRequest', {"appid": "wx2421b1c4370EC43B", // The name of the public account was passed into "Timestamp": "139" 5712654 ", // timestamp, since 1970秒数 "Noncestern": "E61463F8EFA94090B1F366CCCFBBBB444", // "Paket": "U802345JGFJSDFGSDG888", "SignType": "Md53fn 4c63ff7fadd89 "// 微信签名}, Funktion (Funktion ( res) {if (res.err_msg == "get_brand_wcpay_request: OK") {} // Verwenden Sie die obige Methode, um die Rückgabe der Front -End -Rendite zu bestimmen. aber es garantiert es nicht. );
Die obigen Parameter des Parameterpakets sind prepaay_id
Im Folgenden geht es darum, Parameter zu erhalten, um JSAPI aufzurufen
Wenn wir JSAPI anrufen, müssen wir das OpenID des Benutzers erhalten.
Definieren Sie zuerst das Objekt einer Anfrage:
Paket com.Topedable.Protokoll; Java.Util.Map; String Time_Start; = builder.mch_id; .out_trade_no; s_tag ; void setappid (string appid) = Appid;} Public void Setmch_id (String mch_id) {this .mch_id = mch_id;} Public void SetDevice_info (String Device_info) {this.Device_info = Device_info;} Public Void SetnOnOnonONONONONONCE_STR r) {this.nonce_str = nonce_str;} public void setSign (String Sign) {this.Sign = Sign; CH (String at Contan) {this.attach = Attach;} public void setout_trade_no (String out_trade_no) {this.out_trade_no = out_trade_no;} public void void setfee_type (String fee_type) {this.fee_type = fleate_type;} publ. ) {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 time_start) {this.time_start = time_start; String time_expire) {this.time_expire = time_expire;} public 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) oder {MAP <String, Object> MAP = New HashMap <String, Object> (); .get (this); ();}} Return MAP; Private String SPBILL_CREATE_IP; Private String Time_start; xpire; Private String Goods_tag; Private String Notify_url; Private String Trade_type; Private String Product_id; Private String Limit_pay; ; TIFY_URL, String Trade_type) {if (Appid == NULL) {Throw New iLlegalargumentexception (" Passing parameter Appid cannot be null");} if (mch_id == null) {Throw NewALARGUMENTEXCEPTION ("" Numbers of mch_id cannot be null ");} if (Body == NULL) {Throw New iLlegalargumentedException ("" Pass parameter body kann nicht null sein ");} if (out_trade_no == null) {throw NewalArgumentException -Nummern out_trade_no kann nicht null sein");} if (total_fee == null) {throw New IllegalArgumentException ("Total_fee kann nicht null sein"); == null) {throw NewalArgumentException ("Die Anzahl der Parameter spbill_create_ip kann nicht null sein");} if (notify_url == null) {thround New IllegalArgumentEDEDException ("Passparameter Notify_url kann nicht null sein");} if (facting_type == null ) de_type kann nicht null sein ");} this.appid = appid; this .mch_id = mch_id; thisbody = body; this.out_trade_no = out_trade_no; = Trade_type;} public UnifyReqDatabuilder SetDevice_info) {{this.device_info = device_info; Anhängen; = time_expire; s;} Public UnifiedOrderreqdatabuilder Setgoods_tags_tags (String Goods_tag) {this.Goods_tags_tags_tag; Return This;} Public Lder Setproduct_id (String Product_id) {This.product_id = Product_id; Return This;} Public UnifiederReqdataBuilder limit_pay) {this.limit_pay = limit_pay ; Return This;} Public UnifiedREQDATABUILEDER STRING Openid (String Openid) {this.openid = OpenID; Return This;} Public UnifiederReqdata () {if ("jsapi" .equals (this.trade_type) &&TYPE &&OPENID == NULL) {Throw New illegalAGumentException ("Wenn Trade_Type JSAPI ist, ist OpenID ein Muss -Fill -Parameter");} if ("native" .equals (this.trade_type) && product_id == null) werfen neue illegaleAgumentException ("", wenn Trade_type native, product_id ist, ist ein natives. Muss -Fill Parameter ");} return New UnifiedRorderReqData (this);}}}}
Da einige Parameter erforderlich sind, werden einige Parameter ausgewählt. Und das Zeichen muss warten, bis alle Parameter vor der Berechnung weitergegeben werden, sodass der Builder -Modus hier verwendet wird. Über den Erbauermodus.
Wir wählen httpclient für die Netzwerkübertragung.
Paket com.unedable.com; Log; .APache.http.client.config.RequestConfig; .Conn. http.client.httpclients; Java.Security.KeyStore; Timeout -Zeit, Standard 10 Sekunden privat statische Int Sockettime = 5000; Keystore = keystore.getInstance ("pkcs12"); SSLCONTEXTS.CUSTOM () .loadKeymaterial (KEYSTORE, Configure.getcertpassword (). ToCharRay (). ild (); // Allow Tlsv1 Protocol only sslConnectionSocketFactory SSLSF = New SSLCONNECTIONSOTFACTORY (SSLContext, New String [] {"TLSV1"}, NULL, SslConnectionsOtfactory.browser_compatible_hostname_verifier); Fabrik (SSLSF) .build (); {Wurf neu RunTimee Xception ("Fehler erstellen httpclient ...", e);}} public String DOGT (String Requesturl) Ausnahme {httpget httpget = new httpget (Requesturl); . GetStatusCode (); Status: " + status);}}}; return httpclient.execute (httpget, reaktionsHandler);} schließlich {httpget.releaseconnection ();}} public stric String vopost (String url, Object2xml) {String result = null; ost = Neues httppost (url); Die API wird in XML -Formatdaten in API -Postdataxml = XstreamforRequestPostData .ToxML (Object2XML) konvertiert. -8 Codierung, ansonsten kann der Chinesen des API-Servers XML erfolgreich identifiziert werden. ;/ Setzen Entität, "utf-8");} catch (ConnectionPoolTimeoutException e) {Logger.Error ("Http Get Throw ConnectionPoolTimeoutException (Wartezeit)", e);} catch Ereignis E) {Logger.error ("http towing thnectimeoutException ", e);} catch) {logger.Error (" "http Get throw sockettimeoutException", e);} catch (Ausnahme E) {Logger.Error ("http Get Throw), e);} schließlich {httppp ost. abort ();} Rückgabeergebnis;
Dann gibt es unseren allgemeinen Eingang:
Paket com.Topedable.Service; .ParSercon -Festung; Throws IOEXCEPTION, SAXEXCEPTION, PARSERCONFIGUTEXCEPTION {String Res) Onfigure.Unified_order_api, ReqData); Return XMLPARSER.GetMapfromxml (res);} Public Static void Main (String [] args) Throws Exception {UnifiedOrderreqdata Reqdata = new unifiedOrDerreqdata.UnifyReqdataBuilder ("appid" , "mch_id", "out_trade_no", 1, "spaby_create_ip_ip_ip ", notify_url", "jsapi"). Setopenid ("openid"). Build () ; System.out.println (unifiedOrder (ReqData));}}
Der zurückgegebene XML ist:
<xml> <sturn_code> <! CDATA [10000100]> </mch_id> <nonce_str> <! D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D7D76D7D7D76D7D7D7D7D7D7D76D7D7D76D7D7D7D7D7D7D7D7D7E86E86E86E86E86E86E8ED7ED7REIGRAG result_code> <! </Result_code> <prepay_id> <!
Return_code und result_code gibt das prepay_id zurück, wenn sie Erfolg haben. Wesen Wesen Benutze ihn dann in JSAPI. Wesen
本文已被整理到了《JavaScript微信开发技巧汇总》,《Android微信开发教程汇总》,《java微信开发教程汇总》欢迎大家学习阅读。
Ich empfehle ein WeChat Mini -Programm -Tutorial mit einem höheren Maß an Aufmerksamkeit: dem Herausgeber von "Wechat Mini Program Development Tutorial" ist für alle sorgfältig organisiert.
Das obige ist der gesamte Inhalt dieses Artikels.