stevenmaguire / 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-08-24 19:43:04 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 ));
upfront 费用
upfront 费用意味着在行程开始之前就知道了总费用。
- 需要指定一个终点位置
- 没有激增确认流程
- 用户应指定一个 fare_id 以确认对 upfront 费用的同意
- 用户应指定所需座位数(如 UberPOOL 等共享产品)
- 在
GET /products
的产品端点中,产品将具有upfront_fare_enabled
字段设置为true
。 - 使用带有
product_id
的 ride request estimate 端点POST /requests/estimate
获取fare_id
。可以使用fare_id
来锁定行程的前置费用和到达时间。fare_id
在两分钟后过期。如果fare_id
已过期或无效,我们将返回一个 422 错误。 - 使用在上一步骤中返回的
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']; }
获取当前行程详情
$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)。请参阅 许可证文件 获取更多信息。