thiagolovatine/uber-php

用于消费Uber API的PHP客户端

1.0.0 2015-03-24 04:27 UTC

This package is auto-updated.

Last update: 2024-09-19 10:38:02 UTC


README

Latest Version Software License Build Status Coverage Status Quality Score Total Downloads

这是一个使用OAuth 2.0进行身份验证并消费Uber API的PHP客户端。

此包旨在在您从用户那里获取访问令牌后用于与Uber API通信。要验证用户和检索访问令牌,请使用stevenmaguire/oauth2-uber

安装

通过Composer

$ composer require stevenmaguire/uber-php

请注意,所需的PHP版本是5.5。如果您想使用与PHP 5.4兼容的库,则应使用1.2.0版本。

使用方法

创建客户端

$client = new Stevenmaguire\Uber\Client(array(
    'access_token' => 'YOUR ACCESS TOKEN',
    'server_token' => 'YOUR SERVER TOKEN',
    'use_sandbox'  => true, // optional, default false
    'version'      => 'v1.2', // optional, default 'v1.2'
    'locale'       => 'en_US', // optional, default 'en_US'
));

请查阅沙盒文档,了解如何在不对真实世界请求进行测试和收费的情况下开发并测试这些端点。

获取产品信息

通过位置

$products = $client->getProducts(array(
    'latitude' => '41.85582993',
    'longitude' => '-87.62730337'
));

https://developer.uber.com/docs/riders/references/api/v1.2/products-get

通过ID

$product = $client->getProduct($productId);

https://developer.uber.com/docs/riders/references/api/v1.2/products-product_id-get

获取价格估计

$estimates = $client->getPriceEstimates(array(
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465'
));

https://developer.uber.com/docs/riders/references/api/v1.2/estimates-price-get

获取时间估计

$estimates = $client->getTimeEstimates(array(
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337'
));

https://developer.uber.com/docs/riders/references/api/v1.2/estimates-time-get

获取优惠

$promotions = $client->getPromotions(array(
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465'
));

https://developer.uber.com/docs/riders/ride-promotions/introduction

获取用户活动

此功能仅从版本 1.1 开始提供。

$client->setVersion('v1.2'); // or v1.1
$history = $client->getHistory(array(
    'limit' => 50, // optional
    'offset' => 0 // optional
));

https://developer.uber.com/docs/riders/references/api/v1.2/history-get

获取用户资料

$profile = $client->getProfile();

https://developer.uber.com/docs/riders/references/api/v1.2/me-get

更新用户资料

$attributes = array('applied_promotion_codes' => 'PROMO_CODE');
$profileResponse = $client->setProfile($attributes);

https://developer.uber.com/docs/riders/references/api/v1.2/me-patch

获取支付方式

$paymentMethods = $client->getPaymentMethods();

https://developer.uber.com/docs/riders/references/api/v1.2/payment-methods-get

获取地点

$placeId = 'home';
$place = $client->getPlace($placeId);

https://developer.uber.com/docs/riders/references/api/v1.2/places-place_id-get

更新地点

$placeId = 'home';
$attributes = array('address' => '685 Market St, San Francisco, CA 94103, USA');
$place = $client->setPlace($placeId, $attributes);

https://developer.uber.com/docs/riders/references/api/v1.2/places-place_id-put

请求行程

$request = $client->requestRide(array(
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465',
    'product_id' => '4bfc6c57-98c0-424f-a72e-c1e2a1d49939', // Optional
    'surge_confirmation_id' => 'e100a670',                  // Optional
    'payment_method_id' => 'a1111c8c-c720-46c3-8534-2fcd'   // Optional
));

预付费

预付费意味着在行程开始之前,总费用是已知的。

  • 需要指定终点位置
  • 没有高峰确认流程
  • 用户应指定fare_id以确认对预付费的同意
  • 用户应指定共享产品(如UberPOOL)所需的座位数
  1. GET /products产品端点中,产品将具有upfront_fare_enabled字段设置为true
  2. 使用带有product_id的行程请求估计端点POST /requests/estimate获取fare_id。可以使用fare_id锁定行程的预付费和到达时间。fare_id在两分钟后过期。如果fare_id已过期或无效,我们将返回422错误。
  3. 使用上一步返回的fare_id使用行程请求端点POST /requests请求行程。

https://developer.uber.com/docs/riders/ride-requests/tutorials/api/best-practices#upfront-fares

高峰确认流程

如果行程请求使用具有高峰倍数的产品,API包装器将抛出异常,并提供包含高峰确认ID的响应体。

try {
    $request = $client->requestRide(array(
        'product_id' => '4bfc6c57-98c0-424f-a72e-c1e2a1d49939',
        'start_latitude' => '41.85582993',
        'start_longitude' => '-87.62730337',
        'end_latitude' => '41.87499492',
        'end_longitude' => '-87.67126465'
    ));
} catch (Stevenmaguire\Uber\Exception $e) {
    $body = $e->getBody();
    $surgeConfirmationId = $body['meta']['surge_confirmation']['surge_confirmation_id'];
}

https://developer.uber.com/docs/riders/ride-requests/tutorials/api/best-practices#handling-surge-pricing

获取当前行程详情

$request = $client->getCurrentRequest();

https://developer.uber.com/docs/riders/references/api/v1.2/requests-current-get

获取行程详情

$request = $client->getRequest($requestId);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-request_id-get

更新当前行程详情

$requestDetails = array(
    'end_address' => '685 Market St, San Francisco, CA 94103, USA',
    'end_nickname' => 'da crib',
    'end_place_id' => 'home',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465'
);

$updateRequest = $client->setCurrentRequest($requestDetails);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-current-patch

