111 lines
4.4 KiB
JavaScript
Raw Normal View History

2025-06-06 03:08:19 +08:00
// 获取微信公众号SDK权限
//接口请求方法
import $http from '@/config/requestConfig';
import base from '@/config/baseUrl';
import { publicShare } from '@/config/utils';
//获取地理位置
export const getLocation = () => {
return new Promise((resolve, reject) => {
//配置校验成功后执行
jWeixin.ready(function () {
// config信息验证后会执行ready方法所有接口调用都必须在config接口获得结果之后config是一个客户端的异步操作所以如果需要在页面加载时就调用相关接口则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口则可以直接调用不需要放在ready函数中。
jWeixin.getLocation({
type: 'gcj02', // 默认为wgs84的gps坐标如果要返回直接给openLocation用的火星坐标可传入'gcj02'
success: function (res) {
console.log(res);
resolve(res);
},
fail: (err) => {
reject(err);
}
});
});
});
}
//设置分享信息
export const setShare = (data, callback) => {
//配置校验成功后执行
jWeixin.ready(function () {
if (!data.link) {
let url = window.location.href;
let index = url.indexOf("?");
if (index != -1) {
if (url.indexOf("#") != -1 && url.indexOf("#") > index) {
url = url.substring(0, index) + url.substring(url.indexOf("#"));
} else {
url = url.substr(0, index);
}
}
data.link = url;
}
// config信息验证后会执行ready方法所有接口调用都必须在config接口获得结果之后config是一个客户端的异步操作所以如果需要在页面加载时就调用相关接口则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口则可以直接调用不需要放在ready函数中。
jWeixin.updateAppMessageShareData({
title: data.title, // 分享标题
desc: data.desc, // 分享描述
link: data.link, // 分享链接该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: data.imgUrl, // 分享图标
success: function () {
// 设置成功
callback && callback();
}
});
jWeixin.updateTimelineShareData({
title: data.title, // 分享标题
link: data.link, // 分享链接该链接域名或路径必须与当前页面对应的公众号JS安全域名一致
imgUrl: data.imgUrl, // 分享图标
success: function () {
// 设置成功
callback && callback();
}
});
});
}
//微信扫一扫
export const scanQRCode = ( callback,needResult = 0) => {
//配置校验成功后执行
jWeixin.ready(function () {
jWeixin.scanQRCode({
needResult: needResult, // 默认为0扫描结果由微信处理1则直接返回扫描结果
scanType: ["qrCode","barCode"], // 可以指定扫二维码还是一维码,默认二者都有
success: function (res) {
callback && callback(res);
}
});
});
}
window.onload = function () {
// 配置文件里面没有publicAppId将不激活微信SDK功能
if (!base.publicAppId) {
return;
}
//获取当前页面地址
let url = window.location.href;
url = url.substring(0, url.indexOf("#"));
//获取微信公众号SDK权限的签名、随机数、时间戳
$http.post("api/open/signature", {
url: url
}).then(res => {
// 微信SDK配置
jWeixin.config({
debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来若要查看传入的参数可以在pc端打开参数信息会通过log打出仅在pc端时才会打印。
appId: base.publicAppId, // 必填,公众号的唯一标识
timestamp: res.timestamp, // 必填,生成签名的时间戳
nonceStr: res.noncestr, // 必填,生成签名的随机串
signature: res.signature,// 必填,签名
jsApiList: [
"getLocation",
"updateAppMessageShareData",
"updateTimelineShareData",
'onMenuShareAppMessage', //旧的接口,即将废弃
'onMenuShareTimeline' //旧的接口,即将废弃
] // 必填需要使用的JS接口列表
});
//设置分享内容
publicShare();
});
//配置校验失败后执行
jWeixin.error(function (res) {
// config信息验证失败会执行error函数如签名过期导致验证失败具体错误信息可以打开config的debug模式查看也可以在返回的res参数中查看对于SPA可以在这里更新签名。
console.log(res);
});
};