crizprz/laravelmercadopago

此包可轻松集成Mercado Pago的Checkout Pro

v1.0.5 2021-05-23 18:19 UTC

This package is auto-updated.

Last update: 2024-09-24 01:25:43 UTC


README

Laravel 5.x Laravel 6.x Laravel 7.x Laravel 8.x Latest Stable Version Total Downloads License

此包可非常轻松地集成Mercado Pago的Checkout Pro

需求

推荐使用Composer v.2

guzzlehttp/guzzle

安装

通过Composer安装此包。

composer require crizprz/laravelmercadopago

或者将以下内容添加到您的composer.json文件中

"require": {
    "crizprz/laravelmercadopago": "^1.0",
},

配置

  1. 打开config/app.php,并将此行添加到您的Service Providers数组中。
crizprz\laravelmercadopago\Providers\LaravelMercadoPagoProvider::class,
  1. 打开config/app.php,并将此行添加到您的aliases数组中。
'MercadoPago' => crizprz\laravelmercadopago\Facades\MercadoPago::class,
  1. 发布资源。
php artisan vendor:publish --provider="crizprz\laravelmercadopago\Providers\LaravelMercadoPagoProvider"

如何使用

创建用户测试

  1. 要创建用户,我们必须用真实账户登录到Mercado Pago开发者
  2. 转到右上角部分,点击并选择您的集成
  3. 进入您的集成后,点击测试凭据,复制访问令牌,并将其放入.env文件中名为ACCESS_TOKEN_MP =的变量中
  4. 在您的代码中的某个位置粘贴此代码,无论是路由还是运行中的控制器,此代码将打印两个测试用户,卖方和买方
use crizprz\laravelmercadopago\Facades\MercadoPago;

MercadoPago::CreateUsersTest();

这将返回一个包含两种类型用户的数组,我们必须很好地保存这些用户,因为付费市场每个账户只允许创建10个测试用户。

注意:只运行一次。

前述代码的示例输出

 array:2 [▼
  0 => array:5 [▼
    "id" => 752892812
    "nickname" => "TESTE2VYDAPX"
    "email" => "test_user_84921269@testuser.com"
    "password" => "qatest3393"
    "type User" => "seller"
  ]
  1 => array:5 [▼
    "id" => 752890064
    "nickname" => "TETE9884170"
    "email" => "test_user_45814566@testuser.com"
    "password" => "qatest6713"
    "type User" => "payer"
  ]
]

使用测试用户创建支付偏好

  1. Mercado Pago开发者中以测试用户登录
  2. 转到右上角部分,点击并选择您的集成
  3. 创建新的集成,填写表单,然后点击创建应用程序,点击生产密钥,复制访问令牌,并将其放入.env文件中名为ACCESS_TOKEN_MP =的变量中

创建偏好

1.在项目中要实现支付按钮的地方粘贴以下代码

 use crizprz\laravelmercadopago\Facades\MercadoPago;

 $preference = MercadoPago::CreatePreference([
            'auto_return' => 'approved',
            'binary_mode' => true,
            'back_urls' => [
                "success" => route('mpsuccess'),
                "failure" => route('mpfailure'),
                "pending" => route('mppending')
            ],
            'notification_url' => route('webhook'),
            'items' => [
                'id' => '001',
                'title' => 'prod 1',
                'picture_url' => 'https://www.tusitio.com/images/products/prod1.jpg',
                'description' => 'this is descriptions',
                'category_id' => 'food',
                'quantity' => 1,
                'price' => 1000,
            ],
            'payment_methods' => [
                'excluded_payment_methods' => array(
                    array('id' => 'master'),
                    // array('id' => 'visa'),
                  ),
                  'excluded_payment_types' => array(
                    array('id' => 'ticket')
                  ),
                  'installments' => 12
                ],
                'payer' => [
                    'name' => 'Cristian',
                    'last_name' => 'Lira Perez',
                    'email' => 'al221711754@gmail.com',
                    'phone' => [
                        'area_code' => +52,
                        'number' => '7224738425'
                    ],
                    'address' => [
                        'zip_code' => 23492,
                        'street_name' => 'Calle cerrada de juerez',
                        'street_number' => '104'
                    ]
                ],
                'shipments' => [
                        'cost' => 100,
                ],
                'statement_descriptor' => 'Mi tienda online',

        ]);
  1. 访问API参考,创建偏好以了解数组中每个属性的含义
  2. 将数组值更改为您项目的值

创建支付按钮

  1. 将变量$preference返回到某个blade视图中,此变量已保存所有支付偏好,例如
return view('checkout',['preference' => $preference]);
  1. 在视图中渲染包的默认按钮
 {{ MercadoPago::ButtonPay($preference->init_point) }}

或创建一个自定义支付按钮,并将其传递给init_point,它在$ preference变量中存储,例如

<a class="btn btn-info mt-5" href="{{ $preference->init_point }}">Pay Now</a>

测试您的集成

  1. 阅读测试您的集成文档以获取它提供的测试卡

支付状态响应

支付成功

从成功支付返回到您的网站时执行此代码的代码在App\Http\Controllers\MercadoPagoController控制器中的success方法中

  public function success(Request $request)
   {
    // dd($request->all());
    if ($request->status === 'approved') {
        $response = Http::get("https://api.mercadopago.com/v1/payments/{$request->payment_id}", [
            'access_token' => env('ACCESS_TOKEN_MP'),
            ])->json();

        dd($response);
    }
   }

支付会返回到您的服务器的GET请求,因此我们将使用Request $request,其中包含所有支付数据,我们感兴趣的是payiment_id

示例回答

 array:11 [▼
  "collection_id" => "14694550173"
  "collection_status" => "approved"
  "payment_id" => "14694550173"
  "status" => "approved"
  "external_reference" => "null"
  "payment_type" => "credit_card"
  "merchant_order_id" => "2621979593"
  "preference_id" => "752892812-d318bf82-4eea-4748-af60-cd4ade381491"
  "site_id" => "MLM"
  "processing_mode" => "aggregator"
  "merchant_account_id" => "null"
]

我们将使用guzzle/huzzle进行GET请求,以找到已进行的支付,从而获取详情,例如金额、货币类型、买家数据等 ...

 if ($request->status === 'approved') {
        $response = Http::get("https://api.mercadopago.com/v1/payments/{$request->payment_id}", [
            'access_token' => env('ACCESS_TOKEN_MP'),
            ])->json();

        dd($response);
    }

在$response变量中,我们拥有所有成功支付的详细信息,利用这些信息我们可以发送电子邮件、推送通知、在Laravel中显示会话消息等。