# Go 快速接入

泡椒云网络验证官方提供的 Go SDK,方便 Go 开发者接入。

# 接入须知

# 获取方式

  • 直接使用 go get 获取:
go get -u github.com/paojiaoyun/sdk-go
1

# 使用示例

package main

import (
	"fmt"
	"os"
	"time"

	pjy "github.com/paojiaoyun/sdk-go"
)

func main() {
	// 初始化sdk, appKey 和 appSecret 在泡椒云开发者后台获取
	pjysdk := pjy.NewPJYSDK("AppKey", "AppSecret")
	pjysdk.SetDebug(true)

	// 心跳失败回调 
	pjysdk.OnHeartbeatFail(func(r *pjy.Resp[pjy.HeartbeatResult]) {
		fmt.Println(r.Message)
		if r.Code == 10214 {
			os.Exit(1)
		}
		fmt.Println("心跳失败,尝试重登...")
		loginRet, err := pjysdk.CardLogin()
		if err != nil {
			fmt.Println("重登失败:", err)
			os.Exit(1)
		}
		if loginRet.Code != 0 {
			fmt.Println(loginRet.Message)
			os.Exit(1)
		}
		fmt.Println("重登成功")
	})

	pjysdk.SetDeviceID("123") // 设置设备唯一ID
	pjysdk.SetCard("Card")    // 设置卡密

	// 卡密登录
	loginRet, err := pjysdk.CardLogin()
	if err != nil {
		fmt.Println("登录请求异常:", err)
		os.Exit(1)
	}
	if loginRet.Code != 0 {
		fmt.Println(loginRet.Message)
		os.Exit(1)
	}

	// 登录成功后测试用,hold住主线程不要退出,记得删除,后面应该是你的逻辑代码了
	for {
		remaining := pjysdk.GetTimeRemaining()
		fmt.Println("剩余时间(秒):", remaining)
		time.Sleep(5 * time.Second)
	}
}
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

# 可更改变量

  • pjysdk.SetDebug(debug bool) : 默认为 true,开启后会在控制台输出每次请求的详细信息
  • pjysdk.SetDeviceID(deviceID string) : 需自行获取设备码并设置,且不能为空
  • pjysdk.SetAutoHeartbeat(enable bool) : 是否自动开启心跳,默认 true,不建议修改
  • pjysdk.SetRetryCount(cnt int) : 请求失败重试次数,默认为9次,调大重试次数有助于提升稳定性

# 可获取变量

以下变量在登录成功后才有有效值,可通过 pjysdk.GetLoginResult() 获取:

  • pjysdk.GetLoginResult().CardType : 卡密类型,如 "年卡"
  • pjysdk.GetLoginResult().Expires : 过期时间字符串,如 "2020-10-16 00:47:58"
  • pjysdk.GetLoginResult().ExpiresTS : 过期时间戳(秒)
  • pjysdk.GetLoginResult().Config : 卡密或用户的自定义配置
  • pjysdk.GetIsTrial() : 是否为试用登录

# 初始化

# 初始化 SDK

pjysdk := pjy.NewPJYSDK(appKey, appSecret string)
1
参数 必传 类型 说明
appKey string 软件的 app_key,开发者后台获取
appSecret string 软件的 app_secret,开发者后台获取

# 设置设备唯一 ID

pjysdk.SetDeviceID(deviceID string) // 不能为空
1
参数 必传 类型 说明
deviceID string 用户设备唯一标识(长度不超过45位)

# 设置卡密

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

# 设置用户账号

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

# 获取心跳结果

ret := pjysdk.GetHeartbeatResult() // *pjy.Resp[pjy.HeartbeatResult]
1

ret.Code == 0 表示心跳正常,否则 ret.Message 包含错误信息。

# 获取剩余时长

remaining := pjysdk.GetTimeRemaining() // int
1

返回剩余有效秒数。

# 卡密登录

调用前需先调用 SetCardSetDeviceID
登录成功后会自动启动心跳协程,无需手动管理心跳,可通过 GetHeartbeatResult() 获取心跳状态。

ret, err := pjysdk.CardLogin() // (*pjy.Resp[pjy.CardLoginResult], error)
1

返回值

  • *pjy.Resp[pjy.CardLoginResult]
    ret.Code == 0 表示成功,此时 Result 字段包含详细信息(CardTypeExpires 等);否则 ret.Message 为错误信息。
  • error:仅在网络异常或签名校验失败时非空。

示例

ret, err := pjysdk.CardLogin()
if err != nil {
    // 网络或系统错误
    log.Fatal(err)
}
if ret.Code != 0 {
    log.Fatal(ret.Message)
}
fmt.Println("登录成功,卡密类型:", ret.Data.CardType)
1
2
3
4
5
6
7
8
9

# 卡密退出登录

ret, err := pjysdk.CardLogout() // (*pjy.Resp[struct{}], error)
1

退出登录会停止心跳协程。

# 卡密解绑设备

需在开发者后台配置软件允许解绑,且需在卡密登录后调用。

ret, err := pjysdk.CardUnbindDevice() // (*pjy.Resp[struct{}], error)
1

