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」的依賴,如:添加模塊依賴
[DependsOn(typeof(WxMiniProgramSdkModule))]
-
直接使用
通過構造函數或者屬性注入相關服務,即可直接使用。
如何配置?
對於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
});
}
如上述代碼所示,注意事項如下:
-
通過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.IsOrWhiteSpace(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.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