1. Выполните Install-Package Aquarius.Weixin
или dotnet add package Aquarius.Weixin
в веб-проект, чтобы установить пакет Nuget. Во избежание различных проблем рекомендуется использовать последнюю версию.
2. Добавьте ссылку Aquarius.Weixin.Core.Configuration.DependencyInjection
в Startup.cs.
3. Конфигурация ConfigurationServices
Способ первый:
Добавьте Aquarius.Weixin в 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(密文),此处采用明文
});
Способ второй:
Добавьте файл конфигурации AquariusWeixinOptions.json
и добавьте следующую конфигурацию:
{
"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"
}
}
И добавьте Aquarius.Weixin в ConfigurationServices
:
var options = new ConfigurationBuilder()
.AddJsonFile("AquariusWeixinOptions.json")
.Build();
services.AddAquariusWeixin(options);
Или добавьте его непосредственно в 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;
});
Быстрое использование может относиться к установке Debug(建议为true)
, IsRepetValid(建议为false)
, AppId
, AppSecret
, Token
и CacheType
в BaseSetting на InMemory
, MsgMiddlewareType
на Plain
, а другие конфигурации не настроены или пусты.
4. Используйте пример WeixinController.cs.
(1) Авторизация веб-страницы
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}");
}
Действие ссылки обратного вызова авторизации веб-страницы должно получить параметр code
или получить код из запроса в коде.
(2) Создание меню
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);
}
Создайте стиль меню следующим образом:
(3) Управление сообщениями
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");
}
}
Настройте действие приведенного выше кода как ссылку на сервер. Примечание. Код приема сообщений находится в рекомендуемом режиме, поэтому добавление и удаление не рекомендуется.
Обработка сообщения в коде по умолчанию возвращает success
то есть обработка не выполняется. Для выполнения фактической обработки сообщения необходимо написать класс обработки сообщения. Ниже приведен пример нажатия кнопки меню для возврата текста.
Создайте новый класс ClickEventReplyTextHandler
со следующим кодом:
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);
}
}
① Интерфейс IClickEvtMessageHandler
реализованный ClickEventReplyTextHandler
представляет собой интерфейс обработки типа сообщения, который необходимо переписать. Этот пример представляет собой обработку сообщения о событии щелчка.
② Тип поля _messageReplay
— это универсальный тип IMessageReply<T>
, а тип T
— это тип возвращаемого сообщения. Этот пример возвращает текстовое сообщение (TextMessage).
На основе двух вышеуказанных пунктов в этом примере обрабатывается сообщение о событии щелчка и возвращается текстовое сообщение.
Наконец, добавьте его после AddAquariusWeixin
в методе ConfigureServices
.
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
Нажмите кнопку, чтобы вернуться к текстовому сообщению.
Руководство по оплате не включено в Краткое руководство. Подробные руководства будут обновлены позже.
Если у вас есть какие-либо вопросы, пожалуйста, поднимите проблему или свяжитесь со мной.
WeChat: wdcdavyc (обратите внимание: Github).