简介

本文档是调用ipipv,开通代理的说明。

开通代理先向我方获取appKey 和 appSecret,在沙盒环境下调试。

沙盒环境地址: https://sandbox.ipipv.com/

沙盒调试成功后,可以切换至生产环境。

注意:生产环境测试会正式开通代理,产生费用。

生产环境地址: https://api.ipipv.com/

sdk

golang

https://github.com/clpublic/ipv-sdk

java(部分完成)

https://github.com/clpublic/ipv-java-sdk

php

https://github.com/clpublic/ipv-php-sdk.git

版本更新

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

版本发布时间更新内容
v2.0.82024-09-21增加ip段的asn返回,时长开通增加cycleTimes字段
v2.0.72024-08-08动态流量记录改为int64类型
v2.0.62024-08-05更具产品号返回动态的流量和使用记录
v2.0.52024-07-27实例信息返回(包含订单中的实例返回)增加产品编号信息
v2.0.42024-07-26动态提取增加产品编号,根据产品编号提取
v2.0.32024-07-24增加app信息返回,增加php sdk
v2.0.22024-07-11增加动态流量使用记录
v2.0.12024-07-09修改统一请求加密方式,补充java语言的 aes cbc 加密及实现的demo
v2.0.02024-07-08app开放接口第一个版本发布

通用

请求统一加密传输

请求参数

参数二级参数类型必填说明
version-string版本 v2
encrypt-string加密方式 aes,rsa(版本2以上提供,默认aes,老接口rsa)aes cbc模式
appKey-stringappKey 渠道商号 找我方获取
reqId-string请求id,每次生成,如果失败重复请求,保持不变
params-string根据加密方式密文 转base64

返回数据

参数二级参数类型必填说明
reqId-string请求id,每次生成,如果失败重复请求,保持不变
code-int状态码,详见状态码
msg-string消息内容
data-string密文转base64

加密方式

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

备注:

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

数据加密

  • 消息内容为: TestMessage (前后无空格)
  • 密钥为: qwertyuiop123456 (前后无空格)
  • 通过aes_cbc模式,并Base64后: 5cfJMwX0w65sEQVBxu9zHw==
  • 初始向量参数为密钥前16位

请求json示例

{
    "version":"2.0",
    "reqId":"xxxxxx",
    "encrypt":"aes",
    "appKey":"testappid",
    "params":"5cfJMwX0w65sEQVBxu9zHw=="
}

返回json示例

{
    "reqId":"xxxxxx",
    "code":200,
    "msg":"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)]
}

java aes cbc加解密函数

package com.ipipv.open.utils;

import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.util.Base64;

public class AESCBC {
    public static byte[] encryptCBC(byte[] data, byte[] key, byte[] iv) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv));
        byte[] result = cipher.doFinal(data);
        return result;
    }

    public static byte[] decryptCBC(byte[] data, byte[] key, byte[] iv) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidAlgorithmParameterException {
        Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
        cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(key, "AES"), new IvParameterSpec(iv));
        byte[] result = cipher.doFinal(data);
        return result;
    }

    public static void main(String[] args) throws IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidAlgorithmParameterException {
        String data = "TestMessage"; // 待加密的原文
        String key = "qwertyuiop123456asdfghjk"; // key 长度只能是 16、24 或 32 字节
        String iv = key.substring(0,16); // CBC 模式需要用到初始向量参数

        byte[] ciphertext = encryptCBC(data.getBytes(), key.getBytes(), iv.getBytes());
        System.out.println("CBC 模式加密结果(Base64):" + Base64.getEncoder().encodeToString(ciphertext));

        byte[] plaintext = decryptCBC(ciphertext, key.getBytes(), iv.getBytes());
        System.out.println("解密结果:" + new String(plaintext));
    }
}

同步地域

请求路径

/api/open/app/area/v2

请求参数

参数二级参数类型必填说明
codes-[]string获取地域代码对应列表,为null获取全部

返回参数

