Maison > Applet WeChat > Développement WeChat > Développement C# du portail WeChat et application de l'encapsulation et utilisation des enveloppes rouges WeChat cash

Développement C# du portail WeChat et application de l'encapsulation et utilisation des enveloppes rouges WeChat cash

高洛峰
Libérer: 2017-03-07 09:54:23
original
2333 Les gens l'ont consulté

Après le dernier essai, après avoir amélioré et reconstruit l'ensemble du cadre WeChat, le paiement WeChat, le paiement d'entreprise, les enveloppes rouges en espèces, les bons et divers coupons de carte ont été emballés, et le paiement WeChat a été inclus et la partie enveloppe rouge shake est courante parties des comptes officiels et des comptes d'entreprise. Ces interfaces liées au paiement peuvent être appelées dans les comptes officiels et les comptes d'entreprise. Après une série d'optimisation et de tri, ces contenus seront ajoutés un par un, en espérant que tout le monde aime et soutienne.

1. Le concept et l'utilisation des enveloppes rouges en espèces

1) Scénarios d'utilisation

Les enveloppes rouges en espèces WeChat Pay sont développées pour les commerçants WeChat Pay. Les capacités spécifiques sont les suivantes :

◆ Lorsque les commerçants appellent l'interface, ils émettent des enveloppes rouges en spécifiant l'objet d'envoi et le montant de l'envoi. Cette méthode permet aux commerçants de l'appliquer de manière flexible à une variété de scénarios d'activité riches <.>

◆ Collecte Après avoir reçu l'enveloppe rouge, les fonds de l'utilisateur seront directement transférés vers le changement WeChat, évitant ainsi le processus d'attribution compliqué et offrant aux utilisateurs une expérience fluide du paiement WeChat

2) Règles d'envoi des enveloppes rouges WeChat

Règles de fréquence d'envoi

◆ Le nombre d'enveloppes rouges envoyées par minute ne doit pas dépasser 1800

◆ Le même numéro de commerçant, le nombre maximum d'enveloppes rouges envoyées par minute Le même utilisateur envoie une enveloppe rouge

Règles des enveloppes rouges

◆ Le le montant d'une seule enveloppe rouge est compris entre [1,00 yuans, 200,00 yuans] ;

◆ La même enveloppe rouge ne peut être envoyée qu'à un seul utilisateur (si les règles ci-dessus ne répondent pas à vos besoins, veuillez envoyer un e-mail ; à wxhongbao@tencent.com pour les instructions de mise à niveau)

◆ Si l'enveloppe rouge n'est pas réclamée 72 heures après son émission, elle sera traitée. Remboursement

3) Processus d'appel de l'interface enveloppe rouge WeChat

◆ Appel d'API en arrière-plan : communiquer avec le développement en détail lors de l'entrée dans le processus de débogage commun

◆ Avertir le serveur : informer le serveur ; de l'openID de l'utilisateur qui a reçu l'enveloppe rouge WeChat, et informer le serveur du montant reçu par l'utilisateur

◆ Déduire de l'argent du compte professionnel : Une fois que le serveur aura obtenu l'information, il déduira l'argent ; de l'argent du compte professionnel correspondant Obtenez le montant correspondant ;

◆ Échec de l'appel : l'appel échoue en raison du non-respect des règles d'envoi, d'un solde insuffisant du compte professionnel, etc., et d'un retour d'informations à l'appelant ;

◆ Envoi réussi : enveloppe rouge WeChat au public Le compte envoie l'enveloppe rouge correspondante à l'utilisateur correspondant

C#开发微信门户及应用微信现金红包的封装及使用


2. Enveloppe rouge Cash

API

Description de l'interface et Le package C# est utilisé par les entreprises pour envoyer des enveloppes rouges aux utilisateurs individuels de WeChat. enveloppes de montants spécifiés à l’openid des utilisateurs WeChat désignés.

Bien que des enveloppes rouges en espèces puissent être émises via le backend marchand de WeChat, nous pouvons également utiliser l'API d'interface fournie par WeChat pour envoyer des enveloppes rouges en espèces.


Description de la demande d'appel via l'interface



Paramètres de la requête


