简介

本文档是调用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

快速开始

本指南将帮助您快速了解如何使用API开通代理服务。

1. 申请appKey

首先,您需要向我方申请 appKey 和 appSecret 来获得访问权限。

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

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

2. 获取产品列表

使用 get_products 接口获取可购买的产品列表:

请求路径

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

请求参数

参数二级参数类型必填说明
proxyType-[]int是代理类型,详见字典
productNo-string否产品编号 如果传了产品编号,则只返回该编号对应的产品信息
countryCode-string否国家代码 可选
cityCode-string否城市代码 可选

3. 开通实例

使用 create_order 接口开通代理实例:

请求路径

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

请求参数

参数二级参数类型必填说明
appOrderNo-string(32)是渠道商订单号,保持唯一,我方作幂等性检查
params-array是购买代理产品列表
-productNo-string是
-count-int是
-duration-int32是
-cycleTimes-int32是

4. 处理回调并获取订单信息

订单是异步处理的,当订单状态发生变化时,系统会向您配置的回调地址发送通知。

请参考 回调文档 了解回调机制。

收到回调后,使用 getorder 接口获取订单详细信息:

请求路径

/api/open/app/order/v2

请求参数

参数二级参数类型必填说明
orderNo-string(32)是平台订单编号 两个订单号必须至少传一个
appOrderNo-string(32)是渠道商(购买订单)订单号 两个订单号必须至少传一个

5. 获取实例信息

最后,根据订单信息中的实例编号,使用 get_instance 接口获取实例详细信息:

请求路径

/api/open/app/instance/v2

请求参数

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

注意事项

  • 订单为异步开通,具体请查看回调章节
  • 生产环境测试会正式开通代理,产生费用
  • 所有API请求都需要使用AES加密传输,请参考请求统一加密传输

渠道商总体接入流程

本文档基于 cl-cloud 的渠道商开放接口实现和 ipv-sdk 的 Go SDK 封装整理,用于说明渠道商从申请密钥、同步产品、下单、处理回调到后续运维的整体接入顺序。

1. 接入边界

渠道商调用的是平台开放接口,统一路径前缀为:

/api/open/app/{resource}/v2

cl-cloud/modules/open/service/supplier 是平台对上游供应商的适配层,渠道商接入时通常不需要实现该部分接口。渠道商只需要:

  • 向平台申请 appKey、appSecret、产品授权和回调地址配置。
  • 使用 ipv-sdk 或自行按统一加密规则请求 /api/open/app/.../v2。
  • 保存平台返回的 orderNo 和 instanceNo,按回调或轮询补齐订单、实例最终状态。

2. 环境和密钥

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

生产环境会真实开通代理并产生费用。上线前建议先在沙盒完成加密、下单、回调、订单查询和实例查询的完整闭环。

3. 统一加密请求

所有 v2 业务请求外层都是统一报文:

{
  "version": "v2",
  "encrypt": "AES",
  "appKey": "渠道商 appKey",
  "reqId": "每次请求的唯一编号",
  "params": "业务参数 JSON 经 AES-CBC 加密后 Base64"
}

加密规则:

  • params 的明文是具体业务参数 JSON。
  • AES-CBC,PKCS5/PKCS7 Padding。
  • 密钥使用 appSecret,长度必须是 16、24 或 32 字节。
  • IV 使用 appSecret 的前 16 字节。
  • 响应成功时,外层 data 也是 AES-CBC 加密后 Base64,需要用同一个 appSecret 解密。

响应外层结构:

{
  "reqId": "请求编号",
  "code": 200,
  "msg": "ok",
  "data": "加密后的业务响应"
}

如果 code != 200,按 msg 和状态码处理错误,不要按成功响应解析 data。/api/open/app/proxy/user/flow/limit/v2 成功时只返回普通成功结果,不返回加密业务数据。

使用 Go SDK 时,SDK 会自动封装加密、解密和基础错误处理:

client, err := sdk.NewClient(
    "https://sandbox.ipipv.com",
    "your_app_key",
    "your_app_secret",
    sdk.Encrypt_AES,
)

4. 接入总流程

