Maison Java javaDidacticiel Explication détaillée des exemples de développement de paiements par compte public WeChat (Java)

Explication détaillée des exemples de développement de paiements par compte public WeChat (Java)

Jul 19, 2017 pm 01:26 PM
java 开发 支付

Dans le passé, le paiement dans le développement du projet de l'entreprise se faisait en utilisant le paiement d'Alibaba, qui était qualifié de simple et informel. Malheureusement, maintenant l'entreprise a développé un compte officiel WeChat, je me suis donc lancé dans le développement du paiement WeChat qui regorge de fonctionnalités. pièges. . .

Processus commercial :

Ce site officiel de WeChat l'explique en détail (portail :).

 

Le processus général est le suivant : l'utilisateur clique sur un bouton de paiement -->Traitement en arrière-plan (en fait, il encapsule les données nécessaires au paiement et obtient prepay_id, et puis le combine avec Certains paramètres requis sont encapsulés et transmis à la réception) --> La réception reçoit les données et appelle le js de WeChat pour traiter les données et appeler le paiement--> saisir un mot de passe, y compris le montant et d'autres informations--> Une fois que l'utilisateur a saisi le mot de passe, une page de paiement réussie apparaîtra en même temps, WeChat rappellera notre interface pour nous en informer. résultat du paiement (cette partie du processus est effectuée par WeChat lui-même, nous n'avons pas à nous en soucier) -->

Étapes de développement :

1. Mettre en place un répertoire de paiement

Ce document officiel est très dégoûtant. J'étais confus et un peu étourdi après l'avoir lu. Même si je ne comprends pas, je trouve que ça a l'air génial ! Portail :

2. Définir le nom de domaine autorisé

Ces 2 étapes Une fois que vous avez terminé, vous pouvez faire une pause car le grand gouffre arrive. . .

3. Le serveur marchand appelle l'interface de commande unifiée pour demander une commande

Qu'est-ce que cela fait ? Quand j’ai commencé à le faire, j’étais confus, mais qui appelle l’équipe de paiement WeChat nb, comment peuvent-ils montrer leur sophistication sans ajouter des choses que vous ne comprenez pas ? . . Si vous ne comprenez pas, suivez simplement le document

Portail : le responsable de WeChat a donné une explication détaillée des paramètres. Après l'avoir longuement regardé, je l'ai résumé en encapsulant quelques paramètres nécessaires puis en accédant à cette interface pour obtenir des données. Voici plusieurs paramètres couramment utilisés. Copiez directement l'introduction d'autres personnes en détail :

