备忘录——C#获取微信小程序的云数据库中数据
0. 背景说明
试水小程序,实现访客登记,现有.NET程序需要获取该小程序的数据
0.2 获取AccessToken
调用绝大多数后台接口时都需使用 access_token
参考小程序文档:auth.getAccessToken
发送Get请求,获取AccessToken
接口:
https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
参数:
- appid:小程序ID
- secret:注册时产生的密钥,可以重置
- 两个参数信息可以在后台->开发管理->开发设置->开发者设置中查看
返回值:
格式如下:
{"access_token":"ACCESS_TOKEN","expires_in":7200}
- access_token:获取到的凭证
- expires_in:凭证的有效时间,单位:秒
0.3 数据库查询
参考小程序文档:databaseQuery
发送Post请求,获取数据
接口:
POST https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN
参数:
接口地址中加入AccessToken
请求参数:
env:云环境ID
query:数据库操作语句
格式如下:
{ "env":"小程序环境", "query": "db.collection(\"集合名称\").where({done:true}).limit(10).skip(1).get()" }
query中应使用limit()限制单次拉取的数量,默认10条。
0.4 文件下载
参考小程序文档:获取文件下载链接
发送post请求获取
- 接口:
POST https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN
参数:
- 接口地址中加入AccessToken
- 请求参数:
env:云环境ID
file_list:文件列表
格式如下:
{ "env": "云环境ID", "file_list": [ { "fileid":"文件ID", "max_age":7200 } ] }
2. 简单的封装
简单的封装了发送请求的方法
//需要添加的命名空间
using Newtonsoft.Json;
using System.IO;
/// <summary>
/// 发送http Get请求
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static HttpWebResponse GetRequest(string url)
{
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.Method = "GET";
request.ContentType = "application/x-www-form-urlencoded";//链接类型
return request.GetResponse() as HttpWebResponse;
}
/// <summary>
/// 发送http Post请求
/// </summary>
/// <returns></returns>
public static HttpWebResponse PostRequest(string url, string messsage)
{
byte[] byteData = Encoding.UTF8.GetBytes(messsage);
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Method = "POST";
webRequest.ContentType = "application/json;charset=UTF-8";
webRequest.ContentLength = byteData.Length;
using (Stream stream = webRequest.GetRequestStream())
{
stream.Write(byteData, 0, byteData.Length);
}
HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
return response;
}
/// <summary>
/// 从HttpWebResponse对象中提取响应的数据转换为字符串
/// </summary>
/// <param name="webresponse"></param>
/// <returns></returns>
public static string HttpWebResponseToString(HttpWebResponse webresponse)
{
using (Stream s = webresponse.GetResponseStream())
{
StreamReader reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd();
}
}
/// <summary>
/// Json字符串转为匿名对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="json"></param>
/// <param name="anonymousTypeObject"></param>
/// <returns></returns>
public static T DesAnonymousType<T>(string json, T anonymousTypeObject)
{
return JsonConvert.DeserializeAnonymousType(json, anonymousTypeObject);
}
3. 简单测试
发送请求获取数据
/// <summary>
/// 获取access_token
/// </summary>
/// <returns></returns>
public static string GetAccessToken()
{
// 通过Get请求获取access_token
HttpWebResponse httpWebResponse = GetRequest("https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credentiaappid=小程序ID&secret=小程序密钥");
string resultJson = HttpWebResponseToString(httpWebResponse);
var resultObj = DesAnonymousType(resultJson, new { access_token = "", expires_in = "" });
return resultObj.access_token;
}
/// <summary>
/// 查询数据
/// </summary>
/// <param name="queryString">形如: $"{{\"env\":\"小程序环境id\", \"query\": \"db.collecti(\\\"数据集合名称\\\").where({{集合中字段:\\\"集合中字段值\\\"}}).limit(10).get()\"}}"</param>
/// <returns></returns>
public static string GetData(string queryString)
{
string accessToken = GetAccessToken();
HttpWebResponse httpWebResponse = PostRequest("https://api.weixin.qq.com/tcb/databasequery?access_token=" + accessTokenqueryString);
string data = HttpWebResponseToString(httpWebResponse);
return data;
}
/// <summary>
/// 通过FileId获取文件下载URL
/// </summary>
/// <param name="queryString">形如:$"{{\"env\": \"环境ID\",\"file_list\": [{{\"fileid\":文件ID\",\"max_age\":7200 }}]}}"</param>
/// <returns></returns>
public static string GetDownFileUrl(string queryString)
{
string accessToken = GetAccessToken();
string url = $"https://api.weixin.qq.com/tcb/batchdownloadfile?access_token={accessToken}";
HttpWebResponse httpWebResponse = PostRequest(url, queryString);
string downFileUrl = HttpWebResponseToString(httpWebResponse);
return downFileUrl;
}
4. 参考文档
备忘录——C#获取微信小程序的云数据库中数据的更多相关文章
- 微信小程序开发之如何哪获取微信小程序的APP ID
微信小程序的开发工具,在新建项目的时候,默认提示填写APP ID,如果不填写AppID 也是可以本地测试和开发的,但是无法通过手机调试,只能在开发工具里查看 如果需要真机调试微信小程序,需要安装微信6 ...
- 微信小程序与云开发
微信小程序基础概念 小程序云开发的三大基础能力:云数据库.云函数.云存储 Java.NodeJS.JavaScript.HTML5.CSS3.VueJs.ReactJs.前端工程化.前端架构 小程序开 ...
- 微信小程序--使用云开发完成支付闭环
微信小程序--使用云开发完成支付闭环 1.流程介绍 2. 代码实现和逻辑思想描述 云函数统一下单 对应云函数 unipay [CloudPay.unifiedOrder] 函数思路 : 调用云函数封装 ...
- Slog71_选取、上传和显示本地图片GET !(微信小程序之云开发-全栈时代3)
ArthurSlog SLog-71 Year·1 Guangzhou·China Sep 12th 2018 ArthurSlog Page GitHub NPM Package Page 掘金主页 ...
- java后台获取微信小程序openid
一.jar包准备 1.在网盘下载 链接:https://pan.baidu.com/s/15HAAWOg_yn768g4s9IrcPg 提取码:hgj0 二.在pom文件中添加依赖 1.将外部的引入的 ...
- 微信小程序添加外部地图服务数据
先上效果: 缘起 使用微信小程序做地图相关功能的时候,有个需求是需要接入自己发布的地图服务.查看微信小程序地图组件文档,发现它对地图相关的支持很少,只有一些基础功能,比如添加点.线.面.气泡和一些常规 ...
- 微信小程序之云开发一
最近听说微信小程序发布了云开发,可以不需要购买服务器,就能开发小程序和发布小程序,对于动辄千元的服务器,极大的节约了开发成本,受不住诱惑,我就开始了小程序的云开发,目前项目已上线,亲测不收费,闲不住的 ...
- JAVA获取微信小程序openid和获取公众号openid,以及通过openid获取用户信息
一,首先说明下这个微信的openid 为了识别用户,每个用户针对每个公众号会产生一个安全的OpenID,如果需要在多公众号.移动应用之间做用户共通,则需前往微信开放平台,将这些公众号和应用绑定到一个开 ...
- 微信小程序知识云开发
一个小程序最多5个服务类目,一个月可以修改3次类目 小程序侵权投诉的发起与应对 软件著作权作品登记证书 实现小程序支付功能 如何借助官方支付api简单.高效率地实现小程序支付功能 借助小程序云开发实现 ...
随机推荐
- 网络损伤仪WANsim--不同的部署方式
网络损伤仪WANsim的业务口在逻辑上是不存在IP地址与MAC地址的,所以,WANsim可以串接在测试拓扑中的任意位置,只需要确保有流量通过WANsim即可. 不同的拓扑结构会对测试的结果造成影响.在 ...
- FastDFS是使用c语言编写的开源高性能分布式文件系统
FastDFS是什么 FastDFS是使用c语言编写的开源高性能分布式文件系统 是由淘宝开发平台部资深架构师余庆开发,FastDFS孵化平台板块 他对文件进行管理,功能包括文件存储,文件同步,文件访问 ...
- [蓝牙嗅探-Ubertooth One] 千元开源蓝牙抓包 Ubertooth One 安装和使用
目录 前言 1.编译 Ubertooth tools 1.1.准备工作 1.2.编译安装 libbtbb 1.3.编译安装 Ubertooth tools 1.4.Wireshark 插件 1.5.更 ...
- javascript学习(二)--函数
一.在JavaScript中,定义函数的方式如下: 1.第一种方式: function abs(x) { if (x >= 0) { return x; } else { return -x; ...
- python 环境遇到的报错
pipenv install -r requirements.txt 时遇到错误: `Command "python setup.py egg_info" failed with ...
- PHP 后台数组数据 传输给前台JS 使用
一. PHP: $a = array('aaa','bbb'); $a= json_encode($a); JS: var a_json = {$a}; //此处a_json数组便可使用 二. H ...
- CRC校验原理和verilog实现方法(二)
1 前言 在 前面的博客 CRC校验原理和verilog实现方法(一) 中,介绍了CRC校验的原理和手动计算过程.本文说一下我在学习CRC校验FPGA实现的一点心得体会. 2 线性反馈移位寄存器 ...
- RTC为何这么火?
国内疫情已经接近尾声,有疫情的原因孵化的音视频互动类 App数量出现井喷式增长,通讯场景被资本关注,市场持续走高.在线教育.娱乐社交.直播带货等领域逆势增长,也带动了开发者们对于 IM 和RTC能力的 ...
- IDEA使用Tomcat时控制台乱码的解决方案>从零开始学JAVA系列
IDEA使用Tomcat时控制台乱码的解决方案 解决方案1,修改启动时虚拟机参数 解决方案2,修改idea的设置 解决方案3,修改idea配置文件 在最后添加一行 '-Dfile.encoding=U ...
- no-strings-attached writeup
no-strings-attach writeup 1.程序分析 主函数如图所示,关键函数在authenticate中,进入函数. 分析可得,decrypt代码段为关键代码段,进入关键函数decryp ...