申请密钥和配置回调
  -> 联调统一加密和 GetAppInfo
  -> 同步地域、城市、项目和产品
  -> 按产品类型选择静态或动态开通流程
  -> 提交订单,保存平台 orderNo
  -> 等待 order 回调或轮询 GetOrder
  -> 查询订单实例,保存 instanceNo
  -> 使用实例,后续按需续费、释放、更换代理、重置密码或查询动态流量

5. 前置初始化

5.1 获取渠道商信息

调用 GetAppInfo:

POST /api/open/app/info/v2

用于确认渠道商状态、余额、授信额度、桥配置和回调地址。status=1 才表示渠道商可正常使用。

5.2 同步基础字典

建议启动时或定时同步:

目的接口SDK 方法
洲/国家/州/城市树/api/open/app/area/v2GetArea
城市列表/api/open/app/city/list/v2GetCityList
项目列表/api/open/app/project/list/v2GetProjectList
产品列表/api/open/app/product/query/v2GetProductStock
单产品实时信息/api/open/app/product/info/v2GetProductInfo

产品返回中的关键字段:

  • productNo:平台产品编号,下单优先使用该字段。
  • proxyType:101/102/103 为静态代理,104/105 为动态代理。
  • enable=1:可购买。
  • inventory:库存。
  • duration、unit:产品最小购买周期。
  • productType=2:共享产品,下单需要 projectId。
  • cidrBlocks、cidrStatus:是否支持按网段购买。
  • assignIp:是否支持指定 IP 购买。
  • changeProxy:是否支持更换代理。
  • resetPassword:是否支持重置密码。
  • 动态能力字段:drawType、ipWhiteList、pwdDrawProxyUser、proxyUserFlowLimit、flowUseLog、proxyGlobalRandom、apiDrawGlobalRandom 等。

6. 静态代理开通流程

适用代理类型:101 静态云平台、102 静态国内家庭、103 静态国外家庭、201 WhatsApp 等非动态产品。

  1. 查询并选择产品。 推荐传 productNo 下单。也可以不传 productNo,由平台按 proxyType、countryCode、cityCode、supplierCode、unit、ispType 等条件匹配产品,但推荐只在明确需要自动匹配时使用。

  2. 提交开通订单。

POST /api/open/app/instance/open/v2
SDK: InstanceOpen

核心参数:

参数说明
appOrderNo渠道商订单号,普通订单最长 32 位,同一渠道商下保持唯一
params购买项数组,最多 100 项
params[].productNo平台产品编号,推荐必传
params[].count静态实例数量,单项最大 100,默认 1
params[].cycleTimes购买周期数,推荐使用;表示购买几个产品最小周期
params[].duration兼容字段,不传时使用产品最小周期
params[].extBandWidth额外带宽,单位 Mbps
params[].useBridge0=随渠道商配置,1=不使用桥,2=使用桥
params[].cidrBlocks支持网段购买时可传,所有 count 之和必须等于购买数量
params[].projectId共享产品必填,取项目列表返回的 code
  1. 处理下单响应。 开通接口返回的是异步订单受理结果:
{
  "orderNo": "平台订单号",
  "appOrderNo": "渠道商订单号",
  "amount": "订单金额"
}

此时不代表实例已经可用。渠道商需要保存 orderNo,等待回调或轮询订单。

  1. 查询订单和实例。
POST /api/open/app/order/v2
SDK: GetOrder

可用平台 orderNo 或渠道商 appOrderNo 查询。订单 status:

状态说明
1待处理
2处理中
3处理成功
4处理失败
5部分完成

订单成功或部分完成后,读取返回的 instances,保存每个实例的 instanceNo、ip、port、username、pwd、userExpired、productNo。后续续费、释放、更换代理、重置密码都使用平台 instanceNo。

7. 动态代理开通和提取流程

适用代理类型:104 动态国外、105 动态国内。

7.1 创建主账号

动态代理必须先创建渠道商主账号:

POST /api/open/app/user/v2
SDK: CreateUser

核心参数:

参数说明
appUsername渠道商主账号,同一渠道商下唯一;不传则平台生成
password不传则平台生成
phone、email可选
authType、authName、no实名信息,可创建时传,也可后续同步
status1=正常,2=禁用

