wafer小程序服务器,Wafer - 企业级微信小程序全栈方案

Wafer 服务端 SDK - C#

68747470733a2f2f63692e6170707665796f722e636f6d2f6170692f70726f6a656374732f7374617475732f6769746875622f74656e63656e7479756e2f77656170702d6373686172702d7365727665722d73646b3f7376673d74727565

68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f74656e63656e7479756e2f77656170702d6a6176612d7365727665722d73646b2e737667

本项目是 Wafer 组成部分,以 SDK 的形式为业务服务器提供以下服务:

SDK 获取

本项目遵守 MIT 协议,可以直接下载 SDK 源码进行修改、编译和发布。

如果使用自动部署并选择 C# 语言,则分配的业务服务器里已经部署了本 SDK 和 Demo 的发行版本。

API

请参考本项目 Wiki。

使用示例(ASP.NET MVC)

获得 SDK 源码后,需要在解决方案中添加 SDK 项目。创建 ASP.NET MVC 网站项目,并且添加对 SDK 项目的引用。

ff00d98ef89972775f7d8cc7b95521de.png

6743e541f8b7769d3c2e6e9fe93ecb2c.png

添加引用后,就可以使用 SDK 提供的服务。

配置 SDK

SDK 必须经过初始化配置之后才能使用。可以选择使用代码初始化或者使用配置文件初始化。初始化配置建议在 Application_Start 里进行。

使用代码初始化:

using QCloud.WeApp.SDK;

var configuration = new Configuration() {

// 业务服务器访问域名

ServerHost = "199447.qcloud.la",

// 鉴权服务地址

AuthServerUrl = "http://10.0.12.135/mina_auth/",

// 信道服务地址

TunnelServerUrl = "https://ws.qcloud.com/",

// 信道服务签名 key

TunnelSignatureKey = "my$ecretkey",

// 网络请求超时设置,单位为豪秒

NetworkTimeout = 30000

};

ConfigurationManager.Setup(configuration);

使用配置文件初始化:

using QCloud.WeApp.SDK;

var configFilePath = "C:\\qcloud\sdk.config";

ConfigurationManager.SetupFromFile(configFilePath);

关于 SDK 配置字段的含义以及配置文件格式的更多信息,请参考服务端 SDK 配置。

使用会话服务

登录

业务服务器提供一个路由处理客户端的登录请求,直接把该请求交给 SDK 来处理即可完成登录。登录成功后,可以获取用户信息。

using QCloud.WeApp.SDK.Authorization;

public class LoginController : Controller

{

/// GET /login

/// 实现登录接口,配合客户端 SDK 建立会话

public ActionResult Index()

{

try

{

// 使用 Request 和 Response 初始化登录服务

LoginService loginService = new LoginService(Request, Response);

// 调用登录接口,如果成功可以获得用户信息。如有需要,可以使用用户信息进行进一步的业务操作

UserInfo userInfo = loginService.Login();

Debug.WriteLine(userInfo);

}

catch (LoginServiceException ex)

{

// 登录失败会抛出登录异常

Debug.WriteLine(ex);

}

// 登录无论成功还是失败,都无需返回响应结果,因为登录服务已经使用 HTTP Response 进行输出

return null;

}

}

如果登录失败,Login() 方法会抛出异常,需要使用 try-catch 来捕获异常。该异常可以不用处理,抛出来是为了方便业务服务器可以进行记录和监控。

获取会话状态

客户端交给业务服务器的请求,业务服务器可以通过 SDK 来检查该请求是否包含合法的微信小程序会话。如果包含,则会返回会话对应的用户信息。

using QCloud.WeApp.SDK.Authorization;

/// GET /user

/// 利用建立的会话获取用户信息

public class UserController : Controller

{

// GET: User

public ActionResult Index()

{

try

{

// 使用 Request 和 Response 初始化登录服务

LoginService loginService = new LoginService(Request, Response);

// 调用检查登录接口,成功后可以获得用户信息,进行正常的业务请求

UserInfo userInfo = loginService.Check();

Response.AddHeader("Content-Type", "application/json");

// 获取会话成功,需要返回 HTTP 视图,这里作为示例返回了获得的用户信息

return Content(JsonConvert.SerializeObject(new

{

code = 0,

message = "OK",

data = new { userInfo }

}));

}

catch (Exception error)

{

// 可以处理登录失败的情况,但是注意此时无需返回 ActionResult,

// 因为登录失败的时候,登录服务已经输出登录失败的响应

Debug.WriteLine(error);

return null;

}

}

}