Description oxTWIuGaIt6gTKsQRLau2M0yL16EintBénédictions de l'enveloppe rouge Oui
Nom du champ Champ Obligatoire Exemple de valeur Type
Chaîne aléatoire nonce_str est 5K8264ILTKCH16CQ2502SI8ZNMTM67VS Chaîne(32) Chaîne aléatoire, ne dépassant pas 32 caractères
Signature signe td> Oui C380BEC2BFD727A4B6845133519F3AD6 String(32) Voir l'algorithme de génération de signature pour plus de détails
Numéro de commande du marchand mch_billno Oui 10000098201411111234567890 String(28)
字段名 字段 必填 示例值 类型 说明
随机字符串 nonce_str 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) 随机字符串,不长于32位
签名 sign C380BEC2BFD727A4B6845133519F3AD6 String(32) 详见签名生成算法
商户订单号 mch_billno 10000098201411111234567890 String(28)

商户订单号(每个订单号必须唯一)

组成:mch_id yyyymmdd 10位一天内不能重复的数字。

接口根据商户订单号支持重入,如出现超时可再调用。

商户号 mch_id 10000098 String(32) 微信支付分配的商户号
公众账号appid wxappid wx8888888888888888 String(32) 微信分配的公众账号ID(企业号corpid即为此appId)。接口传入的所有appid应该为公众号的appid(在mp.weixin.qq.com申请的),不能为APP的appid(在open.weixin.qq.com申请的)。
商户名称 send_name 天虹百货 String(32) 红包发送者名称
用户openid re_openid oxTWIuGaIt6gTKsQRLau2M0yL16E String(32)

接受红包的用户

用户在wxappid下的openid

付款金额 total_amount 1000 int 付款金额,单位分
红包发放总人数 total_num 1 int

红包发放总人数

total_num=1

红包祝福语 wishing 感谢您参加猜灯谜活动,祝您元宵节快乐! String(128) 红包祝福语
Ip地址 client_ip 192.168.0.1 String(15) 调用接口的机器Ip地址
活动名称 act_name 猜灯谜抢红包活动 String(32) 活动名称
备注 remark 猜越多得越多,快来抢! String(256) 备注信息
Commande du marchand numéro (chaque numéro de commande doit être unique) se compose de : mch_id aaaammjj 10 chiffres qui ne peuvent pas être répétés dans la journée. L'interface prend en charge la ré-saisie en fonction du numéro de commande du commerçant. Si un délai d'attente se produit, il peut être rappelé.
Numéro de commerçant mch_id est 10000098 String(32) Numéro de commerçant attribué par le paiement WeChat
Appid du compte public wxappid Oui wx8888888888888888 String(32) L'ID de compte public attribué par WeChat (le numéro d'entreprise corpid est cet appId). Tous les appid transmis via l'interface doivent être l'appid du compte public (appliqué sur mp.weixin.qq.com), et non l'appid de l'APP (appliqué sur open.weixin.qq.com).
Nom du marchand send_name est Grand magasin Tinhong Chaîne ( 32) Nom de l'expéditeur de l'enveloppe rouge
Openid de l'utilisateur re_openid OuiString(32) Utilisateur ayant accepté l'enveloppe rougeL'openid de l'utilisateur sous wxappid
Montant du paiement montant_total Oui 1000 int Montant du paiement, points unitaires
Le nombre total de personnes ayant reçu des enveloppes rouges numéro_total est 1Nombre total de personnes ayant reçu des enveloppes rougestotal_num=1
souhaitant Oui Merci d'avoir participé à l'activité de devinette des énigmes des lanternes et je vous souhaite un joyeux Festival des Lanternes ! String(128) Bénédictions de l'enveloppe rouge
Adresse IP client_ip192.168.0.1 String(15) L'adresse IP de la machine de l'interface appelante
Nom de l'activité act_name est deviner des énigmes de lanternes et attraper des enveloppes rouges String(32) Nom de l'activité
Remarques remarque Oui Plus vous devinez, plus vous l'avez, venez le chercher ! String(256) Remarques

Exemple de données :


<xml><xml> 
  <sign><![CDATA[E1EE61A91C8E90F299DE6AE075D60A2D]]></sign>  
  <mch_billno><![CDATA[0010010404201411170000046545]]></mch_billno>  
  <mch_id><![CDATA[888]]></mch_id>  
  <wxappid><![CDATA[wxcbda96de0b165486]]></wxappid>  
  <send_name><![CDATA[send_name]]></send_name>  
  <re_openid><![CDATA[onqOjjmM1tad-3ROpncN-yUfa6uI]]></re_openid>  
  <total_amount><![CDATA[200]]></total_amount>  
  <total_num><![CDATA[1]]></total_num>  
  <wishing><![CDATA[恭喜发财]]></wishing>  
  <client_ip><![CDATA[127.0.0.1]]></client_ip>  
  <act_name><![CDATA[新年红包]]></act_name>  
  <remark><![CDATA[新年红包]]></remark>  
  <nonce_str><![CDATA[50780e0cca98c8c8e814883e5caa672e]]></nonce_str> 
  </xml>