创建主账号时,平台会自动创建一个同名代理子账号。若业务需要多个独立子账号,可继续调用 CreateProxyUser。

7.2 可选同步实名

POST /api/open/app/userAuth/v2
SDK: UserAuth

username 和 appUsername 二选一,必须属于当前渠道商。

7.3 可选创建子账号

POST /api/open/app/proxy/user/v2
SDK: CreateProxyUser

核心参数:

参数说明
appMainUsername渠道商主账号;与 mainUsername 二选一
mainUsername平台主账号;与 appMainUsername 二选一
appUsername渠道商子账号,不传则平台生成
password子账号密码,不传则平台生成
limitFlow子账号流量上限,创建时字段为 MB;独立设置上限接口使用 B
status1=正常,2=禁用

7.4 购买动态套餐

动态产品也通过开通接口下单:

POST /api/open/app/instance/open/v2
SDK: InstanceOpen

动态购买项必须关注:

参数说明
productNo动态产品编号
appUsername渠道商主账号,必须已创建
flow动态流量,单位 MB;普通流量型动态产品必填
cycleTimes有固定周期的产品按周期数购买
count默认 1;按 IP 数量售卖的产品需结合产品 ipCount、ipDuration 规则

下单后同样等待 order 回调或轮询 GetOrder。动态套餐对应的实例主要用于记录套餐和余额,实际代理地址通过提取接口获取。

7.5 查询余额和区域

目的接口SDK 方法
动态余额/api/open/app/proxy/info/v2ProxyInfo
动态区域/api/open/app/product/area/v2ProductAreaList

余额查询中的 total、used、balance 单位为 MB;流量明细中的 used、total、balance 单位为 B。

7.6 提取动态代理

账密提取:

POST /api/open/app/proxy/draw/pwd/v2
SDK: DrawByPwd

使用渠道商子账号 appUsername。sessTime 默认为 5 分钟,通常支持 1 到 120 分钟;传 0 或 -1 表示每次切换代理。addressCode 可传洲、国家、州省或城市代码,空值表示混播,前提是产品支持。

API 提取:

POST /api/open/app/proxy/draw/api/v2
SDK: DrawByApi

使用渠道商主账号 appUsername。返回 proxyUrl,业务方再访问该 URL 获取代理结果。protocol 默认为 socks5,支持 socks5、http;returnType 支持 txt、json。

如产品要求 IP 白名单,提取前先调用:

POST /api/open/app/proxy/addIpWhiteList/v2
POST /api/open/app/proxy/delIpWhiteList/v2

8. 续费、释放和售后

8.1 续费静态实例

POST /api/open/app/instance/renew/v2
SDK: InstanceRenew

核心规则:

  • appOrderNo 同一渠道商下唯一,最长 32 位。
  • instances 不能为空,不能重复,单次最多 100 个。
  • 只支持静态代理;动态代理不支持续费接口。
  • 实例必须属于当前渠道商,且状态为运行中。
  • 实例不能超过供应商续费宽限期。
  • cycleTimes 优先;不传时默认按原购买周期续费。

续费是异步订单,返回平台 orderNo 后继续按回调或 GetOrder 查询最终结果。

8.2 释放静态实例

POST /api/open/app/instance/release/v2
SDK: InstanceRelease

注意:请求参数里的 orderNo 是渠道商释放订单号,不是平台订单号。

核心规则:

  • 渠道商释放订单号同一渠道商下唯一,最长 32 位。
  • instances 不能为空,不能重复,单次最多 100 个。
  • 只支持运行中的静态代理;动态代理不支持释放接口。
  • 已转移、已释放、正在释放、超过无理由释放期限或超过渠道商释放额度的实例会失败。

释放同样是异步订单,最终结果以回调后查询订单为准。

8.3 售后释放

POST /api/open/app/instance/aftersale/v2
SDK: InstanceAfterSale

该能力需要渠道商单独开通。适用于下架、断网、卡顿、地区异常、黑白名单、业务不支持等售后场景。请求中 orderNo 是渠道商售后释放订单号。

9. 可选能力

9.1 指定 IP 购买

先查询指定 IP 是否可购买:

POST /api/open/app/assign/ip/info/v2
SDK: GetAssignIpInfo

确认 canBuyStatus=true 后提交指定 IP 开通:

POST /api/open/app/instance/open/assign/ip/v2
SDK: InstanceOpenAssignIp

指定 IP 购买仅支持静态产品,产品和供应商都必须支持该能力。productNo、assignIp、cycleTimes 必填。

9.2 更换代理

POST /api/open/app/instance/change/v2
SDK: ChangeProxy

核心规则:

  • 渠道商和供应商都必须开通更换代理能力。
  • 产品列表返回 changeProxy=1 才能作为判断依据之一。
  • 实例必须属于当前渠道商且为运行中。
  • appOrderNo 为更换代理订单号,最长 64 位,同一渠道商下唯一。
  • 同一实例同一时间只允许一个更换代理任务处理中。
  • reason 最长 64 字符。

更换代理成功后,实例的 IP、端口、账号密码等连接信息会被更新。收到 op=5 的订单回调后,通过 GetOrder 或 GetInstance 获取最新实例信息。

9.3 重置实例密码

POST /api/open/app/instance/reset/password/v2
SDK: ResetProxyPassword

核心规则:

  • 以产品 resetPassword=1 和实际供应商能力为准。
  • resetNo 必填,最长 32 位,同一渠道商下用于幂等。
  • instanceNoList 不能为空,不能重复。
  • 实例必须属于当前渠道商且为运行中。
  • 重复提交相同 resetNo 时,实例列表必须一致,平台返回第一次请求的处理结果。

返回结果中 status 为 1=待处理、2=处理中、3=成功、4=失败;newPassword 为空表示尚未成功生成或处理失败。

9.4 动态子账号流量上限

POST /api/open/app/proxy/user/flow/limit/v2
SDK: SetProxyUserFlowLimit

产品和供应商必须支持 proxyUserFlowLimit=1。limitFlow=-1 表示不限制;如果设置正数,单位为 B,且不能小于 1024000B。

查询子账号信息:

POST /api/open/app/proxy/user/info/v2
SDK: GetProxyUserInfo

9.5 动态流量明细和回收

流量明细:

POST /api/open/app/proxy/flow/use/log/v2
SDK: ProxyFlowUseLog

默认查询近 7 天;分页默认 page=1、pageSize=10,最大 100。

流量回收:

POST /api/open/app/proxy/return/v2
SDK: DynamicProxyReturn

流量型产品使用 flowNum,单位 MB;按 IP 数量购买的产品使用 ipNum。平台会校验当前剩余量并按产品授权价格计算退回金额。

10. 回调处理

平台在订单、实例或产品变化时,向渠道商配置的回调地址发起 GET 请求:

{callbackUrl}?type={type}&no={no}&op={op}

常见回调:

typenoop处理建议
order平台订单号1=创建,2=续费,3=释放,5=更换代理调用 GetOrder 拉取订单和实例最终状态
instance平台实例编号实例变化操作类型调用 GetInstance 拉取实例最新信息
product产品编号0调用 GetProductInfo 或 GetProductStock 刷新产品

渠道商回调接口必须返回 JSON:

{
  "code": "success",
  "msg": "ok"
}

如果没有返回 code=success,平台会重试。渠道商需要按 type + no + op 做幂等;同一个回调已经处理成功后,再次收到也应返回 success。

11. 幂等和重试建议

  • 普通开通、续费、释放、售后订单使用渠道商订单号幂等,建议最长 32 位。
  • 更换代理使用独立 appOrderNo 幂等,最长 64 位。
  • 重置密码使用 resetNo 幂等,最长 32 位。
  • 同一个订单号不要跨业务类型复用;例如开通订单号不能再用于续费或释放。
  • 网络超时或未收到响应时,使用相同 reqId 和相同业务单号重试。
  • 如果接口已返回平台 orderNo,后续以订单查询和回调为准,不要重复生成新的渠道商订单号补单。
  • 保存平台 orderNo、渠道商订单号、instanceNo、productNo、账号映射关系,便于后续续费、释放、售后和对账。