如果检查会话失败,或者会话无效,Check() 方法会抛出异常,需要使用 try-catch 来捕获异常。该异常可以不用处理,抛出来是为了方便业务服务器可以进行记录和监控。

阅读解决方案文档中的会话服务了解更多解决方案中关于会话服务的技术资料。

使用 SDK 提供信道服务

业务在一个路由上提供信道服务,只需把该路由上的请求都交给 SDK 的信道服务处理即可。

public class TunnelController : Controller

{

private TunnelService tunnelService = null;

/// GET /tunnel

/// 请求建立隧道连接

///

/// POST /tunnel

/// 用于信道服务器推送消息到业务服务器

public ActionResult Index()

{

// 创建信道服务处理信道相关请求

tunnelService = new TunnelService(Request, Response);

// 信道服务会自动响应请求,请不要使用 Response 进行二次请求

tunnelService.Handle(

// 需要实现信道处理器,ChatTunnelHandler 是一个实现的范例

handler: new ChatTunnelHandler(),

// 配置是可选的,配置 CheckLogin 为 true 的话,会在隧道建立之前获取用户信息,以便业务将隧道和用户关联起来

options: new TunnelHandleOptions() { CheckLogin = true }

);

// 返回 null 确保 MVC 框架不进行输出

return null;

}

}

使用信道服务需要实现处理器,来获取处理信道的各种事件,具体可参考接口 ITunnelHandler 的 API 文档以及配套 Demo 中的 ChatTunnelHandler 的实现。

阅读解决方案文档中的信道服务了解更多解决方案中关于鉴权服务的技术资料。

在DEMO基础上做开发

程序部署在  C:\inetpub\wwwwroot\

反馈和贡献

如有问题,欢迎使用 Issues 提出,也欢迎广大开发者给我们提 Pull Request。

LICENSE

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/472312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Android学习按键事件监听与Command模式

Android学习按键事件监听与Command模式 - Dufresne - 博客园 Android学习按键事件监听与Command模式 一 Command模式 意图: 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化; 对请求排队或记录请求日志,以及支持…

fileinputstream_从Java中的FileInputStream读取字节

