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).