参数二级参数类型必填说明
code-string地域代码
name-string地域名称
cname-string地域中文 名
children-array下级地域
-codestring地域代码
-namestring地域名称
-cnamestring地域中文 名
-childrenarray下级地域

同步地域

请求路径

/api/open/app/city/list/v2

请求参数

参数二级参数类型必填说明
codes-[]string城市代码列表,为null获取全部

返回参数

参数二级参数类型必填说明
cityCode-string城市代码
cityName-string城市中文名称
stateCode-string省、州代码
stateName-string省、州中文名称
countryCode-string国家代码
countryName-string国家中文名称
areaCode-string洲代码
areaName-string洲中文名称
status-int状态 1=正常

获取产品库存

请求路径

/api/open/app/product/query/v2

请求参数

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

参数二级参数类型必填说明
proxyType-[]int代理类型,详见字典
productNo-string产品Id 如果传了产品Id,则只返回该Id对应的产品信息
countryCode-string国家代码 可选
cityCode-string城市代码 可选
supplierCode-string供应商代码 可选
unit-int时长单位,详见字典 可选
ispType-intisp类型,详见字典 可选
duration-int相对于时长单位的最小购买时长 可选

eg

{
    "proxyType":[103],
    "productNo":"productNo"
}

返回数据

参数二级参数类型必填说明
productNo-string产品Id 保持唯一
productName-string商品名
proxyType-int16代理类型,详见字段定义
useType-string以(,)分割 1=账密 2=白名单 3=uuid
protocol-string1=socks5 2=http 3=https 4=ssh
useLimit-int81=出口ip国外 2=出口ip国内 3=无限制
sellLimit-int81=大陆可售 2=海外可售 3=无限制
areaCode-string区域code 动态代理没有区域,提取的时候查看动态代理支持的区域
countryCode-string国家代码 3位 iso3
stateCode-string州省代码 6位 000结尾要看citycode是否有值或者结尾,(有些小国家是没有州省级别的,但有城市区分)
cityCode-string城市代码 9位 为空或者000
detail-string商品描述
costPrice-string价格
inventory-int库存
ipType-intip类型 1=ipv4 2=ipv6 3=随机 默认1
ispType-intisp类型:1=单isp 2=双isp 0=未知默认
netType-int网络类型:1=原生 2=广播 0=未知默认
duration-int时长 0无限制
unit-int单位 1=天 2=周(7天) 3=月(自然月) 4=年(自然年365,366)
bandWidth-int带宽|流量时必要 单位 MB
bandWidthPrice-string额外带宽价格
maxBandWidth-int可设置最大带宽
flow-int动态代理按照流量方式 最小购买和计价流量包 单位MB
cpu-intcpu数
memory-float64内存容量
enable-int8是否可以购买 1可以
supplierCode-string供应商代码
ipCount-int动态代理按照ip数方式 最小购买和计价ip数 单位个
ipDuration-int动态代理按照ip数方式 时长 单位分钟
assignIp-int是否支持指定ip开通静态代理 1=是 -1=否 默认为-1
parentNo-string父产品编号
cidrStatus-int是否支持ip网段功能 1=是 -1=否 默认为-1
cidrBlocks-array支持网段及数量
-cidrstring网段 比如 192.168.0.0/24
-countint该网段数量
-asnstring该网段属于哪个asn
-ispstring该网段属于哪个运营商 比如ATT
备注:
  • 只有enable = 1 且 inventory 大于 0 的产品可以购买
  • 产品列表的时长:duration 和单位:unit的结合,代表这款产品的最小时长

eg:

  • duration=1 unit=1 表示最少购买1天
  • duration=1 unit=3 表示最少购买1个月
  • duration=30 unit=1 表示最少购买30天

开通代理

请求路径

/api/open/app/instance/open/v2

请求参数

主接口中的params参数

