waltersilvacruz / laravel-meli
Mercado Livre Rest API 的 Laravel 封装
Requires
- php: ^7.2|^8.0
- ext-curl: *
- ext-json: *
README
将您的 Laravel 应用程序与 MercadoLibre 的 API 集成。
基于 vcoud/mercadolibre(感谢您,先生!)。
用于 MercadoLibre API 的 PHP 客户端封装。
此包旨在与 Laravel 一起工作,因此它是用 Laravel 编写的。
安装
- 使用 composer 安装
$ composer require waltersilvacruz/laravel-meli
- 运行迁移命令以创建
meli_app_tokens
表
$ php artisan migrate --package=waltersilvacruz/laravel-meli
此包使用 Laravel 的 自动注册功能。
配置
重要:在开始之前,请检查以下内容
- 您必须有一个 MercadoLibre 账户
- 您必须在 ML 的 DevSite 中创建一个应用
- 应用必须启用
offline_access
范围(否则将不会生成 刷新令牌) - 您必须具备 APP 代码和客户端密钥,以便将其设置到您的 Laravel 应用程序中。
-
将适当的值添加到您的
.env
MELI_APP_ID=<YOUR-ML-APP-ID> MELI_CLIENT_SECRET=<YOUR-ML-CLIENT-SECRET> MELI_REDIRECT_ROUTE=<ROUTE-NAME> # The user will be redirected to this route after connect/disconnect
示例
MELI_APP_ID=4181152627684157 MELI_CLIENT_SECRET=kbJ1YVaWpqmFYhj1PsnKSOcVKEvWxp1a MELI_REDIRECT_ROUTE=home
-
发布配置和视图 [可选]
配置文件
可以通过运行以下命令将名为
meli.php
的配置文件发布到config/
php artisan vendor:publish --tag=meli-config
发布视图
可以通过使用以下方法发布视图文件
php artisan vendor:publish --tag=meli-views
blade 的模板将发布到
resources/views/vendor/meli
文件夹,因此您可以根据应用程序的外观和感觉自定义模板。 -
清除您的路由和配置缓存
php artisan config:clear && php artisan route:clear
用法
首先,通过 OAuth 将您的 Laravel 应用程序连接到 MercadoLibre
您可以通过在浏览器中打开此链接连接到 ML: <your-app-site>/meli/connect/<state>
。在这里,<state>
参数是必需的!
此封装使用 <state>
作为每个身份验证令牌的唯一标识符,允许您的网站连接到多个 ML 账户。
示例
https://my-awesome-site.com/meli/connect/store-demo-1
使用方法从 ML 获取数据
连接后,您可以使用以下方法之一对 ML 的 API 进行查询
MeliAppService::get(string $path, array $params = [], bool $assoc = false): stdClass MeliAppService::post(string $path, array $body = []): stdClass MeliAppService::put(string $path, array $body = [], array $params = []): stdClass MeliAppService::delete(string $path, array $params = []): stdClass MeliAppService::options(string $path, array $params = []): stdClass
示例代码
<?php namespace App\Http\Controllers; use App\Http\Controllers\Controller use WebDEV\Meli\Services\MeliApiService; class HomeController extends Controller { public function index() { // it's important to inform the same state used on connection link $service = new MeliApiService('store-demo-1'); $data = $service->get('/users/me'); dd($data); } }
每次调用都返回一个 stdClass
对象
$data->httpCode; // the http code returned by MercadoLibre's API. If !== 200, there is something wrong!
$data->response; // the complete response returned
请参阅 ML API 文档了解所有可用端点和其响应数据。
多个连接
是的,我们可以!同时连接到多个 ML 账户是可能的。
让我们想象以下场景
- 您的应用程序有多个用户。
- 每个用户都可以连接到他们的 ML 账户。
- 每个用户只能访问他自己的 ML 数据。
确保每个用户将有一个 唯一的 状态标识。
# User A connection link:
https://my-awesome-site.com/meli/connect/1281300c-a19c-42e7-9de8-6d0badccc9ad
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# User B connection link:
https://my-awesome-site.com/meli/connect/115e1b1c-fa1b-4b6c-9781-aa2f4e5f2373
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
# User C connection link:
https://my-awesome-site.com/meli/connect/f237ff76-963b-4dbc-b1d3-978d1534bf63
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
每个用户将通过 ML OAuth 进行登录,然后他们必须允许您的应用程序连接到他们的账户。对于每个状态,auth 和 refresh 令牌将存储在 meli_app_tokens
表中。当实例化服务时,state
列将作为获取正确令牌的键。
$service = new MeliApiService('1281300c-a19c-42e7-9de8-6d0badccc9ad'); // or $service = new MeliApiService('115e1b1c-fa1b-4b6c-9781-aa2f4e5f2373'); // or $service = new MeliApiService('f237ff76-963b-4dbc-b1d3-978d1534bf63'); // then you can perform queries $order = $service->get('/orders/768570754'); dd($order->response);
命令行实用程序
此包包含一个实用程序命令,可以帮助您在 MercadoLibre 上创建测试用户。
php artian meli:create-test-user [state] [site]
您可以为 [site] 参数使用以下选项之一
MLA = Argentina
MLB = Brazil
MCO = Colombia
MCR = Costa Rica
MEC = Ecuador
MLC = Chile
MLM = Mexico
MLU = Uruguay
MLV = Venezuela
MPA = Panama
MPE = Peru
MPT = Portugal
MRD = Dominican Republic
示例
php artisan meli:create-test-user "1281300c-a19c-42e7-9de8-6d0badccc9ad" MLB // Sample output: Creating new test user... DONE! New user created successfully: ID: 1014941445 Nickname: TESTYTEZPVLJ Password: qatest2911 Email: test_user_60793708@testuser.com
自动刷新令牌
授权令牌在其创建后有效期为6小时。在此之后,授权令牌将过期,并在发送查询之前自动使用刷新令牌生成一个新的令牌。
授权令牌的刷新是自动的,无需用户操作。
另一方面,刷新令牌将在6个月后过期,用户必须再次登录以获取一个新的刷新令牌。