12. 推荐最小联调清单

  1. GetAppInfo:验证密钥、加密和响应解密。
  2. GetArea、GetCityList:验证地域字典。
  3. GetProductStock:验证产品授权和产品字段解析。
  4. 静态产品:InstanceOpen -> 回调 -> GetOrder -> GetInstance。
  5. 动态产品:CreateUser -> InstanceOpen -> ProxyInfo -> DrawByApi 或 DrawByPwd。
  6. 后续操作:选择一个实例完成 InstanceRenew、InstanceRelease 或 ChangeProxy 的沙盒闭环。
  7. 回调:验证订单回调重复通知时仍返回 success。

版本更新

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

版本发布时间更新内容
v2.0.102026-07-30静态代理开通成功后,订单和实例信息增加asnType ASN类型字段
v2.0.92026-06-09增加更换代理接口,产品库存增加changeProxy能力字段,订单查询和回调增加订单类型5=更换代理
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-string是appKey 渠道商号 找我方获取
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否城市中文名称
cityEnName-string否城市英文名称
stateCode-string是省、州代码
stateName-string否省、州中文名称
stateEnName-string否省、州英文名称
countryCode-string是国家代码
countryName-string否国家中文名称
countryEnName-string否国家英文名称
areaCode-string是洲代码
areaName-string否洲中文名称
areaEnName-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-int否isp类型,详见字典 可选
duration-int否相对于时长单位的最小购买时长 可选

eg

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

返回数据

参数二级参数类型必填说明
productNo-string是产品编号 保持唯一
productName-string否商品名 后续该字段逐步废弃,业务不应该依赖该字段。
proxyType-int16是代理类型,详见字段定义
useType-string是以(,)分割 1=账密 2=白名单 3=uuid 默认为1
protocol-string是1=socks5 2=http 3=https 4=ssh 默认是socks5
useLimit-int8是1=出口ip国外 2=出口ip国内 3=无限制
sellLimit-int8是1=大陆可售 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-int否ip类型 1=ipv4 2=ipv6 3=随机 默认1
ispType-int否isp类型: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-int否cpu数
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
-projectListarray否该网段项目列表
offlineCidrBlocks-array否最近1个月下架的网列表
-cidrstring否网段 比如 192.168.0.0/24
-offlineTimestring否网段下架时间 格式 2024-06-27 12:00:00
proxyEverytimeChange-int否动态代理账密提取 是否支持每次更换代理 1=是 -1=否 默认为否 新增于2025/08/14 部分动态代理产品支持
proxyGlobalRandom-int否动态代理提取 是否支持全球混播 1=是 -1=否 默认为否 新增于2025/08/14 部分动态代理产品支持
apiDrawGlobalRandom-int否动态代理Api提取是否支持全球混播 1=是 -1=否 默认为否 新增于2025/09/5 部分动态代理产品支持
ipWhiteList-int否动态代理是否支持IP白名单功能 1=是 -1=否 默认为否 新增于2025/09/5 部分动态代理产品支持
pwdDrawProxyUser-int否动态代理账密提取是否支持子账号 1=是 -1=否 默认为否 新增于2025/09/5 部分动态代理产品支持
proxyUserFlowLimit-int否动态代理子账号是否支持流量上限管理 1=是 -1=否 默认为否 新增于2025/09/5 部分动态代理产品支持
flowUseLog-int否动态代理是否支持流量明细查询 1=是 -1=否 默认为否 新增于2025/09/5 部分动态代理产品支持
pwdDrawSessionRange-string否动态代理账密流量提取持续时间范围 单位分钟 新增于2025/09/5 部分动态代理产品支持
flowConversionBase-int否动态代理流量进制转化基准 1000 或者 1024 0表示未知或不支持 新增于2025/09/5 部分动态代理产品支持
changeProxy-int否代理是否支持更换代理 1=支持 -1=不支持 默认不支持。调用更换代理接口前请以该字段为准,同时需渠道商已开通更换代理能力
projectList-array否产品项目列表
-codestring否项目code
-inventoryint否项目库存
productType-int否产品是共享还是独享 1=独享 2=共享 默认1
备注:
  • 只有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是商品编号,推荐👍(按商品编号购买的时候,后面8项商品筛选条件无意义)→着重看下面红色部分备注
