获取加密scheme码 的C#代码
using Newtonsoft.Json; using Newtonsoft.Json.Linq; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { public static class WChatUtil { // 凭证有效时间,单位:秒。目前是7200秒之内的值。 private static int expiresIn = 7200; //appid=wx53b530****b45ad8 小程序Id; 获取地址https://mp.weixin.qq.com/ 开发者管理->开发设置 //secret=8ee99bb51321****7de249e82bf65611 获取地址https://mp.weixin.qq.com/ 开发者管理->开发设置->AppSecret(小程序密钥) private static string appId = "wx53b530****b45ad8"; // 你的小程序App ID,需替换真实值 wx53b530****b45ad8 private static string appSecret = "8ee99bb51321****7de249e82bf65611"; // 你的小程序App Secret,需替换真实值 8ee99bb51321****7de249e82bf65611 // 存储AccessToken和其有效期的变量 private static string? accessToken; private static long expireTime; // 过期时间戳,单位:秒 /// <summary> /// 获取微信小程序的AccessToken。 /// 如果AccessToken尚未获取或已过期,则会向微信服务器发起请求获取新的AccessToken。 /// </summary> /// <returns>微信小程序AccessToken</returns> public static string? GetAccessToken() { // 如果AccessToken为空或已过期,则重新获取 if (accessToken == null || DateTimeOffset.UtcNow.ToUnixTimeSeconds() > expireTime) { RefreshAccessToken().Wait(); } return accessToken; } /// <summary> /// 刷新AccessToken,向微信服务器发送请求获取新的AccessToken。 /// </summary> private static async Task RefreshAccessToken() { // 构建请求URL string url = $"https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={appId}&secret={appSecret}"; using (HttpClient httpClient = new HttpClient()) { using (HttpResponseMessage response = await httpClient.GetAsync(url)) { string responseJson = await response.Content.ReadAsStringAsync(); // 使用Newtonsoft.Json解析JSON响应 JObject jsonObject = JObject.Parse(responseJson); // 从JSON响应中获取AccessToken accessToken = jsonObject["access_token"]?.ToString(); // 计算过期时间戳 expireTime = DateTimeOffset.UtcNow.ToUnixTimeSeconds() + (expiresIn - 60); // 提前60秒过期,避免刚好过期时的并发问题 } } } /// <summary> /// 获取scheme /// </summary> /// <param name="path">url路径</param> /// <param name="query">url参数</param> /// <returns>返回从微信服务器获取的相应内容(通常为JSON格式字符串)</returns> public static string GenerateScheme(string path,string query) { string? accessToken = GetAccessToken(); // 拼接URL string url = $"https://api.weixin.qq.com/wxa/generatescheme?access_token={accessToken}"; try { using (HttpClient client = new HttpClient()) { // 创建一个 JSON 格式的请求主体 // jsonRequestString格式样例 = "{\"jump_wxa\":{\"path\":\"/pages/item/item\",\"query\":\"DBI=1&Id=3974912\",\"env_version\":\"release\"},\"is_expire\":true,\"expire_type\":1,\"expire_interval\":1}"; GetSchemeModel getScheme=new GetSchemeModel(); getScheme.jump_wxa.path=path; getScheme.jump_wxa.query=query; string jsonRequestString =JsonConvert.SerializeObject(getScheme); HttpContent httpContent = new StringContent(jsonRequestString, Encoding.UTF8, "application/json"); var response = client.PostAsync(url, httpContent).Result; if (response.IsSuccessStatusCode) { return response.Content.ReadAsStringAsync().Result; } return "错误" + response.StatusCode; } } catch (Exception ex) { return "错误" + ex.Message; } } } }
实体类
/// <summary> /// 获取加密scheme码 /// </summary> public class GetSchemeModel { public JumpWxa jump_wxa = new JumpWxa(); public bool is_expire = true; public int expire_type = 1; public int expire_interval = 1; } public class JumpWxa { /// <summary> /// url路径 /// </summary> public string path = "/pages/item/item"; /// <summary> /// url参数 /// </summary> public string query = "DBI=1&Id=3974912"; } /// <summary> /// 获取加密scheme码结果 /// </summary> public class GetSchemeResultModel { public int errcode; public string? errmsg; public string? openlink; }
获取加密scheme码的相关参数官方地址https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateScheme.html
调用获取加密scheme码
string s = WChatUtil.GenerateScheme("/pages/index/index", ""); var v= JsonConvert.DeserializeObject<GetSchemeResultModel>(s);
H5跳转到微信中程序代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>H5跳转到微信小程序</title></head> <body > <a href="weixin://dl/business/?t=fw6OOkBIrqt">H5跳转微信小程序</a> </body> </html>
获取微信小程序AppID和AppSecret的网页位置
视频教程
本文来自 www.LuoFenMing.com