preluigi/ontraport

此软件包已废弃,不再维护。未建议替代软件包。

Ontraport PHP Rest API 库

0.1.1 2015-11-23 10:15 UTC

This package is auto-updated.

Last update: 2022-02-01 12:53:09 UTC


README

Ontraport REST API 的 PHP 库

安装 - 使用 Composer

为了使用此库,您需要更新 composer.json 中的 require 配置如下

"require": {
    "preluigi/ontraport": "dev-master"
},

简单概述和用法

首先,您需要使用您的 AppId 和 Key 凭证实例化一个新的 Ontraport 对象实例

$ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );

然后,您可以像这样访问 OP 对象及其 CRUD 函数

$my_contact = $ontraport->Contacts->read ( 55 ); //Where 55 is the ID of the contact

print_r ( $my_contact );

/**
 * Ouputs something like:
 *    stdClass Object
 *    (
 *        [code] => 0
 *        [data] => stdClass Object
 *            (
 *                [name] => Customer Name
 *                [price] => 119.95
 *                [id] => 340
 *                [owner] => 2
 *                [firstname] =>
 *                [lastname] =>
 *                [email] =>
 *                [address] =>
 *                [city] =>
 *                [state] =>
 *                [zip] =>
 *                [birthday] =>
 *                [date] => 1448207931
 *                [notes] =>
 *                [status] =>
 *                [category] =>
 *                [lead_source] =>
 *            )

 *        [updates] => Array
 *            (
 *            )

 *        [notifications] => Array
 *            (
 *            )

 *        [account_id] => 27801
 *    )
 **/

$new_product = array (
    'name' => 'An awesome product!',
    'price' => 119.95
);
$result = $ontraport->Products->create ( $new_product );

print_r ( $result );

/**
 * Outputs something like:
 * stdClass Object
 *	(
 *	    [code] => 0
 *	    [data] => stdClass Object
 *	        (
 *	            [name] => An awesome product!
 *	            [price] => 119.95
 *	            [id] => 19
 *	        )
 *
 *	    [updates] => Array
 *	        (
 *	        )
 *
 *	    [notifications] => Array
 *	        (
 *	        )
 *
 *	    [account_id] => 27801
 *	)
 **/

支持的 Ontraport 对象类型

目前支持以下 Ontraport 对象类型

  • 联系人
  • 备注
  • 对象
  • 产品
  • 购买
  • 运输
  • 员工
  • 标签
  • 税收

您可以使用已看到的语法访问它们

$ontraport->{Object type classname, eg: Contacts}->{method to call}

对象类型方法

每个对象类型都有以下默认方法

  • find ( string $field, mixed $value, string $operand = '=', string $type = 'auto' )
  • create ( array $attrs )
  • read ( int $id )
  • get ( array $ids )
  • update ( object $object )
  • delete ( int $id )

更改 API 版本

默认情况下,该库使用 REST API 的版本 1(目前可用的唯一版本)。您可以使用 Ontraport\Ontraport->set_version 方法更改版本以符合您的需求(??)

$ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );
$ontraport->set_version ( '2.1.2' );

更改默认端点

默认情况下,该库初始化以下端点

array (
  'object' => "https://api.ontraport.com/1/object",
  'objects' => "https://api.ontraport.com/1/objects",
  'objects_meta' => "https://api.ontraport.com/1/objects/meta",
  'objects_tag' => "https://api.ontraport.com/1/objects/tag",
  'form' => "https://api.ontraport.com/1/form",
  'message' => "https://api.ontraport.com/1/message",
  'task_cancel' => "https://api.ontraport.com/1/task/cancel",
  'task_complete' => "https://api.ontraport.com/1/task/complete",
  'transaction_processmanual' => "https://api.ontraport.com/1/transaction/processManual",
  'transaction_refund' => "https://api.ontraport.com/1/transaction/refund",
  'transaction_converttodecline' => "https://api.ontraport.com/1/transaction/convertToDecline",
  'transaction_converttocollections' => "https://api.ontraport.com/1/transaction/convertToCollections",
  'transaction_void' => "https://api.ontraport.com/1/transaction/void",
  'transaction_voidpurchase' => "https://api.ontraport.com/1/transaction/voidPurchase",
  'transaction_reruncommission' => "https://api.ontraport.com/1/transaction/rerunCommission",
  'transaction_markpaid' => "https://api.ontraport.com/1/transaction/markPaid",
  'transaction_rerun' => "https://api.ontraport.com/1/transaction/rerun",
  'transaction_writeoff' => "https://api.ontraport.com/1/transaction/writeOff",
  'transaction_order' => "https://api.ontraport.com/1/transaction/order",
  'transaction_resendinvoice' => "https://api.ontraport.com/1/transaction/resendInvoice"
);

