firebear/netsuite-php

NetSuite PHP API 包装器

v2019.1.2 2020-02-24 13:14 UTC

README

License Packagist

NetSuite 的 PHP API 客户端包,从NetSuite PHP 工具包中提取。

将其添加到您的项目中

使用 composer 需求

V2 处于 Alpha 阶段

composer require ryanwinchester/netsuite-php

v2 的变更

  • 修改了命名空间
  • 显著简化了 NetSuiteClient
  • 添加了一个使用环境变量进行配置的实例创建便利方法
  • 改进了日志记录,即使在 SOAP 调用中抛出异常也会记录日志。

快速入门

实例化 NetSuiteService 类

以下示例假设您已执行此操作。

require 'vendor/autoload.php';

use NetSuite\NetSuiteService;

$config = array(
   // required -------------------------------------
   "endpoint" => "2019_1",
   "host"     => "https://webservices.netsuite.com",
   "email"    => "jDoe@netsuite.com",
   "password" => "mySecretPwd",
   "role"     => "3",
   "account"  => "MYACCT1",
   "app_id"   => "4AD027CA-88B3-46EC-9D3E-41C6E6A325E2",
   // optional -------------------------------------
   "logging"  => true,
   "log_path" => "/var/www/myapp/logs/netsuite"
);

$service = new NetSuiteService($config);

您还可以将配置放置在环境变量中。这在部署配置文件不希望或实际可行的托管环境中很有用。您可以在包含示例值的 included .env.example 文件中找到有效的键。

以前,使用 ENV 数据实例化 NetSuiteClient 需要使用静态方法 createFromEnv。此方法现在已标记为 已弃用,如果您正在使用它,请将您的代码更改为使用标准构造函数,该构造函数将为您提取 $_ENV 超全局中的配置。

require 'vendor/autoload.php';

use NetSuite\NetSuiteService;

$service = new NetSuiteService();

特定账户的数据中心 URL

从 2019_1 开始,此库提供了使用每个请求的特定账户数据中心 URL 的支持。实际上,此查找确实有一定的开销成本。因此,我建议仅在您的 NetSuite 集成方式使您连接较少,批量处理集成的情况下使用此功能。如果您的集成方式是频繁、短暂地从 NetSuite 发送请求,那么您可能更喜欢显式提供数据中心 URL 并从每个会话中删除查找。

// To use your own defined data center URL (or sandbox, for instance):
$config['host'] = 'https://123456789.suitetalk.api.netsuite.com';

// To allow the service to get the correct URL for your account on the fly,
// use the legacy webservices url.
$config['host'] = 'https://webservices.netsuite.com';

检索客户记录

use NetSuite\Classes\GetRequest;
use NetSuite\Classes\RecordRef;

$request = new GetRequest();
$request->baseRef = new RecordRef();
$request->baseRef->internalId = "123";
$request->baseRef->type = "customer";

$getResponse = $service->get($request);

if ( ! $getResponse->readResponse->status->isSuccess) {
    echo "GET ERROR";
} else {
    $customer = $getResponse->readResponse->record;
}

搜索以 "j" 开头的客户电子邮件

use NetSuite\Classes\SearchStringField;
use NetSuite\Classes\CustomerSearchBasic;
use NetSuite\Classes\SearchRequest;

$service->setSearchPreferences(false, 20);

$emailSearchField = new SearchStringField();
$emailSearchField->operator = "startsWith";
$emailSearchField->searchValue = "j";

$search = new CustomerSearchBasic();
$search->email = $emailSearchField;

$request = new SearchRequest();
$request->searchRecord = $search;

$searchResponse = $service->search($request);

if (!$searchResponse->searchResult->status->isSuccess) {
    echo "SEARCH ERROR";
} else {
    $result = $searchResponse->searchResult;
    $count = $result->totalRecords;
    $records = $result->recordList;

    echo $count . " records were found.";
}

添加新客户

use NetSuite\Classes\Customer;
use NetSuite\Classes\RecordRef;
use NetSuite\Classes\AddRequest;

$customer = new Customer();
$customer->lastName = "Doe";
$customer->firstName = "John";
$customer->companyName = "ABC company";
$customer->phone = "123456789";
$customer->email = "joe.doe@abc.com";

$customer->customForm = new RecordRef();
$customer->customForm->internalId = -8;

$request = new AddRequest();
$request->record = $customer;

$addResponse = $service->add($request);

if (!$addResponse->writeResponse->status->isSuccess) {
    echo "ADD ERROR";
} else {
    echo "ADD SUCCESS, id " . $addResponse->writeResponse->baseRef->internalId;
}

添加带有自定义字段的销售订单

此订单创建示例不是完整的示例,但显示了您如何一般地设置和添加对象,以及您如何添加在插入时销售上的自定义字段。

