J'ai lu le blog sur le paiement de WeChat que j'ai écrit ces jours-ci, et il y a pas mal de gens qui le lisent. Je ne sais pas si c'est parce que le blog n'est pas assez détaillé ou ce qui se passe. La plupart d'entre eux me demandent un code source. Je pense que les programmeurs ont encore besoin d'avoir un tel processus de réflexion, donc ils n'ont pas donné le code source directement. Comme le dit le proverbe, "il vaut mieux apprendre aux gens comment pêcher que de pêcher." Par conséquent, j'espère prendre un certain temps pour caractériser le code vous-même lors de la lecture de l'article. Ok, ne disons pas beaucoup de bêtises. Cette fois, je partagerai l'utilisation de l'interface WECHAT Cash Red Enveloppe.
Ce qui suit est une introduction aux enveloppes rouges en espèces par les documents de développement de WeChat:
Les enveloppes rouges en espèces sont l'un des outils de marketing fournis par la plate-forme marchande de paiement WeChat. Depuis son lancement, ils sont aimés par les commerçants et les utilisateurs. Les commerçants peuvent distribuer des enveloppes rouges en espèces aux utilisateurs de paiement de paiement via cette plate-forme. Une fois que l'utilisateur a reçu l'enveloppe rouge, les fonds arrivent au compte de changement de paiement WeChat de l'utilisateur, qui a la même exportation d'utilisation que les autres fonds dans le portefeuille de pièces; Si l'utilisateur ne les reçoit pas, les fonds seront retournés au compte de paiement WeChat du marchand après 24 heures.
Signification du produit
Les enveloppes rouges en espèces de paiement WeChat ont toujours été favorisées par les utilisateurs en raison de la façon dont ils transportent des fonds en espèces. Ces dernières années, les enveloppes rouges en espèces ont joué un rôle important; Ils ont également apporté des réponses chaleureuses aux activités de marketing des commerçants dans les opérations quotidiennes. En général, les enveloppes rouges en espèces jouent un rôle important dans les scénarios comprenant, mais sans s'y limiter:
Pour résumer, WeChat Cash Red Enveloppes est un outil de marketing qui peut augmenter l'adhérence des utilisateurs en suivant les comptes officiels, en s'inscrivant, etc. Cette fois, je me concentre sur le partage de mes expériences du point de vue du développement de programmes
1. Conditions requises pour utiliser la fonction d'enveloppe Red WECHAT Cash Red
1. Avoir une plate-forme marchande WeChat et des certificats secrètes complets
2. Les commerçants doivent avoir suffisamment d'équilibre à utiliser (sinon suffisant, vous pouvez utiliser Tenpay pour vous recharger à partir de la plate-forme marchande)
3. Better Development Foundation for WeChat Payment
Les points clés et les difficultés du deuxième développement
1 algorithme de signature WeChat
2 httppclient et l'utilisation de certificats
3 Lecture de documents WeChat (https://pay.weixin.qq.com/wiki/doc/api/tools/cash_cupon.php?chapter=13_4&index=3)
Si vous avez un paiement WeChat H5 ou scannez le code QR à payer, vous pouvez lire cette partie du document, qui est un morceau de gâteau. Il est sans effort de comprendre. En même temps, tant que vous maîtrisez la connaissance de HttpClient, tout sera prêt.
Trois code direct
public static void SendRedPack (String mch_billno, String openId, String send_name, string total_fee, string total_num, string wishing, string act_name, string Remark, String ip) lève exception {String non = PayComMonutil.CreateNonCell (); TriMedMap <objet, objet> p = new Treemap <objet, objet> (); p.put ("nonce_str", non); p.put ("mch_billno", mch_billno); p.put ("mch_id", configUtil.mch_id); p.put ("wxappid", configUtil.appid); p.put ("re_openID", openID); p.put ("total_amount", total_fee); p.put ("total_num", "1"); p.put ("client_ip", "127.0.0.1"); p.put ("act_name", act_name); p.put ("send_name", send_name); p.put ("souhaitant", souhaitant); p.put ("remarque", remarque); String Sign = PayComMonutil.CreateSign ("UTF-8", P); System.out.println (signe); p.put ("signe", signe); String reUqestxml = PayComMonutil.getRequestXml (P); Keystore keystore = keystore.getInstance ("pkcs12"); FileInputStream InsideRam = new FileInputStream (nouveau fichier (configUtil.cert_path)); try {keystore.load (insimeam, configUtil.mch_id.tocharArray ()); } enfin {enterStream.close (); } Sslcontext sslcontext = sslcontext.custom (). LoadKeyMaterial (keystore, configUtil.mch_id.tocharArray ()). Build (); SslConnectionSocketFactory sslsf = new SSLConnectionSocketFactory (sslContext, new String [] {"tlsv1"}, null, sslconnectionseCchestfactory.browser_compatible_hostname_verifier); CloseableHttpClient httpClient = httpClients.Custom () .SetsSLSocketFactory (sslsf) .build (); essayez {httppost httppost = new httppost ("https://api.mch.weixin.qq.com/mmpaymkttransfers/sendRedPack"); // rembourser l'interface httppost.addheder ("contenu-type", "application / x-www-form-urLeled; Charset = utf -8"); System.out.println ("Exécution de la demande" + httppost.getRequestline ()); // Le XML demandé doit être transcodé en codage ISO8859-1, sinon il est sujet aux erreurs de signature ou au texte sur les erreurs d'affichage de l'enveloppe rouge StronEntity reqentity = new StronEntity (new String (REUQESTXML.Getbytes (), "ISO8859-1")); // SET TYPE HTTPPOST.SETENTITY (ReqEntity); CloseableHttpResponse Response = httpClient.Execute (httppost); essayez {httpentity entity = réponse.getEntity (); System.out.println ("----------------------------------------"); System.out.println (réponse.getStatusline ()); if (entité! = null) {System.out.println ("Longueur du contenu de la réponse:" + entité.getContentLength ()); BufferedReader BufferedReader = new BufferedReader (new inputStreamReader (entity.getContent (), "UTF-8")); Texte de chaîne; while ((text = buttereDreader.readline ())! = null) {System.out.println (texte); }} EntityUtils.consume (entité); } enfin {réponse.close (); }} enfin {httpclient.close (); }} Les points suivants à noter sont:
// Le XML demandé doit être transcodé en codage ISO8859-1, sinon il est enclin à signer des erreurs ou un affichage de texte sur l'enveloppe rouge est incorrect.
STRIGENTITY reqentity = new StringEntity (new String (reUqestxml.getBytes (), "iso8859-1"));
On peut dire que cet endroit m'a presque écrasé et a essayé divers débogage. Ce serait OK de l'ajouter avec une attitude essai et voir. Cela peut être dû à la différence entre HttpClient et la HTTPSConnection native dans la transmission des données. Il n'y a pas beaucoup de recherches ici.
Appeler cette méthode est plus facile, tout comme ce qui suit
public static void main (String args []) {try {sendRedPack ("12828839012016101420", "destinataire OpenID", "xxx", "100", "1", "Félicitations pour devenir riche, chaque année", "le nouvel an.0.1"); } catch (exception e) {// TODO Bloc de capture généré automatiquement e.printStackTrace (); }} Les informations imprimées après l'envoi de l'enveloppe rouge sont les suivantes:
TTP / 1.1 200 OK Longueur du contenu de la réponse: 567 <xml> <fettour_code> <! [CDATA [Success]]> </ err_code> <rr_code_des> <! [CDATA [Success]]> </rr_code_code_Des> <! [CDATA [Success]]> </rr_code> <mch_billno> <! [CDATA [12828839012016101421]]> </mch_billno> <mch_id> <! [CDATA [1282883901]> </ mch_id> <wxappid> <! [CDATA [xxxxx]]>> </xappid> <re_openID> <! [CDATA [xxxx]]> </re_openID> <tacal_amount> 100 </tacal_amount> <end_listId> <! [CDATA [1000041701201610143000090813093]]> </end_listID> </xml>
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.