您可以使用 Ontraport\Ontraport->set_endpoint 方法更改这些端点中的一个或全部

$ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );

$my_endpoints = array (
  'object' => "my_custom_endpoint_for_single_object",
  'objects' => "my_custom_endpoint_for_multiple_objects",
);

$ontraport->set_endpoint ( $my_endpoints ); // Will only change the endpoints defined in $my_endpoints

$ontraport->set_endpoint ( $my_endpoints, true ); // Will substitute all endpoints with only those defined in $my_endpoints

请注意,自定义定义的端点将 不会 使用 API 版本属性生成调用端点,因此您需要传递完整的端点 URI。

库的工作原理

在您开始深入了解 OntraportPHP 的更多高级用法之前,我敢打赌您想详细了解库是如何工作的。所以这里是答案:该库本身由一组按照该模式组织的类组成

class Ontraport --调用--> class Contacts,它扩展了 class Objects

目前,该库仅支持对 Ontraport 对象类型的操作;基本的 CRUD 方法定义在 Ontraport\Objects 类中,该类由特定于对象的类(如 Contacts 或 Products)扩展。因此,当您在 Ontraport\Ontraport 对象上调用 ->Contacts->read() 时,您只是从继承自 Ontraport\Objects 类的 Ontraport\Contacts->read() 方法接收结果。幕后发生的是从 Ontraport\Ontraport 类对象到调用类(例如:Ontraport\Contacts)的依赖注入,实际上这里有两组工作示例

$ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );

/*
 * Outputs the object representing contact with id=55
 */
print_r ( $ontraport->Contacts->read ( 55 ) );

$contacts = new Ontraport\Contacts ( $ontraport );

/*
 * Outputs the same object as above
 */
print_r ( $contacts->read ( 55 ) );

扩展库

建议您阅读前面的章节: 库是如何工作的,以便更好地理解以下说明。

基本上有两种方式可以扩展库,使用您自己的类

1) 通过使用自定义命名空间(推荐)

Ontraport\Ontraport 类公开了一个名为 set_namespace 的方法,您可以使用它来修改被调用对象类型类的命名空间,我认为最好有一个示例

  namespace MyNamespace;  // Using a custom namespace
  include ( __DIR__ . '/vendor/autoload.php' ); // Including the composer autoload

  /*
   * Defining a MyNamespace\Contacts class which extends Ontraport\Contacts
   */
  class Contacts extends Ontraport\Contacts {
    // Overriding the parent method
    public function read ( $id ) {
      $result = parent::read ( $id );
      // Adding the "example_field" to parent called method object result
      $result->data->example_field = 'Test';

      return $result;
    }
  }

  $ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );

  $ontraport->Contacts->read ( 55 );  // Will return the Contact object with ID=55

  /*
   * Changing the base namespace where Ontraport\Ontraport looks for class inclusion
   */
  $ontraport->set_namespace ( 'MyNamespace' );

  $ontraport->Contacts->read ( 55 );  // Will return the Contact object with ID=55 and added field "example_field"

使用这种方法,您可以覆盖任何对象类型类并定义自己的,同时保持 $ontraport->ClassName 清晰且紧凑的语法。

2) 通过使用依赖注入

这种方法与前面提到的第一种方法类似,但不是改变用于包含的基本命名空间,而是扩展对象类型类,并使用依赖注入将 Ontraport\Ontraport 对象传递给类构造函数。示例

  namespace MyNamespace;  // Using a custom namespace
  include ( __DIR__ . '/vendor/autoload.php' ); // Including the composer autoload

  /*
   * Defining a MyNamespace\Contacts class which extends Ontraport\Contacts
   */
  class Contacts extends Ontraport\Contacts {
    // Overriding the parent method
    public function read ( $id ) {
      $result = parent::read ( $id );
      // Adding the "example_field" to parent called method object result
      $result->data->example_field = 'Test';

      return $result;
    }
  }

  $ontraport = new Ontraport\Ontraport ( 'my_app_id', 'my_app_key' );

  $contacts_object = new Contacts ( $ontraport );

  $contacts_object->read ( 55 );  // Will return the Contact object with ID=55 and added field "example_field"