firebear / netsuite-php
NetSuite PHP API 包装器
Requires
- php: >=5.3.0
- ext-openssl: *
- ext-simplexml: *
- ext-soap: *
- paragonie/random_compat: >=1
Requires (Dev)
- phpspec/phpspec: ^2.4
Suggests
- symfony/dotenv: Provides loading a .env file for obtaining config variables
- vlucas/phpdotenv: Provides loading a .env file for obtaining config variables
This package is auto-updated.
Last update: 2024-09-17 15:16:07 UTC
README
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开源软件许可下授权。