简介

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

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

沙盒环境地址: 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 是平台对上游供应商的适配层,渠道商接入时通常不需要实现该部分接口。渠道商只需要:

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

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:库存。
  • durationunit:产品最小购买周期。
  • productType=2:共享产品,下单需要 projectId
  • cidrBlockscidrStatus:是否支持按网段购买。
  • assignIp:是否支持指定 IP 购买。
  • changeProxy:是否支持更换代理。
  • resetPassword:是否支持重置密码。
  • 动态能力字段:drawTypeipWhiteListpwdDrawProxyUserproxyUserFlowLimitflowUseLogproxyGlobalRandomapiDrawGlobalRandom 等。

6. 静态代理开通流程

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

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

  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,保存每个实例的 instanceNoipportusernamepwduserExpiredproductNo。后续续费、释放、更换代理、重置密码都使用平台 instanceNo

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

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

7.1 创建主账号

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

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

核心参数:

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

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

7.2 可选同步实名

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

usernameappUsername 二选一,必须属于当前渠道商。

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 数量售卖的产品需结合产品 ipCountipDuration 规则

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

7.5 查询余额和区域

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

余额查询中的 totalusedbalance 单位为 MB;流量明细中的 usedtotalbalance 单位为 B。

7.6 提取动态代理

账密提取:

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

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

API 提取:

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

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

如产品要求 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 购买仅支持静态产品,产品和供应商都必须支持该能力。productNoassignIpcycleTimes 必填。

9.2 更换代理

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

核心规则:

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

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

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=1limitFlow=-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=1pageSize=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调用 GetProductInfoGetProductStock 刷新产品

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

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

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

11. 幂等和重试建议

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

12. 推荐最小联调清单

  1. GetAppInfo:验证密钥、加密和响应解密。
  2. GetAreaGetCityList:验证地域字典。
  3. GetProductStock:验证产品授权和产品字段解析。
  4. 静态产品:InstanceOpen -> 回调 -> GetOrder -> GetInstance
  5. 动态产品:CreateUser -> InstanceOpen -> ProxyInfo -> DrawByApiDrawByPwd
  6. 后续操作:选择一个实例完成 InstanceRenewInstanceReleaseChangeProxy 的沙盒闭环。
  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-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城市中文名称
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-intisp类型,详见字典 可选
duration-int相对于时长单位的最小购买时长 可选

eg

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

返回数据

参数二级参数类型必填说明
productNo-string产品编号 保持唯一
productName-string商品名 后续该字段逐步废弃,业务不应该依赖该字段。
proxyType-int16代理类型,详见字段定义
useType-string以(,)分割 1=账密 2=白名单 3=uuid 默认为1
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
-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-uint81=不使用桥 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
-asnTypeintASN类型 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=5amount=0count=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-intASN类型 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-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/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-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有效时间 取值范围 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-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回收代理退还金额 单位元

设置子账户流量上限

请求路径

/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(分钟)