輕量級開源小程序SDK發車啦

心萊科技 發佈 2019-12-31T05:43:40+00:00

RoadMap完善接口登錄用戶信息接口調用憑證數據分析客服消息模板消息統一服務消息動態消息插件管理附近的小程序小程序碼內容安全廣告圖像處理OCR運維中心搜索生物認證訂閱消息AccessToken自動傳參,無需顯式指定方法參數改成類參數,並且支持通過特性校驗更新歷史0.0.5重構A

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相關模塊,則使用起來比較簡單,具體您可以參考相關單元測試的編寫。主要有以下步驟:

  1. 引用對應的Abp的Nuget包

如果僅需某個支付,僅需引用該支付的包。下面以通聯支付為例,我們需要在工程中引用此包:

  1. 在對應工程的Abp的模塊(AbpModule)中,添加

    對「WxMiniProgramSdkModule」的依賴,如:添加模塊依賴

[DependsOn(typeof(WxMiniProgramSdkModule))]
  1. 直接使用

通過構造函數或者屬性注入相關服務,即可直接使用。

如何配置?

對於ABP集成,則可以通過以下方式獲取配置:

  • 配置文件,如:

"App_MiniProgram": {"MiniProgramAppId": "wx25fa5d55ef27e086","MiniProgramAppSecret": "ab02ac4499c9764108a78e19476d7101" }

以上為個人小程序號配置,僅用於測試,請勿亂搞!

  • 配置管理器

需存儲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 = , bool isHyaline = false,int width = 430) {if (string.IsOrWhiteSpace(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 }); }

如上述代碼所示,注意事項如下:

  1. 通過DownloadData函數下載二維碼

  2. 如需使用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.IsOrWhiteSpace(code)) throw new ArgumentException("參數不能為空!", nameof(code));//獲取api請求urlvar 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.ShouldNotBeOrWhiteSpace; }}

官方訂閱號

關注「麥扣聊技術」訂閱號免費獲取:

  • 最新文章、教程、文檔

  • 視頻教程

  • 基礎版免費授權

  • 模板

  • 解決方案

  • 編程心得和理念

相關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

轉載是一種動力 分享是一種美德

如果喜歡作者的文章,請關注【麥扣聊技術】訂閱號以便第一時間獲得最新內容。本文版權歸作者和湖南心萊信息科技有限公司共有,歡迎轉載,但未經作者同意必須保留此段聲明,且在文章頁面明顯位置給出原文連接,否則保留追究法律責任的權利。

文檔官網:docs.xin-lai.com

關鍵字: