使用VC++如何生成小程序分享链接以及传递参数
发布时间:2026.04.24
VC++ 生成微信小程序分享链接 + 传递参数完整方案
首先明确核心:VC++ 是桌面端开发工具(Windows 桌面程序),不能直接生成小程序分享链接,但可以调用微信官方接口,在 VC++ 程序中实现「生成小程序永久 / 临时分享链接 + 自定义传递参数」的功能。
核心原理
微信提供小程序服务端接口,用于生成带参数的小程序分享链接(URL Link);
VC++ 桌面程序通过 HTTP/HTTPS 请求 调用该接口;
接口返回可直接分享的小程序链接,点击就能打开小程序并携带自定义参数。
前置准备(必须完成)
注册微信小程序,获取:
AppID(小程序唯一标识)
AppSecret(小程序密钥,后台→开发→开发设置中获取)
开启小程序「URL Link」权限(后台→开发管理→开发设置→扫普通链接二维码打开小程序);
VC++ 环境配置:支持 HTTPS 请求(推荐使用 WinINet 系统库,无需额外安装依赖)。
完整 VC++ 实现代码
该代码直接编译运行,即可生成带自定义参数的小程序分享链接,基于 MFC / 控制台程序通用。
1. 完整代码(控制台 / VC++ 通用)
cpp
运行
#include <Windows.h>
#include <WinINet.h>
#include <iostream>
#include <string>
#include <json/json.h> // 需要Jsoncpp解析(轻量JSON库)
#pragma comment(lib, "wininet.lib")
#pragma comment(lib, "jsoncpp.lib")
// 替换为你的小程序信息
#define WX_APPID "你的小程序AppID"
#define WX_APPSECRET "你的小程序AppSecret"
#define API_HOST "api.weixin.qq.com"
#define API_PATH "/wxa/generate_urllink"
// 1. 获取微信接口调用凭证 access_token
std::string GetWxAccessToken()
{
HINTERNET hInternet = InternetOpenA("VC++ WeChat Request", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hConnect = InternetConnectA(hInternet, API_HOST, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
// 拼接获取token的URL
char tokenUrl[256];
sprintf_s(tokenUrl, "/cgi-bin/token?grant_type=client_credential&appid=%s&secret=%s", WX_APPID, WX_APPSECRET);
// 发送HTTPS GET请求
HINTERNET hRequest = HttpOpenRequestA(hConnect, "GET", tokenUrl, NULL, NULL, NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_RELOAD, 0);
HttpSendRequestA(hRequest, NULL, 0, NULL, 0);
// 读取返回结果
char buffer[4096] = { 0 };
DWORD bytesRead;
InternetReadFile(hRequest, buffer, sizeof(buffer) - 1, &bytesRead);
// 解析JSON获取access_token
Json::Value root;
Json::Reader reader;
reader.parse(buffer, root);
std::string accessToken = root["access_token"].asString();
// 释放资源
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return accessToken;
}
// 2. 生成小程序分享链接(带自定义参数)
// 参数:path 小程序页面路径 | query 自定义参数(如id=123&name=test)
std::string GenerateMiniProgramUrlLink(const char* path, const char* query)
{
// 第一步:获取调用凭证
std::string accessToken = GetWxAccessToken();
if (accessToken.empty())
{
std::cout << "获取access_token失败!" << std::endl;
return "";
}
HINTERNET hInternet = InternetOpenA("VC++ WeChat Request", INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0);
HINTERNET hConnect = InternetConnectA(hInternet, API_HOST, INTERNET_DEFAULT_HTTPS_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 0);
// 拼接请求路径(携带token)
char reqPath[256];
sprintf_s(reqPath, "%s?access_token=%s", API_PATH, accessToken.c_str());
// 构造请求JSON参数(核心:传递小程序路径+自定义参数)
Json::Value reqJson;
reqJson["path"] = path; // 小程序页面路径(如pages/index/index)
reqJson["query"] = query; // 自定义参数(关键!)
reqJson["is_expire"] = false; // 链接永久有效
Json::FastWriter writer;
std::string postData = writer.write(reqJson);
// 请求头(JSON格式)
const char* headers = "Content-Type: application/json ";
// 发送HTTPS POST请求
HINTERNET hRequest = HttpOpenRequestA(hConnect, "POST", reqPath, NULL, NULL, NULL, INTERNET_FLAG_SECURE | INTERNET_FLAG_RELOAD, 0);
HttpSendRequestA(hRequest, headers, strlen(headers), (LPVOID)postData.c_str(), postData.length());
// 读取返回结果
char buffer[4096] = { 0 };
DWORD bytesRead;
InternetReadFile(hRequest, buffer, sizeof(buffer) - 1, &bytesRead);
// 解析返回的小程序链接
Json::Value root;
Json::Reader reader;
reader.parse(buffer, root);
std::string urlLink = root["url_link"].asString();
// 释放资源
InternetCloseHandle(hRequest);
InternetCloseHandle(hConnect);
InternetCloseHandle(hInternet);
return urlLink;
}
// 测试主函数
int main()
{
// 调用示例:
// 1. 小程序页面路径
const char* wxPagePath = "pages/index/index";
// 2. 自定义传递参数(格式:key=value&key2=value2)
const char* wxParams = "user_id=1001&order_id=2025001&share_from=vc++";
// 生成分享链接
std::string shareUrl = GenerateMiniProgramUrlLink(wxPagePath, wxParams);
if (!shareUrl.empty())
{
std::cout << "✅ 小程序分享链接生成成功:" << std::endl;
std::cout << shareUrl << std::endl;
}
else
{
std::cout << "❌ 生成失败!" << std::endl;
}
system("pause");
return 0;
}
2. 关键配置说明
Jsoncpp 库:用于解析 / 生成 JSON,VC++ 直接导入即可(轻量免费);
参数传递规则:
path:小程序的页面路径(必须是小程序已发布的页面);
query:自定义参数,格式 key=value,多个参数用 & 连接;
链接效果:用户点击链接 → 直接打开小程序 → 小程序内可获取到传递的参数。
小程序端接收参数(配套代码)
在小程序的对应页面(如 pages/index/index.js)中,直接获取 VC++ 传递的参数:
javascript
运行
Page({
onLoad(options) {
// options 就是VC++传递的所有参数
console.log("VC++传递的用户ID:", options.user_id);
console.log("VC++传递的订单ID:", options.order_id);
console.log("分享来源:", options.share_from);
}
})
核心知识点说明
链接类型
永久链接:代码中 is_expire: false,生成后永久有效,无次数限制;
临时链接:可设置过期时间,适合一次性分享。
VC++ 调用限制
必须联网;
必须使用 HTTPS 请求(微信接口强制要求);
access_token 有效期 2 小时,建议缓存。
分享场景
生成的链接可复制到微信、QQ、浏览器、短信等任意地方;
微信内点击直接打开小程序,其他平台点击会跳转微信打开小程序。
快速排错
生成失败:检查 AppID/AppSecret 是否正确;
参数获取不到:检查 query 参数格式是否为 key=value,无中文 / 特殊字符;
请求失败:确认 VC++ 项目开启了「HTTPS 支持」,网络正常。
总结
VC++ 本身不生成小程序链接,通过调用微信官方接口实现;
核心两步:获取 access_token → 调用接口生成带参数链接;
参数通过 query 字段传递,小程序在 onLoad 中直接接收;
代码可直接编译运行,适配所有 VC++ 桌面程序(控制台 / MFC)。
上一篇:接口dtygetsdo
下一篇:没有了!
