3x1io/laravel-paytm-wallet

使用此包轻松集成 Paytm 钱包。此包使用官方的 Paytm PHP SDK。

v1.0.0 2023-03-12 12:39 UTC

This package is auto-updated.

Last update: 2024-09-04 14:08:53 UTC


README

Latest Stable Version Total Downloads License Join the chat at https://gitter.im/laravel-paytm-wallet/Lobby

对于 Laravel 5.0 使用版本 ^1.0.0
对于 Laravel 6.0 使用版本 ^1.0.0
对于 Laravel 7.0 使用版本 ^1.0.0
对于 Laravel 8.0 使用版本 ^2.0.0

介绍

使用此包,您可以轻松地将 Paytm 钱包集成到您的 Laravel 应用程序中。此包使用官方的 Paytm PHP SDK。

许可证

Laravel Paytm Wallet 是 MIT 许可下开源的软件 MIT 许可证

入门

要开始使用,请使用以下命令将此包添加到您的 composer.json 文件中。

composer require anandsiddharth/laravel-paytm-wallet

配置

注意:对于 Laravel 5.5 及以上版本,自动发现会处理以下配置。

当 Composer 成功安装 Laravel Paytm Wallet 库后,请在您的 config/app.php 配置文件中注册 Anand\LaravelPaytmWallet\PaytmWalletServiceProvider

'providers' => [
    // Other service providers...
    Anand\LaravelPaytmWallet\PaytmWalletServiceProvider::class,
],

同时,在您的 app 配置文件中将 PaytmWallet 门面添加到 aliases 数组中。

'aliases' => [
    // Other aliases
    'PaytmWallet' => Anand\LaravelPaytmWallet\Facades\PaytmWallet::class,
],

将 Paytm 凭证添加到 .env 文件中

PAYTM_ENVIRONMENT=local
PAYTM_MERCHANT_ID=YOUR_MERCHANT_ID_HERE
PAYTM_MERCHANT_KEY=YOUR_SECRET_KEY_HERE
PAYTM_MERCHANT_WEBSITE=YOUR_MERCHANT_WEBSITE
PAYTM_CHANNEL=YOUR_CHANNEL_HERE
PAYTM_INDUSTRY_TYPE=YOUR_INDUSTRY_TYPE_HERE

再走一步...

在您的 config/services.php 中添加以下配置

'paytm-wallet' => [
        'env' => env('PAYTM_ENVIRONMENT'), // values : (local | production)
        'merchant_id' => env('PAYTM_MERCHANT_ID'),
        'merchant_key' => env('PAYTM_MERCHANT_KEY'),
        'merchant_website' => env('PAYTM_MERCHANT_WEBSITE'),
        'channel' => env('PAYTM_CHANNEL'),
        'industry_type' => env('PAYTM_INDUSTRY_TYPE'),
],

注意:以下所有凭据均由 Paytm 在商户注册后提供。

Laravel 7 变更

我们的包与 Laravel 7 兼容,但默认 Laravel 安装中已更改 same_site 设置,请确保在 config/session.php 中将 same_site 更改为 null,否则回调将不会包含 cookies,并且在完成支付时您将被注销。

<?php

use Illuminate\Support\Str;

return [
  /...
  'same_site' => null,
];

用法

进行交易

<?php

namespace App\Http\Controllers;

use PaytmWallet;

class OrderController extends Controller
{
    /**
     * Redirect the user to the Payment Gateway.
     *
     * @return Response
     */
    public function order()
    {
        $payment = PaytmWallet::with('receive');
        $payment->prepare([
          'order' => $order->id,
          'user' => $user->id,
          'mobile_number' => $user->phonenumber,
          'email' => $user->email,
          'amount' => $order->amount,
          'callback_url' => 'http://example.com/payment/status'
        ]);
        return $payment->receive();
    }

    /**
     * Obtain the payment information.
     *
     * @return Object
     */
    public function paymentCallback()
    {
        $transaction = PaytmWallet::with('receive');
        
        $response = $transaction->response(); // To get raw response as array
        //Check out response parameters sent by paytm here -> http://paywithpaytm.com/developer/paytm_api_doc?target=interpreting-response-sent-by-paytm
        
        if($transaction->isSuccessful()){
          //Transaction Successful
        }else if($transaction->isFailed()){
          //Transaction Failed
        }else if($transaction->isOpen()){
          //Transaction Open/Processing
        }
        $transaction->getResponseMessage(); //Get Response Message If Available
        //get important parameters via public methods
        $transaction->getOrderId(); // Get order id
        $transaction->getTransactionId(); // Get transaction id
    }    
}

请确保您在接收付款时提到的 callback_url 在您的 routes.php 文件中为 post,以下是一个示例

Route::post('/payment/status', [App\Http\Controllers\PaytmController::class,'paymentCallback'])->name('status');

重要:callback_url 必须不进行 CSRF 保护 在此处查看如何进行操作

使用订单 ID 获取交易状态/信息

<?php

namespace App\Http\Controllers;

use PaytmWallet;

class OrderController extends Controller
{
    /**
    * Obtain the transaction status/information.
    *
    * @return Object
    */
    public function statusCheck(){
        $status = PaytmWallet::with('status');
        $status->prepare(['order' => $order->id]);
        $status->check();
        
        $response = $status->response(); // To get raw response as array
        //Check out response parameters sent by paytm here -> http://paywithpaytm.com/developer/paytm_api_doc?target=txn-status-api-description
        
        if($status->isSuccessful()){
          //Transaction Successful
        }else if($status->isFailed()){
          //Transaction Failed
        }else if($status->isOpen()){
          //Transaction Open/Processing
        }
        $status->getResponseMessage(); //Get Response Message If Available
        //get important parameters via public methods
        $status->getOrderId(); // Get order id
        $status->getTransactionId(); // Get transaction id
    }
}

启动退款

<?php

namespace App\Http\Controllers;

use PaytmWallet;

class OrderController extends Controller
{
    /**
    * Initiate refund.
    *
    * @return Object
    */
    public function refund(){
        $refund = PaytmWallet::with('refund');
        $refund->prepare([
            'order' => $order->id,
            'reference' => "refund-order-4", // provide refund reference for your future reference (should be unique for each order)
            'amount' => 300, // refund amount 
            'transaction' => $order->transaction_id // provide paytm transaction id referring to this order 
        ]);
        $refund->initiate();
        $response = $refund->response(); // To get raw response as array
        
        if($refund->isSuccessful()){
          //Refund Successful
        }else if($refund->isFailed()){
          //Refund Failed
        }else if($refund->isOpen()){
          //Refund Open/Processing
        }else if($refund->isPending()){
          //Refund Pending
        }
    }
}

检查退款状态

<?php

namespace App\Http\Controllers;

use PaytmWallet;

class OrderController extends Controller
{
    /**
    * Initiate refund.
    *
    * @return Object
    */
    public function refund(){
        $refundStatus = PaytmWallet::with('refund_status');
        $refundStatus->prepare([
            'order' => $order->id,
            'reference' => "refund-order-4", // provide reference number (the same which you have entered for initiating refund)
        ]);
        $refundStatus->check();
        
        $response = $refundStatus->response(); // To get raw response as array
        
        if($refundStatus->isSuccessful()){
          //Refund Successful
        }else if($refundStatus->isFailed()){
          //Refund Failed
        }else if($refundStatus->isOpen()){
          //Refund Open/Processing
        }else if($refundStatus->isPending()){
          //Refund Pending
        }
    }
}

自定义交易处理页面

考虑到现代应用程序的用户界面,此包附带默认的“交易处理页面”过于单调。如果您想修改它,您有这个选项。以下是方法:您只需更改 OrderController 代码中的一行。

<?php

namespace App\Http\Controllers;

use PaytmWallet;

class OrderController extends Controller
{
    /**
     * Redirect the user to the Payment Gateway.
     *
     * @return Response
     */
    public function order()
    {
        $payment = PaytmWallet::with('receive');
        $payment->prepare([
          'order' => $order->id,
          'user' => $user->id,
          'mobile_number' => $user->phonenumber,
          'email' => $user->email,
          'amount' => $order->amount,
          'callback_url' => 'http://example.com/payment/status'
        ]);
        return $payment->view('your_custom_view')->receive();
    }

在这里,$payment->receive() 被替换为 $payment->view('your_custom_view')->receive()。将 your_custom_view 替换为您位于 resources/views/your_custom_view.blade.php 的视图名称。

并在您的视图文件中确保在 </body> 之前添加以下行代码(即在关闭 body 标签之前),该代码将重定向到支付网关。

@yield('payment_redirect')

以下是一个自定义视图示例

<html>
<head>
</head>
<body>
    <h1>Custom payment message</h1>
    @yield('payment_redirect')
</body>
</html>

这就完了!

你还在这里吗?

我正在开发一个名为 yoheim 的酷炫项目。它是一个集管理和共享 SSH 服务器于一体的协作平台。现在就免费下载并开始使用吧 www.yoheim.com www.yoheim.com

yoheim log

在 Beerpay 上提供支持

Beerpay Beerpay