# EasyClick 接入

# 接入须知

# 对接视频

easyclick对接视频 (opens new window)

# 获取方式

下载地址: 或者加群675107742在群文件下载SDK,有问题也可在此群交流。

# 使用方式

将下载到 QCYSDK.js放在你的工程目录下,也就是main.js同目录。

# 卡密登录例子

//此例子有界面,请加群675107742下载此例子源码
//读取界面卡密
var card = readConfigString("card");
console.log("卡密:"+card)


// AppKey 和 AppSecret 在7c云开发者后台获取
let qcysdk = new QCYSDK("", "");
qcysdk.debug = false; // 开发时建议开启debug,有详细输出
// 开启断线重连
let isLoginAgain = true //false 关闭断线重连
//设置卡密
qcysdk.SetCard(card);
// 存放token的文本
let tokenPath = "/sdcard/token.txt"
// 退出登录
var token = file.readFile(tokenPath);
if (token) {
    qcysdk.CardLogout(token)
}



function main() {
    //脚本停止触发
    setStopCallback(function (){
        qcysdk.CardLogout(token); // 调用退出登录
        logd("结束运行");
    });
    //脚本异常触发
    setExceptionCallback(function (msg) {
        qcysdk.CardLogout(token); // 调用退出登录
        logd(" 异常停止消息: " + msg);
    });
    //监听心跳失败
    qcysdk.onHeartbeatFailed(function (hret) {
        sleep(2000);
        let login_ret = ""
        if(!isLoginAgain){
            console.log(hret.message)
            toast(hret.message);
            sleep(2000);
            exit()
        }
        if (isLoginAgain && hret.message === "登录状态已失效") {
            for (let i = 0; i < 3; i++) {
                login_ret = qcysdk.reCardLogin();
                if (login_ret.code === 0) {
                    token = login_ret.result.token
                    file.writeFile(token, tokenPath);
                    logd("重登成功");
                    return
                } else {
                    logd(login_ret.message);  // 重登失败
                }
                sleep(1000 * 60);
            }
            console.log(login_ret.message)
            toast(login_ret.message);
            exit()
        }else{
            exit()
        }
    });
    //如果自动化服务正常
    if (!autoServiceStart(3)) {
        logd("自动化服务启动失败,无法执行脚本")
        exit();
        return;
    }
    //**********************************下面开始你的**************************************************************

}



function autoServiceStart(time) {
    for (var i = 0; i < time; i++) {
        if (isServiceOk()) {
            return true;
        }
        var started = startEnv();
        logd("第" + (i + 1) + "次启动服务结果: " + started);
        if (isServiceOk()) {
            return true;
        }
    }
    return isServiceOk();
}