# 卡密设置解绑密码

需在开发者后台配置软件允许解绑。该密码用于设备丢失等情况解绑。

ret, err := pjysdk.SetCardUnbindPassword(password string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
password string 解绑密码,6-10位

# 卡密通过密码解绑设备

ret, err := pjysdk.CardUnbindDeviceByPassword(password string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
password string 解绑密码,6-10位

# 卡密充值(以卡充卡)

ret, err := pjysdk.CardRecharge(card, useCard string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
card string 被充值的卡密
useCard string 用于充值的卡密

# 用户注册(通过卡密)

ret, err := pjysdk.UserRegister(username, password, card string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
username string 用户名(不超过20位)
password string 密码(6-30位)
card string 注册使用的卡密

# 用户登录

调用前需先调用 SetUserSetDeviceID。登录成功自动心跳。

ret, err := pjysdk.UserLogin() // (*pjy.Resp[pjy.UserLoginResult], error)
1

# 用户退出登录

ret, err := pjysdk.UserLogout() // (*pjy.Resp[struct{}], error)
1

# 用户修改密码

ret, err := pjysdk.UserChangePassword(username, password, newPassword string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
username string 用户名
password string 当前密码
newPassword string 新密码(6-30位)

# 用户充值(通过卡密)

ret, err := pjysdk.UserRecharge(username, card string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
username string 用户名
card string 充值卡密

# 用户解绑设备

需在用户登录后调用。

ret, err := pjysdk.UserUnbindDevice() // (*pjy.Resp[struct{}], error)
1

# 试用登录

ret, err := pjysdk.TrialLogin() // (*pjy.Resp[pjy.TrialLoginResult], error)
1

登录成功自动心跳。

# 试用退出登录

ret, err := pjysdk.TrialLogout() // (*pjy.Resp[struct{}], error)
1

仅清除本地状态,无网络请求。

# 获取卡密配置

ret, err := pjysdk.GetCardConfig() // (*pjy.Resp[pjy.CardConfigResult], error)
1

成功时 ret.Result.Config 为配置内容。

# 更改卡密配置

ret, err := pjysdk.UpdateCardConfig(config string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
config string 自定义配置(不超过512位)

# 获取用户配置

ret, err := pjysdk.GetUserConfig() // (*pjy.Resp[pjy.UserConfigResult], error)
1

# 更改用户配置

ret, err := pjysdk.UpdateUserConfig(config string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
config string 自定义配置(不超过512位)

# 获取软件配置

ret, err := pjysdk.GetSoftwareConfig() // (*pjy.Resp[pjy.SoftwareConfigResult], error)
1

# 获取软件公告

ret, err := pjysdk.GetSoftwareNotice() // (*pjy.Resp[pjy.SoftwareNoticeResult], error)
1

# 获取软件最新版本

ret, err := pjysdk.GetSoftwareLatestVersion(currentVer string) // (*pjy.Resp[pjy.SoftwareVersionResult], error)
1
参数 必传 类型 说明
currentVer string 当前本地版本(不超过30位)

成功时 ret.Result 包含 VersionUrlNotice

# 获取远程变量

ret, err := pjysdk.GetRemoteVar(key string) // (*pjy.Resp[pjy.RemoteVarResult], error)
1
参数 必传 类型 说明
key string 远程变量名(不超过64位)

# 获取远程数据

ret, err := pjysdk.GetRemoteData(key string) // (*pjy.Resp[pjy.RemoteDataResult], error)
1
参数 必传 类型 说明
key string 数据 key(不超过64位)

# 操作远程数据

# 新增远程数据

ret, err := pjysdk.CreateRemoteData(key, value string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
key string 数据 key(不超过64位)
value string 数据值(不超过256位)

# 修改远程数据

ret, err := pjysdk.UpdateRemoteData(key, value string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
key string 数据 key(不超过64位)
value string 数据值(不超过256位)

# 删除远程数据

ret, err := pjysdk.DeleteRemoteData(key string) // (*pjy.Resp[struct{}], error)
1
参数 必传 类型 说明
key string 数据 key(不超过64位)

# 调用远程函数

ret, err := pjysdk.CallRemoteFunc(funcName string, params interface{}) // (*pjy.Resp[pjy.RemoteFuncResult], error)
1

示例
远程函数定义(JavaScript):

function add(a, b) {
  return a + b;
}
1
2
3

Go 调用:

ret, err := pjysdk.CallRemoteFunc("add", 1, 2)
if err != nil {
    log.Fatal(err)
}
if ret.Code != 0 {
    log.Fatal(ret.Message)
}
fmt.Println("计算结果:", ret.Result.Return)
1
2
3
4
5
6
7
8
参数 必传 类型 说明
funcName string 远程函数名(不超过64位)
params ...any 参数列表,如 1,2

提示:所有 API 方法都返回 (*pjy.Resp[T], error)

  • error 不为 nil,表示网络请求或签名校验失败;
  • errornil,通过 ret.Code 判断业务状态:0 成功,非 0 失败,详细信息见 ret.Message