Pour utiliser JSAPI pour le paiement de WECHAT, vous devez d'abord obtenir un prepay_id de WeChat, puis terminer le paiement en appelant JSAPI de WeChat. En raison de l'interaction interactive frontale compliquée, get_brand_wcpay_request: annuler ou get_brand_wcpay_request: l'échec peut être géré uniformément pour les utilisateurs pour rencontrer des erreurs ou abandonner activement, sans avoir à affiner la distinction.
L'exemple de code est le suivant:
Fonction OnBridGeready () {Weixinjsbridge.invoke ('GetBrandwcpayRequest', {"AppID": "WX2421B1C4370EC43B", // Le nom du compte public a été transmis dans "Timestamp": "139" 5712654 ", // Timestamp, depuis 1970 秒数 "Noncestr": "e61463f8efa94090b1f366cccfbbb444", // 随机串 "package": "U802345jgfjsdfgsdg888", "Signe C63ff7fadd89 "// 微信签名}, fonction ( res) {if (res.err_msg == "get_brand_wcpay_request: ok") {} // Utilisez la méthode ci-dessus pour déterminer le retour frontal, l'équipe WeChat Solemn: res.err_msg reviendra à OK après le succès du paiement de l'utilisateur, mais cela ne le garantit pas. );
Les paramètres ci-dessus du package de paramètres sont prepaay_id
Ce qui suit consiste à obtenir des paramètres pour appeler JSAPI
Lorsque nous appelons JSAPI, nous devons obtenir l'OpenID de l'utilisateur.
Définissez d'abord l'objet d'une demande:
package com.unstoppedable.protocol; Importer Java.util.map; String Time_Start; = .out_trade_no; builder.goods_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 SetNonononononce_Str r) {this.nonce = nonce_str;} public void setSign (String Sign) {this.sign = signe;} public void setBody (corpor ch (String attach) {this.attach = attach;} public void setout_trade_no (String Out_trade_no) {this.out_trade_no = out_trade_no;} public void setFee_Type (String fee_type) {this.fee_type = fee_type;} public ic ic ic void settotal_fee (int total_fee ) {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) {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;} public map <string, object> tom> ap () {map <string, objet> map = new hashmap <string, objet> (); .get (this); ();}} Retourne la classe statique statique publique. String privé SPBILL_CREAGE Passage paramètre appid ne peut pas être null ");} if (mch_id == null) {throw newalargumentException (" "Les nombres de mch_id ne peuvent pas être null");} if (body == null) {lancez new illégalArgumededException ("" passer le corps du paramètre Impossible d'être null ");} if (out_trade_no == null) {throw newalargumentException nombres Out_trade_no ne peut pas être null");} if (total_fee == null) {lancer new illégalargumentException ("total_fee ne peut pas être null");} if (span_create_ip == NULL) {Throw NewAlArgumentException ("Le nombre de paramètres SPBILL_CREATE_IP ne peut pas être null");} if (notify_url == null) {Throw New illégalArgumentEdException ("PASS Paramètre notify_url ne peut pas être null");} if (Trade_Type == Null ) de_type ne peut pas être null ");} 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; this.trade_type; = Trade_Type;} public UnifyReqDatabuilder setDevice_info) {{this.device_info = device_info; Attacher; = Time_Expire; s;} public UnifiedRederReqdatabuilder setgoods_tags_tags (String Goods_tag) {this.goods_tags_tags_id) it_pay = limite_pay ; IllégalAgumentException ("When Trade_Type est JSAPI, OpenId est un paramètre incontournable");} if ("natif" .equal MUST -PALTER PARAMER ");} Renvoie un nouveau UnifiedOrderReqData (This);}}}}
Parce que certains paramètres sont nécessaires, certains paramètres sont sélectionnés. Et le signe doit attendre que tous les paramètres passent avant de calculer, de sorte que le mode Builder est utilisé ici. À propos du mode générateur.
Nous choisissons HTTPClient pour la transmission réseau.
package com.unstoppedable.com; Log; .apache.http.client.config.requestconfig; .Connais http.client.httpclices; Java.Security.KeyStore; Connect Timeout, par défaut 10 secondes statique privées sockettimeout = 5000; Keystore = keystore.getInstance ("pkcs12"); Sslcontex.custom () .loadKeyMaterial (keystore, configure.getCertPassword (). TochArray (). Ild (); // permettre le protocole tlsv1 uniquement sslconnections; SSLConnectionsOtFactFactory.Browser_Compatible_Hostname_Verifier); ory (sslsf) .build (); ? GetRequestline ()); GetStaturde (); status: "+ status);}}}; return httpclient.execute (httpget, réponsehandler);} enfin {httpget.releaseconnection ();}} public stric string vopost (string url, objet objet2xml) {string result = null; ost vopost (string url, objet objet2xml) {string result = null; ost vopost (string url, objet objet2xml) {String result = null; Ost vopost (String url, Object Object2xml) {String result = null; Ost vopost (String Url, Object Object2xml) {String result = null; Ost vOpost = Nouveau httppost (url); Soumis à l'API est converti en données de format XML en API postdataxml = -8 Encodage, sinon le chinois du serveur API XML ne peut pas être identifié avec succès. ; / Définir le logger de configuration.info du périphérique de demande ("Exécution de la demande" + httppost.getRequestline ()); Entité, "utf-8");} catch (ConnectionPoolTimeoutException e) {Logger.Error ("http get throw ConnectionPoolTimeoutException (wait time out)", e);} catch event e) {Logger.Error ("http get lancers thnectTimeoutException ", e);} catch) {Logger.Error (" "http get throw sockettimeoutException", e);} catch (exception e) {logger.error ("http get throw), e);} enfin {httppp ost. about ();} Retour Résultat;
Ensuite, il y a notre entrée générale:
package com.unstoppedable.Service; .PaSerConfigurationException; Lance ioException, saxException, ParserConfiguteXception {String res) onfigure.unified_order_api, reqdata); " , "mch_id", "out_trade_no", 1, "spaby_create_ip_ip_ip", notify_url "," jsapi "). setOpenID (" openId "). build (); system.out.println (UnifiedOrder (reqdata));}}
Le XML retourné est:
<xml> <STURN_CODE> <! CDATA [10000100]]> </mch_id> <NONCE_STR> <! 7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d7d76d7d7d7d76d7d7d7d7d7d7e86d7d7ed75e8e8ed0ce6 2f Ode> <! </cult_code> <payed_id> <!
Return_code et result_code renverra le prepay_id lorsqu'ils seront le succès. Essence Essence , Alors utilisez-le en jsapi. Essence
Cet article a été organisé en "Javascript WeChat Development Résumé", "Résumé du didacticiel Android WeChat Development" et "Java WeChat Development Tutorial Résumé" Bienvenue à tout le monde pour apprendre et lire.
Je recommande un tutoriel de programme WeChat Mini avec un degré d'attention plus élevé à tout le monde: le rédacteur en chef du «tutoriel de développement du programme WeChat» est soigneusement organisé pour tout le monde.
Ce qui précède est tout le contenu de cet article.