ARNPROXY

余额购买

POST/account/api/v1/orders/create
请明确确认操作

此操作可能更改记录、余额或服务设置。请先阅读范围和注意事项。结果不明确时,应查询同一操作,不要另建操作。

授权

AuthorizationBearer YOUR_ARNPROXY_API_KEY
所需权限purchases
Acceptapplication/json
Content-Typeapplication/json
Idempotency-Key16–100 个字母、数字、_ 或 -。保存并对同一操作重复使用相同值。

参数

名称类型说明
Idempotency-Key
header必填
string16–100 个字母/数字/_/-。操作及状态查询使用同一值,不可用于不同请求体。
product_id
body必填
integerproducts 返回的产品 ID,1–2147483647。
lines
body必填
object[]同一产品的 1–20 条不同位置行;location_id 不可重复,代理总数最多 100000。
lines[].location_id
body必填
integer所选产品目录中的位置 ID。
lines[].time_id
body必填
integer此位置提供的租期 ID。
lines[].quantity
body必填
integer1–100000;同时受 product.minimum_quantity 限制。
lines[].purpose_id
body必填
integer当前用途流程请发送 201。
lines[].subpurpose_id
body必填
integer201 下的有效子用途,其他用途使用 -1。
lines[].other_purpose
body条件必填
stringsubpurpose_id=-1 时必填,1–30 个 UTF-8 字符;其他情况忽略。
currency
body必填
string同一报价中的 TRY 或 USD,必须与账户币种一致。
expected_total_minor
body必填
integer同一报价中的 total_minor,必须为整数,不能用小数金额或字符串。范围 1–999999999999。
terms
body必填
boolean明确确认必须发送 JSON 布尔值 true,不能发送字符串 "true"。
promo_code
body可选
string可选优惠码,最多 100 字节。报价与购买/续期时必须保持相同。
默认值: ""
auth
body可选
object交付认证,默认为 {"mode":"username_password"}。不会授予主凭据管理权限。
auth.mode
body条件必填
string提供 auth 时必须填写 username_password 或 ip;不要在此指定用户名/密码。
auth.ip
body条件必填
string仅 auth.mode=ip 时需要 IPv4;username_password 时省略。

请求体

请用相应目录、报价或范围中的值替换 YOUR_/FROM_。示例中的确认值为 false;只有明确同意真实操作时才确认。

request.json
{
    "product_id": "FROM_PRODUCTS",
    "lines": [
        {
            "location_id": "FROM_CATALOG",
            "time_id": "FROM_CATALOG",
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": "FROM_CATALOG_CHILDREN"
        }
    ],
    "currency": "FROM_QUOTE",
    "expected_total_minor": "FROM_QUOTE_TOTAL_MINOR",
    "promo_code": "",
    "terms": false
}

更多使用示例

ID 和价格仅供示例,请使用目录及同一次报价中的实际值。JSON ID 和 expected_total_minor 必须是数字。示例刻意保留 terms=false;只有客户明确同意实际付费操作后才应发送 terms=true。

同一产品类型的两个国家

一个 product_id 下最多可包含 20 个不同的 location_id。每个国家生成独立订单,关联结账按一张发票处理。数量折扣按每个国家自己的数量计算。

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        },
        {
            "location_id": 11,
            "time_id": 102,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": 202
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 2000,
    "promo_code": "",
    "terms": false
}

“其他”用途

选择“其他”时,发送 subpurpose_id=-1 和包含 1–30 个字符的 other_purpose。其他选项无需 other_purpose。purpose_id 仍为 201。

application/json
{
    "product_id": 5,
    "lines": [
        {
            "location_id": 10,
            "time_id": 101,
            "quantity": 1,
            "purpose_id": 201,
            "subpurpose_id": -1,
            "other_purpose": "Custom purpose"
        }
    ],
    "currency": "TRY",
    "expected_total_minor": 1000,
    "promo_code": "",
    "terms": false
}

请求示例

cURL
printf 'Authorization: Bearer %s\n' "$ARNPROXY_API_KEY" |
  curl --silent --show-error --header @- \
    --header 'Accept: application/json' \
    --connect-timeout 10 --max-time 30 \
    --header 'Idempotency-Key: YOUR_SAVED_OPERATION_KEY' \
    --request POST --header 'Content-Type: application/json' \
    --data-binary @request.json \
    'https://www.arnproxy.com/account/api/v1/orders/create'

