C#开发微信小程序(三)
关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中下载:
https://dev.tencent.com/u/dwBurning/p/ReallyWantToApi/git
https://git.dev.tencent.com/dwBurning/LazyOrders.git
继第二篇博文介绍的对微信小程序前端调整的过程中发现的一些问题,该篇继续介绍对后端Web Api调整的过程中发现的问题,虽然谈不上是bug,但是规范性同样很重要,当然如果仍有不足之处,欢迎在评论中指出来。
第一:调整接口,最初的版本,为了方便都写在一个类文件里边,其次,不符合Api RESTful的风格,于是重新整理,针对每个资源,建一个类,里边只有针对资源的增删查改Get,Post,Put,Delete四个方法:

public JsonResult<ResultData> Get(string sessionKey){}
public JsonResult<ResultData> Post([FromBody]dynamic data){}
public void Put(int id, [FromBody]string value)
public JsonResult<ResultData> Delete([FromBody]dynamic data)
第二:登录,小程序开放给所有的微信用户的,所以每个人打开都需要获取到用户的唯一标识,叫做OpenId,这个是微信服务端分配给每个微信用户的唯一凭证,我们要拿这个凭证建立用户关系,下单,查询购物车之类的操作。通过官方文件的介绍,可以知道,调用如下这个接口,就可以获取到。但是同时官方是不建议将获取到的敏感数据直接返回小程序前端的,于是稍微调整了一下,在缓存中重新建立了映射关系,返回自己生成的sessionKey给前端。批注:目前整个应用都是基于缓存的,并没有实现真正的仓储。
另外补充说明一下,这里使用dynamic作为参数的数据类型,因为小程序前端发起的请求,提交参数都是JSON字符串,每次都解析的话,也挺麻烦的,用dynamic省去了这个步骤。
GET https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code
private readonly string _appID = "";//填写自己的AppId private readonly string _appSecret = "";//填写自己的AppSecret /// <summary>
/// 登录
/// </summary>
/// <param name="data">dynamic接收{code:""}</param>
/// <returns>sessionKey</returns>
public string PostLogIn([FromBody]dynamic data)
{
string code = data.code;
string strUrl = string.Format("https://api.weixin.qq.com/sns/jscode2session?appid={0}&secret={1}&js_code={2}&grant_type=authorization_code", _appID, _appSecret, code); var appAuth = JsonConvert.DeserializeAnonymousType(HttpRequestHelper.HttpGet(strUrl), new
{
session_key = "",
openid = ""
}); string sessionKey = Guid.NewGuid().ToString("N");
string sessionValue = appAuth.session_key + "|" + appAuth.openid; LazyOrdersRepository.AppSession.AddOrUpdate(sessionKey, sessionValue, (key, value) => value); return sessionKey;
}
第三,增加了统一的返回类型,直接返回JSON对象而不是JSON字符串。如果你看了我的第一篇文章,里边就讲到了如果直接返回String,前端需要将字符串转JSON对象,才可以解析。此次修改为直接返回JsonResult对象,前端收到后,就可以不用再次转换了。
/// <summary>
/// 根据sessionKey获取购物车列表
/// </summary>
/// <param name="sessionKey">会话Key</param>
/// <returns>ResultData通用结果返回类型</returns>
public JsonResult<ResultData> Get(string sessionKey)
{
string sessionValue = "";
if (LazyOrdersRepository.AppSession.TryGetValue(sessionKey, out sessionValue))
{
string openId = sessionValue.Split('|')[];
var carts = from cart in LazyOrdersRepository.Carts
where cart.OpenId == openId && cart.IsPaid == false
group cart by cart.MenuId into c
select new
{
c.Key,
menu = LazyOrdersRepository.GetMenuList().FirstOrDefault(x => x.MenuId == c.Key),
count = c.Count(),
selected = true
};
return Json<ResultData>(new ResultData() { Code = ResponseResult.Success, Context = carts.ToList() });
}
return Json(new ResultData() { Code = ResponseResult.Falied });
}
onShow() {
const self = this;
wx.getStorage({
key: 'sessionKey',
success: function(res) {
self.setData({
sessionKey: res.data
})
wx.request({
url: app.globalData.urlCarts + '?sessionKey=' + self.data.sessionKey,
success: function(res) {
if (res.data.Context && res.data.Context.length > 0) {
self.setData({
hasList: true, // 既然有数据了,那设为true吧
carts: res.data.Context
});
}
},
complete: function(res) {
self.getTotalPrice()
}
});
},
fail: function(res) {
util.checkSession()
},
})
},
第四:增加了swagger生成Api文档,具体怎么配置swagger,可以移步之前写的博文Asp.Net Web Api中使用Swagger

