Sans plus tarder, regardez simplement le code.
RequestHandler requestHandler = new demandehandler (super.getRequest (), super.getResponse ()); // Get token // valide dans les deux heures, et registre le jeton après deux heures = requestHandler.getToken (); // Mette à jour le jeton vers la demande de demandehandler.getTokenReal (); System.out.println ("WeChat Pay Get Token =============================. // requestHandler initialize demandehandler.init (); requestHandler.init (appid, appSecret, AppKey, partenaire, clé); Code: le système local génère des commandes
// Définir les paramètres d'ordre des packages triésmap <string, string> packageParams = new Treemap <string, string> (); packageParams.put ("Bank_Type", "WX"); // Type de paiement PackageParams.put ("Body", "xxxx"); // Description du produit packageParams.put ("fee_type", "1"); // Bank Currency PackageParams.put ("input_charset", "utf-8"); // set de caractères packageParams.put ("notify_url", "http://xxxx.com/xxxx/wxcallback"); // L'adresse de notification ici est testée à l'aide de l'adresse du réseau externe et faites attention à savoir si le port 80 est ouvert. packageParams.put ("out_trade_no", no); // Numéro de commande marchande PackageParams.put ("partenaire", partenairerid); // Définit le numéro de marchand packageParams.put ("spbill_create_ip", super.getRequest (). GetRemoteHost ()); // La machine IP générée par la commande fait référence au navigateur de l'utilisateur IP packageParams.put ("total_fee", string.valueof (rstotal)); // Le montant total du produit est divisé en unités // Définir les paramètres de paiement TridMap <String, String> SignParams = new Treemap <String, String> (); SignParams.put ("appid", appid); SignParams.put ("Noncestr", Noncestr); Signparams.put ("TraceId", PropertiesUtils.getOrderNo ()); SignParams.put ("horodatage", horodatage); SignParams.put ("Package", PackageValue); Signparams.put ("Appkey", this.appkey); // Pour générer une signature de paiement, la valeur d'origine d'Urlencoder doit être utilisée pour l'algorithme SHA1! String signe = ""; try {signe = sha1util.createSha1Sign (SignParams); } catch (exception e) {e.printStackTrace (); } // Ajouter des paramètres supplémentaires pour les signatures non participantes à SignParams.put ("Sign_Method", "Sha1"); Signparams.put ("app_signature", signe); // Package de paiement API se termine ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- CODE: Générez l'achèvement de la commande rapide prépayée
// Générez une commande rapide prépayée pour terminer, retourner sur Android, iOS et supprimer les paramètres requis pour WeChat. TridMap <String, String> PayParams = new Treemap <String, String> (); PayParams.put ("appid", appid); PayParams.put ("Noncestr", Noncestr); payparams.put ("package", "signe = wxpay"); PayParams.put ("PartnerId", Partnerrid); PayParams.put ("prepayid", prépare); PayParams.put ("Appkey", this.appkey); // La différence ici est 1000 en raison de la limite de longueur des paramètres. int time = (int) (System.Currenttimemillis () / 1000); PayParams.put ("Timestamp", String.ValueOf (Time)); System.out.println ("Timestamp:" + Time); // chaîne de signature paysign = ""; essayez {paysign = sha1util.createTesha1sign (PayParams); } catch (exception e) {e.printStackTrace (); } payparams.put ("signe", paysign); // Les données JSON Spoof sont renvoyées au client BasicDBObject BackObject = new BasicDbObject (); backObject.put ("appid", appid); backObject.put ("noncestr", PayParams.get ("noncestr")); backObject.put ("package", "signe = wxpay"); backObject.put ("partenaireId", PayParams.get ("PartnerId")); backObject.put ("prepayId", PayParams.get ("prepayId")); backObject.put ("AppKey", this.appkey); backObject.put ("horodat", PayParams.get ("TimeStamp")); backObject.put ("signe", payparams.get ("signe")); String backstr = dataObject.toString (); System.out.println ("Backstr:" + Backstr); return backstr; Jusqu'à présent, l'ordre de prépaiement a été généré et a été renvoyé au client, en attendant que le serveur WeChat en informe. L'adresse de la notification est notify_url qui génère l'ordre de remboursement anticipé.
ResponseHandler Reshandler = new ResponseHandler (demande, réponse); Reshandler.setkey (PartnerKey); // Créer un objet de demande // requesthandler QueryReq = new requestHandler (request, réponse); //QueryReq.Init (); if (reshandler.istenpaysign () == true) {// Numéro d'ordre marchand String OUT_TRADE_NO = reshandler.getParameter ("out_trade_no"); System.out.println ("out_trade_no:" + out_trade_no); // TenPay Numéro de commande String Transaction_id = reshandler.getParameter ("Transaction_id"); System.out.println ("Transaction_id:" + Transaction_id); // Montant, en unités de la chaîne de division total_fee = reshandler.getParameter ("total_fee"); // Si un coupon de remise est utilisé, la remise a une valeur, Total_Fee + Discount = le Demand de chaîne Total_Fee Original Discount = Reshandler.getParameter ("Discount"); // Résultat de paiement String Trade_State = Reshandler.getParameter ("Trade_State"); // juge la signature et le résultat if ("0" .equals (Trade_State)) { // --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- // Envoyez un message réussi au système TenPay. TenPay System ne fournira plus de notifications ultérieures après avoir reçu ce résultat Reshandler.SendTocft ("Success"); // Renvoie le succès au serveur WeChat Sinon 8 notifications en 30 minutes Retour "Success"; } else {System.out.println ("Notifier la vérification de la signature a échoué"); Reshandler.SendTocft ("échoué"); Response.SetcharAtterencoding ("UTF-8"); }} else {System.out.println ("fail -md5 a échoué"); }Ce qui précède est le code que Java implémente WeChat Payment Server. J'espère que tout le monde l'étudiera attentivement pour réaliser le paiement de WeChat.