-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) 产品定义的时长单位
-productType-int否(7) 产品定义的类型 1=独享 2=共享
-count-int是购买数量 (实例个数)静态必填 默认1 一次最大20
-cycleTimes-int32是购买时长周期数,此字段对有时长的产品有意义,默认1表示产品的duration个unit的时长,详见 →备注
-renew-bool否是否续费 1续费 默认0该字段已废弃,不再生效
-extBandWidth-int32否额外增加带宽 单位Mbps
-appUsername-string否主账号,开通动态代理的时候必填(必须在平台上注册过)
-flow-int是动态流量,静态的字段无意义 动态必填 单位MB
-useBridge-uint8否1=不使用桥 2=使用桥 不传跟随app设置 默认
-projectId-string否购买项目code
-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(64)是渠道商订单号 两个订单号必须至少传一个;普通订单最长32位,更换代理订单最长64位
page-int否页码 默认1
pageSize-int是每页显示数量 默认10 最大100

返回数据

参数二级参数类型必填说明
orderNo-string是平台订单号
appOrderNo-string是渠道商(购买订单)订单号
type-int8是订单类型 1=新建 2=续费 3=释放 5=更换代理
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
-asnTypeint是ASN类型 0=未知 1=ISP 2=Hosting 3=Business
-protocolstring否协议类型 多个用英文逗号分隔 1=socks5 2=http 3=https 4=ssh
-ipstring是代理地址 用户实际代理访问使用
-portuint否代理端口
-regionIdstring否区域地址
-countryCodestring是国家代码
-cityCodestring是城市代码
-useTypestring是使用方式 多个用英文逗号分隔 1=账密 2=ip白名单 3=uuid(uuid写password内) 默认为1
-usernamestring是账户名或uuid 动态为平台主账号
-pwdstring是密码
-orderNostring是创建该实例的平台订单号
-userExpiredint64否到期时间 时间戳秒
-flowTotalfloat64是总流量 单位MB 如果是ip数方式 表示ip个数
-flowBalancefloat64否剩余流量
-statusint8否实例状态 1=待创建 2=创建中 3=运行中 6=已停止 10=关闭 11=释放
-renewint8否实例是否自动续费 1 自动续费 该字段已废弃
-bridges[]string否桥地址列表
-openAttime.Time是开通时间
-renewAttime.Time是最后成功续费时间
-releaseAttime.Time是释放成功时间
-productNostring是产品编号
-extendIpstring否扩展地址,部分产品该字段有值
-projectIdstring否项目code
备注:
  • 更换代理订单不会生成新的实例编号,type=5,amount=0,count=1。
  • 更换代理成功后,instances 返回当前实例的最新代理连接信息。
  • asnType 为实例 IP 的 ASN 网络类型;无法识别或尚未完成识别时返回 0。
  • status 为订单状态,3=处理成功 4=处理失败 5=部分完成,这三个状态都是最终状态。

获取实例

获取实例的

请求路径

/api/open/app/instance/v2

请求参数

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

返回数据

参数二级参数类型必填说明
instanceNo-string是平台实例编号(渠道商续费和释放操作使用该编号)
proxyType-uint是代理类型 101=静态云平台 102=静态国内家庭 103=静态国外家庭 104=动态国外 105=动态国内 201=whatsapp
asnType-int是ASN类型 0=未知 1=ISP 2=Hosting 3=Business
protocol-string否协议类型 多个用英文逗号分隔 1=socks5 2=http 3=https 4=ssh
ip-string是代理地址 用户实际代理访问使用
port-uint否代理端口
regionId-string否区域地址
countryCode-string是国家代码
cityCode-string是城市代码
useType-string是使用方式 多个用英文逗号分隔 1=账密 2=ip白名单 默认1
username-string是账户名或uuid 动态代理为平台主账号
pwd-string是代理密码 动态代理不适用
orderNo-string是创建该实例的平台订单号
userExpired-int64否到期时间 时间戳秒
flowTotal-float64是总流量 单位MB 如果是ip数方式 表示ip个数
flowBalance-float64否剩余流量
status-int8否状态 1=待创建 2=创建中 3=运行中 6=已停止 10=关闭 11=释放
renew-int8否是否自动续费 1 自动续费 该字段已废弃
bridges-[]string否桥地址列表
openAt-time.Time是开通时间
renewAt-time.Time是最后成功续费时间
releaseAt-time.Time是释放成功时间
productNo-string是产品编号
extendIp-string否扩展地址,部分产品该字段有值
projectId-string否项目code

