michaelhull / connectwise-php-client
SPINEN的ConnectWise PHP客户端。
3.1.0
2017-01-13 01:55 UTC
Requires
- php: >=7
- guzzlehttp/guzzle: ^6.2
- illuminate/support: ~5.3
- nesbot/carbon: ~1.20
Requires (Dev)
- mockery/mockery: ~0.9.4
- phpunit/phpunit: ~5.4
- psy/psysh: 0.7.*|0.8.*
- satooshi/php-coveralls: ^1.0
This package is not auto-updated.
Last update: 2024-09-20 20:31:28 UTC
README
RestFull ConnectWise API的PHP客户端。这个包最初是基于SOAP API的,并且有三个独立的仓库,但自这个版本起只有一个。
我们仅在我们的应用程序中使用Laravel,因此有一些特定于Laravel的文件可以供使用。我们已经尽力确保您可以在Laravel之外使用此客户端,并在下面的文档中提供了一些说明。
关于集成的说明
我们使用“成员模拟”模型,在此模型中您设置一个集成器用户名和密码,并具有访问“成员API”的权限,这使得所有对ConnectWise的调用都在应用程序用户(成员ID)的权限下执行。
我们将所有ConnectWise用户的成员ID设置为他们的电子邮件地址(例如,joe.doe@spinen.com在ConnectWise中的成员ID为joedoe)[注意:从joe.doe中移除了点,因为ConnectWise不允许成员ID中包含点]。通过遵循此约定,我们可以从我们的应用程序中登录用户的电子邮件地址推断成员ID。我们已经包含了一个可以在User模型上使用的trait,该trait将执行上述逻辑。
Laravel配置和使用
配置
- 将以下内容添加到
config/services.php
...
'connectwise' => [ 'company_id' => env('CW_COMPANY_ID'), 'integrator' => env('CW_INTEGRATOR'), 'password' => env('CW_PASSWORD'), 'url' => env('CW_URL'), ],
- 将适当的值添加到您的
.env
...
CW_COMPANY_ID=<company_id> CW_INTEGRATOR=<integrator username> CW_PASSWORD=<integrator password> CW_URL=https://<FQDN to ConnectWise server>
- 将提供者添加到
config/app.php
'providers' => [ # other providers omitted Spinen\ConnectWise\Laravel\ServiceProvider::class, ],
- [可选] 将别名添加到
config/app.php
'aliases' => [ # other aliases omitted 'ConnectWise' => Spinen\ConnectWise\Laravel\Facades\ConnectWise::class, ],
- 在User模型上使用
ConnectWiseMemberIdFromEmail
trait,该trait位于Spinen\ConnectWise\Laravel\ConnectWiseMemberIdFromEmail
,如果您的ConnectWise成员ID与电子邮件匹配,如上所述。如果您不遵循此约定,则可以在User模型上定义自己的getConnectWiseMemberIdAttribute
访问器,或者在用户表中添加一个connect_wise_member_id
列,并用适当的值填充它。
使用方法
以下是一个获取系统信息的示例...
自版本3.1.0起,响应可以是Laravel模型集合或单个模型。您可以在src/Models
中查看模型。它们都扩展了Spinen\ConnectWise\Support
,因此您可以查看它们提供的方法。
$ php artisan tinker
Psy Shell v0.8.0 (PHP 7.0.14 — cli) by Justin Hileman
>>> Auth::loginUsingId(1);
PHP warning: unlink(/Users/jimmy.puckett/git/swaginator.com/storage/framework/sessions/1aMf1yhUe6h4Ij2GRvq5UYab1IqK7GVn1qkyWPY6): No such file or directory in /Users/jimmy.puckett/git/swaginator.com/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 172
=> App\User {#983
id: "1",
first_name: "Joe",
last_name: "Doe",
email: "joe.doe@domain.tld",
admin: "0",
created_at: "2017-01-02 18:30:47",
updated_at: "2017-01-12 22:22:39",
logged_in_at: "2017-01-12 22:22:39",
deleted_at: null,
}
>>> $cw = app('Spinen\ConnectWise\Api\Client');
=> Spinen\ConnectWise\Api\Client {#934}
>>> $info = $cw->get('system/info');
=> Spinen\ConnectWise\Models\System\Info {#1008}
>>> $info->toArray();
=> [
"version" => "v2016.6.43325",
"isCloud" => false,
"serverTimeZone" => "Eastern Standard Time",
]
>>> $info->toJson()
=> "{"version":"v2016.6.43325","isCloud":false,"serverTimeZone":"Eastern Standard Time"}"
>>> $info->isCloud
=> false
>>> $info['isCloud'];
=> false
使用外观进行相同的调用...
$ php artisan tinker
Psy Shell v0.8.0 (PHP 7.0.14 — cli) by Justin Hileman
>>> Auth::loginUsingId(1);
PHP warning: unlink(/Users/jimmy.puckett/git/swaginator.com/storage/framework/sessions/1aMf1yhUe6h4Ij2GRvq5UYab1IqK7GVn1qkyWPY6): No such file or directory in /Users/jimmy.puckett/git/swaginator.com/vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php on line 172
=> App\User {#983
id: "1",
first_name: "Joe",
last_name: "Doe",
email: "joe.doe@domain.tld",
admin: "0",
created_at: "2017-01-02 18:30:47",
updated_at: "2017-01-12 22:22:39",
logged_in_at: "2017-01-12 22:22:39",
deleted_at: null,
}
>>> ConnectWise::get('system/info');
=> Spinen\ConnectWise\Models\System\Info {#1005}
>>> ConnectWise::get('system/info')->toArray();
=> [
"version" => "v2016.6.43325",
"isCloud" => false,
"serverTimeZone" => "Eastern Standard Time",
]
>>> ConnectWise::get('system/info')->toJson();
=> "{"version":"v2016.6.43325","isCloud":false,"serverTimeZone":"Eastern Standard Time"}"
>>> ConnectWise::get('system/info')->isCloud;
=> false
>>> ConnectWise::get('system/info')['isCloud'];
=> false
>>>
Laravel之外的使用
要在外部使用客户端,您只需实例化对象...
$ php -a
Interactive shell
php > // Autoload classes
php > require 'vendor/autoload.php';
php > // New-up objects
php > $token = new Spinen\ConnectWise\Api\Token();
php > $guzzle = new GuzzleHttp\Client();
php > $resolver = new Spinen\ConnectWise\Support\ModelResolver();
php > $client = new Spinen\ConnectWise\Api\Client($token, $guzzle, $resolver);
php > // Now set your configs
php > $token->setCompanyId('<company_id>')->setMemberId('<member_id>');
php > $client->setIntegrator('<integrator>')->setPassword('<password>')->setUrl('https://<domain.tld>');
php > $info = $client->get('system/info');
php > var_export($info, false);
Spinen\ConnectWise\Models\System\Info::__set_state(array(
'casts' =>
array (
'version' => 'string',
'isCloud' => 'boolean',
'serverTimeZone' => 'string',
),
'attributes' =>
array (
'version' => 'v2016.6.43325',
'isCloud' => false,
'serverTimeZone' => 'Eastern Standard Time',
),
))
php > var_export($info->toArray(), false);
array (
'version' => 'v2016.6.43325',
'isCloud' => false,
'serverTimeZone' => 'Eastern Standard Time',
)
php > var_export($info->tojson(), false);
'{"version":"v2016.6.43325","isCloud":false,"serverTimeZone":"Eastern Standard Time"}'
php > var_export($info->isCloud, false);
false
php > var_export($info['isCloud'], false);
false
php >