1. Ejecute Install-Package Aquarius.Weixin
o dotnet add package Aquarius.Weixin
en el proyecto web para instalar el paquete Nuget. Se recomienda utilizar la última versión para evitar varios problemas.
2. Agregue la referencia Aquarius.Weixin.Core.Configuration.DependencyInjection
en Startup.cs
3. Configuración ConfigurationServices
Método uno:
Agregue Aquarius.Weixin en ConfigurationServices
:
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(密文),此处采用明文
});
Método dos:
Agregue el archivo de configuración AquariusWeixinOptions.json
y agregue la siguiente configuración:
{
"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"
}
}
Y agregue Aquarius.Weixin en ConfigurationServices
:
var options = new ConfigurationBuilder()
.AddJsonFile("AquariusWeixinOptions.json")
.Build();
services.AddAquariusWeixin(options);
O agréguelo directamente en ConfigurationServices
:
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;
});
El uso rápido puede referirse a configurar Debug(建议为true)
, IsRepetValid(建议为false)
, AppId
, AppSecret
, Token
y CacheType
en BaseSetting en InMemory
, MsgMiddlewareType
en Plain
y otras configuraciones no están configuradas o están vacías.
4. Utilice el ejemplo WeixinController.cs
(1) Autorización de la página web
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}");
}
La acción del enlace de devolución de llamada de autorización de la página web debe recibir un parámetro code
u obtener el código de la solicitud en el código.
(2) Creación de menú
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);
}
Cree el estilo de menú de la siguiente manera:
(3) Gestión de mensajes
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");
}
}
Configure la acción del código anterior como enlace del servidor. Nota: El código de recepción de mensajes está en el modo recomendado y no se recomiendan adiciones ni eliminaciones.
El procesamiento de mensajes predeterminado en el código es devolver success
es decir, no se realiza ningún procesamiento. Debe escribir una clase de procesamiento de mensajes para realizar el procesamiento de mensajes real. El siguiente es un ejemplo de cómo hacer clic en el botón de menú para devolver texto.
Cree una nueva clase ClickEventReplyTextHandler
con el siguiente código:
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);
}
}
① La interfaz IClickEvtMessageHandler
implementada por ClickEventReplyTextHandler
es la interfaz de procesamiento de tipo de mensaje que se reescribirá. Este ejemplo es el procesamiento de mensajes de eventos de clic.
② El tipo del campo _messageReplay
es el tipo genérico IMessageReply<T>
y el tipo T
es el tipo de mensaje que se devolverá. Este ejemplo devuelve un mensaje de texto (TextMessage).
Según los dos puntos anteriores, este ejemplo procesa el mensaje del evento de clic y devuelve el mensaje de texto.
Finalmente, agréguelo después de AddAquariusWeixin
en el método ConfigureServices
.
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
Haga clic en el botón para regresar al mensaje de texto.
El tutorial de pago no está incluido en el Inicio rápido. Los tutoriales detallados se actualizarán más adelante.
Si tiene alguna pregunta, plantee un problema o comuníquese conmigo
WeChat: wdcdavyc (tenga en cuenta: Github).