简介

供应商统一接口是一套需要供应商实现的动静态代理开通,续费,释放接口。 供应商只需要实现自己有的产品即可,与自己无关的无需实现。

版本更新

全新对接,直接跳过当前,往后看,如果已经对接,看一下最新更新的内容

版本发布时间更新内容
v2.0.52024-10-14获取库存返回重新定义ispType,增加netType
v2.0.42024-10-111.指定ip开通
2.获取库存返回增加isp类型及ip段返回asn和isp
3.ip访问增加白名单
v2.0.32024-08-14产品库存类型ispType定义细化
v2.0.22024-08-06增加余额返回
v2.0.12024-07-08更新获取订单的useType为string,以","隔开多类型返回 查看

代理开通流程

开通订单是一个异步流程,主要流程包含如下 alt 订单开通流程

  • 1.我方收到用户请求处理。
  • 2.我方处理后向供应商发起开通订单请求。
  • 3.供应商收到请求,返回接受订单(这是需要返回供应商自身的订单)。
  • 4.供应商处理开通订单,开通实例。
  • 5.供应商开通完成后,通知我方订单完成(可以多次回调,请确保订单状态)
  • 6.我方收到供应商回调后,拉取订单信息(如果长时间未回调,我方会主动发起回调拉取)
  • 7.我方收到订单最终信息后,返回到用户。

api请求统一接口参数及返回

请求参数

参数类型必填说明
reqIdstring请求id,作为幂等性检查
versionstring版本号
methodstring请求方法
timestampint时间戳
supplierNostring供应商编号
paramsstring方法的请求参数,aes加密转base64

2.1.2. 主返回数据

参数二级参数类型必填说明
code-int状态码 200成功
message-string错误信息
data-string成功返回数据,aes加密转base64

安全

接口通过aes 加密 cbc 模式 请求时序图如下 alt text

备注:

  • 请求加密串最终存在params,返回数据加密串存在data参数
  • 如果返回数据只有状态码,没有data数据,就不需要做加密返回。

数据加密

  • 消息内容为: TestMessage (前后无空格)
  • 密钥为: qwertyuiop123456 (前后无空格)
  • 通过aes_cbc模式,并Base64后: 5cfJMwX0w65sEQVBxu9zHw==

请求json示例

{
    "reqId":"qqqqqqqqqqqqqqqq",
    "version":"2.0",
    "timestamp":1719887928,
    "method":"GetProductStock",
    "supplierNo":"testsupplier",
    "params":"5cfJMwX0w65sEQVBxu9zHw=="
}

返回json示例

{
    "code":200,
    "message":"ok",
    "data":"5cfJMwX0w65sEQVBxu9zHw=="
}

go aes cbc加解密函数

package cryptos

import (
	"bytes"
	"crypto/aes"
	"crypto/cipher"
)

// =================== CBC ======================

// key的长度必须为16, 24或者32
func AesEncryptCBC(origData []byte, key []byte) (encrypted []byte, err error) {
	// 分组秘钥

	block, _err := aes.NewCipher(key)
	if _err != nil {
		err = _err
		return
	}
	blockSize := block.BlockSize()                              // 获取秘钥块的长度
	origData = pkcs5Padding(origData, blockSize)                // 补全码
	blockMode := cipher.NewCBCEncrypter(block, key[:blockSize]) // 加密模式
	encrypted = make([]byte, len(origData))                     // 创建数组
	blockMode.CryptBlocks(encrypted, origData)                  // 加密
	return encrypted, nil
}

// key的长度必须为16, 24或者32
func AesDecryptCBC(encrypted []byte, key []byte) (decrypted []byte, err error) {
	block, _err := aes.NewCipher(key) // 分组秘钥
	if _err != nil {
		err = _err
		return
	}
	blockSize := block.BlockSize()                              // 获取秘钥块的长度
	blockMode := cipher.NewCBCDecrypter(block, key[:blockSize]) // 加密模式
	decrypted = make([]byte, len(encrypted))                    // 创建数组
	blockMode.CryptBlocks(decrypted, encrypted)                 // 解密
	decrypted = pkcs5UnPadding(decrypted)                       // 去除补全码
	return decrypted, nil
}
func pkcs5Padding(ciphertext []byte, blockSize int) []byte {
	padding := blockSize - len(ciphertext)%blockSize
	padtext := bytes.Repeat([]byte{byte(padding)}, padding)
	return append(ciphertext, padtext...)
}
func pkcs5UnPadding(origData []byte) []byte {
	length := len(origData)
	unpadding := int(origData[length-1])
	return origData[:(length - unpadding)]
}

