专栏首页雪雁的专栏轻量级开源小程序SDK发车啦

轻量级开源小程序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相关模块,则使用起来比较简单,具体您可以参考相关单元测试的编写。主要有以下步骤:

  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 = 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
        });
    }

如上述代码所示,注意事项如下:

  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();
    }
}

本文分享自微信公众号 - magiccodes(xl----0)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-12-30

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 研究人员报告“分布式深度学习”取得突破

    网上购物时我们通常会用几个关键词来搜索我们想要的产品,但是在拥有数以百万计的产品和购物者的世界中,将这些不明确的词与合适的产品进行匹配是信息检索中的最大挑战之一...

    AiTechYun
  • spring boot默认单线程排队跑定时任务问题记录

    链接:https://my.oschina.net/xiaomingnevermind/blog/3143095

    小小明童鞋
  • 分布式系统核心问题

    随着摩尔定律碰到瓶颈,越来越多的系统要依靠分布式集群架构来实现海量数据处理和可扩展计算能力。

    efonfighting
  • 分布式事务的四种解决方案,值得参考!

    两阶段提交(Two-phase Commit,2PC),通过引入协调者(Coordinator)来协调参与者的行为,并最终决定这些参与者是否要真正执行事务。

    Java技术栈
  • 什么是Kafka?它有四个关键概念值得我们去学习

    Apache kafka is a distributed streaming platform,官方定义 kafka 是一个分布式流式计算平台 。而在大部分企...

    IT大咖说
  • RocketMQ:至今我见过讲得最全的一篇,看完再也不担心没有实战经验

    RocketMQ 是业内知名的消息中间件,有着金融级消息的消息可靠性保证,在性能方面不输于 Kafka。同时对比 Kafka 有着更低的消息投递延时。而这一切,...

    用户5546570
  • 深入了解分布式事务组件 Seata :AT 模式(二)

    在前面一篇文章,我们介绍了阿里开源的分布式事务组件 Seata 的相关概念,重点介绍了 Seata 的 AT 模式。并通过一个 Spring-Cloud-JPA...

    aoho求索
  • 微服务框架saf-1:saf工程结构拓扑解析

    3.解放业务,使业务方专注于业务逻辑本身:通过注解以搭积木方式引入各式资源,每个资源都是一行注解,极大提升业务方产出效率。

    千里行走
  • 面试:ZooKeeper二十三连问,看看你能不能接住

    ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,它是集群的管理者,监视着集群中各个节点的状态根据...

    IT大咖说
  • newSQL 到底是什么?

    互联网在本世纪初开始迅速发展,互联网应用的用户规模、数据量都越来越大,并且要求7X24小时在线。

    dys

扫码关注云+社区

领取腾讯云代金券