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) 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
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
Feldname | Feld | Erforderlich | Beispielwert | Typ | Beschreibung|||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
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) |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
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 | Ja | oxTWIuGaIt6gTKsQRLau2M0yL16EString(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 | 1 | intGesamtzahl 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_ip | Ja192.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.
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.
entspricht den festen konventionellen Parametern in der obigen Abbildung, wie unten in der Schnittstellenbeschreibung dargestellt.
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.
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.
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.
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());
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);
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!