获取库存

我方定期会去拉取库存信息

方法名(method)

GetProductStock

请求参数

当主接口中的method为GetProductStock时,该参数是主接口中的params参数

参数二级参数类型必填说明
proxyType-int代理类型(不传为全部) 详见5.1数据字典
countryCode-string国家代码(不传为全部),我方统一规范
cityCode-string城市代码(不传为全部),我方统一规范
productId-string供应商的产品Id
page-int默认为1
pageSize-int默认为100

返回数据

当前返回数据为主返回数据中的data数据

参数二级参数三级参数类型必填说明
total--int总条数
curPage--int当前页
products--array产品列表
-productId-string供应商产品编号(一个产品唯一)
-areaCode-string洲代码,我方统一规范
-countryCode-string国家代码,我方统一规范
-stateCode-string州省代码,我方统一规范
-cityCode-string城市代码,我方统一规范
-detail-string产品详情描述
-productName-string商品名(最多255字)
-protocol-string代理协议(以,英文逗号隔开)详见5.2字典
-proxyType-int代理类型:详见5.1数据字典
-sellLimit-int售卖限制 1=大陆可售 2=海外可售 3=无限制
-useLimit-int使用限制 1=出口ip国外 2=出口ip国内 3=无限制
-useType-string使用限制 以逗号(,)分割 1=账密 2=白名单
-bandWidthTypeint带宽类型 1=独享 2=共享 3=流量包
-bandWidthint带宽大小 动态流量时必须 单位 MB
-costPricestring产品成本价
-unitint时长单位 详见5.3
-durationint产品时长 根据上面单位的时长 unit 1 duration 30 就是30天
-inventoryint库存数量
-cpuintcpu数量
-ipTypeintip类型 1=ipv4 2=ipv6 3=随机 默认1
-ispTypeintisp类型:1=单isp 2=双isp 0=未知默认
-netTypeint网络类型:1=原生 2=广播 0=未知默认
-memorystring内存大小 单位M
-imageId-string镜像id
-securityGroupId-string安全组id
-regionId-string提供商该产品所在区域id
-cidrBlocks-arrayip段 ,如果支持开通某IP段,填写该区域下ip段及数量
--cidrstringip段
--countintip段ip库存数
--asnstring该网段属于哪个asn (如果确定请返回 格式大写: ASN数字 eg:ASN123 )
--ispstring该网段属于哪个运营商 比如ATT

备注:

  • 动态资源只需要一条产品,区域额外接口提供。
  • 已经上线被我们拉取的产品,如果下线了,请以库存为0返回给我。或者人为通知我们,要不我们会处于长期上线有货状态

获取账户余额

获取账户余额,方便我们监控,及时充值

方法名(method)

GetBalance

请求参数

返回参数

参数二级参数三级参数类型必填说明
amount--float账户货币余额
lastFlow--float剩余流量(单位M)如果流量和账户货币独立,请独立返回
totalFlow--float总流量 (单位M) 如果流量和账户货币独立,请独立返回

静态

静态代理相关api接口

创建代理(静态)

方法名(method)

CreateProxy

请求参数

当主接口中的method为CreateProxy时,该参数是主接口中的params参数

参数二级参数类型必填说明
reqOrderNo-string我方创建代理订单号
productId-string供应商产品编号(供应商系统内部唯一)
duration-int必要 时长 0无限制
unit-int时长单位 详见5.3
amount-int数量
regionId-string提供商区域id(产品内有会传递)
securityGroupId-string安全组(产品内有会传递)
imageId-string镜像id(产品内有会传递)
userPrefix-string用户名前缀,我方传输abc供应商生成须为abcxxxxxxx,且实列唯一
cidrBlocks-arrayip段 ,如果产品支持
-cidrStringip段
-countint该ip段ip创建数

返回数据

当前返回数据为主返回数据中的data数据

参数二级参数类型必填说明
orderNo-string供应商订单号
reqOrderNo-string我方请求订单号
status-string状态 1=开通中 2=操作完成 3=操作失败
amount-string花费金额(总共花费金额)

续费代理

方法名(method)

RewProxy

请求参数

当主接口中的method为RewProxy时,该参数是主接口中的params参数

参数二级参数类型必填说明
reqOrderNo-string我方订单号(和创建该实例的订单号不是一个, 如果供应商系统续费代理的时候不创建订单不需要做关联和校验)
instances-array必要 实列数组
-durationint时长,不传为购买时时长
-unitint单位,不穿为购买时单位(时长不传,单位没有意义
-instanceIdstring供应商实例编号(供应商系统内部唯一),供应商凭当前值做续费

返回数据

当前返回数据为主返回数据中的data数据 同开通

释放删除代理

方法名(method)

DelProxy

请求参数

当主接口中的method为DelProxy时,该参数是主接口中的params参数

参数二级参数类型必填说明
reqOrderNo-string我方订单号(和创建该实例的订单号不是一个, 如果供应商系统删除代理的时候不创建订单不需要做关联和校验)
instanceIds-[]string供应商实例编号列表(供应商系统内部唯一),删除多个实例

返回数据

当前返回数据为主返回数据中的data数据 同开通

获取订单

方法名(method)

GetOrder

请求参数

当主接口中的method为GetOrder时,该参数是主接口中的params参数

参数二级参数类型必填说明
reqOrderNo-string我方订单号
orderNo-string供应商订单号
page-int默认1
pageSize-int默认100

返回数据

参数二级参数类型必填说明
orderNo-string供应商订单号
reqOrderNo-string我方请求订单号
status-string状态 1=开通中 2=操作完成 3=操作失败
amount-string花费金额(总共花费金额)
total-int总ip数
curPage-int当前第几页
ipInfo-arrayip信息
-typeintip类型 1=ipv4 2=ipv6 3=随机
-instanceIdstring实例id
-ipstringip (1 静态ip存在时,此字段必须存在)
-portint端口
-usernamestring用户名(账密模式必须返回)
-passwordstring密码(账密模式必须返回)
-expireAtint过期时间 Unix Timestamp(秒)
-flowint流量(2流量时,此字段必须存在)
-balanceFlowint余额流量(2流量时,此字段必须存在)
-statusint状态 1=开通中 2=正常使用 3=释放中 4=释放完成
-useTypestring使用方式 多个用英文逗号分隔 1=账密 2=ip白名单 3=uuid(uuid写password内)

获取实例

获取实例的

方法名(method)

GetInstance

请求参数

当主接口中的method为GetInstance时,该参数是主接口中的params参数

参数二级参数类型必填说明
instanceId-string供应商实例编号(供应商系统内部唯一)
ip-stringip
username-string用户名

返回数据

当前返回数据为主返回数据中的data数据

参数二级参数类型必填说明
type-intip类型 1=ipv4 2=ipv6 3=随机
instanceId-string实例id
ip-stringip (1 静态ip存在时,此字段必须存在)
port-int端口
username-string用户名(账密模式必须返回)
password-string密码(账密模式必须返回)
expireAt-int过期时间
flow-int流量(2流量时,此字段必须存在)
balanceFlow-int余额流量(2流量时,此字段必须存在)
status-int状态 1=开通中 2=正常使用 3=释放中 4=释放完成
useType-string使用方式 多个用英文逗号分隔 1=账密 2=ip白名单 3=uuid(uuid写password内)

根据ip创建代理(静态)

方法名(method)

AssignIpCreateProxy

请求参数

当主接口中的method为AssignIpCreateProxy时,该参数是主接口中的params参数

指定ip开通,冷静期无限制,也可以开通。

参数二级参数类型必填说明
reqOrderNo-string我方创建代理订单号
duration-int必要 时长 0无限制
unit-int时长单位 详见5.3
assignIp-string指定ip

返回数据

当前返回数据为主返回数据中的data数据

参数二级参数类型必填说明
orderNo-string供应商订单号
reqOrderNo-string我方请求订单号
status-string状态 1=开通中 2=操作完成 3=操作失败
amount-string花费金额(总共花费金额)

添加静态代理ip域名白名单

通过接口添加静态代理IP域名白名单

方法名(method)

AddIpDomainWhiteList

请求参数

参数二级参数类型必填说明
ip-stringip地址
domain-string域名

返回参数

获取指定代理IP可用信息(静态)

方法名(method)

GetAssignIpInfo

请求参数

当主接口中的method为GetAssignIpInfo时,该参数是主接口中的params参数

参数二级参数类型必填说明
ip-string指定ip

返回数据

参数二级参数类型必填说明
ip-string指定ip
canBuyStatus-int是否可以购买 1=是 -1=否

动态接口

创建用户

该用户为动态用户的主账户,所有的流量分配都在主账户下,该用户下子账户可以使用主账户的流量。

方法名(method)

CreateUser

请求参数

参数二级参数类型必填说明
username-string主账号用户名
password-string主账号密码
status-int状态:1=状态 2=禁用

返回参数

详见错误码

备注

创建主账户的同时,须创建相同的子账户。

更新用户

该用户为动态用户的主账户,所有的流量分配都在主账户下,该用户下子账户可以使用主账户的流量。

方法名(method)

UpdateUser

请求参数

参数二级参数类型必填说明
username-string主账号用户名
password-string主账号密码 为null
status-int状态:1=状态 2=禁用

返回参数

详见错误码

获取用户信息

获取主账户信息。

方法名(method)

GetUserInfo

请求参数

参数二级参数类型必填说明
username-string主账号用户名

返回参数

参数二级参数三级参数类型必填说明
username--string用户名
lastFlow--float剩余流量
totalFlow--float总流量
status--int用户状态 1=状态 2=禁用
ipWhiles--[]stringip白名单

创建子用户

该用户为动态用户的子账户,子账号可以用来提取ip。

方法名(method)

CreateSubUser

请求参数

参数二级参数类型必填说明
username-string子账号用户名
password-string子账号密码
mainUsername-string主账号用户名
limitFlow-int动态流量上限
status-int状态:1=状态 2=禁用
remark-string备注

返回参数

详见错误码

更新子用户

该用户为动态用户的子账户,子账号可以用来提取ip。

方法名(method)

UpdateSubUser

请求参数

参数二级参数类型必填说明
username-string子账号用户名
password-string子账号密码
mainUsername-string主账号用户名
limitFlow-int动态流量上限
status-int状态:1=状态 2=禁用
remark-string备注

返回参数

详见错误码

给账户分配流量

分配用户流量,如果用户现在没有流量,分配10G流量,剩余10G流量

方法名(method)

DistributeFlow

请求参数

参数二级参数类型必填说明
reqOrderNo-string我方订单号,注意幂等性
username-string主账号用户名
flow-flow分配的流量,单位mb

返回参数

参数二级参数三级参数类型必填说明
username--string用户名
lastFlow--float剩余流量
totalFlow--float总流量
status--int用户状态 1=状态 2=禁用
ipWhiles--[]stringip白名单

回收账户流量

回收用户流量,加入用户现在有100G流量,回收50G,剩余50G

方法名(method)

RecycleFlow

请求参数

参数二级参数类型必填说明
reqOrderNo-string我方订单号,注意幂等性
username-string主账号用户名
flow-flow回收的流量,单位mb,-1时回收所有流量

返回参数

参数二级参数三级参数类型必填说明
username--string用户名
lastFlow--float剩余流量
totalFlow--float总流量
status--int用户状态 1=状态 2=禁用
ipWhiles--[]stringip白名单

获取动态地区

获取动态区域信息,areaCode,countryCode,stateCode,cityCode我方统一提供,region供应商可以自定义,确保提取ip时正确就行。

方法名(method)

GetDynamicArea

请求参数

参数二级参数类型必填说明
proxyType-int不传为全部 详见字典
productId-string供应商动态的产品id

返回参数

参数二级参数三级参数类型必填说明
proxyType--int动态类型
productId--string产品id
areaCode--string区域代码(大洲)
countryCode--string国家代码
stateCode--string州省代码
cityCode--string州城市代码
region--string提取时地区代码,供应商自定义
status--int状态 1=上架 -1=下架

获取代理账户

通过接口获取代理商户

方法名(method)

DrawDynamicIp

请求参数

参数二级参数类型必填说明
region-string不传为全球随机
sessTime-int有效时间1-120 分钟,默认5分钟
username-string子用户名
num-int生成数量,默认1
regionLevel-int区域级别 1=洲 2=国家 3=省或州 4=城市

返回参数

参数二级参数三级参数类型必填说明
proxyUrl--string域名:端口 eg proxy.ipipv.com:5206
list--[]string返回动态代理访问方式 username-region-us-session-xxxx-sessTime-10:pwd

动态代理使用参数

参数类型说明
usernamestring子账号用户名
regionstring区域值(获取动态区域返回的region)值
sessionstringsession,在sessTime内,同一个session返回的ip不变,session取值支持9-16位
sessTimeintsession time 时长1-120分钟
pwdstring子账户密码

使用例子

eg:

curl http://domain:port@username-region-us-session-xxxx-sessTime-10:pwd myip.ipipv.com

获取代理账户

通过接口获取代理商户

方法名(method)

DrawDynamicIpByApi

请求参数

参数二级参数类型必填说明
region-string不传为全球随机 全球混播
protocol-string协议 可选 默认socks5 取值 socks5 http 之一
returnType-string数据格式 可选 默认txt 取值 txt json 之一
username-string主账号用户名
num-int生成数量,默认1
regionLevel-int区域级别 1=洲 2=国家 3=省或州 4=城市
delimiter-int分隔符 可选 只有数据格式是txt的时候生效 默认1 (1=\r\n 2=/br 3=\r 4=\n 5=\t)
productId-string供应商产品Id 可选
unrepeated-string不传默认 hour,day,week,month,year

返回参数

参数二级参数三级参数类型必填说明
proxyUrl--string提取代理的url

添加ip白名单

通过接口添加ip白名单

方法名(method)

AddIpWhiteList

请求参数

参数二级参数类型必填说明
ip-stringip地址
username-string主账号用户名

返回参数

删除ip白名单

通过接口删除ip白名单

方法名(method)

DelIpWhiteList

请求参数

参数二级参数类型必填说明
ip-stringip地址
username-string主账号用户名

返回参数

获取ip白名单

通过接口获取ip白名单

方法名(method)

GetIpWhiteList

请求参数

参数二级参数类型必填说明
username-string主账号用户名

返回参数

参数二级参数三级参数类型必填说明
list--[]stringip白名单列表

获取流量使用记录明细

通过接口流量使用记录明细

方法名(method)

GetFlowUseLog

请求参数

参数二级参数类型必填说明
username-string主账号用户名
startTime-string开始时间 格式 2021-01-01 00:00:00
endTime-string结束时间 格式 2021-01-01 00:00:00
page-int页码 默认1
pageSize-int每页数量
productId-string供应商产品Id 可选

返回参数

参数二级参数类型必填说明
total-int总数量
curPage-int当前第几页
list-arraylist
-usedint64已使用流量 单位 B
-totalint64总流量 单位 B
-balanceint64剩余流量 单位 B
-usedTimeint64使用时间 单位 秒
-productIdstring供应商产品Id

供应商通知我方订单或者实列

http(s)://domain/api/open/supplier/notify?supplier=xxx&type=[order|instance|product]&no=

参数类型必填说明
supplierstring供应商号
typestring枚举:order|instance|product
nostringorder时为我方请求的订单号,instance时为供应商开的机器的唯一实列id,product时为供应商产品的唯一id

请求示例

curl 'http://172.19.167.104:7888/api/open/supplier/notify?supplier=xxx&type=order&no=xxxxx'

我方请求返回数据

{
    "code": 200,
    "message": "ok"
}

备注:

  • order 订单完成,时触发order回调
  • instance 实列改变时,出发instance回调
  • product 产品上下架,或者产品库存为0,售罄商品补货完成后调用

数据字典

代理类型

编号说明
101静态云平台
102静态国内家庭
103静态国外家庭
104动态国外
105动态国内

代理协议

编号说明
1socks5
2http
3https
4ssh

时长单位

编号说明
1
2周(7天)
3自然月
4自然年365,366
10无限制

ispType

编号说明
0未知(默认)
1单isp
2双isp
3原生isp
4机房数据中心

返回状态码

编号说明
200成功
500系统错误
10001解密失败,请检查密码
10002创建代理失败,余额不足(返回当前值为未执行创建)
10003创建代理失败,库存不足(返回当前值为未执行创建)
10004创建代理失败,参数有误
10011续费失败,实例不存在
10021释放失败,实例不存在
10022释放失败,实例已超过释放周期
10031获取订单失败,订单不存在
10041获取实例失败,实例不存在
10051创建用户失败,用户名已存在
10052获取用户失败,用户不存在
10061创建子账户失败,用户名已存在
10062获取子账户失败,用户不存在
10061创建子账户失败,主账户不存在
10061创建子账户失败,主账户已禁用
10071分配流量失败,主账户不存在或者被禁用
10072分配流量失败,余额不足
10081回收流量失败,余额不足
10091参数错误,region不存在
10092参数错误,username子账户不存在
10093参数错误,sessTime取值范围1-120(分钟)