参数二级参数三级参数类型必填说明
appOrderNo--string(32)购买者订单号(渠道商订单号),同一个订单保持唯一,我方或作幂等性检查
params--array购买代理产品列表
-productNo-string商品编号,推荐👍(按商品编号购买的时候,后面7项商品筛选条件无意义)→着重看下面红色部分备注
-proxyType-uint16(1) 代理类型,详见字典
-countryCode-string(2) 国家代码
-cityCode-string(3) 城市代码
-supplierCode-string(4) 供应商代码(可为null,随机分配)
-unit-int8(5) 单位 1=天 2=周(7天) 3=月(自然月) 4=年(自然年365,366) 10=无限制
-ispType-int(6) isp类型 1=单isp 2=双isp
-duration-int32(7) 产品定义的时长单位
-count-int购买数量 (实例个数)静态必填 默认1 一次最大20
-cycleTimes-int32购买时长周期数,此字段对有时长的产品有意义,默认1表示产品的duration个unit的时长,详见 →备注
-renew-bool是否续费 1续费 默认0
-extBandWidth-int32额外增加带宽 单位Mbps
-appUsername-string主账号,开通动态代理的时候必填(必须在平台上注册过)
-flow-int动态流量,静态的字段无意义 动态必填 单位MB
-useBridge-uint81=不使用桥 2=使用桥 不传跟随app设置 默认
-projectId-string购买项目id,保留字段,后续会支持
-cidrBlocks-array支持网段及数量
--cidrstring网段 192.168.0.0/24 172.16.0.0/16 10.0.0.0/8
--countint该网段数量

eg

{
    "appOrderNo":"TEST20240726094927",
    "params":[
        {
            "productNo":"ipideash_598",
            "count":20,
            "cycleTimes":1
        },
        {
            "productNo":"mb_gmhd5exp2",
            "count":20,
            "cycleTimes":12
        }
    ]
}

备注:

cycleTimes 为新增字段,以区分产品的duration字段,老版本使用的duration,会自动兼容,新的对接方式请使用cycleTimes字段

产品购买分为按产品编号(productNo)唯一指定的产品 和 按产品筛选条件(proxyType,countryCode,cityCode,supplierCode,ispType,duration,unit)购买。当产品编号存在时,产品筛选条件不起作用(我们推荐按产品编号购买,这是唯一的,价格确定的,如果存在号段,也可以指定购买的号段)。

按筛选条件购买时,筛选条件越多,产品会越少,因为找不到产品,而购买失败。而且不能号段筛选(所以不建议用这种形式)

购买数量(count)和购买周期数(cycleTimes)必填,不填默认为1,购买一条一个时间周期

备注:产品列表的时长:duration 和单位:unit的结合,代表这款产品的最小时长

eg:

  • duration=1 unit=1 表示最少按1天卖 如果购买参数cycleTimes=1 表示购买1天 cycleTimes=30代表30天
  • duration=1 unit=3 表示最少按1月卖 如果购买参数cycleTimes=1 表示购买1月 cycleTimes=12代表12月,3代表自然月,根据购买当月的天数计算,比如2月可能28天或者29,3月31天,4月30天
  • duration=30 unit=1 表示最少按30天卖 如果购买参数cycleTimes=1 表示购买30天 cycleTimes=12代表360天
  • duration=1 unit=4 表示最少按1年卖 如果购买参数cycleTimes=1 表示购买1年,即365天或者366天

费用计算

静态产品的费用 = 产品价格 * cycleTimes * count+ 带宽价格 * extBandWidth * cycleTimes * count+使用桥费用 * cycleTimes * count

  • 带宽价格
    • 必须产品支持,extBandWidth为0,表示为默认带宽,无费用
  • 桥(高速通道)
    • 必须实名认证企业可用
    • 如果useBridge = 1 不会产生桥费用,如果不传,跟随app,app配置为使用桥,购买海外产品(包含香港,台湾)就会使用桥
    • 桥使用需要先获取桥地址 动态

流量产品的费用 = 产品价格(MB)* flow

  • 流量产品count 不起作用
  • 流量产品只对flow起作用

