1. 웹 프로젝트에서 Install-Package Aquarius.Weixin
또는 dotnet add package Aquarius.Weixin
실행하여 Nuget 패키지를 설치하는 것이 여러 문제를 방지하기 위해 최신 버전을 사용하는 것이 좋습니다.
2. Startup.cs에 Aquarius.Weixin.Core.Configuration.DependencyInjection
참조를 추가합니다.
3. 구성 ConfigurationServices
구성
방법 1:
ConfigurationServices
에 Aquarius.Weixin을 추가합니다.
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(密文),此处采用明文
});
방법 2:
구성 파일 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"
}
}
그리고 ConfigurationServices
에 Aquarius.Weixin을 추가하세요.
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
in 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");
}
}
위 코드의 Action을 서버 링크로 구성합니다. 참고: 메시지 수신 코드는 권장 모드이므로 추가 및 삭제는 권장되지 않습니다.
코드에서 기본 메시지 처리는 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);
}
}
① ClickEventReplyTextHandler
가 구현한 IClickEvtMessageHandler
인터페이스는 다시 작성하려는 메시지 유형 처리 인터페이스입니다. 이번 예제는 클릭 이벤트 메시지 처리입니다.
② _messageReplay
필드의 유형은 일반 IMessageReply<T>
유형이고, T
유형은 반환할 메시지 유형입니다. 이 예에서는 텍스트 메시지(TextMessage)를 반환합니다.
위의 두 가지 사항을 바탕으로 이 예제에서는 클릭 이벤트 메시지를 처리하고 텍스트 메시지를 반환합니다.
마지막으로, ConfigureServices
메서드에서 AddAquariusWeixin
뒤에 추가하세요.
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
버튼을 클릭하면 문자 메시지로 돌아갑니다.
결제 튜토리얼은 Quick Start에 포함되어 있지 않습니다. 자세한 튜토리얼은 추후 업데이트될 예정입니다.
질문이 있으시면 문제를 제기하거나 저에게 연락해주세요.
WeChat: wdcdavyc(참고: Github).