C#开发微信小程序(三)的更多相关文章
- 使用wepy开发微信小程序商城第三篇:购物车(布局篇)
使用wepy开发微信小程序商城 第三篇:购物车(布局篇) 前两篇如下: 使用wepy开发微信小程序商城第一篇:项目初始化 使用wepy开发微信小程序商城第二篇:路由配置和页面结构 基于上两篇内容,开始 ...
- WordPress 网站开发“微信小程序“实战(三)
本文是"WordPress 开发微信小程序"系列的第三篇,本文记录的是开发"DeveWork+"小程序1.2 版本的过程.建议先看完第一篇.第二篇再来阅读本文. ...
- 如何用TypeScript开发微信小程序
微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了. 工具和文档可以参考官方文档:https://mp.weixin ...
- 用Vue.js开发微信小程序:开源框架mpvue解析
前言 mpvue 是一款使用 Vue.js 开发微信小程序的前端框架.使用此框架,开发者将得到完整的 Vue.js 开发体验,同时为 H5 和小程序提供了代码复用的能力.如果想将 H5 项目改造为小程 ...
- 利用WordPress REST API 开发微信小程序从入门到放弃
自从我发布并开源WordPress版微信小程序以来,很多WordPress网站的站长问有关程序开发的问题,其实在文章:<用微信小程序连接WordPress网站>讲述过一些基本的要点,不过仍 ...
- 开发微信小程序入门前
开发微信小程序入门前 百牛信息技术bainiu.ltd整理发布于博客园 2016年09月21日晚 微信发不了微信“小程序”的内测版,一时间整个互联网都炸了锅.个大新闻.论坛都在讨论这个事情. 作为互联 ...
- C#开发微信小程序(四)
导航:C#开发微信小程序系列 关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中 ...
- C#开发微信小程序(二)
导航:C#开发微信小程序系列 关于小程序项目结构,框架介绍,组件说明等,请查看微信小程序官方文档,关于以下贴出来的代码部分我只是截取了一些片段,方便说明问题,如果需要查看完整源代码,可以在我的项目库中 ...
- 基于小程序云Serverless开发微信小程序
本文主要以使用小程序云Serverless服务开发一个记事本微信小程序为例介绍如何使用小程序云Serverless开发微信小程序.记事本小程序的开发涉及到云函数调用.云数据库存储.图片存储等功能,较好 ...
随机推荐
- 前端vue如何下载或者导出word文件和excel文件
前端用vue怎么接收并导出文件 window.location.href = "excel地址" 如果是 get 请求,那直接换成 window.open(url) 就行了 创建一 ...
- 爬虫框架Scrapy入门——爬取acg12某页面
1.安装1.1自行安装python3环境1.2ide使用pycharm1.3安装scrapy框架2.入门案例2.1新建项目工程2.2配置settings文件2.3新建爬虫app新建app将start_ ...
- MYSQL远程连接速度慢的解决方法
在局域网内连接其他机器的MYSQL,发现速度慢的很,不知道什么原因,总有几秒的延迟. 后来在网上发现解决方法,my.ini里面添加 [mysqld]skip-name-resolveskip-gran ...
- desc和show
desc只能查看表结构 查看zx1表结构 desc zx1; mysql> desc zx1 -> ; +---------+---------+------+-----+-------- ...
- Android 寻找Drawable资源的流程
寻找设备对应Drawable资源时,会先在设备对象dpi的drawable文件夹下寻找,如果没找到,会上溯到更高一级dpi文件夹下寻找,上溯最高两级.如果还是没有找到,会寻找noDensity文件夹下 ...
- 2019-2020-12 20199317 《Linux内核原理与分析》 第十二周作业
SET-UID程序漏洞实验 1 实验简介 Set-UID 是 Unix 系统中的一个重要的安全机制.当一个 Set-UID 程序运行的时候,它被假设为具有拥有者的权限.例如,如果程序的拥有者是roo ...
- Spring 核心技术与产品理念剖析(上)
IT 技术发展太快了,就像浪潮一样一波接着一波,朝你迎面扑来,稍不留神就会被巨浪卷至海底而不得翻身.我们必须要学会抓住那些不变的本质或规律,只有这样才能屹立潮头而不倒,乘风破浪,做这个巨变时代的弄潮儿 ...
- 使用ModelArts自动学习完成猫狗声音分类
准备数据 点击下载猫狗声音数据集至本地: 解压,文件包结构大概如下图所示 data ├── test │ ├── cats │ │ ├── cat_20.wav │ │ ├── ...... │ │ ...
- JQuery之选择器的类型
JQuery中的选择器数量和JavaScript中的选择器数量相差无几,JQuery中的选择器类型如下图: 代码实现: <script src="JS/jquery-3.4.1.js& ...
- luogu P3830 [SHOI2012]随机树
输入格式 输入仅有一行,包含两个正整数 q, n,分别表示问题编号以及叶结点的个数. 输出格式 输出仅有一行,包含一个实数 d,四舍五入精确到小数点后 6 位.如果 q = 1,则 d 表示叶结点平均 ...