返回数据

参数二级参数类型必填说明
orderNo-string平台订单号
appOrderNo-string购买者订单号(渠道商订单号) 原样返回号
amount-string花费金额(总共花费金额)

备注:订单为异步开通,具体查看回调章节

获取订单信息

请求路径

/api/open/app/order/v2

请求参数

参数二级参数类型必填说明
orderNo-string(32)平台订单编号
page-int页码 默认1
pageSize-int每页显示数量 默认10 最大100

返回参数

参数二级参数类型必填说明
orderNo-string平台订单号
appOrderNo-string渠道商(购买订单)订单号
type-int8订单类型 1=新建 2=续费 3=释放
status-int8订单状态 1=待处理 2=处理中 3=处理成功 4=处理失败 5=部分完成
count-int购买数量
amount-string总价
refund-int是否有退费 1存在退费
page-int页码 原样返回
pageSize-int每页显示数量 原样返回
total-int64订单对应实例总数量
instances-array订单对应实例列表
-instanceNostring平台实例编号(渠道商续费和释放操作使用该编号)
-proxyTypeuint代理类型 101=静态云平台 102=静态国内家庭 103=静态国外家庭 104=动态国外 105=动态国内 201=whatsapp
-protocolstringi协议类型 多个用英文逗号分隔 1=socks5 2=http 3=https 4=ssh
-ipstring代理ip地址
-portuint代理端口
-regionIdstring区域地址
-countryCodestring国家代码
-cityCodestring城市代码
-useTypestring使用方式 多个用英文逗号分隔 1=账密 2=ip白名单 3=uuid(uuid写password内)
-usernamestring账户名或uuid 动态为平台主账号
-pwdstring密码
-orderNostring创建该实例的平台订单号
-userExpiredint64到期时间
-flowTotalfloat64总流量 单位MB 如果是ip数方式 表示ip个数
-flowBalancefloat64剩余流量
-statusint81=待创建 2=创建中 3=运行中 6=已停止 10=关闭 11=释放
-renewint81 自动续费
-bridges[]string桥地址列表
-openAttime.Time开通时间
-renewAttime.Time最后成功续费时间
-releaseAttime.Time释放成功时间
-productNostring产品编号

获取实例

获取实例的

请求路径

/api/open/app/instance/v2

请求参数

参数二级参数类型必填说明
instances-[]string供应商实例编号(供应商系统内部唯一)

返回数据

参数二级参数类型必填说明
instanceNo-string平台实例编号(渠道商续费和释放操作使用该编号)
proxyType-uint代理类型 101=静态云平台 102=静态国内家庭 103=静态国外家庭 104=动态国外 105=动态国内 201=whatsapp
protocol-stringi协议类型 多个用英文逗号分隔 1=socks5 2=http 3=https 4=ssh
ip-string代理ip地址
port-uint代理端口
regionId-string区域地址
countryCode-string国家代码
cityCode-string城市代码
useType-string使用方式 多个用英文逗号分隔 1=账密 2=ip白名单
username-string账户名或uuid 动态为平台主账号
pwd-string密码
orderNo-string创建该实例的平台订单号
userExpired-int64到期时间
flowTotal-float64总流量
flowBalance-float64剩余流量
status-int81=待创建 2=创建中 3=运行中 6=已停止 10=关闭 11=释放
renew-int81 自动续费
bridges-[]string桥地址列表
openAt-time.Time开通时间
renewAt-time.Time最后成功续费时间
releaseAt-time.Time释放成功时间
productNo-string产品编号

续费代理

请求路径

/api/open/app/instance/renew/v2

请求参数

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

参数二级参数类型必填说明
appOrderNo-string购买者订单号(渠道商订单号)
instances-array实例列表
-instanceNostring平台实例编号
-durationint32可选 时长 默认1

返回数据

参数二级参数类型必填说明
orderNo-string平台订单号
appOrderNo-string购买者订单号(渠道商订单号) 原样返回号
amount-string花费金额(总共花费金额)