appid ==Application ID==Connectez-vous à la configuration backend-development-basic du compte officiel WeChat
mch_id = = ID du marchand de paiement WeChat == Connectez-vous au backend de paiement WeChat et vous verrez
device_info == Numéro de l'appareil == Numéro de l'appareil du terminal (numéro du magasin ou ID de l'appareil du caissier). Remarque : veuillez transmettre « WEB ».
body==Description du produit==Une brève description du produit ou de l'ordre de paiement (il est recommandé de l'envoyer en anglais au début, essayez de ne pas l'envoyer en chinois d'abord, sinon il n'y aura aucun moyen pour vérifier s'il y a un problème avec la signature plus tard)
trade_type==Trade type==Les valeurs sont les suivantes : JSAPI, NATIVE, APP. Le JSAPI que nous utilisons ici. Comme le titre l'indique déjà, il s'agit du paiement par compte officiel WeChat. Pour leurs différences, veuillez vous référer à
ps : JSAPI--paiement par compte officiel, NATIVE--paiement par scan code natif, APP--paiement par application, les paramètres de l'interface de commande unifiée trade_type peuvent être trouvés ici. MICROPAY--Paiement par carte Swipe. Le paiement par carte a une interface de paiement distincte et n'appelle pas l'interface de commande unifiée
nonce_str==random string==chaîne aléatoire, ne dépassant pas 32 bits (algorithme de référence)
notify_url==Adresse de notification==L'adresse de rappel pour recevoir les notifications asynchrones de paiement WeChat. L'URL de notification doit être une URL directement accessible et ne peut pas contenir de paramètres. (Ici, qu'est-ce qu'un bon nom ? Nommez-le avec désinvolture, vous n'en aurez pas besoin avant un moment de toute façon)
out_trade_no==Numéro de commande du marchand==Le numéro de commande dans le système marchand, dans les 32 caractères, peut be Contient des lettres (référence :) (Chaque fois que je lis l'explication officielle sur WeChat, je suis de plus en plus confus. Y en a-t-il ? Ce n'est pas grave, j'en enverrai juste 1.)
total_fee ==Montant total= =Montant total de la commande, L'unité est le centime (attention, je n'y ai pas fait attention au début, ce qui a été passé était de 0,01. Pour le développement, 1 centime est utilisé, et puis c'est devenu une tragédie. Après l'avoir lu plusieurs fois, j'ai découvert que l'unité est en cents. )
openid==user ID==trade_type=JSAPI, ce paramètre doit être transmis, l'identifiant unique de l'utilisateur sous. l'appide du marchand. (Si vous ne savez pas d'où cela vient, ce n'est pas grave. WeChat n'a-t-il pas écrit le document pour nous ?)
Et le plus important, les caractères importants apparaissent toujours à la fin.
attach==Les données de pièce jointe, renvoyées telles quelles dans l'API de requête et la notification de paiement, peuvent être utilisées comme paramètres personnalisés. (Je pense que cela est très utile et peut être utilisé pour stocker des données commerciales, car je traite les données commerciales dans les rappels WeChat. Il est sûr et indolore d'utiliser ce paramètre)
sign==signature==algorithme de signature officiel . . Je ne le comprends pas, je ne le comprends pas très bien. Si vous pensez le comprendre, ce n'est pas grave si vous ne rencontrez pas quelques erreurs de signature, êtes-vous gêné de dire que vous avez effectué un paiement WeChat. développement ? (Je recommande personnellement d'utiliser les outils du SDK officiel lors du développement, ce qui peut économiser de l'argent. C'est très compliqué de télécharger le SDK et d'appeler des exemples correspondant à l'API Java ici. Il contient de nombreux outils)
a dit que ce signe a un paramètre plus important. Paramètres impliqués dans la signature. Quoi qu'il en soit, j'ai mis du temps à le trouver. (L'entreprise a demandé le paiement WeChat. Quand je le lui ai demandé, son expression ressemblait à ceci.)
key==chemin de configuration de la clé : plateforme marchande WeChat (pay.weixin.qq.com) -- >Paramètres du compte-->Sécurité API-->Paramètres des clés (c'est très important, il est utilisé pour les signatures)

Le résumé de cette partie consiste d'abord à encapsuler les données dans une carte puis à les convertir en XML via un outil (l'outil est mentionné ci-dessus, revenez en arrière et lisez-le vous-même), puis demandez l'[Interface de commande unifiée WeChat] via une demande de publication. S'il n'y a pas de problème avec le signe, il renverra un fichier XML contenant beaucoup de données. Ce que nous voulons, c'est prepay_id, qui est ce paramètre. Ensuite, la signature est générée et renvoyée à la réception. OK, cette étape est terminée.

Résumé du problème (problèmes que j'ai rencontrés au cours de ce processus) : 1 (Important) appid et openid doivent correspondre, en d'autres termes, l'openid de l'utilisateur doit être sous le compte officiel actuel des utilisateurs (nous avons plusieurs publics comptes, vous ne rencontrerez peut-être pas ce problème, mais c'est très important, laissez-moi en parler d'abord) 2

<span style="text-decoration: underline; color: #ff0000">第二步,生成签名并返回到前台</span><span style="color: #ff0000">这个过程中一定要注意参数一定要写对了,大小写,是否有空格,我在这上面掉了一个大坑,界面调用支付时一直闪退,注意.<br><br></span>
Copier après la connexion

4. H5 est activé JS intégré de WeChat Pay

Les paramètres renvoyés par l'arrière-plan à la réception doivent inclure les éléments suivants :
appId==Ceci est inchangé==Ne jamais changer
timeStamp==Timestamp ==Règle :. Après l’avoir lu, j’ai toujours l’air confus. Ce n’est pas grave, nous avons la classe d’outils.

nonceStr == Quoi qu'il en soit, j'ai utilisé la même chaîne aléatoire que la signature tout à l'heure. Théoriquement, cela ne devrait pas avoir d'importance si vous ne l'utilisez pas. Les amis diligents peuvent essayer

package==order details extend string==prepay_id valeur du paramètre renvoyée par l'interface de commande unifiée. : prepay_id=** *(Vous l'avez bien deviné. Le prepay_id que nous avons obtenu avec tant d'efforts est utilisé ici)
signType==Signature method==Signature algorithm, prend actuellement en charge MD5
paySign ==Signature== Cette signature doit être régénérée en arrière-plan. Utilisez les 4 paramètres ci-dessus + une clé (ne changez jamais). (L'horodatage lorsque j'ai généré la signature et l'horodatage renvoyé à la réception sont les mêmes timeStamp. Est-ce que ça marche s'ils sont différents ? Il n'y a pas de vérification)
Code pour générer paySign
Remarque : lors de la génération de prepay_id, l'appid est un i minuscule. Lors de la génération de paySign, l'appId est un I majuscule. Ces deux sont différents
Si Si tout se passe bien, cette page apparaîtra
Une fois tout cela terminé, vous pourrez vous détendre
Cinq, traitement des rappels WeChat

Cette partie comporte les 3 petites étapes suivantes

 1) Analyser les informations de flux transmises et vérifier les informations contenues dans le flux en signant à nouveau Exactitude. Il s'agit de déterminer si les informations ont été envoyées par WeChat

2) Si return_code et result_code sont tous deux SUCCÈS, gérez la propre logique métier du commerçant. Il s'agit simplement du statut de paiement de la commande et de quelques autres informations.

3) Dites à WeChat que j'ai reçu votre valeur de retour. Pas besoin de poster à nouveau.

