oscar-rey / laravel-mercado-pago

laravel的Mercado Pago支付包。

1.0.8 2022-06-13 18:49 UTC

This package is auto-updated.

Last update: 2024-09-14 00:01:53 UTC


README

Logo Laravel Cashier Stripe

Total Downloads Latest Stable Version License Test

简介

Laravel mercado pago是一个帮助您在Laravel中实现Mercado Pago PHP SDK的包。

💻 安装

使用composer进行安装。

composer require oscar-rey/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
  */
  

贡献

您可以通过添加新功能、代码更新、重构代码和提前报告错误来做出贡献。提前感谢。

许可证

MIT许可证.