Magicodes.WxMiniProgram.Sdk

轻量级微信小程序SDK,支持.NET Framework以及.NET Core。目前已提供Abp模块的封装,支持开箱即用。

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 = null, bool isHyaline = false,
int width = )
{
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 = , g = , b = },
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.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();
}
}

官方订阅号

关注“麦扣聊技术”订阅号免费获取:

  • 最新文章、教程、文档
  • 视频教程
  • 基础版免费授权
  • 模板
  • 解决方案
  • 编程心得和理念

轻量级开源小程序SDK发车啦的更多相关文章

  1. 开源小程序CMS网站, JeeWx-App-CMS 1.1 版本升级发布,持续更新!

    JeeWx-App-CMS开源小程序CMS网站,持续更新ing~ JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的 ...

  2. wordpress开源小程序

    wordpress多端开源小程序正式发布了,目前支持微信/QQ/百度/今日头条. 目前我们的开源小程序,已经建立了微信QQ交流群,需要的可以加下,微信添加hackdex(备注开源拉你入群),QQ群:7 ...

  3. TP5框架,开源小程序商城源码,前端+后台完整版

    CRMEB微信公众号商城小程序商城数据同步,带积分.优惠券.秒杀.砍价.分销等功能,更是一套方便二次开发的框架 开源地址:https://github.crmeb.net/u/crmeb 商城演示后台 ...

  4. 开源小程序CMS网站, JeeWx-App-CMS 1.0 首版本发布

    JeeWx-App-CMS 是jeewx开发的小程序网站开源项目,基于小程序wepy语言,具备cms网站的基本功能,能够打造简单易用的小程序公司官网.项目结构简单,逻辑清晰,代码规范,非常适合作为小程 ...

  5. 【Web技术】281- 滴滴开源小程序框架 Mpx2.0

    滴滴Mpx框架负责人@hiyuki,滴滴出行网约车webapp乘客团队的负责人,也是滴滴开源的小程序框架Mpx的负责人和核心作者 Mpx是一款致力于提高小程序开发体验和效率的增强型小程序框架,目前在滴 ...

  6. UWP_开源小程序 水印添加器

    前几天写了一个确定水印位置的小博客.决定要写一个添加水印的UWP程序. 目前程序技术方面已经差不多了.所以提上日程

  7. 微信小程序开发问题汇总

    前言 经过将近一个多月的开发,我们团队开发的微信小程序 "出发吧一起" 终于开发完成,现在的线上版本为 2.2.4-beta 版 本文档主要介绍该小程序在开发中所用到的技术,已经在 ...

  8. 微信小程序踩坑集合

    1:官方工具:https://mp.weixin.qq.com/debug/w ... tml?t=1476434678461 2:简易教程:https://mp.weixin.qq.com/debu ...

  9. 两天撸一个天气应用微信小程序

    更新说明: I.气象数据由百度地图开放平台修改为了和风天气,需要注册账号获取 key: II.d0e51c8 版本之后为小程序云开发版本,若未开通云开发功能,为不影响小程序正常运行,可以将版本号回退到 ...

随机推荐

  1. poj 1039 Pipe (Geometry)

    1039 -- Pipe 理解错题意一个晚上._(:з」∠)_ 题意很容易看懂,就是要求你求出从外面射进一根管子的射线,最远可以射到哪里. 正解的做法是,选择上点和下点各一个,然后对于每个折点位置竖直 ...

  2. hdu 1535 Invitation Cards(spfa)

    Invitation Cards Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others ...

  3. spring boot activiti 整合

    1.pom.xml <dependency> <groupId>org.activiti</groupId> <artifactId>activiti- ...

  4. Python--day66--模板语言之自定义mysimpletag

  5. Educational Codeforces Round 11、A B题

    A. Co-prime Array 题意:给你一个数列,要求构造两两相邻之间的数互质的数列,可以插入的数的小于10的9次方 思路:其实可以选择靠近10的9次方的最大的三个素数.然后按我下面的方法做就可 ...

  6. Centos 6.5 配置hadoop2.7.1

    1 Centos 6.5 编译hadoop2.7.1 主机配置: sudo yum install gcc gcc-c++ sudo yum install ncurses-devel sudo yu ...

  7. Vue导航栏在特定的页面不显示~

    最近写vue项目遇到一些问题,我把导航栏组件放在了app.vue中,让他在每个页面都能显示了,但遇到了一个问题,在登录以及注册页面导航栏是不合理不允许存在的 解决方法: 公共模块的内容可以放在App. ...

  8. 查看php-fpm的进程和端口号

    ps -ef | grep php-fpm   查看php-fpm所有的进程 ps -ef | grep php-fpn.conf 查看配置所在路径 netstat -lntp 查看监听端口  lis ...

  9. SpringBoot使用Junit测试 防止事物自动回滚

           问题:我在测试类中的save方法测试成功通过,但数据库没有插入数据 测试方法如下: @Test @Transactional // @Rollback(false) public voi ...

  10. 服务端CURL请求

    服务端与服务端之间,也存在接口编程. 比如我们网站服务端,需要发送短信.发送邮件.查询快递等,都需要调用第三方平台的接口. 1.php中发送请求 ①file_get_contents函数 :传递完整的 ...