Heim  >  Artikel  >  WeChat-Applet  >  C#-Entwicklung des WeChat-Portals und Anwendung der Kapselung und Verwendung von WeChat-Bargeldumschlägen

C#-Entwicklung des WeChat-Portals und Anwendung der Kapselung und Verwendung von WeChat-Bargeldumschlägen

高洛峰
高洛峰Original
2017-03-07 09:54:232265Durchsuche

Nach dem letzten Aufsatz wurden nach der Verbesserung und Rekonstruktion des gesamten WeChat-Frameworks WeChat-Zahlungen, Unternehmenszahlungen, rote Bargeldumschläge, Gutscheine und verschiedene Kartengutscheine verpackt, und WeChat-Zahlungen wurden einbezogen, und der Teil mit roten Umschlägen ist üblich Diese zahlungsbezogenen Schnittstellen können nach einer Reihe von Optimierungen und Sortierungen nacheinander hinzugefügt werden. Ich hoffe, dass sie allen gefallen und unterstützt werden.

1. Das Konzept und die Verwendung von roten Bargeldumschlägen

1) Verwendungsszenarien

WeChat Pay-Bargeldumschläge werden für WeChat Pay-Händler entwickelt. Die spezifischen Funktionen sind wie folgt:

◆ Wenn Händler die Schnittstelle aufrufen, stellen sie rote Umschläge aus, indem sie das Sendeobjekt und den Sendebetrag angeben. Diese Methode ermöglicht es Händlern, sie flexibel auf eine Vielzahl umfangreicher Aktivitätsszenarien anzuwenden

◆ Abholung Nach Erhalt des roten Umschlags wird das Geld des Benutzers direkt an die WeChat-Währung überwiesen, wodurch der komplizierte Vergabeprozess umgangen wird und den Benutzern das reibungslose Erlebnis der WeChat-Zahlung ermöglicht wird

2) WeChat-Versandregeln für rote Umschläge

Versandfrequenzregeln

◆ Die Anzahl der pro Minute gesendeten roten Umschläge darf 1800 nicht überschreiten;

◆ Die gleiche Händlernummer, die maximale Anzahl an roten Umschlägen, die pro Minute gesendet werden. Derselbe Benutzer sendet einen roten Umschlag

Regeln für rote Umschläge

◆ Die Der Betrag für einen einzelnen roten Umschlag liegt zwischen [1,00 Yuan und 200,00 Yuan]; an wxhongbao@tencent.com für Upgrade-Anweisungen)

◆ Wenn der rote Umschlag 72 Stunden nach seiner Ausstellung nicht abgeholt wird, wird er bearbeitet. Rückerstattung

3) WeChat-Red-Envelope-Schnittstellenaufrufprozess

◆ Hintergrund-API-Aufruf: Kommunizieren Sie ausführlich mit der Entwicklung, wenn Sie in den gemeinsamen Debugging-Prozess eintreten;

◆ Benachrichtigen Sie den Server: Informieren Sie den Server der openID des Benutzers, der den roten WeChat-Umschlag erhalten hat, und informieren Sie den Server über den vom Benutzer erhaltenen Betrag

◆ Geld vom Geschäftskonto abziehen: Nachdem der Server die Informationen erhalten hat, wird er abgezogen Geld vom entsprechenden Geschäftskonto erhalten.

◆ Anruf fehlgeschlagen: Der Anruf schlägt aufgrund der Nichteinhaltung der Senderegeln, eines unzureichenden Guthabens des Geschäftskontos usw. und einer Rückmeldung an den Anrufer fehl.

◆ Erfolgreicher Versand: WeChat roter Umschlag an die Öffentlichkeit Das Konto sendet den entsprechenden roten Umschlag an den entsprechenden Benutzer

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


2. Cash Red Envelope

API Schnittstellenbeschreibung und Das C#-Paket wird von Unternehmen verwendet, um rote Umschläge an einzelne WeChat-Benutzer zu senden. Es unterstützt derzeit die Ausgabe von roten Umschlägen Umschläge mit bestimmten Beträgen an die OpenID bestimmter WeChat-Benutzer senden.

Obwohl rote Umschläge mit Bargeld über das Händler-Backend von WeChat ausgegeben werden können, können wir auch die von WeChat bereitgestellte Schnittstellen-API verwenden, um rote Umschläge mit Bargeld zu versenden.


Beschreibung der Schnittstellenaufrufanfrage



Parameter anfordern


