Nodejs微信分享相关的开发问题请教

Nodejs微信分享相关的开发问题请教

我在用wechat做微信的小玩意儿,偶然看到一个公众号可以实现“分享给朋友,10个朋友打开后有奖”这么个功能。 直接在这个公众号打开该活动的链接,可以看到链接为: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0f4a9458ebbbc31e&redirect_uri=http%3A%2F%2Fmobile.wangtu.com%2Fweixin%2Fpage%2Fmenu%2FChouJiang3.aspx%3Fdlid%3D9584%26shareinfoId%3D12&response_type=code&scope=snsapi_base&state=1#wechat_redirect 分享给朋友后,链接变为: https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0f4a9458ebbbc31e&redirect_uri=http%3A%2F%2Fmobile.wangtu.com%2Fweixin%2Fpage%2Fmenu%2FChouJiang3.aspx%3Fdlid%3D9584%26from_openid%3DoDOPTs5JqUUHD6bn5txvXySpauGQ%26shareinfoId%3D12&response_type=code&scope=snsapi_base&state=1&from=singlemessage&isappinstalled=0#wechat_redirect 前后的变化有一些是微信服务器自己给加的,但有一部分应该是开发者给加的:“from_openid%3doDOPTs5JqUUHD6bn5txvXySpauGQ%26”,这个参数应该是标明了分享者的openid。有了这个参数,被分享的人点开链接之后,就可以计算该分享者分享的链接被打开的次数。 我不明白的是:如何使这个链接被分享后,加上这个分享者openid的参数?

谢谢!


5 回复

要实现微信分享功能并追踪分享者的信息(例如通过 from_openid 参数),你需要使用微信的 OAuth2.0 授权机制,并结合 Node.js 来处理授权过程和生成带参数的分享链接。

以下是一个简单的示例代码,帮助你理解如何实现这一功能:

1. 初始化微信 SDK

首先,你需要初始化微信 SDK,确保你已经获取了微信的 AppID 和 AppSecret。

const axios = require('axios');
const qs = require('querystring');

const appId = 'wx0f4a9458ebbbc31e';
const appSecret = 'your_app_secret';

async function getAccessToken(code) {
    const url = `https://api.weixin.qq.com/sns/oauth2/access_token?appid=${appId}&secret=${appSecret}&code=${code}&grant_type=authorization_code`;
    const response = await axios.get(url);
    return response.data;
}

2. 获取用户 OpenID

当用户通过微信授权登录时,微信会重定向到你的 redirect_uri 并带上 code 参数。你可以使用这个 code 获取用户的 OpenID。

app.get('/oauth', async (req, res) => {
    const { code } = req.query;
    try {
        const data = await getAccessToken(code);
        const openid = data.openid;
        console.log(`User OpenID: ${openid}`);
        // 在这里进行进一步处理,例如保存到数据库
        res.send('授权成功');
    } catch (error) {
        console.error(error);
        res.status(500).send('授权失败');
    }
});

3. 生成带参数的分享链接

在用户授权成功后,你可以生成一个包含 from_openid 参数的分享链接。

function generateShareLink(fromOpenid, shareInfoId) {
    const encodedFromOpenid = encodeURIComponent(fromOpenid);
    const shareUrl = `http://mobile.wangtu.com/weixin/page/menu/ChouJiang3.aspx?dlid=9584&shareinfoId=${shareInfoId}&from_openid=${encodedFromOpenid}`;
    const wxAuthUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(shareUrl)}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`;
    return wxAuthUrl;
}

// 示例调用
const fromOpenid = 'oDOPTs5JqUUHD6bn5txvXySpauGQ';
const shareInfoId = '12';
const shareLink = generateShareLink(fromOpenid, shareInfoId);
console.log(shareLink);

4. 分享逻辑

在前端页面中,你可以使用生成的 shareLink 进行分享。当用户点击分享链接时,微信会自动添加 from_openid 参数。

总结

通过上述步骤,你可以实现微信分享功能,并通过 from_openid 参数追踪分享者的身份。这种方式可以帮助你统计分享链接被打开的次数,从而实现类似“分享给朋友,10个朋友打开后有奖”的功能。

希望这些示例代码能帮助你解决你的问题!


自己顶

当你点分享按钮的时候应该是提交到你的服务器,在服务端可以获取分享者openid,再拼接上去

我的是前端的JS接口,参数是通过拼接生成的。

为了实现微信分享链接中添加分享者 openid 的功能,你需要在后端通过微信的 OAuth 授权流程获取到用户的 openid,然后在用户分享链接时,将该 openid 添加到分享链接中。

实现步骤

  1. 获取用户 openid: 用户需要通过 OAuth 授权流程获取 openid。授权完成后,微信会重定向到你指定的 redirect_uri 并附带 code 参数。

  2. 通过 code 获取 access_tokenopenid: 使用 code 向微信 API 请求 access_tokenopenid

  3. 生成分享链接并添加 openid 参数: 当用户分享链接时,将 openid 参数添加到分享链接中。

示例代码

假设你已经在后端实现了获取 openid 的逻辑,以下是如何在 Node.js 中生成带有 openid 的分享链接:

const express = require('express');
const app = express();

// 假设你已经有了一个函数来获取用户的 openid
function getUserOpenid(code) {
    // 这里应该调用微信接口获取 openid
    // 返回 openid
    return 'oDOPTs5JqUUHD6bn5txvXySpauGQ';
}

app.get('/share-link', (req, res) => {
    const shareinfoId = req.query.shareinfoId;
    const dlid = req.query.dlid;
    const code = req.query.code;

    if (!code) {
        res.status(400).send('缺少 code 参数');
        return;
    }

    const openid = getUserOpenid(code);

    const redirectUri = encodeURIComponent(`http://mobile.wangtu.com/weixin/page/menu/ChouJiang3.aspx?dlid=${dlid}&shareinfoId=${shareinfoId}&from_openid=${openid}`);

    const wechatAuthorizeUrl = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx0f4a9458ebbbc31e&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_base&state=1#wechat_redirect`;

    res.send(wechatAuthorizeUrl);
});

app.listen(3000, () => {
    console.log('Server is running on port 3000');
});

解释

  1. 获取 openid:在 /share-link 路由中,我们首先检查是否有 code 参数。如果有,则调用 getUserOpenid 函数获取 openid

  2. 生成分享链接:我们将 openid 参数添加到分享链接的 redirect_uri 中,并生成完整的微信授权 URL。

  3. 返回分享链接:将生成的分享链接返回给前端。

这样,当用户点击生成的分享链接时,系统会自动包含分享者的 openid 参数,从而可以在被分享人点击链接时进行统计。

回到顶部