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);
}
}
1 อินเทอร์เฟซ IClickEvtMessageHandler
ที่ใช้งานโดย ClickEventReplyTextHandler
เป็นอินเทอร์เฟซการประมวลผลประเภทข้อความที่จะเขียนใหม่ ตัวอย่างนี้คือการประมวลผลข้อความเหตุการณ์คลิก
② ประเภทของฟิลด์ _messageReplay
คือประเภท IMessageReply<T>
ทั่วไป และประเภท T
คือประเภทข้อความที่จะส่งคืน
จากจุดสองจุดข้างต้น ตัวอย่างนี้ประมวลผลข้อความเหตุการณ์การคลิกและส่งกลับข้อความ
สุดท้าย ให้เพิ่มหลัง AddAquariusWeixin
ในเมธอด ConfigureServices
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
คลิกปุ่มเพื่อกลับสู่ข้อความ
บทช่วยสอนการชำระเงินไม่รวมอยู่ในการเริ่มต้นอย่างรวดเร็ว บทช่วยสอนโดยละเอียดจะได้รับการอัปเดตในภายหลัง
หากคุณมีคำถามใด ๆ โปรดแจ้งปัญหาหรือติดต่อฉัน
WeChat: wdcdavyc (โปรดทราบ: Github)