// 卡密登录
//登录成功后将自动启动一个线程发送心跳包,开发者只需监听心跳失败事件做处理就行了
let login_ret = qcysdk.CardLogin();
console.log("login_ret:",JSON.stringify(login_ret))
if (login_ret.code === 0) {
    token = login_ret.result.token
    file.writeFile(token, tokenPath);
    toast("到期时间:" + login_ret.result.expires);
    // 登录成功,调用main函数
    main();
} else {
    toast(login_ret.message);  // 登录失败的提示信息
    exit();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105

# 可更改变量

  • qcysdk.debug : bool型,默认为true,开启后会在控制台输出每次请求的详细信息,方便调试
  • qcysdk._device_id : string型,设备号默认会自动获取,不建议修改。如果你有更好的一机一码的生成方案,可在初始化后修改该值

# 用户登录例子

//此例子有界面,请加群675107742下载此例子源码
var username = readConfigString("username");
console.log("用户名:"+username)
var password = readConfigString("password");
console.log("密码:"+password)

// AppKey 和 AppSecret 在七C云开发者后台获取
let qcysdk = new QCYSDK("", "");
qcysdk.debug = false; // 开发时建议开启debug,有详细输出
// 开启断线重连
let isLoginAgain = true //false 关闭断线重连

qcysdk.SetUser(username, password);
// 存放token的文本
let tokenPath = "/sdcard/token.txt"
// 退出登录
var token = file.readFile(tokenPath);
if (token) {
    qcysdk.UserLogout(token)
}



function main() {
    //脚本停止触发
    setStopCallback(function (){
        qcysdk.UserLogout(token); // 调用退出登录
        console.log("结束运行");
    });
    //脚本异常触发
    setExceptionCallback(function (msg) {
        qcysdk.UserLogout(token); // 调用退出登录
        console.log(" 异常停止消息: " + msg);
    });
    //监听心跳失败
    qcysdk.onHeartbeatFailed(function (hret) {
        sleep(2000);
        let login_ret = ""
        if(!isLoginAgain){
            console.log(hret.message)
            toast(hret.message);
            sleep(2000);
            exit()
        }
        if (isLoginAgain && hret.message === "登录状态已失效") {
            for (let i = 0; i < 3; i++) {
                login_ret = qcysdk.reUserLogin();
                if (login_ret.code === 0) {
                    token = login_ret.result.token
                    file.writeFile(token, tokenPath);
                    logd("重登成功");
                    return
                } else {
                    logd(login_ret.message);  // 重登失败
                }
                sleep(1000 * 60);
            }
            console.log(login_ret.message)
            toast(login_ret.message);
            exit()
        }else {
            exit()
        }
    });
    //如果自动化服务正常
    if (!autoServiceStart(3)) {
        console.log("自动化服务启动失败,无法执行脚本")
        exit();
        return;
    }
    //**********************************下面开始你的代码**************************************************************


}




function autoServiceStart(time) {
    for (var i = 0; i < time; i++) {
        if (isServiceOk()) {
            return true;
        }
        var started = startEnv();
        console.log("第" + (i + 1) + "次启动服务结果: " + started);
        if (isServiceOk()) {
            return true;
        }
    }
    return isServiceOk();
}

// 卡密登录
//登录成功后将自动启动一个线程发送心跳包,开发者只需监听心跳失败事件做处理就行了
let login_ret = qcysdk.UserLogin();
console.log("login_ret:",JSON.stringify(login_ret))
if (login_ret.code === 0) {
    token = login_ret.result.token
    file.writeFile(token, tokenPath);
    toast("到期时间:" + login_ret.result.expires);
    // 登录成功,调用main函数
    main();
} else {
    toast(login_ret.message);  // 登录失败的提示信息
    exit();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107

# 试用登录例子

//此例子有界面,请加群675107742下载此例子源码
// AppKey 和 AppSecret 在七C云开发者后台获取
let qcysdk = new QCYSDK("", "");
qcysdk.debug = false; // 开发时建议开启debug,有详细输出
// 开启断线重连
let isLoginAgain = true //false 关闭断线重连




function main() {
    //脚本停止触发
    setStopCallback(function (){
        qcysdk.TrialLogout(); // 调用退出登录
        logd("结束运行");
    });
    //脚本异常触发
    setExceptionCallback(function (msg) {
        qcysdk.TrialLogout(); // 调用退出登录
        logd(" 异常停止消息: " + msg);
    });
    //监听心跳失败
    qcysdk.onHeartbeatFailed(function (hret) {
        sleep(2000);
        console.log("心跳失败,重新登录")
        if (isLoginAgain) {
            let login_ret = qcysdk.TrialLogin();
            if (login_ret.code === 0) {
                console.log("重登成功");
            } else {
                console.log(login_ret.message);  // 重登失败
                sleep(200);
                exit();  // 退出脚本
            }
        }else {
            exit()
        }
    });
    //如果自动化服务正常
    if (!autoServiceStart(3)) {
        logd("自动化服务启动失败,无法执行脚本")
        exit();
        return;
    }
    //**********************************下面开始你的代码**************************************************************

    
}




function autoServiceStart(time) {
    for (var i = 0; i < time; i++) {
        if (isServiceOk()) {
            return true;
        }
        var started = startEnv();
        logd("第" + (i + 1) + "次启动服务结果: " + started);
        if (isServiceOk()) {
            return true;
        }
    }
    return isServiceOk();
}

// 试用登录
let login_ret = qcysdk.TrialLogin();
console.log("login_ret:",JSON.stringify(login_ret))
if (login_ret.code === 0) {
    toast("到期时间:" + login_ret.result.expires);
    // 登录成功,调用main函数
    main();
} else {
    toast(login_ret.message);  // 登录失败的提示信息
    exit();
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78

# 初始化

# 初始化卡密

# 语法

qcysdk.SetCard(card)
1

# 参数

参数名 必传 类型 参数说明
card string 用户填写的卡密(长度不超过45位)

# 初始化用户账号

# 语法

qcysdk.SetUser(username, password)
1

# 参数

参数名 必传 类型 参数说明
username string 用户名(长度不能超过20位)
password string 用户密码(长度6-30位)

# 获取时间戳(网络时间)

# 语法

let ret = qcysdk.getTimestamp()
1

# 参数

# 返回值

数字类型,列如: 1624110613

# 获取心跳结果

# 语法

let ret = qcysdk.GetHeartbeatResult()
1

# 参数

# 返回值

Object类型,例:{"code": 0, "message": "ok"}

# 获取剩余时长

# 语法

let ret = qcysdk.GetTimeRemaining()
1

# 参数

# 返回值

数字类型,剩余多少秒,例:1024

# 卡密登录

注意

调用此接口前需调用 qcysdk.SetCard(card) 初始化卡密 登录成功后将自动启动一个线程发送心跳包,开发者就无需关注发送心跳包的细节。 开发者只需在自己的脚本中通过调用 qcysdk.GetHeartbeatResult() 获取当前心跳结果。

# 语法

let ret = qcysdk.CardLogin()
1

# 参数

# 返回值

Object类型,例:{ result: { cardType: '月卡', token: '8wr17hGcTs5lVVJ0liL97d6McNEaDTKk', expires: '2021-09-17 01:49:38', expires_ts: '1631814578', config: '', server_time: 1624110506 }, message: 'ok', code: 0 }

# 卡密退出登录

# 语法

let ret = qcysdk.CardLogout(token)
1

# 参数

参数名 必传 类型 参数说明
token string 卡密登录成功获取的登录凭证

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 卡密解绑设备

注意

请先进入开发者后台软件管理页面,配置软件开启设备绑定且可解除绑定。

# 语法

let ret = qcysdk.CardUnbindDevice()
1

# 参数

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 卡密绑定设备上解绑

注意

请先进入开发者后台软件管理页面,配置软件开启设备绑定且可解除绑定。

# 语法

let ret = qcysdk.CardUnbindDeviceBybindDevice()
1

# 参数

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 卡密设置解绑密码

说明

请先进入开发者后台软件管理页面,配置软件开启设备绑定且可解除绑定。 该密码用于绑定设备丢失或者其它原因导致无法在老设备登录时解绑设备。

# 语法

let ret = qcysdk.SetCardUnbindPassword(password)
1

# 参数

参数名 必传 类型 参数说明
password string 解绑密码(6-10位数字和字母组合的字符串)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 卡密通过密码解绑设备

说明

请先进入开发者后台软件管理页面,配置软件开启设备绑定且可解除绑定。 该接口用于绑定设备丢失或者其它原因导致无法在老设备登录时,通过解绑密码解绑设备。

# 语法

let ret = qcysdk.CardUnbindDeviceByPassword(password)
1
参数名 必传 类型 参数说明
password string 解绑密码(6-10位数字和字母组合的字符串)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 卡密充值(以卡充卡)

# 语法

let ret = qcysdk.CardRecharge(card, useCard)
1

# 参数

参数名 必传 类型 参数说明
card string 被充值的卡密(长度不超过45位)
useCard string 充值使用的卡密(长度不超过45位)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 用户注册(通过卡密)

# 语法

let ret = qcysdk.UserRegister(username, password, card)
1

# 参数

参数名 必传 类型 参数说明
username string 用户名(长度不能超过20位)
password string 用户密码(长度6-30位)
card string 注册使用的卡密(长度不超过45位)

# 返回值

Object类型,例:{"code": 0, "message": "ok"}

# 用户登录

注意

调用此接口前需调用 qcysdk.SetUser(username, password) 初始化用户账号密码 登录成功后将自动启动一个线程发送心跳包,开发者就无需关注发送心跳包的细节。 开发者只需在自己的脚本中通过调用 qcysdk.GetHeartbeatResult() 获取当前心跳结果。

# 语法

qcysdk.SetUser(username, password)
let ret = qcysdk.UserLogin()
1
2

# 参数

# 返回值

Object类型

# 用户退出登录

# 语法

let ret = qcysdk.UserLogout(token)
1

# 参数

参数名 必传 类型 参数说明
token string 卡密登录成功获取的登录凭证

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 用户修改密码

# 语法

let ret = qcysdk.UserChangePassword(username, password, newPassword)
1

# 参数

参数名 必传 类型 参数说明
username string 用户名(长度不能超过20位)
password string 用户密码(长度6-30位)
newPassword string 新密码(长度6-30位)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 用户充值(通过卡密)

# 语法

let ret = qcysdk.UserRecharge(username, card)
1

# 参数

参数名 必传 类型 参数说明
username string 用户名(长度不能超过20位)
card string 充值使用的卡密(长度不超过45位)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 用户解绑设备

# 语法

let ret = qcysdk.UserUnbindDevice()
1

# 参数

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 试用登录

注意

登录成功后将自动启动一个线程发送心跳包,开发者就无需关注发送心跳包的细节。 只需在自己的脚本中通过调用 qcysdk.GetHeartbeatResult() 获取当前心跳结果。

# 语法

let ret = qcysdk.TrialLogin()
1

# 参数

# 返回值

Object类型

# 试用退出登录

# 语法

let ret = qcysdk.TrialLogout()
1

# 参数

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 获取卡密配置

# 语法

let ret = qcysdk.GetCardConfig()
1

# 参数

# 返回值

Object类型,例:{ result: { config: '', server_time: 1624120946 }, message: 'ok', code: 0 }

# 更改卡密配置

# 语法

let ret = qcysdk.UpdateCardConfig(config)
1

# 参数

参数名 必传 类型 参数说明
config string 自定义配置(长度不能超过512位)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 获取用户配置

# 语法

let ret = qcysdk.GetUserConfig()
1

# 参数

# 返回值

Object类型,例:{ result: { config: '迪迦', server_time: 1624121563 }, message: 'ok', code: 0 }

# 更改用户配置

# 语法

let ret = qcysdk.UpdateUserConfig(config)
1

# 参数

参数名 必传 类型 参数说明
config string 自定义配置(长度不能超过512位)

# 返回值

Object类型,例:{"code": 0, "message": "OK"}

# 获取软件配置

# 语法

let ret = qcysdk.GetSoftwareConfig()
1

# 参数

# 返回值

Object类型,例:{ result: { config: '迪迦', server_time: 1624121758 }, message: 'ok', code: 0 }

# 获取软件公告

# 语法

let ret = qcysdk.GetSoftwareNotice()
1

# 参数

# 返回值

Object类型,例:{ result: { server_time: 1624121862, notice: '泰罗' }, message: 'ok', code: 0 }

# 获取远程变量

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.GetRemoteVar(key)
1

# 参数

参数名 必传 类型 参数说明
key string 远程变量名(长度不能超过64位)

# 返回值

Object类型,例:{ result: { server_time: 1624122124, varValue: '斯奥特曼' }, message: 'ok', code: 0 }

# 获取远程数据

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.GetRemoteData(key)
1

# 参数

参数名 必传 类型 参数说明
key string 远程数据key(长度不能超过64位)

# 返回值

Object类型,例:{ result: { server_time: 1624122295, value: '奥特曼' }, message: 'ok', code: 0 }

# 操作远程数据

# 新增远程数据

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.CreateRemoteData(key, value)
1

# 参数

参数名 必传 类型 参数说明
key string 远程数据key(长度不能超过64位)
value string 远程数据值(长度不能超过256位)

# 返回值

Object类型,例:{ result: { server_time: 1624122453 }, message: 'ok', code: 0 }

# 修改远程数据

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.UpdateRemoteData(key, value)
1

# 参数

参数名 必传 类型 参数说明
key string 远程数据key(长度不能超过64位)
value string 远程数据值(长度不能超过256位)

# 返回值

Object类型,例:{ result: { server_time: 1624122453 }, message: 'ok', code: 0 }

# 删除远程数据

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.DeleteRemoteData(key)
1

# 参数

参数名 必传 类型 参数说明
key string 远程数据key(长度不能超过64位)

# 返回值

Object类型,例:{ result: { server_time: 1624122453 }, message: 'ok', code: 0 }

# 云函数

注意

调用此接口前 需要登录成功后才能调用。

# 语法

let ret = qcysdk.CallRemoteFn(fnName, params);
1

# 参数

参数名 必传 类型 参数说明
fnName string 云函数名(长度不能超过64位)
params string 调用云函数时传入的参数

# 返回值

Object类型,例:{"result":{"return":"55","server_time":1689788200},"message":"ok","sign":"236cd75d551fb991ac88684761778a17","nonce":"vwWSKfwOgbLocFzg15OX","code":0}

例子:

let ret = qcysdk.CallRemoteFn("add", "21, 34");
if (ret.code == 0){
  console.log("云函数调用结果:", ret.result.return)
}else{
  console.log("云函数调用失败:", ret.message)
}
1
2
3
4
5
6