备注:订单为异步开通,具体查看回调章节

释放代理

请求路径

/api/open/app/instance/release/v2

请求参数

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

参数二级参数类型必填说明
orderNo-string购买者订单号(渠道商订单号)
instances-[]string平台实例编号

返回数据

参数二级参数类型必填说明
orderNo-string平台订单号
appOrderNo-string购买者订单号(渠道商订单号) 原样返回号
amount-string花费金额(总共花费金额)

备注:订单为异步开通,具体查看回调章节

获取App信息

请求路径

/api/open/app/info/v2

请求参数

返回数据

参数二级参数类型必填说明
appName-stringapp名称
coin-string账户余额
useBridge-int使用桥 1 不使用 2使用
callbackUrl-string回调地址
status-int1正常 -1禁用

指定ip开通代理

请求路径

/api/open/app/instance/open/assign/ip/v2

请求参数

主接口中的params参数

参数二级参数三级参数类型必填说明
appOrderNo--string(32)购买者订单号(渠道商订单号),同一个订单保持唯一,我方或作幂等性检查
productNo--string商品编号,最终开出来的ip地域和产品不一致
cycleTimes--int32购买时长周期数,此字段对有时长的产品有意义,默认1表示产品的duration个unit的时长,详见 →备注
renew--bool是否续费 1续费 默认0
extBandWidth--int32额外增加带宽 单位Mbps
useBridge--uint81=不使用桥 2=使用桥 不传跟随app设置 默认
assignIp--string指定ip

eg

{
    "appOrderNo":"TEST20240726094927",
    "productNo":"ipideash_598",
    "assignIp":"127.0.0.1",
    "cycleTimes":1
}

返回数据

参数二级参数类型必填说明
orderNo-string平台订单号
appOrderNo-string购买者订单号(渠道商订单号) 原样返回号
amount-string花费金额(总共花费金额)

备注:订单为异步开通,具体查看回调章节

查询指定Ip可用信息

请求路径

/api/open/app/assign/ip/info/v2

请求参数

主接口中的params参数

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

eg

{
    "ip":"127.0.0.1"
}

返回数据

参数二级参数类型必填说明
ip-string指定ip
canBuyStatus-int购买状态(-1:不可购买,1:可购买)

动态

创建或修改主账户

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

请求路径

/api/open/app/user/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商主账号 该渠道商唯一 不支持修改(不传随机生成,建议不传)
password-string主账号密码(不传随机生成,建议不传)
phone-string主账号手机号
email-string主账号邮箱
authType-int8认证类型 1=未实名 2=个人实名 3=企业实名
authName-string主账号实名认证的真实名字或者企业名
no-string主账号实名认证的实名证件号码或者企业营业执照号码
vsp-uint8vsp
status-int8状态 1=正常 2=禁用

返回参数

参数二级参数类型必填说明
appUsername-string渠道商子账号
username-string平台子账号
password-string子账号密码
status-int8用户状态 1=正常 2=禁用
authStatus-int8认证状态 1=未实名 2=个人实名 3=企业实名

同步实名

请求路径

/api/open/app/userAuth/v2

请求参数

参数二级参数类型必填说明
username-string平台主账号 选填 平台主账号和渠道商主账号两个必填一个
appUsername-string渠道商主账号 选填 平台主账号和渠道商主账号两个必填一个
authType-int8认证类型 1 未实名 2 个人实名 3 企业实名
authName-string真实姓名或者企业名
no-string实名证件号码或者企业营业执照号码
vsp-stringvsp

返回参数

参数二级参数类型必填说明
username-string平台账号
authStatus-int认证状态 1=未实名 2=个人实名 3=企业实名

动态产品区域列表

请求路径

/api/open/app/product/area/v2

请求参数

参数二级参数类型必填说明
productNo-string平台产品编号
proxyType-int16代理类型 104=动态国外 105=动态国内

