syed/netsuite-php

NetSuite PHP API 包装器

v2019.2.2 2020-07-06 01:04 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);

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

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

require 'vendor/autoload.php';

use NetSuite\NetSuiteService;

$service = new NetSuiteService();

特定账户的数据中心 URL

从 2019_1 开始,这个库提供支持在每个请求中使用 NetSuite 的新特定账户数据中心 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 工具包许可协议文件。

所有附加作品均根据包含的LICENSE文件,在Apache 2.0开源软件许可下授权。