承接 searsandrew/briar-rose 相关项目开发

从需求分析到上线部署,全程专人跟进,保证项目质量与交付效率

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

searsandrew/briar-rose

Composer 安装命令:

composer require searsandrew/briar-rose

包简介

NetSuite RESTlet + SuiteTalk REST client for Laravel (OAuth 1.0a TBA, HMAC-SHA256).

README 文档

README

Briar Rose is a Laravel-friendly NetSuite client that supports:

  • SuiteTalk REST Web Services (REST Record) via OAuth 1.0a (HMAC-SHA256)
  • RESTlets via OAuth 1.0a (HMAC-SHA256)
  • Developer ergonomics: relative paths, pagination helpers, hydration helpers, retries/backoff.

Requirements

  • PHP ^8.2
  • Laravel 10 / 11 / 12 (via illuminate components)
  • NetSuite OAuth 1.0a integration (Consumer Key/Secret + Token ID/Secret)

Installation

Composer

composer require searsandrew/briar-rose

Configuration

Briar Rose supports configuration via environment variables (no config publish required).

Required

NETSUITE_ACCOUNT=0000000
NETSUITE_BASE_URL=https://0000000.suitetalk.api.netsuite.com

NETSUITE_CONSUMER_KEY=...
NETSUITE_CONSUMER_SECRET=...
NETSUITE_TOKEN_ID=...
NETSUITE_TOKEN_SECRET=...

Optional REST defaults

NETSUITE_REST_DEFAULT_LIMIT=1000

NETSUITE_REST_RETRY=true
NETSUITE_REST_RETRY_MAX=5
NETSUITE_REST_RETRY_BASE_DELAY_MS=250
NETSUITE_REST_RETRY_MAX_DELAY_MS=5000

Optional RESTlet connections

NETSUITE_RESTLET_BASE_URL=https://0000000.restlets.api.netsuite.com/app/site/hosting/restlet.nl?script=0000&deploy=1
NETSUITE_RESTLET_SCRIPT_ID=...
NETSUITE_RESTLET_DEPLOY_ID=1

Sandbox note: NetSuite sandbox account ids often use underscores in the OAuth realm. Briar Rose will normalize realm formatting for you.

Usage

You can call Briar Rose via the facade:

use Searsandrew\BriarRose\Facades\BriarRose;

SuiteTalk REST Record

Get a record (by internal id)

$response = BriarRose::rest()
    ->record('inventoryItem')
    ->get(0000);

$data = $response->json();

Get only certain fields

$response = BriarRose::rest()
    ->record('inventoryItem')
    ->getFields(0000, ['id', 'itemId', 'displayName']);

$data = $response->json();

List a record collection (one page)

$response = BriarRose::rest()
    ->record('classification')
    ->list(['limit' => 1000, 'offset' => 0]);

$page = $response->json(); // items + links

List all pages (generator)

foreach (BriarRose::rest()->record('classification')->listAll(['limit' => 1000]) as $pageResponse) {
    $page = $pageResponse->json();
}

Iterate all collection items (generator)

foreach (BriarRose::rest()->record('classification')->listItemsAll(['limit' => 1000]) as $item) {
    // Usually contains id + links
    $id = $item['id'] ?? null;
}

Iterate all item IDs (generator)

foreach (BriarRose::rest()->record('classification')->listItemIdsAll(['limit' => 1000]) as $id) {
    // $id is the internal id
}

Filter a collection (q=…)

NetSuite supports a q query parameter for record collection filtering. Briar Rose exposes this directly:

$response = BriarRose::rest()
    ->record('inventoryItem')
    ->where('isinactive IS false', ['limit' => 1000]);

$page = $response->json();

Note: NetSuite’s filtering syntax varies by record type. Refer to NetSuite docs for supported fields/operators.

Hydration helper (list → getFields)

Collection endpoints typically return id + links, not full records. If you want to cache “id + name” locally, hydrate each record.

Generator mode

$endpoint = BriarRose::rest()->record('classification');

foreach ($endpoint->hydrateAll(['limit' => 1000], ['id', 'name']) as $row) {
    // $row includes the requested fields
}

Callback mode

$endpoint = BriarRose::rest()->record('classification');

$endpoint->hydrateAll(
    listQuery: ['limit' => 1000],
    fields: ['id', 'name'],
    onRow: function (array $row) {
        // Your app code: upsert locally, cache, etc.
    }
);

RESTlets

Requesting a RESTlet

You can call any RESTlet deployed to your account via the script method.

BriarRose::restlet()
    ->script(0000, 1)
    ->get(['listId' => 0000]);

Requesting a RESTlet via the script ID + deploy ID

If you have a single RESTlet script deployed, you can set enviromental variables to call it directly:

Note: This is the preferred method for production use if you have a single RESTlet script deployed.

Set the deploy ID in the environment:

NETSUITE_RESTLET_SCRIPT_ID=... // Script ID of the deployed RESTlet
NETSUITE_RESTLET_DEPLOY_ID=1   // Booleans are 1 or 0
$response = BriarRose::restlet('000')
    ->request('GET', ['listId' => 000]);

Requesting a RESTlet via the base URL

If you have a RESTlet base URL set, you can call it like this:

Set the RESTlet base URL in the environment:

NETSUITE_RESTLET_BASE_URL=... // Be sure to set the Script ID of the RESTlet in the URL.
$response = BriarRose::restlet()
    ->request('GET', ['listId' => 000]);

$data = $response->json();

Error handling

All requests return Illuminate\Http\Client\Response. Use standard helpers:

$response->successful();
$response->status();
$response->throw(); // throws RequestException

Retries/backoff are enabled by default for common transient failures (429 / 5xx) and honor Retry-After when present.

Roadmap

  • SuiteQL endpoint helpers (paged queries, incremental sync patterns)
  • Better query/filter helpers
  • Additional first-class endpoints (as needed)

License

MIT

searsandrew/briar-rose 适用场景与选型建议

searsandrew/briar-rose 是一款 基于 PHP 开发的 Composer 扩展包,目前已累计 28 次下载、GitHub Stars 达 0, 最近一次更新时间为 2026 年 03 月 03 日, 在 PHP 生态内属于活跃度较高的组件。

我们在过去多个企业项目中使用过 searsandrew/briar-rose 或与其功能相近的方案,如果你在选型或落地过程中遇到问题,例如 版本兼容、二次改造、私有化封装、与内部系统对接、生产 BUG 排查,欢迎联系我们协助评估。

围绕 searsandrew/briar-rose 我们能提供哪些服务?
定制开发 / 二次开发

基于 searsandrew/briar-rose 在你已有业务上做功能扩展、字段裁剪、UI 适配、与内部账号 / 权限 / 日志系统的深度对接。

BUG 修复 & 性能优化

线上偶发问题、内存泄漏、慢查询、并发异常等排查修复;针对高流量场景做缓存、队列、索引层面的调优。

项目外包 & 长期维护

承接完整的项目从需求 → 设计 → 开发 → 上线 → 长期运维;也可按月提供技术保姆服务。

yvsm@zunyunkeji.com QQ:316430983 微信:yvsm316 西安尊云信息科技 · 专注 PHP / Go / 分布式系统研发

统计信息

  • 总下载量: 28
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 0
  • 点击次数: 26
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 0
  • Watchers: 0
  • Forks: 0
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2026-03-03