返回参数

参数二级参数类型必填说明
--array平台产品编号
-productNostring平台产品编号 如果为空,则表示同一个上游供应商公用的区域列表
-proxyTypeint16代理类型
-areaCodestring区域代码(洲)
-countryCodestring国家代码
-stateCodestring州省代码 为空或者后面 000结尾,说明当前地域只到上级国家,国家内随机
-cityCodestring城市代码 为空或者后面 000结尾,说明当前地域只到上级,上级随机
-statusint8状态 1=上架 -1=下架
-regionstring上游供应商区域
-supplierCodestring上游供应商代码
[
    {"productNo":"out_dynamic_1","proxyType":104,"areaCode":"6","countryCode":"USA","stateCode":"","cityCode":"","status":1,"region":"us","supplierCode":"xxx"},
    {"productNo":"out_dynamic_1","proxyType":104,"areaCode":"2","countryCode":"FRA","stateCode":"","cityCode":"","status":1,"region":"fr","supplierCode":"xxx"},
    {"productNo":"out_dynamic_1","proxyType":104,"areaCode":"2","countryCode":"GBR","stateCode":"","cityCode":"","status":1,"region":"gb","supplierCode":"xxx"},
    {"productNo":"out_dynamic_1","proxyType":104,"areaCode":"1","countryCode":"JPN","stateCode":"","cityCode":"","status":1,"region":"jp","supplierCode":"xxx"}
]

获取代理余额信息

通过接口获取代理商户

请求路径

/api/open/app/proxy/info/v2

请求参数

参数二级参数类型必填说明
username-string平台主账号,选填 平台主账号和渠道商主账号两个必填一个
appUsername-string渠道商主账号,选填 平台主账号和渠道商主账号两个必填一个
proxyType-uint16代理类型 必填 104=动态国外 105=动态国内
productNo-string产品编号

返回参数

参数二级参数类型必填说明
list-array列表
-usedstring已使用流量 MB
-totalint总流量 MB
-balancestring剩余流量 MB
-productNostring产品编号
-ipWhiteList[]stringip白名单
-ipUsedint已使用ip数量
-ipTotalint总ip数量

创建或修改代理用户(子账号)

请求路径

/api/open/app/proxy/user/v2

请求参数

参数二级参数类型必填说明
appUsername-string(32)渠道商子账号 该渠道商唯一 (不传随机生成) 不支持修改 (不传随机生成,建议不传)
password-string密码(不传随机生成,建议不传)
limitFlow-int动态流量上限 单位MB
mainUsername-string平台主账号 选填 平台主账号和渠道商主账号两个必填一个
appMainUsername-string渠道商主账号 选填 平台主账号和渠道商主账号两个必填一个
remark-string(255)备注
status-int8状态 1=正常 2=禁用

返回数据

参数二级参数类型必填说明
appUsername-string渠道商子账号
username-string平台子账号
password-string子账号密码
status-int8用户状态 1=正常 2=禁用
authStatus-int8认证状态 1=未实名 2=个人实名 3=企业实名

账密提取

请求路径

/api/open/app/proxy/draw/pwd/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商子账号名
addressCode-string地址代码 可以传 areaCode countryCode stateCode cityCode 四种之一
sessTime-string有效时间 1-120分钟 默认5分钟
num-int数量 默认1
proxyType-uint16代理类型 104=动态国外 105=动态国内
maxFlowLimit-int子账号最大流量限制 可选 大于0的时候生效
productNo-string产品编号

返回参数

参数二级参数类型必填说明
list-array
-proxyUrlstring代理地址
-list[]string

Api提取代理请求

请求路径

