YYPOST群发软件 发表于 6 天前

短信验证码中心AIWROK万能调用端

短信验证码中心AIWROK万能调用端
http://bbs.aiwork24.com/thread-588-1-1.html












/**
* 短信验证码中心 - AIWROK 万能调用端(单文件)
* ====================================================
* Import("sms_center.js"); 然后按需调函数即可
*
* 服务器:http://192.168.10.106:9527
*/

// ===================== 改这里 =====================
var SC = {
    服务器: "http://192.168.10.106:9527",
    本机手机号: "13800138000"
};
// ================================================

var http = new okHttp();

function sleepMs(ms) { try { java.lang.Thread.sleep(ms); } catch (e) {} }

// ====================================================
//第一部分:上传(手机 A 收到短信时调)
// ====================================================

function 上传短信(phone, content, sender) {
    if (!content) { printl("[上传] skip 空内容"); print.log("[上传] skip 空内容"); return false; }
    phone = phone || SC.本机手机号;
    var t = "[上传] -> " + phone + " content=" + content.substring(0, 40);
    printl(t); print.log(t);
    try {
      var url = SC.服务器 + "/api/sms/submit";
      var body = { phone: phone, content: content, sender: sender || "" };
      var r = http.json(url, body);
      var j = JSON.parse(r);
      if (j.ok) {
            var code = 提取验证码(content);
            var o = "[上传] ok code=" + code;
            printl(o); print.log(o);
            return true;
      }
      var f = "[上传] fail " + JSON.stringify(j);
      printl(f); print.log(f);
    } catch (e) {
      var er = "[上传] err " + String(e.message).substring(0, 50);
      printl(er); print.log(er);
    }
    return false;
}

function 提取验证码(content) {
    if (!content) return "";
    var m = content.match(/(\d{4,6})/);
    return m ? m : "";
}

// ====================================================
//第二部分:查询(手机 B 需要填验证码时调)
// ====================================================

function 查验证码(phone) {
    try {
      var r = http.get(SC.服务器 + "/api/sms/get?phone=" + encodeURIComponent(phone));
      var j = JSON.parse(r);
      if (j.ok && j.code) return j.code;
    } catch (e) {
      var er = "[查询] err " + String(e.message).substring(0, 50);
      printl(er); print.log(er);
    }
    return "";
}

function 等验证码(phone, 超时秒数, 间隔秒数) {
    超时秒数 = 超时秒数 || 60;
    间隔秒数 = 间隔秒数 || 3;
    var t = "[等待] " + phone + " timeout=" + 超时秒数 + "s interval=" + 间隔秒数 + "s";
    printl(t); print.log(t);
    var 已等 = 0;
    var 上次码 = "";
    while (已等 < 超时秒数) {
      var code = 查验证码(phone);
      if (code && code !== 上次码) {
            var g = "[等待] got " + code + " (waited " + 已等 + "s)";
            printl(g); print.log(g);
            return code;
      }
      上次码 = code;
      sleepMs(间隔秒数 * 1000);
      已等 += 间隔秒数;
    }
    var to = "[等待] timeout " + 超时秒数 + "s";
    printl(to); print.log(to);
    return "";
}

function 填验证码(code, confirmBtnText) {
    if (!code) return false;
    var t = "[填入] start " + code;
    printl(t); print.log(t);
    try {
      var node = auto.nodeSearch().textContains("验证码").type("EditText").findOne(3000);
      if (node) {
            node.clickPoint(); sleepMs(300);
            node.inputText(code);
      } else {
            auto.input(code);
      }
      printl("[填入] ok"); print.log("[填入] ok");
    } catch (e) {
      try { auto.input(code); } catch (e2) {
            var f = "[填入] fail " + String(e.message).substring(0, 40);
            printl(f); print.log(f);
            return false;
      }
    }
    sleepMs(800);
    if (confirmBtnText) {
      try { auto.clickText(confirmBtnText); printl("[填入] click " + confirmBtnText); print.log("[填入] click " + confirmBtnText); } catch (e) {}
    } else {
      try { auto.clickText("确定"); printl("[填入] click 确定"); print.log("[填入] click 确定"); } catch (e) {}
      try { auto.clickText("提交"); printl("[填入] click 提交"); print.log("[填入] click 提交"); } catch (e) {}
      try { auto.clickText("下一步"); printl("[填入] click 下一步"); print.log("[填入] click 下一步"); } catch (e) {}
    }
    return true;
}

// ====================================================
//一键组合:等码 -> 填码 -> 点确定
// ====================================================

function 等码并填入(phone, 超时秒数, confirmText) {
    var t = "[一键] start phone=" + phone;
    printl(t); print.log(t);
    var code = 等验证码(phone, 超时秒数 || 60);
    if (!code) { printl("[一键] fail 没拿到码"); print.log("[一键] fail 没拿到码"); return ""; }
    填验证码(code, confirmText);
    var d = "[一键] done code=" + code;
    printl(d); print.log(d);
    return code;
}


// ====================================================
//演示代码(直接运行)
// ====================================================
printl("========== 短信中心演示 ==========");
print.log("========== 短信中心演示 ==========");

// 演示 1:上传一条模拟短信
上传短信(SC.本机手机号, "【抖音】您的验证码是885231,5分钟内有效", "10690123");
sleepMs(500);

// 演示 2:只查一次
var c = 查验证码(SC.本机手机号);
printl("查询结果: " + c);
print.log("查询结果: " + c);
sleepMs(500);

// 演示 3:等验证码(最多等10秒,因为上面刚上传过,应该立刻拿到)
var code = 等验证码(SC.本机手机号, 10, 2);
if (code) {
    printl("等码成功: " + code);
    print.log("等码成功: " + code);
} else {
    printl("等码超时");
    print.log("等码超时");
}
sleepMs(500);

// 演示 4:一键等码+填入(填入自动匹配"确定/提交/下一步"按钮)
// var code2 = 等码并填入(SC.本机手机号, 10);
// sleepMs(500);

printl("========== 演示结束 ==========");
print.log("========== 演示结束 ==========");




页: [1]
查看完整版本: 短信验证码中心AIWROK万能调用端