Copier après la connexion

Ce qui précède est une description de l'interface Et paramètres d'entrée , Dans des circonstances normales, nous devons décider comment implémenter l'encapsulation du code C# en fonction de ceux-ci. Tout d'abord, nous définissons les interfaces et les classes dont nous avons besoin, comme indiqué ci-dessous.

C#开发微信门户及应用微信现金红包的封装及使用

En analysant la description de l'interface ci-dessus, nous pouvons constater que certaines des interfaces sont des paramètres conventionnels fixes, c'est-à-dire les informations d'identité des comptes publics généraux ou des comptes d'entreprise, et certains sont des paramètres commerciaux, nous les séparons donc séparément, ce qui favorise notre encapsulation et notre utilisation de l'interface. Nous pouvons obtenir ces paramètres réguliers via l'identité du compte officiel. Pour les informations commerciales, nous pouvons définir une classe d'entité pour effectuer des données. stocker et échanger.

C#开发微信门户及应用微信现金红包的封装及使用

correspond aux paramètres conventionnels fixes dans la figure ci-dessus, comme indiqué ci-dessous dans la description de l'interface.

C#开发微信门户及应用微信现金红包的封装及使用

Par conséquent, nous pouvons définir et obtenir ces informations à partir du compte. Nous pouvons les configurer en arrière-plan de gestion, puis les supprimer et les utiliser dans la logique du code.

C#开发微信门户及应用微信现金红包的封装及使用

C#开发微信门户及应用微信现金红包的封装及使用

Selon l'introduction ci-dessus, nous pouvons définir le code d'interface de l'enveloppe rouge comme suit.

