1. Execute Install-Package Aquarius.Weixin
ou dotnet add package Aquarius.Weixin
no projeto Web para instalar o pacote Nuget. Recomenda-se usar a versão mais recente para evitar vários problemas.
2. Adicione a referência Aquarius.Weixin.Core.Configuration.DependencyInjection
em Startup.cs
3. Configuração de ConfigurationServices
Método um:
Adicione Aquarius.Weixin em 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 dois:
Adicione o arquivo de configuração AquariusWeixinOptions.json
e adicione a seguinte configuração:
{
"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"
}
}
E adicione Aquarius.Weixin em ConfigurationServices
:
var options = new ConfigurationBuilder()
.AddJsonFile("AquariusWeixinOptions.json")
.Build();
services.AddAquariusWeixin(options);
Ou adicione-o diretamente em 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;
});
O uso rápido pode se referir à configuração Debug(建议为true)
, IsRepetValid(建议为false)
, AppId
, AppSecret
, Token
e CacheType
em BaseSetting para InMemory
, MsgMiddlewareType
para Plain
e outras configurações não estão configuradas ou estão vazias
4. Use o exemplo WeixinController.cs
(1) Autorização de página da 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}");
}
A ação do link de retorno de chamada de autorização da página da web deve receber um parâmetro code
ou obter o código da solicitação no código.
(2) Criação de cardápio
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);
}
Crie o estilo de menu da seguinte forma:
(3) Gerenciamento de mensagens
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 a ação do código acima como um link de servidor Nota: O código de recebimento de mensagens está no modo recomendado e adições e exclusões não são recomendadas.
O processamento de mensagens padrão no código é retornar success
ou seja, nenhum processamento é executado. Você precisa escrever uma classe de processamento de mensagens para executar o processamento real de mensagens.
Crie uma nova classe ClickEventReplyTextHandler
com o seguinte 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);
}
}
① A interface IClickEvtMessageHandler
implementada por ClickEventReplyTextHandler
é a interface de processamento do tipo de mensagem a ser reescrita. Este exemplo é o processamento de mensagens de evento de clique.
② O tipo do campo _messageReplay
é o tipo genérico IMessageReply<T>
e o tipo T
é o tipo de mensagem a ser retornado. Este exemplo retorna uma mensagem de texto (TextMessage).
Com base nos dois pontos acima, este exemplo processa a mensagem do evento click e retorna a mensagem de texto
Por fim, adicione-o após AddAquariusWeixin
no método ConfigureServices
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
Clique no botão para retornar à mensagem de texto
O tutorial de pagamento não está incluído no Quick Start. Tutoriais detalhados serão atualizados posteriormente.
Se você tiver alguma dúvida, levante um problema ou entre em contato comigo
WeChat: wdcdavyc (observe: Github).