alexvergara / laravel-mercado-pago
适用于 >= PHP 8.2 的 Mercado Pago for Laravel
Requires
- php: >=8.2
- mercadopago/dx-php: ^3.0.0
Requires (Dev)
- orchestra/testbench: ^7.5
README
简介
Laravel mercado pago 是一个帮助您在 Laravel 中实现 Mercado Pago PHP SDK 的包。这是 oscar-rey/laravel-mercado-pago 的分支,以便能够使用最新版本的 SDK(dx 3.0.0)和 PHP 8.2。
💻 安装
使用 composer 进行安装。
composer require alexvergara/laravel-mercado-pago
🔧 配置
安装完成后,可以在 Laravel 项目的 .env 文件中添加环境变量 MERCADO_PAGO_ACCESS_TOKEN 和 MERCADO_PAGO_USER_ID,并使用您在 Mercado Pago 开发者账户 中找到的 access token 的值。
//.env MERCADO_PAGO_ACCESS_TOKEN=access_token MERCADO_PAGO_USER_ID=user_id
或者调用 initSdk 方法,并将 access_token 作为参数传递
MercadoPago()->initSdk($access_token);
发布配置文件
通过运行 php artisan vendor:publish 并选择带有标签 mercado-pago 的编号来发布配置文件。
使用包
访问包的功能
use LaravelMercadoPago\MercadoPago; use LaravelMercadoPago\Facades\MercadoPago; //Helper global MercadoPago()->hello(); //MercadoPago facade MercadoPago::hello(); //MercadoPago class (new MercadoPago())->hello();
获取可用支付方式和文档类型
查询所有可用支付方式,并获取每个支付方式的详细信息和属性列表 官方 SDK 文档参考..
/** * Instancia de PaymentMethod * @link https://github.com/oscar-rey-mosquera/laravel-mercado-pago/blob/main/src/Entity/PaymentMethod.php */ MercadoPago()->paymentMethod(); // Consultar medios de pago disponibles MercadoPago()->paymentMethod()->find(); // Buscar en medios de pago disponibles MercadoPago()->paymentMethod()->findV2($filters); // Buscar medio de pago de tarjeta $cardType = MercadoPago()->paymentMethod()->findCreditCard('5254133674403564'); $cardTYpe->issuer; // Devuelve una lista de emisores $cardTYpe->payer_costs; // Devuelve todas las cuotas disponibles /** * Instancia de IdentificationType * @link https://www.mercadopago.com.co/developers/es/reference/identification_types/_identification_types/get */ MercadoPago()->identificationType(); // Consultar tipos de documentos disponibles MercadoPago()->identificationType()->find(); // Buscar en payment
如何在开发模式下进行测试?
要使用 Mercado Pago SDK 进行测试,您需要创建模拟用户,这些用户将模拟卖家(具有 access_token 的 Mercado Pago 账户)或买家(可能或可能没有正常 Mercado Pago 账户的自然用户)。官方 SDK 文档参考.
/** * Crear usuario de prueba para hacer test * @link https://www.mercadopago.com.co/developers/es/docs/checkout-api/integration-test/test-user-create * * createTestUser($site_id = 'MCO'): array */ $testUser = MercadoPago()->createTestUser();
在服务器上标记化卡片
/** * Nota: si deseas tokenizar la tarjeta de crédito de tus usuarios en tu servidor, recuerda comprometerte a no guardar datos sensibles de las tarjetas */ /** * Instancia de cardToken * @link https://github.com/oscar-rey-mosquera/laravel-mercado-pago/blob/main/src/Entity/CardToken.php */ $cardToken = MercadoPago()->cardToken(); $cardToken->card_number = '5254133674403564'; $cardToken->expiration_month = '11'; $cardToken->expiration_year = '2025'; $cardToken->security_code = '123'; $cardToken->cardholder = [ // este campo solo es obligatorio cuando hagas test, ya que de no ponerle un estado esperado mercado pago te arrojara un error cuando trates de generar un pago vía tarjeta 'name' => 'APRO' ]; $cardToken->save(); $cardToken->id // token de targeta // o utiliza el método create para mandar un array $cardToken = MercadoPago()->cardToken()->create( 'card_number' => '5254133674403564', 'expiration_month' => '11', 'expiration_year' => '2025', 'security_code' => '123', 'cardholder' => [ 'name' => 'APRO' ]); $cardToken // resultado
集成 Checkout API 进行卡片支付
Mercado Pago 的 Checkout API 集成允许您在您的网站上提供完整的支付选项 官方 SDK 文档参考.
/** * Instancia de Payment * @link https://www.mercadopago.com.co/developers/es/reference/payments/_payments/post */ $payment = MercadoPago()->payment(); $payment->transaction_amount = (float)$_POST['transactionAmount']; $payment->token = $_POST['token']; $payment->description = $_POST['description']; $payment->installments = (int)$_POST['installments']; $payment->payment_method_id = $_POST['paymentMethodId']; $payment->issuer_id = (int)$_POST['issuer']; $payment->payer = array( "email" => "test_user_19549678@testuser.com" ); $payment->save(); //En la instacia se guarda la respuesta de la api de mercado pago dd($payment);
集成其他支付方式
使用 Mercado Pago 的 Checkout API,您可以添加其他支付方式,以便在客户支付时提供更多选择 官方 SDK 文档参考.
/** * Instancia de Payment con opción efecty * @link https://www.mercadopago.com.co/developers/es/reference/payments/_payments/post * * efecty($amount, $notification_url = null, $url_callback = null) */ $efecty = MercadoPago()->payment()->efecty(5000); $efecty->description = "Título del producto"; $efecty->payer = array( "email" => "test_user_19549678@testuser.com" ); $efecty->save(); dd($efecty); //resultado /** * Instancia de Payment con opción pse * @link https://www.mercadopago.com.co/developers/es/reference/payments/_payments/post * * pse($amount, $notification_url = null, $url_callback = null) */ $pse = MercadoPago()->payment()->pse(5000); //etc.. /** * Consultar lista de pagos * @link https://www.mercadopago.com.co/developers/es/docs/checkout-api/additional-content/retrieving-payments * */ $pagos = MercadoPago()->payment()->find(); /** * Buscar un pago * @link https://www.mercadopago.com.co/developers/es/docs/checkout-api/additional-content/retrieving-payments * */ $pagos = MercadoPago()->payment()->findById($id);
记住您的客户和他们的卡片
使用我们的 API 保存客户的卡片参考信息,从而提供更好的用户体验。这样,客户无需每次都填写数据,可以更快地完成支付。 官方 SDK 文档参考.
/** * Instancia de Customer * @link https://www.mercadopago.com.co/developers/es/reference/customers/_customers/post * */ $customer = MercadoPago()->customer(); $customer->email = "test_payer_12345@testuser.com"; $customer->save(); dd($customer) //resultado /** * forma corta de crear un cliente con solo el email * createWithEmail($email) */ $customer = MercadoPago()->customer()->createWithEmail("test_payer_12345@testuser.com"); /** * Buscar un cliente ya existente * @link https://www.mercadopago.com.co/developers/es/reference/customers/_customers_id/get */ $customer = MercadoPago()->customer()->findById($customer_id); /** * Actualizar cliente * @link https://www.mercadopago.com.co/developers/es/reference/customers/_customers_id/put */ $customer = MercadoPago()->customer()->findById($customer_id); $customer->phone = '3215648956'; $customer->update(); dd($customer) // resultado /** * Consultar lista de clientes * @link https://www.mercadopago.com.co/developers/es/reference/customers/_customers_search/get * find(array $filter) */ $customer = MercadoPago()->customer()->find(); /** * Instancia de card * @link https://www.mercadopago.com.co/developers/es/reference/cards/_customers_customer_id_cards/post * */ $card = MercadoPago()->card(); $card->token = "9b2d63e00d66a8c721607214cedaecda"; // token generado del lado del cliente en la intención de pago $card->customer_id = $customer->id(); // cliente creado anteriormente $card->issuer = array("id" => "3245612"); $card->payment_method = array("id" => "debit_card"); $card->save(); dd($card) //resultado /** * Consultar tarjeta creada * @link https://www.mercadopago.com.co/developers/es/reference/cards/_customers_customer_id_cards_id/get * */ $customer = MercadoPago()->card()->findById($customer_id, $id); /** * Eliminar tarjeta * @link https://www.mercadopago.com.co/developers/es/reference/cards/_customers_customer_id_cards_id/delete * */ $customer = MercadoPago()->card()->deleteV2($customer_id, $id); /** Nota : para actualizar busca la tarjeta con el método findById($customer_id, $id) modifica y luego ejecuta el método update() con la instancia activa y listo. * @link https://www.mercadopago.com.co/developers/es/reference/cards/_customers_customer_id_cards_id/put */
退款和取消
退款是在特定费用被撤销并支付金额退还给买家时进行的交易。这意味着客户将收到购买特定产品或服务的支付金额。该金额将出现在其账户或信用卡的账单上。
取消发生在购买时,但付款尚未被批准的情况。在这种情况下,考虑到交易未处理且商家未收到任何款项,购买被取消且无需支付。 官方SDK文档参考。
/** * Hacer un reembolso de un pago * @link https://www.mercadopago.com.co/developers/es/reference/chargebacks/_payments_id_refunds/post * * refundV2($payment_id, $amount = 0) */ $reembolso = MercadoPago()->payment()->refundV2($payment_id, $amount = 0); dd($reembolso) // resultado /** * Obtener lista de reembolsos * @link https://www.mercadopago.com.co/developers/es/reference/chargebacks/_payments_id_refunds/get * * find($payment_id) */ $reembolso = MercadoPago()->refund()->find($payment_id); dd($reembolso) // resultado /** * Obtener reembolso específico * @link https://www.mercadopago.com.co/developers/es/reference/chargebacks/_payments_id_refunds_refund_id/get * * findById($payment_id, $refund_id) */ $reembolso = MercadoPago()->refund()->findById($payment_id, $refund_id); dd($reembolso) // resultado /** * Cancelar una intención de pago * @link https://www.mercadopago.com.co/developers/es/reference/chargebacks/_payments_payment_id/put * * cancelled($payment_id) */ $cancelled = MercadoPago()->payment()->cancelled($payment_id); dd($cancelled) // resultado
如何在您的网站上添加钱包
您需要集成设置为钱包模式的Checkout Pro,以在您的网站上添加Mercado Pago的钱包。
要集成,您需要生成包含您想要提供的产品或服务的信息的支付偏好,并在您的网站上添加支付选项。 官方SDK文档参考。
// Crea un objeto de preferencia $preference = MercadoPago()->preference()->wallet(); // Crea un ítem en la preferencia $item = MercadoPago()->item(); $item->title = 'Mi producto'; $item->quantity = 1; $item->unit_price = 75; $preference->items = array($item); $preference->save(); dd($preference) // resultado /** Nota : Sigue los siguientes pasos en la documentación oficial del sdk. * @link https://www.mercadopago.com.co/developers/es/docs/checkout-api/wallet-integration/wallet-addto-website */
市场集成
市场是一个电子商务网站/平台,它连接卖家和买家在同一销售环境中,允许在线销售产品和服务,范围更广,转换率更高。 官方SDK文档参考。
// paso 1 - genera la url y redirige al vendedor que quiera asocial su cuenta de mercado pago con tun aplicación. // @url https://www.mercadopago.com.co/developers/es/docs/checkout-pro/additional-content/security/oauth/creation // authorizationURL($random_id, $redirect_uri = null) MercadoPago()->oauth()->authorizationURL($random_id ); // paso 2 - Obten el authorization_code de la redirección de mercado pago para obtener las credenciales del vendedor. // @url https://www.mercadopago.com.co/developers/es/docs/checkout-pro/additional-content/security/oauth/renewal // oauthCredentials($authorization_code, $redirect_uri = null) MercadoPago()->oauth()->oauthCredentials($authorization_code); /** * Renovación * El flujo refresh_token se usa para intercambiar un temporal grant de tipo refresh_token por un access token cuando el token de acceso en uso ha caducado. El access token recibido a través del endpoint es válido durante 180 días, luego de lo cual se debe reconfigurar todo el flujo de autorización. * @link https://www.mercadopago.com.co/developers/es/docs/checkout-pro/additional-content/security/oauth/renewal * * refreshOAuthCredentials($refresh_token) */ MercadoPago()->oauth()->refreshOAuthCredentials($refresh_token);
创建订单
生成一个订单以将其与支付偏好关联,并获取启动支付流程所需的URL。 官方SDK文档参考。
/** * Instacia de MerchantOrder * @link https://www.mercadopago.com.co/developers/es/reference/merchant_orders/_merchant_orders/post */ $orden = MercadoPago()->merchantOrder(); /** * Nota: Para crear una orden solo tienes que llenar los campos de la instancia y luego ejecutar save() metodo */ /** * Buscar en órdenes * @link https://www.mercadopago.com.co/developers/es/reference/merchant_orders/_merchant_orders_search/get * * find(array $filter); */ $orden = MercadoPago()->merchantOrder()->find(); /** * Obtener una orden * @link https://www.mercadopago.com.co/developers/es/reference/merchant_orders/_merchant_orders_id/get * */ $orden = MercadoPago()->merchantOrder()->findById($orden_id); /** * Nota: Para actualizar utiliza primero el método findById de la instancia merchantOrder reemplaza los campos a actualizar y luego ejecuta el método update() de la instancia */
创建偏好
使用产品或服务的详细信息生成偏好,并获取启动支付流程所需的URL。 官方SDK文档参考。
/** * Instacia de Preference * @link https://www.mercadopago.com.co/developers/es/reference/preferences/_checkout_preferences/post */ $preference = MercadoPago()->preference(); /** * Nota: Para crear una preferencia solo tienes que llenar los campos de la instancia y luego ejecutar save() metodo */ /** * Buscar en preferencias * @link https://www.mercadopago.com.co/developers/es/reference/preferences/_checkout_preferences_search/get * * find(array $filter); */ $preferences = MercadoPago()->preference()->find(); /** * Obtener una preferencia * @link https://www.mercadopago.com.co/developers/es/reference/preferences/_checkout_preferences_id/get * */ $preference = MercadoPago()->preference()->findById($preference_id); /** * Nota: Para actualizar utiliza primero el método findById de la instancia preference reemplaza los campos a actualizar y luego ejecuta el método update() de la instancia */
创建收银台
在分店生成一个销售点。每个收银台都将绑定一个唯一的二维码。 官方SDK文档参考。
/** * Instacia de POS * @link https://www.mercadopago.com.co/developers/es/reference/pos/_pos/post */ $caja = MercadoPago()->pos(); /** * Nota: Para crear una caja solo tienes que llenar los campos de la instancia y luego ejecutar save() metodo */ /** * Buscar en cajas * @link https://www.mercadopago.com.co/developers/es/reference/pos/_pos/get * * find(array $filter); */ $caja = MercadoPago()->pos()->find(); /** * Obtener caja * @link https://www.mercadopago.com.co/developers/es/reference/pos/_pos_id/gets/get * */ $caja = MercadoPago()->pos()->findById($pos_id); /** * Nota: Para actualizar utiliza primero el método findById de la instancia preference reemplaza los campos a actualizar y luego ejecuta el método update() de la instancia */ /** * Eliminar caja * @link https://www.mercadopago.com.co/developers/es/reference/pos/_pos_id/delete * */ $caja = MercadoPago()->pos()->deleteV2($pos_id);
创建订单
为想要使用的收银台生成包含您的产品或服务支付信息的支付订单。 官方SDK文档参考。
/** * Instacia de in store order * @link https://www.mercadopago.com.co/developers/es/reference/instore_orders/_mpmobile_instore_qr_user_id_external_id/post */ $instoreOrder = MercadoPago()->instoreOrder(); /** * Nota: Para crear una orden en la caja solo tienes que llenar los campos de la instancia y luego ejecutar save() metodo */ /** * Obtener orden * @link https://www.mercadopago.com.co/developers/es/reference/instore_orders_v2/_instore_qr_seller_collectors_user_id_pos_external_pos_id_orders/get * * findById($user_id, $external_pos_id) */ $instoreOrder = MercadoPago()->instoreOrderV2()->findById($user_id, $external_pos_id); /** * Eliminar orden * @link https://www.mercadopago.com.co/developers/es/reference/instore_orders_v2/_instore_qr_seller_collectors_user_id_pos_external_pos_id_orders/delete * * deleteV2($user_id, $external_pos_id) */ $instoreOrder = MercadoPago()->instoreOrderV2()->deleteV2($user_id, $external_pos_id);
创建分店
生成一个实体店,客户可以在此购买产品或服务。您可以为每个账户创建多个分店。 官方SDK文档参考。
/** * Instacia de store * @link https://www.mercadopago.com.co/developers/es/reference/stores/_users_user_id_stores/post */ $instoreOrder = MercadoPago()->store(); //create($data = [], $user_id = null) $instoreOrder = MercadoPago()->store()->create([ 'name' => 'test store', 'location' => [ 'city_name' => 'Quibdó', 'state_name' => 'Choco', 'latitude' => -32.8897322, 'longitude' => -68.8443275, 'street_name' => "Los rosales" ] ]); //Buscar en sucursales // @url https://www.mercadopago.com.co/developers/es/reference/stores/_users_user_id_stores_search/get // find($filter = [], $user_id = null) $stores = MercadoPago()->store()->find(); //Obtener sucursal // @url https://www.mercadopago.com.co/developers/es/reference/stores/_stores_id/get $stores = MercadoPago()->store()->findById($store_id); //Eliminar sucursal // @url https://www.mercadopago.com.co/developers/es/reference/stores/_stores_id/get // deleteV2($store_id, $user_id = null) $stores = MercadoPago()->store()->deleteV2($store_id); //Actualizar sucursal // @url https://www.mercadopago.com.co/developers/es/reference/stores/_stores_id/get // updateV2($store_id , $data = [], $user_id = null) $stores = MercadoPago()->store()->updateV2($store_id, [ 'name' => 'test store', 'location' => [ 'city_name' => 'Quibdó', 'state_name' => 'Choco', 'latitude' => -32.8897322, 'longitude' => -68.8443275, 'street_name' => "Los rosales" ] ]);
创建二维码图案
生成一个二维码图案,将其添加到图像中。 官方SDK文档参考。
/** * Instacia de InstoreOrderQr * @link https://www.mercadopago.com.co/developers/es/reference/qr-dynamic/_instore_orders_qr_seller_collectors_user_id_pos_external_pos_id_qrs/post */ $instoreOrderQr = MercadoPago()->instoreOrderQr(); //create($external_pos_id, $data = [],$user_id = null) $instoreOrderQr = MercadoPago()->instoreOrderQr()->create(8787, [ "descripción" => "example descripción" ]);
创建订阅
订阅是计划和客户之间的结合。此合同的主要特点是配置了付款方式,是创建账单的基础。您也可以创建没有计划的订阅。 官方SDK文档参考。
/** * Instacia de preapproval * @link https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval/post */ $preapproval = MercadoPago()->preapproval(); //createPreapproval($reason, $back_url = null) $preapproval = MercadoPago()->createPreapproval('Premium'); $preapproval->preapproval_plan_id = "2c938084726fca480172750000000000"; $preapproval->save(); dd($preapproval) /resultado //Buscar en suscripciones // @url https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval_search/get // $preapproval = MercadoPago()->preapproval()->find(); //Obtener suscripción // @url https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval_id/get // $preapproval = MercadoPago()->preapproval()->findById($preapproval_id); /** * Nota: Para actualizar utiliza primero el método findById de la instancia preapproval reemplaza los campos a actualizar y luego ejecuta el método update() de la instancia */
创建订阅计划
计划是创建订阅的模板,它指定了您多久以及收取客户多少钱。可以创建具有免费试用、账单周期等功能的计划。从计划创建的订阅与该计划相关联,并允许同步修改,如理由或金额。 官方SDK文档参考。
/** * Instacia de plan * @link https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval_plan/post */ $plan = MercadoPago()->plan(); //createPlan($description, $back_url = null) $plan = MercadoPago()->createPlan('Premium'); $plan->save(); dd($plan) /resultado //Buscar en planes de suscripción // @url https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval_plan_search/get // $plan = MercadoPago()->plan()->find(); //Obtener un plan de suscripción // @url https://www.mercadopago.com.co/developers/es/reference/subscriptions/_preapproval_plan_id/get // $plan = MercadoPago()->plan()->findById($plan_id); /** * Nota: Para actualizar utiliza primero el método findById de la instancia plan reemplaza los campos a actualizar y luego ejecuta el método update() de la instancia */
贡献
您可以添加新功能、更新、代码重构和提前通知错误来贡献。提前感谢。