欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#获取微信小程序的云数据库中数据的示例代码

程序员文章站 2022-03-10 14:40:44
目录0.1 获取accesstoken0 背景说明试水小程序,实现访客登记,现有.net程序需要获取该小程序的数据0.1 获取accesstoken调用绝大多数后台接口时都需使用 access_tok...

0 背景说明

试水小程序,实现访客登记,现有.net程序需要获取该小程序的数据

0.1 获取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.2 数据库查询

参考小程序文档: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.3 文件下载

参考小程序文档:获取文件下载链接

发送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. 参考文档

小程序官方文档:云开发->数据库查询记录

小程序官方文档:接口调用凭证->getaccesstoken

到此这篇关于c#获取微信小程序的云数据库中数据的示例代码的文章就介绍到这了,更多相关c#获取小程序数据内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!