stevenmaguire/uber-php

用于调用Uber API的PHP客户端

1.0.0 2015-03-24 04:27 UTC

This package is auto-updated.

Last update: 2024-08-24 19:43:04 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
));

upfront 费用

upfront 费用意味着在行程开始之前就知道了总费用。

  • 需要指定一个终点位置
  • 没有激增确认流程
  • 用户应指定一个 fare_id 以确认对 upfront 费用的同意
  • 用户应指定所需座位数(如 UberPOOL 等共享产品)
  1. GET /products 的产品端点中,产品将具有 upfront_fare_enabled 字段设置为 true
  2. 使用带有 product_id 的 ride request estimate 端点 POST /requests/estimate 获取 fare_id。可以使用 fare_id 来锁定行程的前置费用和到达时间。 fare_id 在两分钟后过期。如果 fare_id 已过期或无效,我们将返回一个 422 错误。
  3. 使用在上一步骤中返回的 fare_id 通过 ride request 端点 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)。请参阅 许可证文件 获取更多信息。