客户服务

使用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

下一篇:没有了!

相关推荐

copyright©2010-2023深圳市点特科技有限公司 粤ICP备14069711号

尊敬的客户您好,请您留下您的需求和联系方式,我们将安排客服与您联系!

称呼

您的联系方式

您的公司名称