- // ==UserScript==
- // @name 微蚁儿优惠
- // @namespace http://tampermonkey.net/
- // @version 20210508.01
- // @description 使用公众号【微蚁儿】返利赚佣金,你可以使用自己的Token也可以使用开发者的token帮助开发者获取佣金喝咖啡☕️
- // @author shellvon<iamshellvon@gmail.com>
- // @match https://item.jd.hk/*
- // @match https://item.jd.com/*
- // @match https://npcitem.jd.hk/*
- // @match https://detail.tmall.hk/*
- // @match https://detail.tmall.com/*
- // @match https://chaoshi.detail.tmall.com/*
- // @match https://item.taobao.com/*
- // @match https://detail.vip.com/*
- // @grant GM_xmlhttpRequest
- // @grant GM_getValue
- // @grant GM_setValue
- // @connect api.3nian.cn
- // @icon http://api.3nian.cn/logo.png
- // ==/UserScript==
-
- (function () {
- "use strict";
-
- /**
- * 默认的获取返利结果后回调函数.
- *
- * @param {EasyPromotion} easyPromotion
- * @param {Object} resp API接口返回的对象
- *
- * @returns
- */
- var defaultPromotionCallback = function (easyPromotion, resp) {
- var response = resp.response;
- var goods =
- response && response.data && response.data.list && response.data.list[0];
- var tip = "【微蚁儿】当前商品不支持返利";
- if (response.code != 200) {
- tip = `<span style="color:red;">【错误信息:${response.message}】</span>`;
- } else if (goods) {
- tip = `<a href='${
- goods.promotion_url
- }' style='color: #ed6a0c;'>【微蚁儿】预估返利${
- goods.commission.money
- }元,${
- goods.coupon.balance > 0 ? `${goods.coupon.name},` : ""
- }点击这里刷新页面再购买即可获得返利</a >`;
- }
- var container = document.querySelector("#simple-promotion-container");
- if (container) {
- return (container.firstChild.innerHTML = tip);
- }
- var containerHtmlTpl = `<div id='simple-promotion-container' style='background: #fffbe8;font-size: 14px;line-height: 50px;padding: 0 16px;margin: 10px 0;'>$$tpl<br/><span class='reset-btn' style='background-color: #000; color:white; padding:5px 10px; border-radius:1px; font-size:14px; cursor:pointer'>重置凭证</span></div>`;
- tip = containerHtmlTpl.replace("$$tpl", tip);
- easyPromotion.getContainer().insertAdjacentHTML("afterbegin", tip);
- document
- .querySelector("#simple-promotion-container > .reset-btn")
- .addEventListener("click", function () {
- if (confirm("你真的要重置Token么?")) {
- easyPromotion.askAndSaveToken();
- easyPromotion.fetchPromotion();
- }
- });
- };
-
- /**
- * 当前页面被监测到已经推广,则执行该回调。 如果当前回调返回true则继续后续流程,否则提前终止后续流程.
- *
- * @param {EasyPromotion} easyPromotion
- *
- * @returns boolean 是否需要继续进行后续
- */
- var defaultOnPromotedCallback = function (easyPromotion) {
- if (!easyPromotion.options || !easyPromotion.options.showPromoted) {
- return true;
- }
- easyPromotion
- .getContainer()
- .insertAdjacentHTML(
- "afterbegin",
- `<div style='background: #ecf9ff; color: #1989fa;font-size: 14px;line-height: 50px;padding: 0 16px;margin: 10px 0;'>当前商品直接购买即可获得返利</div>`
- );
- return false;
- };
-
- /**
- * 简易版分佣
- *
- * @param {string} uri 分佣站点
- * @param {Object} options 配置
- */
- function EasyPromotion(uri, options) {
- this.uri = uri || window.location.href;
- // 微蚁儿API接口地址
- this.api = "https://api.3nian.cn/openapi/promotion/transfer";
- var noop = function () {};
- var rules = [
- {
- name: "jd", // 平台名
- pattern: /item\.jd\.(com|hk)/, // 平台匹配模式
- container: ".itemInfo-wrap", // 平台放分佣信息的容器选择器,用于document.querySelector
- promoted: /(\?|&)utm_campaign=t_2010927340_(&|$)/, // 判断是否被【微蚁儿优惠】返利的正则
- },
- {
- name: "tb",
- pattern: /item\.taobao\.(com|hk)/,
- container: ".tb-title",
- promoted: /(\?|&)ak=28188063(&|$)/,
- },
- {
- name: "vip",
- pattern: /detail\.vip\.com/,
- container: ".pi-price-box",
- promoted: /!$/,
- },
- {
- name: "tmall",
- pattern: /detail\.tmall\.(com|hk)/,
- container: ".tb-detail-hd",
- promoted: /(\?|&)ak=28188063(&|$)/,
- },
- ];
- this.current = rules.filter((el) => el.pattern.test(this.uri))[0];
- this.options = Object.assign(
- {},
- {
- defaultToken: "D5QXrUTbtJqUZUFxqC", // 【微蚁儿】公众号内回复[TOKEN]返回的TOKEN,用于接口调用,这样返的佣金计入当前用户账下
- tokenKey: "shellvon:token",
- showPromoted: true,
- onFinish: noop,
- onPromoted: noop,
- },
- options
- );
- this.token = GM_getValue(this.options.tokenKey);
- }
-
- /**
- * 检测当前uri是否支持
- * @returns boolean
- */
- EasyPromotion.prototype.isSupported = function () {
- return !!this.current;
- };
-
- /**
- * 检测当前uri是否已经推广过了
- *
- * @returns
- */
- EasyPromotion.prototype.isPromoted = function () {
- return this.current && this.current.promoted.test(this.uri);
- };
-
- /**
- * 获取容器
- * @returns
- */
- EasyPromotion.prototype.getContainer = function () {
- var selector = this.current && this.current.container;
- return document.querySelector(selector || "body");
- };
-
- /**
- * 询问并保存token信息
- */
- EasyPromotion.prototype.askAndSaveToken = function () {
- this.token = prompt(
- "关注【微蚁儿】公众号回复“TOKEN”获取凭证,凭证决定佣金计入谁的账户中:",
- this.token || this.options.defaultToken
- );
- if (this.token) {
- GM_setValue(this.options.tokenKey, this.token);
- } else {
- this.askAndSaveToken();
- }
- };
-
- /**
- * 调用后台获取返利信息
- */
- EasyPromotion.prototype.fetchPromotion = function () {
- var self = this;
- GM_xmlhttpRequest({
- method: "POST",
- url: self.api,
- headers: {
- "Content-Type": "application/json",
- },
- responseType: "json",
- data: JSON.stringify({
- url: self.uri,
- token: self.token,
- }),
- onload: function (resp) {
- self.options.onFinish(self, resp);
- },
- });
- };
-
- /**
- * 执行真正的分佣流程
- *
- * @returns
- */
- EasyPromotion.prototype.doPromotion = function () {
- if (!this.isSupported()) {
- console.error(`[ERROR]: 当前站点:${uri}暂不支持,请联系开发者进行更新`);
- return false;
- }
- if (this.isPromoted() && !this.options.onPromoted(this)) {
- console.warn(
- `[WARN]: 当前站点:${uri}已推广且已终止后续流程,终止获取返利信息`
- );
-
- return true;
- }
-
- if (!this.token) this.askAndSaveToken();
-
- this.fetchPromotion();
- };
-
- var uri = window.location.href;
-
- var easyPromotion = new EasyPromotion(uri, {
- defaultToken: "D5QXrUTbtJqUZUFxqC", // 【微蚁儿】公众号内回复[TOKEN]返回的TOKEN,用于接口调用,这样返的佣金计入当当前用户账下
- onFinish: defaultPromotionCallback, // 通过API获取到分佣信息之后的回调
- onPromoted: defaultOnPromotedCallback, // 监测到当前URL已经被分佣之后的回调
- });
-
- easyPromotion.doPromotion();
- })();