use NetSuite\Classes\AddRequest;
use NetSuite\Classes\CustomFieldList;
use NetSuite\Classes\RecordRef;
use NetSuite\Classes\SalesOrder;
use NetSuite\Classes\StringCustomField;

$sale = new SalesOrder();

// Associate a customer record with this order
$sale->entity = new RecordRef();
$sale->entity->type = 'customer';
$sale->entity->internalId = $myCustomerInternalId;

// Set the date of the order
$sale->tranDate = $myOrderDate;

// Set the shipping method and price for the order
$sale->shipMethod = new RecordRef();
$sale->shipMethod->internalId = $myShipMethodId;
$sale->shippingCost = $myShippingTotal;

// Look at the SalesOrder class definition for a list of all the available
// properties and their types that you can use on a sales order in NetSuite.
// You'll need to add items, addresses, status, etc.

// Create a sample string-type custom field to the order which represents
// the ID of the order in our source platform:
$cfOrderNum = new StringCustomFieldRef();
$cfOrderNum->scriptId = 'custbody_order_num';
$cfOrderNum->value = $myOrderNumber;

// Collect all custom fields into an array and add the list of fields to the
// order add request:
$customFields[] = $cfOrderNum;
$sale->customFieldList = new CustomFieldList();
$sale->customFieldList->customField = $customFields;

// Submit the sales order create request
$request = new AddRequest();
$request->record = $sale;
$response = $service->add($request);

if (!$addResponse->writeResponse->status->isSuccess) {
    echo "ADD ERROR";
} else {
    echo "ADD SUCCESS, id " . $addResponse->writeResponse->baseRef->internalId;
}

创建项目履行

创建针对销售订单的项目履行需要基于目标记录(销售订单)初始化新记录。然后您可以根据需要设置新记录上的属性,并将其添加到 NetSuite。创建现金销售记录也使用相同的方法。

use NetSuite\Classes\AddRequest;
use NetSuite\Classes\InitializeRecord;
use NetSuite\Classes\InitializeRef;
use NetSuite\Classes\InitializeRequest;
use NetSuite\Classes\ItemFulfillmentPackage;
use NetSuite\Classes\ItemFulfillmentPackageList;

// Initialize an item fulfillment from an existing Sales Order
$reference = new InitializeRef();
$reference->type = InitializeRefType::salesOrder;
$reference->internalId = $mySalesOrderInternalId;

$record = new InitializeRecord();
$record->type = InitializeType::itemFulfillment;
$record->reference = $reference;

$request = new InitializeRequest();
$request->initializeRecord = $record;

$response = $service->initialize($request);

if (!$response->readResponse->status->isSuccess) {
    echo "INIT ERROR";
}

$itemFulfillment = $response->readResponse->record;

$package = new ItemFulfillmentPackage();
$package->packageWeight = 1;
$package->packageTrackingNumber = $myTrackingNumber;

$packageList = new ItemFulfillmentPackageList();
$packageList->package = $package;
$itemFulfillment->packageList = $packageList;

$request = new AddRequest();
$request->record = $itemFulfillment;

$response = $service->add($request);

if (!$response->writeResponse->status->isSuccess) {
    echo "ADD ERROR";
} else {
    echo "ADD SUCCESS, id " . $addResponse->writeResponse->baseRef->internalId;
}

日志记录

您可以在飞行中开启或关闭日志记录,或覆盖传入的配置设置。请注意,如果您在配置或之后没有指定日志目录,那么无论您做什么都不会有日志。

设置日志路径

$service->setLogPath('/path/to/logs');

开启日志记录

$service->logRequests(true);  // Turn logging on.

关闭日志记录

$service->logRequests(false); // Turn logging off.

基于令牌的身份验证

您可以通过传递形如 consumerKey/consumerSecret/token/tokenSecret 的凭据来代替使用标准凭据方法实例化 NetSuiteService

$config = array(
   // required -------------------------------------
   "endpoint"       => "2019_1",
   "host"           => "https://webservices.netsuite.com",
   "account"        => "MYACCT1",
   "consumerKey"    => "0123456789ABCDEF",
   "consumerSecret" => "0123456789ABCDEF",
   "token"          => "0123456789ABCDEF",
   "tokenSecret"    => "0123456789ABCDEF",
   // optional -------------------------------------
   "signatureAlgorithm" => 'sha256', // Defaults to 'sha256'
);

$service = new NetSuiteService($config);

状态

  • 提取...约 1500 个类...
  • 带有自动加载的 composer 包
  • 通过构造函数传递配置
  • 可选的环境变量配置
  • 命名空间
  • 日志记录
  • 动态数据中心 URL
  • 扩展用户文档
  • 支持通过 ENV 变量自动配置

许可

原始作品版权所有 © 2010-2015 NetSuite Inc. 并提供“原样”。请参阅NetSuite 工具包许可协议文件。

所有额外的工作均根据所附的许可文件,在Apache 2.0开源软件许可下授权。