thiagolovatine / uber-php
用于消费Uber API的PHP客户端
Requires
- php: >=5.4.0
- guzzlehttp/guzzle: ~5.2
Requires (Dev)
- mockery/mockery: ~0.9
- phpunit/phpunit: ~4.0
Suggests
- stevenmaguire/oauth2-uber: Making it simple to integrate your application with Uber using OAuth 2.0
This package is auto-updated.
Last update: 2024-09-19 10:38:02 UTC
README
这是一个使用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)所需的座位数
- 在
GET /products
产品端点中,产品将具有upfront_fare_enabled
字段设置为true
。 - 使用带有
product_id
的行程请求估计端点POST /requests/estimate
获取fare_id
。可以使用fare_id
锁定行程的预付费和到达时间。fare_id
在两分钟后过期。如果fare_id
已过期或无效,我们将返回422错误。 - 使用上一步返回的
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']; }
获取当前行程详情
$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)。有关更多信息,请参阅许可文件。