Sans plus attendre, postons simplement le code !

public String return_data(HttpServletRequest request, HttpServletResponse response) throws Exception {
        logger.info("微信支付请求回调了");
        String resXml = "";
        Map<String, String> backxml = new HashMap<String, String>();
        InputStream inStream;try {
            inStream = request.getInputStream();
            ByteArrayOutputStream outSteam = new ByteArrayOutputStream();byte[] buffer = new byte[1024];int len = 0;while ((len = inStream.read(buffer)) != -1) {
                outSteam.write(buffer, 0, len);
            }
            outSteam.close();
            inStream.close();
            String result = new String(outSteam.toByteArray(), "utf-8");// 获取微信调用我们notify_url的返回信息Map<String, String> map = WXPayUtil.xmlToMap(result);if (map.get("result_code").toString().equalsIgnoreCase("SUCCESS")) {if (WXPayUtil.isSignatureValid(map, PayConfigUtil.API_KEY)) {
                    logger.info("微信支付-签名验证成功");//                    backxml.put("return_code", "SUCCESS");//                    backxml.put("return_msg", "OK");//                    String toXml = WXPayUtil.mapToXml(backxml);//                    response.getWriter().write(toXml);resXml = "<xml>" + "<return_code><![CDATA[SUCCESS]]></return_code>"+ "<return_msg><![CDATA[OK]]></return_msg>" + "</xml> ";//业务处理开始                   //业务处理结束                }
                BufferedOutputStream out = new BufferedOutputStream(response.getOutputStream());out.write(resXml.getBytes());out.flush();out.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }return resXml;
    }
Copier après la connexion

N'oubliez pas, 3. Le serveur marchand appelle l'interface de commande unifiée pour demander un paramètre de commande attacher Eh bien, c'est très pratique d'apporter des données commerciales ici

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Racine carrée en Java Racine carrée en Java Aug 30, 2024 pm 04:26 PM

Guide de la racine carrée en Java. Nous discutons ici du fonctionnement de Square Root en Java avec un exemple et son implémentation de code respectivement.

Nombre parfait en Java Nombre parfait en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre parfait en Java. Nous discutons ici de la définition, comment vérifier le nombre parfait en Java ?, des exemples d'implémentation de code.

Générateur de nombres aléatoires en Java Générateur de nombres aléatoires en Java Aug 30, 2024 pm 04:27 PM

Guide du générateur de nombres aléatoires en Java. Nous discutons ici des fonctions en Java avec des exemples et de deux générateurs différents avec d'autres exemples.

Weka en Java Weka en Java Aug 30, 2024 pm 04:28 PM

Guide de Weka en Java. Nous discutons ici de l'introduction, de la façon d'utiliser Weka Java, du type de plate-forme et des avantages avec des exemples.

Numéro de Smith en Java Numéro de Smith en Java Aug 30, 2024 pm 04:28 PM

Guide du nombre de Smith en Java. Nous discutons ici de la définition, comment vérifier le numéro Smith en Java ? exemple avec implémentation de code.

Questions d'entretien chez Java Spring Questions d'entretien chez Java Spring Aug 30, 2024 pm 04:29 PM

Dans cet article, nous avons conservé les questions d'entretien Java Spring les plus posées avec leurs réponses détaillées. Pour que vous puissiez réussir l'interview.

Break or Return of Java 8 Stream Forach? Break or Return of Java 8 Stream Forach? Feb 07, 2025 pm 12:09 PM

Java 8 présente l'API Stream, fournissant un moyen puissant et expressif de traiter les collections de données. Cependant, une question courante lors de l'utilisation du flux est: comment se casser ou revenir d'une opération FOREAK? Les boucles traditionnelles permettent une interruption ou un retour précoce, mais la méthode Foreach de Stream ne prend pas directement en charge cette méthode. Cet article expliquera les raisons et explorera des méthodes alternatives pour la mise en œuvre de terminaison prématurée dans les systèmes de traitement de flux. Lire plus approfondie: Améliorations de l'API Java Stream Comprendre le flux Forach La méthode foreach est une opération terminale qui effectue une opération sur chaque élément du flux. Son intention de conception est

Horodatage à ce jour en Java Horodatage à ce jour en Java Aug 30, 2024 pm 04:28 PM

Guide de TimeStamp to Date en Java. Ici, nous discutons également de l'introduction et de la façon de convertir l'horodatage en date en Java avec des exemples.

See all articles