C#獲取微信小程序的云數(shù)據(jù)庫中數(shù)據(jù)的示例代碼
0 背景說明
試水小程序,實現(xiàn)訪客登記,現(xiàn)有.NET程序需要獲取該小程序的數(shù)據(jù)
0.1 獲取AccessToken
調(diào)用絕大多數(shù)后臺接口時都需使用 access_token
參考小程序文檔:auth.getAccessToken
發(fā)送Get請求,獲取AccessToken
接口:
- https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
參數(shù):
- appid:小程序ID
- secret:注冊時產(chǎn)生的密鑰,可以重置
- 兩個參數(shù)信息可以在后臺->開發(fā)管理->開發(fā)設(shè)置->開發(fā)者設(shè)置中查看
返回值:
格式如下:
- access_token:獲取到的憑證
- expires_in:憑證的有效時間,單位:秒
{"access_token":"ACCESS_TOKEN","expires_in":7200}
0.2 數(shù)據(jù)庫查詢
參考小程序文檔:databaseQuery
發(fā)送Post請求,獲取數(shù)據(jù)
接口:
- POST https://api.weixin.qq.com/tcb/databasequery?access_token=ACCESS_TOKEN
參數(shù):
接口地址中加入AccessToken
請求參數(shù):
- env:云環(huán)境ID
- query:數(shù)據(jù)庫操作語句
格式如下:
{ "env":"小程序環(huán)境", "query": "db.collection(\"集合名稱\").where({done:true}).limit(10).skip(1).get()" }
query中應(yīng)使用limit()限制單次拉取的數(shù)量,默認(rèn)10條。
0.3 文件下載
參考小程序文檔:獲取文件下載鏈接
發(fā)送post請求獲取
接口:
- POST https://api.weixin.qq.com/tcb/batchdownloadfile?access_token=ACCESS_TOKEN
參數(shù):
- 接口地址中加入AccessToken
請求參數(shù):
- env:云環(huán)境ID
- file_list:文件列表
格式如下:
{ "env": "云環(huán)境ID", "file_list": [ { "fileid":"文件ID", "max_age":7200 } ] }
2. 簡單的封裝
簡單的封裝了發(fā)送請求的方法
//需要添加的命名空間
using Newtonsoft.Json;
using System.IO;
/// <summary>
/// 發(fā)送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>
/// 發(fā)送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對象中提取響應(yīng)的數(shù)據(jù)轉(zhuǎn)換為字符串
/// </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字符串轉(zhuǎn)為匿名對象
/// </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. 簡單測試
發(fā)送請求獲取數(shù)據(jù)
/// <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>
/// 查詢數(shù)據(jù)
/// </summary>
/// <param name="queryString">形如: $"{{\"env\":\"小程序環(huán)境id\", \"query\": \"db.collecti(\\\"數(shù)據(jù)集合名稱\\\").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\": \"環(huán)境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. 參考文檔
小程序官方文檔:云開發(fā)->數(shù)據(jù)庫查詢記錄
小程序官方文檔:接口調(diào)用憑證->getAccessToken
到此這篇關(guān)于C#獲取微信小程序的云數(shù)據(jù)庫中數(shù)據(jù)的示例代碼的文章就介紹到這了,更多相關(guān)C#獲取小程序數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#實現(xiàn)設(shè)置Excel表格中文本對齊方式和格式
這篇文章主要為大家詳細(xì)介紹了如何在.NET 程序中通過C# 設(shè)置Excel單元格中文本的對齊方式,方向以及換行,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-04-04
C# 將透明圖片的非透明區(qū)域轉(zhuǎn)換成Region的實例代碼
以下代碼實現(xiàn)將一張帶透明度的png圖片的非透明部分轉(zhuǎn)換成Region輸出的方法,有需要的朋友可以參考一下2013-10-10
c#反射機(jī)制學(xué)習(xí)和利用反射獲取類型信息
反射(Reflection)是.NET中的重要機(jī)制,通過放射,可以在運行時獲得.NET中每一個類型(包括類、結(jié)構(gòu)、接口和枚舉等)的成員,包括方法、屬性、事件,以及構(gòu)造函數(shù)等,還可以獲得每個成員的名稱、限定符和參數(shù)等,有了反射,即可對每一個類型了如指掌2014-01-01
C#判斷頁面中的多個文本框輸入值是否有重復(fù)的實現(xiàn)方法
這篇文章主要介紹了C#判斷頁面中的多個文本框輸入值是否有重復(fù)的實現(xiàn)方法,是一個非常簡單實用的技巧,需要的朋友可以參考下2014-10-10