asnType 为实例 IP 的 ASN 网络类型;无法识别或尚未完成识别时返回 0。

更换代理

请求路径

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

请求参数

主接口中的params参数

参数二级参数类型必填说明
instanceNo-string是平台实例编号,必须是当前渠道商名下运行中的实例
appOrderNo-string(64)是渠道商更换代理订单号,同一渠道商下保持唯一;重复提交同一个订单号会返回已有更换订单状态,不会重复更换
targetProductNo-string否目标平台产品编号,预留字段;未传时由平台按当前实例和供应商规则更换
targetCidrBlocks-array否目标IP网段,预留字段
-cidrstring否目标网段,例如 192.168.0.0/24
-countint否目标网段数量
reason-string否更换原因,最多64个字符

eg

{
    "instanceNo": "c_gz3h2igp6dz9cq3",
    "appOrderNo": "CHANGE20260609143000",
    "reason": "代理不可用"
}

返回数据

参数二级参数类型必填说明
orderNo-string是平台更换代理订单号
appOrderNo-string是渠道商更换代理订单号,原样返回
instanceNo-string是平台实例编号
status-int8是更换状态 1=待处理 2=处理中 3=处理成功 4=处理失败
备注:
  • 更换代理为异步操作。接口返回后会创建更换代理订单并进入后台处理,处理完成后按订单回调,具体查看回调章节。
  • 更换成功后,原平台实例编号不变,实例的IP、端口、账号、密码等代理连接信息可能会更新。收到回调后请通过获取订单信息或获取实例信息拉取最新实例信息。
  • 获取订单信息支持通过平台更换代理订单号 orderNo 或渠道商更换代理订单号 appOrderNo 查询更换结果,订单类型为 5=更换代理。
  • 同一实例同一时间只允许一个更换代理任务处理中。只有产品返回 changeProxy=1 且渠道商已开通更换代理能力时,才可调用该接口。

续费代理

请求路径

/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-string是app名称
coin-string是账户余额
credit-string是授信额度
useBridge-int否使用桥 1 不使用 2使用
callbackUrl-string否回调地址
status-int否1正常 -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--uint8否1=不使用桥 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/project/list/v2

请求参数

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

返回数据

参数二级参数类型必填说明
code-string是项目代码
name-string否项目名称
status-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-uint8否vsp
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-string否vsp

返回数据

参数二级参数类型必填说明
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[]string否ip白名单
-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否有效时间 取值范围 0-90 单位分钟 默认5分钟 如果传0 则代表每次更新(该功能仅部分产品支持,不支持的则默认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-string是ip地址
proxyType-uint16是代理类型
productNo-string是产品编号

返回数据

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

删除ip白名单

请求路径

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

请求参数

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

返回数据

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

动态代理流量回收

请求路径

/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否回收代理退还金额 单位元

设置子账户流量上限

请求路径

/api/open/app/proxy/user/flow/limit/v2

请求参数

参数二级参数类型必填说明
appUsername-string是渠道商子账号必须先成功调用创建子账户接口
productNo-string是平台产品编号
limitFlow-int是动态流量上限 单位B -1表示不限制
remark-string(255)否备注

返回数据

无

获取子账户信息

请求路径

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

请求参数

参数二级参数类型必填说明
appUsername-string是渠道商子账号必须先成功调用创建子账户接口
productNo-string是平台产品编号

返回数据

参数二级参数类型必填说明
appUsername-string是渠道商子账号
productNo-string是平台产品编号
username-string是平台子账号
password-string是子账号密码
status-int是子账号状态 1=正常 2=禁用
remark-string是备注
limitFlow-int64是动态流量上限 -1表示不限制 单位B
useFlow-int64是使用流量 单位B

回调

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释放 5更换代理我方订单编号
实例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(分钟)