以下示例显示了如何从Java中的FileInputStream读取字节。import java.io.File;import java.io.FileInputStream;public class fileInputStream {public static void main(String[] args) {byte[] data new byte[1024]; //allocates memory for 1024 bytes//be careful about h…

LeetCode 1839. 所有元音按顺序排布的最长子字符串(滑动窗口)

文章目录1. 题目2. 解题1. 题目 当一个字符串满足如下条件时,我们称它是 美丽的 : 所有 5 个英文元音字母(a ,e ,i ,o ,u)都必须 至少 出现一次。这些元音字母的顺序都必须按照 字…

特征处理

学自 极客时间 《深度学习推荐系统实战》 特征分为两类: 类别特征(性别、地理位置、季节、天气、风格)数值型特征(年龄、收入、点击量、点击率) 类别特征经过 One-Hot 编码后放入特征向量、或者 多个的特征值采用 M…

WIN 10 安装 Hadoop 2.7.7 + Spark 2.4.7 记录

文章目录0. 常规解压安装,并添加环境变量1. 下载并覆盖 bin 文件夹2. 使VERSION文件的clusterID一致3. 贴下单机配置4. 测试 Hadoop5. 安装Spark环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.70. 常规解压安装,并添加…

canal mysql从库_canal中间件|数据增量同步解决方案

上一文中提到延时双删等策略实现数据一致性的时候,可能存在删除缓存失败的情况,就会出现缓存和数据库不一致的问题。为了应对删除缓存失败而导致数据不一致的问题,可以通过回溯数据库日志文件,提供一个保障的重试机制即可。流程如…

dbscan聚类算法matlab_密度聚类DBSCAN、HDBSCAN(转)

# 密度聚类DBSCAN、HDBSCANDBSCANDBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法)是一种基于密度的空间聚类算法。该算法将具有足够密度的区域划分为簇,并在具有…

Spark IDEA 编程环境配置

文章目录1. 下载资料准备2. 建立项目、添加环境设置3. 第一个 Spark 程序学自:Spark机器学习实战 https://book.douban.com/subject/35280412/ 记录一下踩过的坑: 环境:win 10 java 1.8.0_281 Scala 2.11.11 Hadoop 2.7.7 Spark2.4.7 …

天池 在线编程 订单分配(回溯)

文章目录1. 题目2. 解题1. 题目 描述 打车派单场景, 假定有N个订单,待分配给N个司机。 每个订单在匹配司机前,会对候选司机进行打分,打分的结果保存在N*N的矩阵score,其中score[i][j]代表订单 i 派给司机 j 的分值。 假定每个订单…

2015年北京户口全攻略

最新统计数据指出 截至2013年底,北京市常住人口为2114.8万人,其中常住外来人口为802.7万人。和“北京户口”捆绑的字眼,历来是身份、福利,以至于幸福感、安全感。那么北京户口有什么好处?外来人口如何落户北京呢&#…

水晶报表 jar包版本过低_工具类学习-UReport报表设计器整合

dada-report报表整合UReport报表设计器工具结合日常工作和学习实践,针对传统报表子站面临的问题,尝试借助UReport报表设计器解决1.可在现有工程基础上引入Ureport2报表设计器Ureport报表设计器是一个基于WEB的在线报表设计器,其具有良好的界面…

LeetCode 1844. 将所有数字用字符替换

文章目录1. 题目2. 解题1. 题目 给你一个下标从 0 开始的字符串 s ,它的 偶数 下标处为小写英文字母,奇数 下标处为数字。 定义一个函数 shift(c, x) ,其中 c 是一个字符且 x 是一个数字,函数返回字母表中 c 后面第 x 个字符。 …

LeetCode 1845. 座位预约管理系统(set)

文章目录1. 题目2. 解题1. 题目 请你设计一个管理 n 个座位预约的系统,座位编号从 1 到 n 。 请你实现 SeatManager 类: SeatManager(int n) 初始化一个 SeatManager 对象,它管理从 1 到 n 编号的 n 个座位。所有座位初始都是可预约的。in…

unity game和scene效果不一样_不同的真石漆装饰效果也是不一样的

外墙真石漆真的是一件很好的产品,具有防火性、防水性、安全且环保、粘力强、永不褪色等特点,无疑是人们较好的选择,在很早之前就已经逐渐的取代了瓷砖和其他石材在人们心中的位置。真石漆的品种不止一种,按照装饰效果我们可以分为…

噪声产生原因_空调噪声大?啄木鸟家庭维修,看看属于哪一个问题

夏天终于要结束了,我只想安静的睡一个好觉。这个夏天中,楼上的空调每夜不休不眠的工作着,可这个空调为什么运作时的声音这么“巨大”。“轰轰轰……”,楼层都似乎和它产生了共振。而每晚的我,反反复复努力入睡&#xf…

05-按钮的基本使用-开发步骤

从Xcode5开始,图片资源都放到Images.xcassets中进行管理先添加必须的图片到Images.xcassets中调整界面尺寸 由于模拟器的默认尺寸是3.5inch,为了避免出现不必要的麻烦,最好将storyboard中的UI界面尺寸也调整为3.5inch添加4个方向按钮和2个缩放…

【机器学习】sklearn数据特征预处理:归一化和标准化

归一化处理 特点:通过对原始数据进行变换把数据映射到(默认为[0,1])之间 from sklearn.preprocessing import MinMaxScaler def mm():"""归一化处理:return: NOne"""mm MinMaxScaler(feature_range(2,3))data mm.fit_transform(…

LeetCode 1848. 到目标元素的最小距离

文章目录1. 题目2. 解题1. 题目 给你一个整数数组 nums (下标 从 0 开始 计数)以及两个整数 target 和 start ,请你找出一个下标 i ,满足 nums[i] target 且 abs(i - start) 最小化 。注意:abs(x) 表示 x 的绝对值。…

【机器学习】sklearn数据集获取、分割、分类和回归

sklearn数据集1、数据集划分1.1 获取数据1.2 获取数据返回的类型举个栗子:1.3 对数据集进行分割举个栗子:2、 sklearn分类数据集3、 sklearn回归数据集1、数据集划分 机器学习一般的数据集会划分为两个部分: 训练数据:用于训练&a…

LeetCode 1846. 减小和重新排列数组后的最大元素

文章目录1. 题目2. 解题1. 题目 给你一个正整数数组 arr 。请你对 arr 执行一些操作(也可以不进行任何操作),使得数组满足以下条件: arr 中 第一个 元素必须为 1 。任意相邻两个元素的差的绝对值 小于等于 1 ,也就是…