1. Web プロジェクトで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
、 BaseSetting のToken
およびCacheType
InMemory
に、 MsgMiddlewareType
Plain
に設定すること、およびその他の構成が構成されていないか空であることを指します。
4. サンプル WeixinController.cs を使用する
(1) 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}");
}
Web ページ認証コールバック リンクのアクションは、 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);
}
}
① ClickEventReplyTextHandler
が実装するインターフェースIClickEvtMessageHandler
が書き換え対象となるメッセージタイプの処理インターフェースです。 この例はクリックイベントのメッセージ処理です。
② _messageReplay
フィールドの型は汎用のIMessageReply<T>
型で、型T
は返されるメッセージの型です。この例では、テキスト メッセージ (TextMessage) を返します。
上記 2 点に基づいて、この例ではクリック イベント メッセージを処理し、テキスト メッセージを返します。
最後に、 ConfigureServices
メソッドのAddAquariusWeixin
の後に追加します。
services.AddScoped<IClickEvtMessageHandler, ClickEventReplyTextHandler>();
ボタンをクリックするとテキストメッセージに戻ります
支払いチュートリアルはクイック スタートには含まれていません。詳細なチュートリアルは後で更新されます。
ご質問がある場合は、問題を提起するか、私に連絡してください
WeChat: wdcdavyc (注: Github)。