1. Führen Sie Install-Package Aquarius.Weixin
oder dotnet add package Aquarius.Weixin
im Webprojekt aus, um das Nuget-Paket zu installieren. Es wird empfohlen, die neueste Version zu verwenden, um verschiedene Probleme zu vermeiden.
2. Fügen Sie die Referenz Aquarius.Weixin.Core.Configuration.DependencyInjection
“ in „Startup.cs“ hinzu
3. ConfigurationServices
Konfiguration
Methode eins:
Fügen Sie Aquarius.Weixin in ConfigurationServices
hinzu:
services.AddAquariusWeixin(opt =>
{
opt.BaseSetting = new BaseSettings()
{
Debug = true,//调试模式
IsRepetValid = false,//是否启用消息重复验证
AppId = "appid",//appId
AppSecret = "appsecret",//appSecret
Token = "token",//token
EncodingAESKey = "asekey",//AES Key,用于消息加密
ApiKey = "apikey",//商户Api key
CertPass = "certpass",//商户p12密码
CertRoot = "certroot",//商户p12证书密码
MchId = "mchid"//商户Id
};
opt.CacheType = CacheType.InMemory;//缓存模式,支持InMemory和Redis,此处采用InMemory
opt.MsgMiddlewareType = MessageMiddlewareType.Plain;//消息中间件模式,支持Plain(明文)和Cipher(密文),此处采用明文
});
Methode zwei:
Fügen Sie die Konfigurationsdatei AquariusWeixinOptions.json
hinzu und fügen Sie die folgende Konfiguration hinzu:
{
"CacheType": "InMemory",
"MsgMiddlewareType": "Plain",
"BaseSetting": {
"Debug": true,
"IsRepetValid": false,
"AppId": "appid",
"AppSecret": "appsecret",
"Token": "token",
"EncodingAESKey": "asekey",
"ApiKey": "apikey",
"CertPass": "certpass",
"CertRoot": "certroot",
"MchId": "mchid"
}
}
Und fügen Sie Aquarius.Weixin in ConfigurationServices
hinzu:
var options = new ConfigurationBuilder()
.AddJsonFile("AquariusWeixinOptions.json")
.Build();
services.AddAquariusWeixin(options);
Oder fügen Sie es direkt in ConfigurationServices
hinzu:
services.AddAquariusWeixin(opt =>
{
opt.BaseSetting = new BaseSettings()
{
Debug = true,
IsRepetValid = false,
AppId = "your appid",
AppSecret = "your appsecret",
Token = "token",
//其他配置
};
opt.CacheType = CacheType.InMemory;
opt.MsgMiddlewareType = MessageMiddlewareType.Plain;
});
Die schnelle Verwendung kann sich auf die Einstellung Debug(建议为true)
, IsRepetValid(建议为false)
, AppId
, AppSecret
, Token
und CacheType
in BaseSetting auf InMemory
und MsgMiddlewareType
auf Plain
beziehen. Andere Konfigurationen sind nicht konfiguriert oder leer
4. Verwenden Sie das Beispiel WeixinController.cs
(1) Webseitenautorisierung
public IActionResult Authorization(string code)
{
//通过code获取openId
var openId = _authorizationContainer.GetOpenId(code);
//通过openId获取userInfo
var userInfo = _authorizationContainer.GetUserInfo(openId, Language.zh_CN);
return Content($"your openId is {openId}, your nickname is {userInfo.nickname}");
}
Die Aktion des Callback-Links zur Webseitenautorisierung muss einen code
erhalten oder den Code aus der Anforderung im Code abrufen.
(2) Menüerstellung
public IActionResult CreateMenu()
{
//创建菜单对象
var menu = new Menu()
{
button = new List<IButton>()
{
new SingleClickButton("按钮1")
{
key = "Button1"
},
new SubButton("二级菜单")
{
sub_button = new List<SingleButton>()
{
new SingleClickButton("按钮2")
{
key = "按钮2"
},
new SingleViewButton("网页")
{
url = "http://yourdomain.com"
}
}
}
}
};
//获取AccessToken
var accessToken = _accessTokenContainer.GetAccessToken();
//创建菜单
var result = _menuInterfaceCaller.CreateMenu(accessToken, menu.ToJson());
return Content(result);
}
Erstellen Sie den Menüstil wie folgt:
(3) Nachrichtenverwaltung
public async Task<IActionResult> Index(string signature, string timestamp, string nonce, string echostr, string encrypt_type, string msg_signature)
{
try
{
if(!string.IsNullOrEmpty(echostr))
{
//服务器认证
if (_verifyer.VerifySignature(signature, timestamp, nonce, _baseSettings.Token))
{
return Content(echostr);
}
else
{
return Content("success");
}
}
else
{
//消息接收
using (var sr = new StreamReader(Request.Body))
{
string data = await sr.ReadToEndAsync();
_logger.LogInformation(data);
//接收消息中间处理
data = _messageMiddleware.ReceiveMessageMiddle(signature, msg_signature, timestamp, nonce, data);
//解析消息
IMessage message = MessageParser.ParseMessage(data);
//处理消息,生成回复
string reply = _processer.ProcessMessage(message);
//回复消息中间处理
reply = _messageMiddleware.ReplyMessageMiddle(reply);
return Content(reply);
}
}
}
catch(Exception ex)
{
_logger.LogError("Error", ex);
return Content("success");
}
}
Konfigurieren Sie die Aktion des obigen Codes als Server-Link. Hinweis: Der Nachrichtenempfangscode befindet sich im empfohlenen Modus und Ergänzungen und Löschungen werden nicht empfohlen.
Die standardmäßige Nachrichtenverarbeitung im Code besteht darin success
Rückgabe durchzuführen, d.
Erstellen Sie eine neue ClickEventReplyTextHandler
-Klasse mit dem folgenden Code:
public class ClickEventReplyTextHandler : IClickEvtMessageHandler
{
private readonly IMessageReply<TextMessage> _messageReply;
public ClickEventReplyTextHandler(IMessageReply<TextMessage> messageReply)
{
_messageReply = messageReply;
}
public string Handle(ClickEvtMessage message)
{
var textMessage = new TextMessage(message)
{
CreateTime = UtilityHelper.GetTimeStamp(),
Content = $"你点击了{message.EventKey}按钮"
};
return _messageReply.CreateXml(textMessage);
}
}
① Die von ClickEventReplyTextHandler
implementierte Schnittstelle IClickEvtMessageHandler
ist die neu zu schreibende Nachrichtentypverarbeitungsschnittstelle. In diesem Beispiel handelt es sich um die Verarbeitung von Klickereignisnachrichten.
② Der Typ des Felds _messageReplay
ist der generische Typ IMessageReply<T>
und der Typ T
ist der zurückzugebende Nachrichtentyp. Dieses Beispiel gibt eine Textnachricht (TextMessage) zurück.
Basierend auf den beiden oben genannten Punkten verarbeitet dieses Beispiel die Klickereignisnachricht und gibt die Textnachricht zurück
Fügen Sie es abschließend nach AddAquariusWeixin
in der Methode ConfigureServices
hinzu
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
Klicken Sie auf die Schaltfläche, um zur Textnachricht zurückzukehren
Das Zahlungs-Tutorial ist nicht im Quick Start enthalten. Detaillierte Tutorials werden später aktualisiert.
Wenn Sie Fragen haben, melden Sie bitte ein Problem oder kontaktieren Sie mich
WeChat: wdcdavyc (bitte beachten: Github).