/api/open/app/proxy/draw/api/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商主账号
proxyType-uint16代理类型 104=动态国外 105=动态国内
num-int提取ip数量 可选 默认1
addressCode-string地址代码 可选 取值 areaCode countryCode stateCode cityCode 四种之一
protocol-string协议 可选 默认socks5 取值 socks5 http 之一
returnType-string数据格式 可选 默认txt 取值 txt json 之一
delimiter-int分隔符 可选 只有数据格式是txt的时候生效 默认1 (1=\r\n 2=/br 3=\r 4=\n 5=\t)
maxFlowLimit-int最大流量限制 可选 大于0的时候生效
productNo-string产品编号

返回数据

参数二级参数类型必填说明
list-array
-proxyUrlstring提取代理Api地址

流量使用记录

请求路径

/api/open/app/proxy/flow/use/log/v2

请求参数

参数二级参数类型必填说明
appUsername-string主账号 必要
startTime-string开始时间 可选 默认7天前 格式 2021-01-01 00:00:00
endTime-string结束时间 可选当天 格式 2021-01-01 00:00:00
productNo-string产品编号
page-int页码 可选 默认1
pageSize-int每页数量 可选 默认10 最大100

返回参数

参数二级参数类型必填说明
total-int总数量
curPage-int当前页
list-array使用详情数组
-usedint64已使用流量 单位B
-totalint64总流量 B
-balanceint64剩余流量 B
-usedTimeuint64使用时间 单位秒
-productNostring产品编号

添加ip白名单

请求路径

/api/open/app/proxy/addIpWhiteList/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商主账号
ip-stringip地址
proxyType-uint16代理类型
productNo-string产品编号

返回参数

参数二级参数类型必填说明
ipWhiteList-[]stringip白名单

删除ip白名单

请求路径

/api/open/app/proxy/delIpWhiteList/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商主账号
ip-stringip地址
proxyType-uint16代理类型 可选 默认104 104=动态国外 105=动态国内
productNo-string产品编号

返回参数

参数二级参数类型必填说明
ipWhiteList-[]stringip白名单

动态代理流量回收

请求路径

/api/open/app/proxy/return/v2

请求参数

参数二级参数类型必填说明
appUsername-string渠道商主账号 必要
proxyType-int代理类型 必填 104=动态国外 105=动态国内
ipNum-int回收ip数量 单位个 产品如果是按照ip数量购买 使用该字段
productNo-string产品编号
flowNum-int回收流量数量 单位M 产品如果是按照流量购买 使用该字段
remark-string备注 最多250个字符

返回参数

参数二级参数类型必填说明
returnAmount-float64回收代理退还金额 单位元

回调

IPV系统存在三种回调:订单回调,实列回调,产品回调。 回调地址由客户提供,我们统一在后台配置。

假设用户设置的回调地址为 https://api.callback.com/ipv/callback

产生回调方式为,我方发起get请求

https://api.callback.com/ipv/callback?type={callbackType}&no={callbackNo}&op={opType}
名称typenoop说明
订单order订单号订单类型,1创建 2续费 3 释放我方订单编号
实例instance实例编号-我方的实例编号,唯一
产品product产品编号-获取产品库存中的 productNo 字段

用户收到回调处理后,要返回回调结果,否则会多次进行回调,因为网络波动等原因,用户对同一回调,做好幂等性操作。

回调结果定义

{
    "code":"",
    "msg":""
}

成功 code返回值 success 多次回调上一次已经成功,第二次还是返回success

订单回调

IPV系统的订单(开通,续费,释放)都是异步的,即用户下单 -> ipv返回订单 同时开通代理 -> 代理开通完成回调客户回调地址 ->客户通过回调订单返回信息并拉去订单信息

eg

https://api.callback.com/ipv/callback?type=order&no=C20240429162339417081&op=1

alt text

实例回调

当实例产生变化(比如网络不通,停机等)的时候,我方会主动回调

eg

https://api.callback.com/ipv/callback?type=instance&no=c_gz3h2igp6dz9cq3&op=

产品回调

当产品进行变动的时候,我方也会主动回调

eg

https://api.callback.com/ipv/callback?type=product&no=mb_gmfcq7blc&op=

数据字典

代理类型

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

代理协议

编号说明
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(分钟)