简介

本文档是调用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产品编号 如果传了产品编号,则只返回该编号对应的产品信息
countryCode-string国家代码 可选
cityCode-string城市代码 可选
supplierCode-string供应商代码 可选
unit-int时长单位,详见字典 可选
ispType-intisp类型,详见字典 可选
duration-int相对于时长单位的最小购买时长 可选

eg

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

返回数据

参数二级参数类型必填说明
productNo-string产品编号 保持唯一
productName-string商品名
proxyType-int16代理类型,详见字段定义
useType-string以(,)分割 1=账密 2=白名单 3=uuid
protocol-string1=socks5 2=http 3=https 4=ssh 默认是socks5
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可以 不为1表示该产品已下线,不可购买不可续费
supplierCode-string供应商代码
ipCount-int动态代理按照ip数方式 最小购买和计价ip数 单位个
ipDuration-int动态代理按照ip数方式 时长 单位分钟
assignIp-int是否支持指定ip开通静态代理 1=是 -1=否 默认为-1
parentNo-string父产品编号
cidrStatus-int是否支持ip网段功能 1=是 -1=否 默认为-1
oneDay-int是否支持1天购买 1是
cidrBlocks-array支持网段及数量
-cidrstring网段 比如 192.168.0.0/24
-countint该网段数量
-asnstring该网段属于哪个asn
-ispstring该网段属于哪个运营商 比如ATT
备注:
  • 只有enable = 1 且 inventory 大于 0 的产品可以购买
  • 产品列表的时长:duration 和单位:unit的结合,代表这款产品的最小时长
  • ip段如果上一次在产品里,这次拉去没有的话,代表该段已经下线,不可购买,不可续费

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购买代理产品列表 最多支持100个
-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)平台订单编号 两个订单号必须至少传一个
appOrderNo-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代理地址 用户实际代理访问使用
-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产品编号
-extendIpstring扩展地址,部分产品该字段有值

获取实例

获取实例的

请求路径

/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代理地址 用户实际代理访问使用
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产品编号
extendIp-string扩展地址,部分产品该字段有值

续费代理

请求路径

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

请求参数

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

参数二级参数类型必填说明
appOrderNo-string渠道商订单号,保持唯一,我方或作幂等性检查,同样的订单号不重复处理
instances-array实例列表
-instanceNostring平台实例编号
-durationint32可选 时长 默认1
-cycleTimesint32可选 购买时长周期数,此字段对有时长的产品有意义,默认1表示产品的duration个unit的时长,详见 →备注

返回数据

参数二级参数类型必填说明
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账户余额
credit-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-bool购买状态(false:不可购买,true:可购买)

动态

创建或修改主账户

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

请求路径

/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续费失败,实例不存在
10012续费失败,余额不足
10013续费失败,同一个渠道商订单不能重复续费 (2025-02-25)
10021释放失败,实例不存在
10022释放失败,实例已超过释放周期
10031获取订单失败,订单不存在
10041获取实例失败,实例不存在
10051创建用户失败,用户名已存在
10052获取用户失败,用户不存在
10061创建子账户失败,用户名已存在
10062获取子账户失败,用户不存在
10061创建子账户失败,主账户不存在
10061创建子账户失败,主账户已禁用
10071分配流量失败,主账户不存在或者被禁用
10072分配流量失败,余额不足
10081回收流量失败,余额不足
10091参数错误,region不存在
10092参数错误,username子账户不存在
10093参数错误,sessTime取值范围1-120(分钟)