引流宝github开源地址:https://github.com/likeyun/liKeYun_Ylb
以下是引流宝官方介绍:
私域引流宝致力于为个人、团队提供基于微信私域流量的推广、引流的效率工具。可减轻人力,有效降低资源损失、流量流失的几率。引流宝完全开源,免费,可商用、可任意二次开发。引流宝可以辅助你更好地开展营销活动推广!降低运营成本,提高工作效率,获取更多资源。
这款私域推广系统还是很好用的,但是对于使用者来说,有时候我们的微信群,或者QQ群希望加入付费进群功能,支付一定的金额后,才允许进入,官方未开放付费进群功能
所以需要第三方接入的话,可以使用此工具:https://ylb-pay.netsite.cc
引流宝第三方插件js源码
由于源码文件太长,放在文章末尾
将源码内容保存到 qunpay.js
文件,然后将 qunpay.js 文件,复制到 引流宝根目录/static/js/
目录下
然后修改一行 引流宝的 文件,假设我的引流宝安装根目录是 /media/projects/wx_ylb
,则修改 这个目录下的:common/qun/index.php
如图:
在其中插入一行(必须插入,否则不生效):
<script type="text/javascript" src="../../static/js/qunpay.js"></script>
使用宝塔面板安装的 引流宝系统,可以使用 宝塔面板 的文件编辑功能,在其中插入这一行
前面我们保存了 qunpay.js
文件并放入了指定的目录中, 修改增加这一行的目的是为了开启该插件
使用方式
首先打开工具:https://ylb-pay.netsite.cc ,在里面申请支付信息
点击 申请支付信息 后,注册平台账号,然后配置支付挂机
在平台的 系统设置中 ,有一个 pid
和 密钥(key)
将这两个参数保存好,然后 上传自己的微信赞赏码 并点击保存
平台可以上传多种收款方式,例如:支付宝收款码、微信收款码、微信赞赏码,但是这里只推荐 微信赞赏码,因为其他收款码均无法在微信内部长按识别支付,只有 赞赏码可以
将刚才获取的 pid
和 密钥key
填入到此处并点击获取 Token
将 token 配置到下方的 js
文件中
更换 qunpay.js
中的 TOKEN
参数
为每个群活码设置不同的支付金额
如果使用宝塔安装的引流宝系统,只要用文件编辑,修改 qunpay.js
文件中的 QID_PRICE
字段中的 群活码 和 对应的金额即可
js 源码
将下面的内容复制,并保存到 qunpay.js 文件中,然后将 qunpay.js 文件,复制到 引流宝根目录/static/js/
目录下,如下图:
qunpay.js
原始文件:
// 请填写生成的支付 Token ,生成网址:https://ylb-pay.netsite.cc/
// 支付二维码生成逻辑:同一个时间段,如果金额一致,下一个用户会 + 0.01 ,也就是一分钱
// 同一个用户访问这个活码,只会生成一个订单,不会重复生成
// 用户支付后,这个订单服务器保留31天,用户31天内访问同一个活码,不会要求再次支付
TOKEN='1gteufptemfj7bzg';
// 群id 对应的进群金额
// 左边是 群活码 ID,右边是支付金额
// 例如下方示例,群活码ID 为 123456,需要支付 一元进群
QID_PRICE = {
123456: "1",
662344: "0.01",
};
//##############################################################
// 下面的逻辑代码尽量不要修改
//##############################################################
function randomString(length) {
var str = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
var result = "";
for (var i = length; i > 0; --i)
result += str[Math.floor(Math.random() * str.length)];
return result;
}
function generaId() {
let id = localStorage.getItem("user_id");
if (!id || id == "") {
id = randomString(8);
localStorage.setItem("user_id", id);
}
}
function getQueryVariable(variable) {
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i = 0; i < vars.length; i++) {
var pair = vars[i].split("=");
if (pair[0] == variable) {
return pair[1];
}
}
return false;
}
document.addEventListener("DOMContentLoaded", () => {
console.log("页面加载完成");
generaId();
// 唯一的用户 ID
let userOrderId =
localStorage.getItem("user_id") + "_" + getQueryVariable("qid");
let price = QID_PRICE[getQueryVariable("qid")];
if (!price || price <= 0) {
console.log("无需支付进群");
return;
}
let tips = document.getElementById("scanTips");
let zm_qrcode = document.getElementById("zm_qrcode");
// 使用其他文案替换掉内容,支付后再显示
let curTips = tips.innerHTML;
let curFontSize = tips.style["font-size"];
let curQrcode = zm_qrcode.getElementsByTagName("img")[0].src;
console.log(curTips, curQrcode);
tips.innerHTML = "正在初始化,请稍后";
zm_qrcode.getElementsByTagName("img")[0].src = "";
zm_qrcode.getElementsByTagName("img")[0].src =
"https://pay.netsite.cc/enQrcode?url=" + encodeURIComponent("正在初始化");
var intervalId;
function checkState() {
fetch(
"https://ylb-pay.netsite.cc/createOrder?id=" +
encodeURIComponent(userOrderId) +
"&price=" +
price +
"&type=1" +
"&realqr=1" +
"&token=" + TOKEN,
{
method: "GET",
}
)
.then((response) => response.json())
.then((data) => {
console.log(data);
if (data.showOrder) {
if (!data.showQrcode) {
// 创建订单失败
throw new Error("get order faild");
}
console.log("需要显示order");
let price = data["price"] || price;
tips.innerHTML = "请微信扫码支付: ¥" + price + " 后进群";
tips.style.color = "red";
tips.style["font-size"] = "22px";
if(data.showQrcode.startsWith('data')){
zm_qrcode.getElementsByTagName("img")[0].src = data.showQrcode;
} else {
zm_qrcode.getElementsByTagName("img")[0].src =
"https://pay.netsite.cc/enQrcode?url=" + encodeURIComponent(data.showQrcode);
}
} else {
// 将内容和二维码还原
tips.innerHTML = curTips;
tips.style.color = "";
tips.style["font-size"] = curFontSize;
zm_qrcode.getElementsByTagName("img")[0].src = curQrcode;
clearInterval(intervalId);
}
})
.catch((e) => {
console.log("error: ", e);
tips.innerHTML = "初始化失败,请刷新页面重试";
});
}
// 定时轮询检测
checkState();
intervalId = setInterval(checkState, 2000);
});