轻量级开源小程序SDK发车啦
Magicodes.WxMiniProgram.Sdk
輕量級微信小程序SDK,支持.NET Framework以及.NET Core。目前已提供Abp模塊的封裝,支持開箱即用。
地址:https://github.com/xin-lai/Magicodes.WxMiniProgram.Sdk
Nuget
新的包
主要功能
輕量級微信小程序SDK,以便于簡單方便的實現小程序服務端API的調用。具體見單元測試。
RoadMap
完善接口
登錄
用戶信息
接口調用憑證
數據分析
客服消息
模板消息
統一服務消息
動態消息
插件管理
附近的小程序
小程序碼
內容安全
廣告
圖像處理
OCR
運維中心
搜索
生物認證
訂閱消息
AccessToken自動傳參,無需顯式指定
方法參數改成類參數,并且支持通過特性校驗
更新歷史
0.0.5
重構AccessToken管理
添加對分布式架構支持(使用分布式緩存)
重構Http請求模塊,移除HttpClient
添加獲取二維碼接口(Create、Get、GetUnlimited),詳見單元測試
開始使用
如果使用Abp相關模塊,則使用起來比較簡單,具體您可以參考相關單元測試的編寫。主要有以下步驟:
引用對應的Abp的Nuget包
如果僅需某個支付,僅需引用該支付的包。下面以通聯支付為例,我們需要在工程中引用此包:
在對應工程的Abp的模塊(AbpModule)中,添加
對“WxMiniProgramSdkModule”的依賴,如:添加模塊依賴
直接使用
通過構造函數或者屬性注入相關服務,即可直接使用。
如何配置?
對于ABP集成,則可以通過以下方式獲取配置:
配置文件,如:
以上為個人小程序號配置,僅用于測試,請勿亂搞!
配置管理器
需存儲JSON對象,對應的key為“App_MiniProgram”。
對于非ABP集成,則需要自己實例化或注入配置類對象,可以參考單元測試的編寫。
非ABP集成
請參考Abp相關模塊的封裝或者相關的單元測試代碼,目前“Test”工程對應非ABP集成方式的使用,“Abp.Test”工程對應集成ABP之后的使用。
分布式緩存配置
為了支持分布式架構,已引入IDistributedCache來支持分布式緩存,在開發測試或單主機服務中,需使用以下代碼進行注入:
services.AddDistributedMemoryCache();如需使用Redis,請參考下面代碼:
services.AddDistributedRedisCache(options => {options.Configuration = "localhost";options.InstanceName = "SampleInstance"; });
如何添加API?(PR)
由于作者精力有限,非常歡迎各位參與共建。主體步驟如下所示:
1.添加目錄
在工程【Magicodes.WxMiniProgram.Sdk】下的【Services】目錄下添加對應業務模塊目錄,比如二維碼為“QRCode”。
2.添加對應接口的AppService
例如添加QRCodeAppService,繼承自ServiceBase
3.基于ServiceBase提供的封裝來編寫接口邏輯
例如以下代碼,獲取永久二維碼:
/// <summary> /// 獲取小程序碼,適用于需要的碼數量較少的業務場景。通過該接口生成的小程序碼,永久有效,有數量限制 /// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/qr-code/wxacode.get.html /// </summary> /// <param name="path">掃碼進入的小程序頁面路徑,最大長度 128 字節,不能為空;對于小游戲,可以只傳入 query 部分,來實現傳參效果,如:傳入 "?foo=bar",即可在 wx.getLaunchOptionsSync 接口中的 query 參數獲取到 {foo:"bar"}。</param> /// <param name="autoColor">自動配置線條顏色,如果顏色依然是黑色,則說明不建議配置主色調</param> /// <param name="lineColor">auto_color 為 false 時生效,使用 rgb 設置顏色 例如 {"r":"xxx","g":"xxx","b":"xxx"} 十進制表示</param> /// <param name="isHyaline">是否需要透明底色,為 true 時,生成透明底色的小程序碼</param> /// <param name="width">二維碼的寬度,單位 px。最小 280px,最大 1280px</param> /// <returns></returns> public async Task<byte[]> Get(string path, bool autoColor = false, object lineColor = null, bool isHyaline = false, int width = 430){ if (string.IsNullOrWhiteSpace(path)) throw new ArgumentException("參數不能為空!", nameof(path)); return await DownloadData("wxa/getwxacode?access_token={ACCESS_TOKEN}", RestSharp.Method.POST, new{path,width,auto_color = autoColor,line_color = lineColor ?? new { r = 0, g = 0, b = 0 },is_hyaline = isHyaline});}如上述代碼所示,注意事項如下:
通過DownloadData函數下載二維碼
如需使用access_token,請在Url添加access_token={ACCESS_TOKEN}【后續將進一步優化】
如需返回JSON對象,示例如下所示:
public class SnsAppService : ServiceBase { private const string ApiName = "sns"; private readonly IMiniProgramConfig _config;public SnsAppService(IMiniProgramConfig config){_config = config;}/// <summary> /// 根據登錄憑證獲取Sns信息(openid、session_key、unionid) /// https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/login/auth.code2Session.html /// </summary> /// <param name="code">登錄時獲取的 code</param> public async Task<GetSnsInfoByCodeOutput> JscodeToSession(string code){ if (string.IsNullOrWhiteSpace(code)) throw new ArgumentException("參數不能為空!", nameof(code)); //獲取api請求url var url = $"{ApiName}/jscode2session?appid={_config.MiniProgramAppId}&secret={_config.MiniProgramAppSecret}&js_code={code}&grant_type=authorization_code";return await HttpGet<GetSnsInfoByCodeOutput>(url);} }注意事項如下:
添加GetSnsInfoByCodeOutput,需繼承自ServiceOutputBase
使用HttpGet或HttpPost方法來完成請求
Output類中的屬性請遵守C#命名規范,可以使用“JsonProperty”特性進行配置
/// <summary> /// 憑證有效時間,單位:秒 /// </summary>[JsonProperty("expires_in")] public int Expires { get; set; }/// <summary> /// access_token /// </summary>[JsonProperty("access_token")] public string AccessToken { get; set; }
4.編寫相關單元測試,并確保通過
單元測試請參考工程【Test】和【Abp.Test】,可以通過ServiceOutputBase的IsSuccess方法來判斷是否成功:
public class TokenTest : AbpTestBase { public TokenTest(ITestOutputHelper testOutputHelper){_testOutputHelper = testOutputHelper;_tokenAppService = Resolve<TokenAppService>();}private readonly ITestOutputHelper _testOutputHelper; private readonly TokenAppService _tokenAppService;[Fact] public async Task Get_Test(){ var result = await _tokenAppService.GetAsync();_testOutputHelper.WriteLine(JsonConvert.SerializeObject(result));result.IsSuccess().ShouldBe(true);result.AccessToken.ShouldNotBeNullOrWhiteSpace();} }
官方訂閱號
關注“麥扣聊技術”訂閱號免費獲取:
最新文章、教程、文檔
視頻教程
基礎版免費授權
模板
解決方案
編程心得和理念
相關QQ群
編程交流群<85318032>
產品交流群<897857351>
官方博客/文檔站
http://www.cnblogs.com/codelove/
https://docs.xin-lai.com/
其他開源庫地址
https://gitee.com/magicodes/Magicodes.Admin.Core
https://github.com/xin-lai
轉載是一種動力 分享是一種美德
總結
以上是生活随笔為你收集整理的轻量级开源小程序SDK发车啦的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NETCore3.1中的Json互操作
- 下一篇: [译文] C# 8 已成旧闻, 向前,