1.vue使用步骤
先调用后端返回的接口,然后使用接口返回的数据去调用小红书的分享方法。
// 分享到小红书
const shareXhs = async() => {
const data = await getXhsSignature() //调用接口
xhs.share({
shareInfo: {
type: 'normal', // 或 'video'
title: '', // 分享标题
content: ``, // 分享内容
images: [`${baseUrl}/images/${props.image.image}.jpg`], // 图片地址(必须是服务器地址)
},
verifyConfig: {
appKey: data.appKey,
nonce: data.nonce,
timestamp: data.timestamp,
signature: data.signature,
},
fail: (e) => {
console.error('分享失败', e);
}
});
}
2.node生成签名步骤
获取token,生成小红书签名函数。token根据expires_in有效时间作了缓存。
const axios = require('axios');
const crypto = require("crypto-js");
const appKey = "xxxx";
const appSecret = "xxxx";
let cachedAccessToken = null;
let accessTokenExpiresAt = 0; // 记录 access_token 过期时间
// 生成小红书签名
function generateSignature(appKey, nonce, timeStamp, appSecret) {
console.log( nonce, timeStamp);
const params = {
appKey,
nonce,
timeStamp,
};
const sortedParams = Object.keys(params)
.sort()
.map((key) => `${key}=${params[key]}`)
.join("&");
const stringToSign = sortedParams + appSecret;
return crypto.SHA256(stringToSign).toString();
}
// 获取小红书access_token
const getAccessToken = async (nonce, timestamp) => {
if (cachedAccessToken && Date.now() < accessTokenExpiresAt) {
// 如果 access_token 未过期,则直接返回缓存的 token
return cachedAccessToken;
}
const signature = generateSignature(appKey, nonce, timestamp, appSecret);
try {
const response = await axios.post("https://edith.xiaohongshu.com/api/sns/v1/ext/access/token", {
app_key: appKey,
nonce: nonce,
timestamp: timestamp,
signature: signature,
}, {
headers: {
"Content-Type": "application/json",
},
});
const { access_token, expires_in } = response.data.data;
// 缓存 access_token 和计算过期时间
cachedAccessToken = access_token;
accessTokenExpiresAt = expires_in;
return cachedAccessToken;
} catch (error) {
console.error('请求失败:', error);
throw error; // 处理错误
}
};
使用
const nonce = Math.random().toString(36).substring(2);
const timestamp = Date.now();
const accessToken = await getAccessToken(nonce, timestamp);
const signature = generateSignature(appKey, nonce, timestamp, accessToken);
注意:每次调用需保证nonce,timestamp重新生成。
官方文档:小红书分享开放平台