更新行程详情

$requestId = '4bfc6c57-98c0-424f-a72e-c1e2a1d49939'
$requestDetails = array(
    'end_address' => '685 Market St, San Francisco, CA 94103, USA',
    'end_nickname' => 'da crib',
    'end_place_id' => 'home',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465'
);

$updateRequest = $client->setRequest($requestId, $requestDetails);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-request_id-patch

获取行程估计

$requestEstimate = $client->getRequestEstimate(array(
    'product_id' => '4bfc6c57-98c0-424f-a72e-c1e2a1d49939',
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337',
    'end_latitude' => '41.87499492', // optional
    'end_longitude' => '-87.67126465', // optional
));

https://developer.uber.com/docs/riders/references/api/v1.2/requests-estimate-post

获取行程地图

$map = $client->getRequestMap($requestId);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-request_id-map-get

获取行程收据

$receipt = $client->getRequestReceipt($requestId);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-request_id-receipt-get

取消当前行程

$request = $client->cancelCurrentRequest();

https://developer.uber.com/docs/riders/references/api/v1.2/requests-current-delete

取消行程

$request = $client->cancelRequest($requestId);

https://developer.uber.com/docs/riders/references/api/v1.2/requests-request_id-delete

创建提醒

$attributes = array(
    'reminder_time' => '1429294463',
    'phone_number' => '555-555-5555',
    'event' => array(
        'time' => '1429294463',
        'name' => 'Frisbee with friends',
        'location' => 'Dolores Park',
        'latitude' => '37.759773',
        'longitude' => '-122.427063',
    ),
    'product_id' => 'a1111c8c-c720-46c3-8534-2fcdd730040d',
    'trip_branding' => array(
        'link_text' => 'View team roster',
        'partner_deeplink' => 'partner://team/9383',
    )
);
$reminder = $client->createReminder($attributes);

https://developer.uber.com/docs/riders/references/api/v1.2/reminders-post

获取提醒

$reminderId = '4bfc6c57-98c0-424f-a72e-c1e2a1d49939';
$reminder = $client->getReminder($reminderId);

https://developer.uber.com/docs/riders/references/api/v1.2/reminders-reminder_id-get

更新提醒

$reminderId = '4bfc6c57-98c0-424f-a72e-c1e2a1d49939';
$attributes = array(
    'reminder_time' => '1429294463',
    'phone_number' => '555-555-5555',
    'event' => array(
        'time' => '1429294463',
        'name' => 'Frisbee with friends',
        'location' => 'Dolores Park',
        'latitude' => '37.759773',
        'longitude' => '-122.427063',
    ),
    'product_id' => 'a1111c8c-c720-46c3-8534-2fcdd730040d',
    'trip_branding' => array(
        'link_text' => 'View team roster',
        'partner_deeplink' => 'partner://team/9383',
    )
);
$reminder = $client->setReminder($reminderId, $attributes);

https://developer.uber.com/docs/riders/references/api/v1.2/reminders-reminder_id-patch

取消提醒

$reminderId = '4bfc6c57-98c0-424f-a72e-c1e2a1d49939';
$reminder = $client->cancelReminder($reminderId);

https://developer.uber.com/docs/riders/references/api/v1.2/reminders-reminder_id-delete

获取司机资料

$profile = $client->getDriverProfile();

https://developer.uber.com/docs/drivers/references/api/v1/partners-me-get

获取司机收入

$profile = $client->getDriverPayments(array(
    'limit' => 50, // optional
    'offset' => 0 // optional
));

https://developer.uber.com/docs/drivers/references/api/v1/partners-payments-get

获取司机行程

$profile = $client->getDriverTrips(array(
    'limit' => 50, // optional
    'offset' => 0 // optional
));

https://developer.uber.com/docs/drivers/references/api/v1/partners-trips-get

速率限制

此功能仅支持API的v1版本。

速率限制是基于特定客户端的密钥令牌实现的。默认情况下,每个密钥令牌每小时可以发起1,000次请求。

使用此包消费服务时,您的速率限制状态将在客户端内提供。

$product = $client->getProduct($productId);

$rateLimit = $client->getRateLimit();

$rateLimit->getLimit();        // Rate limit capacity per period
$rateLimit->getRemaining();    // Requests remaining in current period
$rateLimit->getReset();        // Timestamp in UTC time when the next period will begin

这些值将在每次请求后更新。getRateLimit在客户端创建后并在第一次成功请求之前将返回null。

https://developer.uber.com/v1/api-reference/#rate-limiting

使用沙盒环境

修改正在进行中的沙盒请求的状态。

当客户端不在沙盒模式下时,这些方法将抛出Stevenmaguire\Uber\Exception。除非您正在使用沙盒环境,否则底层API端点没有任何效果。

$request = $client->requestRide(array(
    'product_id' => '4bfc6c57-98c0-424f-a72e-c1e2a1d49939',
    'start_latitude' => '41.85582993',
    'start_longitude' => '-87.62730337',
    'end_latitude' => '41.87499492',
    'end_longitude' => '-87.67126465'
));

$updateRequest = $client->setSandboxRequest($request->request_id, array('status' => 'accepted'));

https://developer.uber.com/v1/sandbox/#request

模拟请求端点在针对特定产品(如高峰定价)请求沙盒时可能返回的可能响应。

$product = $client->getProduct($productId);

$updateProduct = $client->setSandboxProduct($productId, array('surge_multiplier' => 2.2, 'drivers_available' => false));

https://developer.uber.com/v1/sandbox/#product-types

测试

$ ./vendor/bin/phpunit

贡献

请参阅CONTRIBUTING以获取详细信息。

鸣谢

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件