/// <summary>
    /// 微信红包(摇一摇红包)操作API
    /// </summary>
    public interface ILotteryApi
    {              
        /// <summary>
        /// 用于企业向微信用户个人发现金红包。需要商户证书
        /// 目前支持向指定微信用户的openid发放指定金额红包。
        /// </summary>
        /// <returns></returns>
        SendRedPackResult SendRedPack(SendRedPackJson json);
Copier après la connexion

Parmi eux, SendRedPackJson est le paramètre métier que nous avons modifié. Nous avons défini une classe pour transporter les informations afin de faciliter le transfert d'informations via l'interface.

/// <summary>
    /// 现金红包和裂变红包的基础信息
    /// </summary>
    public class BaseRedPackJson
    {
        /// <summary>
        /// 接受红包的用户
        /// 用户openid    
        /// </summary>
        public string re_openid { get; set; }

        /// <summary>
        /// 付款金额,单位分
        /// </summary>
        public int total_amount { get; set; }

        /// <summary>
        /// 红包发放总人数
        /// </summary>
        public int total_num { get; set; }

        /// <summary>
        /// 红包祝福语
        /// </summary>
        public string wishing { get; set; }

        /// <summary>
        /// 活动名称
        /// </summary>
        public string act_name { get; set; }

        /// <summary>
        /// 备注信息
        /// </summary>
        public string remark { get; set; }
    }

    /// <summary>
    /// 发送红包的数据信息
    /// </summary>
    public class SendRedPackJson :BaseRedPackJson
    {
        /// <summary>
        /// 调用接口的机器Ip地址
        /// </summary>
        public string client_ip { get; set; }

        public SendRedPackJson()
        {
            this.total_num = 1;//红包发放总人数
        }
    }
Copier après la connexion

Selon la définition des paramètres ci-dessus, nous implémentons l'interface de l'enveloppe rouge cash Le code spécifique est le suivant. à l'intérieur est principalement de transmettre Entrez les paramètres généraux et les paramètres métier, puis appelez l'adresse de l'interface pour soumettre les données (POST), obtenez les résultats renvoyés et analysez-les.

/// <summary>
        /// 用于企业向微信用户个人发现金红包。需要商户证书
        /// 目前支持向指定微信用户的openid发放指定金额红包。
        /// </summary>
        /// <returns></returns>
        public SendRedPackResult SendRedPack(SendRedPackJson json)
        {
            CheckAccount();//检查AccountInfo的对象属性值

            //加入常规的参数
            WxPayData data = new WxPayData();
            data.SetValue("wxappid", AccountInfo.UniteAppId);//公众账号appid
            data.SetValue("mch_id", AccountInfo.MchID);//商户号
            data.SetValue("nonce_str", data.GenerateNonceStr());//随机字符串
            data.SetValue("send_name", AccountInfo.Name);//    红包发送者名称
            
            //商户订单号(每个订单号必须唯一) 组成:mch_id+yyyymmdd+10位一天内不能重复的数字。
            //接口根据商户订单号支持重入,如出现超时可再调用。
            data.SetValue("mch_billno", data.GenerateOutTradeNo(AccountInfo.MchID));

            data.SetValue("re_openid", json.re_openid);
            data.SetValue("total_amount", json.total_amount);
            data.SetValue("total_num", json.total_num);
            data.SetValue("wishing", json.wishing);
            data.SetValue("client_ip", json.client_ip);
            data.SetValue("act_name", json.act_name);
            data.SetValue("remark", json.remark);

            data.SetValue("sign", data.MakeSign(AccountInfo.PayAPIKey));//最后生成签名

            var url = "https://api.mch.weixin.qq.com/mmpaymkttransfers/sendredpack";
            return Helper.GetPayResultWithCert<SendRedPackResult>(data, url, AccountInfo.CertPath, AccountInfo.CertPassword);
        }
Copier après la connexion

L'opération d'envoi d'enveloppes rouges nécessite un certificat, il faut donc ajouter le certificat correspondant, et le certificat est téléchargé depuis la plateforme marchande WeChat .

Téléchargez le certificat du projet [API Security] dans le backend du marchand pour l'utiliser dans notre environnement de développement.

C#开发微信门户及应用微信现金红包的封装及使用

Après avoir téléchargé le certificat, dans l'environnement Windows, il faut généralement double-cliquer pour l'installer et saisir le numéro de commerçant requis comme mot de passe.

C#开发微信门户及应用微信现金红包的封装及使用

Dans le code, nous pouvons utiliser la classe de certificat pour ajouter

HttpHelper helper = new HttpHelper();

            helper.ClientCertificates = new X509CertificateCollection();
            certPath = Path.Combine(System.Environment.CurrentDirectory, certPath);
            helper.ClientCertificates.Add(new X509Certificate2(certPath, certPassword));
            string response = helper.GetHtml(url, xml, true);
Copier après la connexion

3. Résultats de l'utilisation des enveloppes rouges WeChat

Par exemple, le code que nous appelons dans l'exemple de test est le suivant.

//现金红包
                SendRedPackJson packJson = new SendRedPackJson()
                {
                    act_name = "恭喜发财",
                    client_ip = NetworkUtil.GetIPAddress(),
                    remark = "企业红包",
                    wishing = "企业红包",
                    total_amount = 100,
                    total_num = 1,
                    re_openid = tosendOpenId //发送给用户的OpenID
                };
                var result = hbApi.SendRedPack(packJson);
                var message = string.Format("企业发送红包:{0} {1}", result.Success ? "成功" : "失败", result.Message);
                Console.WriteLine(message);
                Console.WriteLine(result.ToJson());
Copier après la connexion

Le hbApi est la structure de l'interface ci-dessus, comme indiqué dans le code suivant.

AccountInfo  accountInfo = new AccountInfo()
    {
       Name = this.SendName,
        AppID = this.AppId,
        AppSecret = this.AppSecret,
        MchID = this.MchID,
        PayAPIKey = this.PayAPIKey,
        CertPath = this.CertPath,
        CertPassword = this.CertPassword,
         PayNotifyUrl = this.PayNotifyUrl
     };
 ILotteryApi hbApi = new LotteryApi(accountInfo);
Copier après la connexion

Après l'appel réussi, nous pouvons voir les résultats des informations de l'enveloppe rouge dans la conversation du compte officiel. Voici l'ensemble du processus d'envoi. et en ouvrant l'enveloppe rouge.

C#开发微信门户及应用微信现金红包的封装及使用 C#开发微信门户及应用微信现金红包的封装及使用 C#开发微信门户及应用微信现金红包的封装及使用

Pour plus de développement C# du portail et de l'application WeChat, l'encapsulation et l'utilisation des enveloppes rouges WeChat Cash, veuillez faire attention au site Web PHP chinois pour les articles connexes !


Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal