简介

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

版本更新

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

版本发布时间更新内容
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是库存数量
-cpuint否cpu数量
-ipTypeint否ip类型 1=ipv4 2=ipv6 3=随机 默认1
-ispTypeint否isp类型:1=单isp 2=双isp 0=未知默认
-netTypeint否网络类型:1=原生 2=广播 0=未知默认
-memorystring否内存大小 单位M
-imageId-string否镜像id
-securityGroupId-string否安全组id
-regionId-string否提供商该产品所在区域id
-cidrBlocks-array否ip段 ,如果支持开通某IP段,填写该区域下ip段及数量
--cidrstring否ip段
--countint否ip段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-array否ip段 ,如果产品支持
-cidrString否ip段
-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-array是ip信息
-typeint是ip类型 1=ipv4 2=ipv6 3=随机
-instanceIdstring是实例id
-ipstring否ip (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-string否ip
username-string否用户名

返回数据

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

参数二级参数类型必填说明
type-int是ip类型 1=ipv4 2=ipv6 3=随机
instanceId-string是实例id
ip-string否ip (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-string是ip地址
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--[]string是ip白名单

创建子用户

该用户为动态用户的子账户,子账号可以用来提取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--[]string是ip白名单

回收账户流量

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

方法名(method)

RecycleFlow

请求参数

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

返回参数

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

获取动态地区

获取动态区域信息,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-string是ip地址
username-string是主账号用户名

返回参数

删除ip白名单

通过接口删除ip白名单

方法名(method)

DelIpWhiteList

请求参数

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

返回参数

获取ip白名单

通过接口获取ip白名单

方法名(method)

GetIpWhiteList

请求参数

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

返回参数

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

获取流量使用记录明细

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

方法名(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-array是list
-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
nostring是order时为我方请求的订单号,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(分钟)