本页不会执行示例。请将 API 密钥保存在服务器环境变量中,不要放入 URL 或浏览器代码。POST 示例需准备 request.json。

响应

201成功响应
application/json
{
    "ok": true,
    "data": {
        "state": "accepted",
        "delivery_state_at_acceptance": "queued",
        "currency": "TRY",
        "total": "10.00",
        "total_minor": 1000,
        "checkout_group_id": null,
        "orders": [
            {
                "id": 10001,
                "number": "1000010001",
                "location_id": 10,
                "time_id": 101,
                "quantity": 1,
                "total": "10.00"
            }
        ],
        "accepted_at": "2030-01-01T12:00:00+00:00",
        "automatic_renewal": false,
        "replayed": false
    },
    "meta": {
        "request_id": "000000000000000000000001",
        "phase": "public_v1",
        "source": "arnproxy_records"
    }
}
响应字段与类型
名称类型说明
okboolean成功标志;为 false 时请检查 error.code。
dataobject操作特定结果;示例均为演示用合成数据。
data.statestring记录/操作状态。accepted 不表示已交付,completed 不表示连接测试成功。
data.delivery_state_at_acceptancestringdelivery state at acceptance 的操作特定值。请保留返回类型并查阅行为说明。
data.currencystring账户交易币种:TRY 或 USD。
data.totalstring金额;为避免精度损失,请保留返回的字符串/整数类型。
data.total_minorinteger最小货币单位整数:1000 表示 10.00 TRY/USD。
data.checkout_group_idinteger|nullcheckout group id 的操作特定值。请保留返回类型并查阅行为说明。
data.ordersarrayorders 的操作特定值。请保留返回类型并查阅行为说明。
data.orders[]objectorders 的操作特定值。请保留返回类型并查阅行为说明。
data.orders[].idinteger相关 ARNPROXY 记录 ID,请勿替换为上游内部 ID。
data.orders[].numberstring显示订单号,不能替代要求 id 的字段。
data.orders[].location_idinteger本地目录的位置或产品类型 ID。
data.orders[].time_idinteger本地租期/GB 方案记录 ID,不是天数或 GB 数量。
data.orders[].quantityinteger所选或订购的代理数量。
data.orders[].totalstring金额;为避免精度损失,请保留返回的字符串/整数类型。
data.accepted_atstringAPI 返回格式的时间戳;示例日期为合成数据。
data.automatic_renewalbooleanautomatic renewal 的操作特定值。请保留返回类型并查阅行为说明。
data.replayedboolean返回同一操作已保存的结果,不代表发生新的扣款或操作。
metaobject请求关联与数据来源元信息。
meta.request_idstring此 HTTP 请求的跟踪 ID,不是操作键或订单 ID。
meta.phasestringphase 的操作特定值。请保留返回类型并查阅行为说明。
meta.sourcestring数据来源;本地记录与实时上游查询属于不同证据。

错误响应

HTTP 401 · INVALID_API_KEY
{
  "ok": false,
  "error": { "code": "INVALID_API_KEY" },
  "meta": { "request_id": "000000000000000000000001" }
}

身份验证和参数校验可能在执行前拒绝请求。请查阅错误参考,联系支持时保留 request_id。切勿发送密钥或密码。 错误与限制 →

行为与重要说明

  • 从 products/catalog 获取 ID。quote 行仅含 location_id、time_id、quantity。purchase 行还必须有 purpose_id=201 和所选 subpurpose_id。
  • 多国购买生成独立订单和一张多行发票,折扣按国家计算。accepted 不表示已交付,请跟踪 order_delivery 和 order_proxies。
  • 超时/5xx 不能证明写操作失败。请使用原始 Idempotency-Key 查询状态,不要换新键重试;GET 不会重发更改。
  • 标准订单不应让客户选择两次。请在 catalog.purposes 中找到 id=201,并仅展示其 children。purchase 中的 purpose_id 固定为整数 201,subpurpose_id 为所选子项的 ID。保留层级结构是为了兼容现有集成。
  • 选择“其他”时,发送 subpurpose_id=-1 和包含 1–30 个字符的 other_purpose。其他选项无需 other_purpose。purpose_id 仍为 201。
  • 一个 product_id 下最多可包含 20 个不同的 location_id。每个国家生成独立订单,关联结账按一张发票处理。数量折扣按每个国家自己的数量计算。
跟踪同一操作查询购买状态 →

搜索当前语言。关闭: Esc