Beschreibung oxTWIuGaIt6gTKsQRLau2M0yL16EintSegen des roten Umschlags Ja
Feldname Feld Erforderlich Beispielwert Typ
Zufällige Zeichenfolge nonce_str is 5K8264ILTKCH16CQ2502SI8ZNMTM67VS String(32) Zufällige Zeichenfolge, nicht länger als 32 Zeichen
Signatur sign td> Ja C380BEC2BFD727A4B6845133519F3AD6 String(32) Weitere Informationen finden Sie im Signaturgenerierungsalgorithmus
Händlerbestellnummer mch_billno Ja 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) 备注信息
Händlerbestellung Nummer (jede Bestellnummer muss eindeutig sein) besteht aus: mch_id+yyyymmdd+10 Ziffern, die nicht innerhalb eines Tages wiederholt werden können. Die Schnittstelle unterstützt die erneute Eingabe anhand der Bestellnummer des Händlers. Tritt ein Timeout auf, kann dieser erneut aufgerufen werden.
Händlernummer mch_id ist 10000098 String(32) Durch WeChat-Zahlung zugewiesene Händlernummer
App-ID für öffentliches Konto wxappid Ja wx8888888888888888 String(32) Die von WeChat zugewiesene öffentliche Konto-ID (Corpid der Unternehmensnummer ist diese App-ID). Alle über die Schnittstelle übergebenen App-IDs sollten die App-ID des offiziellen Kontos sein (angewendet unter mp.weixin.qq.com), nicht die App-ID der APP (angewendet unter open.weixin.qq.com).
Händlername send_name ist Tinhong Department Store String ( 32) Absendername des roten Umschlags
Benutzer openid re_openid JaString(32) Benutzer, der den roten Umschlag angenommen hatDie OpenID des Benutzers unter wxappid
Zahlungsbetrag total_amount Ja 1000 int Zahlungsbetrag, Einheitspunkte
Die Gesamtzahl der Personen, denen rote Umschläge gegeben wurden total_num beträgt 1Gesamtzahl der Personen, denen rote Umschläge gegeben wurdentotal_num=1
wünschen Ja Vielen Dank für Ihre Teilnahme an der Laternenrätsel-Rateaktivität und wünschen Ihnen ein frohes Laternenfest! String(128) Segen des roten Umschlags
IP-Adresse client_ip192.168.0.1 String(15) Die Maschinen-IP-Adresse der aufrufenden Schnittstelle
Aktivitätsname Aktionsname ist Laternenrätsel zu erraten und rote Umschläge zu schnappen String(32) Aktivitätsname
Bemerkungen Bemerkung Ja Je mehr Sie erraten, desto mehr Du bekommst es, komm und schnapp es dir! String(256) Bemerkungen

Datenbeispiel:


<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>

Das Obige ist eine Beschreibung der Schnittstelle und Eingabeparameter. Unter normalen Umständen müssen wir basierend auf diesen entscheiden, wie wir die C#-Codekapselung implementieren. Zuerst definieren wir die Schnittstellen und Klassen, die wir benötigen, wie unten gezeigt.

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

Durch die Analyse der obigen Schnittstellenbeschreibung können wir feststellen, dass es sich bei einigen Schnittstellen um feste konventionelle Parameter handelt, nämlich um die Identitätsinformationen allgemeiner öffentlicher Konten oder Unternehmenskonten Einige sind Geschäftsparameter, daher trennen wir sie, was unserer Kapselung und Verwendung der Schnittstelle zuträglich ist. Wir können diese regulären Parameter über die offizielle Kontoidentität erhalten. Für Geschäftsinformationen können wir eine Entitätsklasse definieren, um Daten auszuführen speichern und austauschen.

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

entspricht den festen konventionellen Parametern in der obigen Abbildung, wie unten in der Schnittstellenbeschreibung dargestellt.

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

Daher können wir diese Informationen aus dem Konto festlegen und abrufen. Wir können sie im Verwaltungshintergrund konfigurieren und sie dann herausnehmen und in der Codelogik verwenden.

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

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

Gemäß der obigen Einführung können wir den Red-Packet-Schnittstellencode wie folgt definieren.

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

Unter anderem haben wir SendRedPackJson als Geschäftsparameter geändert. Wir haben eine Klasse zum Übertragen von Informationen definiert, um die Übertragung von Informationen über die Schnittstelle zu erleichtern.

/// <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;//红包发放总人数
        }
    }

Gemäß der Definition der oben genannten Parameter implementieren wir die Schnittstelle des Bargeldrotumschlags wie folgt Im Inneren geht es hauptsächlich darum, allgemeine Parameter und Geschäftsparameter einzugeben, dann die Schnittstellenadresse aufzurufen, um die Daten zu übermitteln (POST), die zurückgegebenen Ergebnisse abzurufen und sie zu analysieren.

/// <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);
        }

Für den Versand roter Umschläge ist ein Zertifikat erforderlich, daher muss das entsprechende Zertifikat von der WeChat-Händlerplattform heruntergeladen werden.

Laden Sie das Zertifikat vom [API Security]-Projekt im Händler-Backend herunter, um es in unserer Entwicklungsumgebung zu verwenden.

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

Nach dem Herunterladen des Zertifikats müssen wir in der Windows-Umgebung im Allgemeinen einen Doppelklick ausführen, um es zu installieren und die erforderliche Händlernummer als Passwort einzugeben.

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

Im Code können wir die Zertifikatsklasse verwenden, um

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);

3. Ergebnisse der Verwendung roter WeChat-Umschläge

Der Code, den wir im Testbeispiel aufrufen, lautet beispielsweise wie folgt.

//现金红包
                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());

Die hbApi ist die Struktur der obigen Schnittstelle, wie im folgenden Code gezeigt.

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);

Nach erfolgreichem Anruf können wir das Ergebnis des roten Umschlags im Gespräch des offiziellen Kontos sehen. Das Folgende ist der gesamte Vorgang des Sendens und den roten Umschlag öffnen.

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

Weitere Informationen zur C#-Entwicklung des WeChat-Portals und der Anwendung, Kapselung und Verwendung von WeChat Cash Red Envelopes finden Sie auf der chinesischen PHP-Website für verwandte Artikel!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn