rabsana/laravel-webmoney-merchant

Laravel 的 WebMoney 交易支付

v1.3.4 2023-09-07 06:55 UTC

This package is auto-updated.

Last update: 2024-09-07 09:08:33 UTC


README

Latest Stable Version Build Status SensioLabsInsight Quality Score Total Downloads License

通过此 Laravel 框架包(Laravel)使用 WebMoney 交易支付(merchant.webmoney.ru)来接受支付。

  • 只需添加两个回调即可接收支付
  • 通过您的电子邮件或 Slack 接收支付通知

您可以通过 WebMoney、信用卡等方式使用 WebMoney 交易支付接受支付。

Laravel 5.3, 5.4, PHP >= 5.6.4

安装

您可以通过 Composer 安装此包

composer require actionm/laravel-webmoney-merchant

将服务提供者添加到 config/app.php 文件中的 providers 数组

'providers' => [

    ActionM\WebMoneyMerchant\WebMoneyMerchantServiceProvider::class,
    
]

WebMoneyMerchant 门面添加到您的门面数组

    'WebMoneyMerchant' => ActionM\WebMoneyMerchant\Facades\WebMoneyMerchant::class,

发布配置文件和视图

php artisan vendor:publish --provider="ActionM\WebMoneyMerchant\WebMoneyMerchantServiceProvider" 

仅发布配置文件

php artisan vendor:publish --provider="ActionM\WebMoneyMerchant\WebMoneyMerchantServiceProvider" --tag=config 

仅发布视图

php artisan vendor:publish --provider="ActionM\WebMoneyMerchant\WebMoneyMerchantServiceProvider" --tag=views 

配置

发布配置文件后,请编辑 config/webmoney-merchant.php 文件中的配置文件。

  • merchant.webmoney.ru 上创建一个账户

  • 设置您的项目设置

    • 商户名称;
    • 密钥;
    • 密钥 X20;
    • 结果 URL;
    • 控制签名生成方法 = SHA256
    • 必须要求签名支付表单 = ON
    • 仅处理唯一 lmi_payment_no 的支付 = ON
  • 配置发布后,编辑 config/webmoney-merchant.php

  • 复制 密钥 X20密钥 参数,并将其粘贴到 config/webmoney-merchant.php

  • searchOrderFilterpaidOrderFilter 设置回调静态函数

  • 设置通知通道(电子邮件和/或 Slack)和 Slack webhook_url

使用方法

  1. 生成带有启用支付方式的 HTML 支付表单
$payment_amount = Order amount 

$payment_no = Unique order number in your project, numbers only from 1 to 2147483647

$item_name = Name of your order item, only latin characters.
WebMoneyMerchant::generatePaymentForm($payment_amount, $payment_no, $item_name);

在发布的视图中自定义 HTML 支付表单

app/resources/views/vendor/webmoney-merchant/payment_form.blade.php

  1. 处理 WebMoneyMerchant 的请求
WebMoneyMerchant::payOrderFromGate(Request $request)

重要

您必须在 config/webmoney-merchant.php 中定义回调以搜索订单并保存已支付的订单。

 'searchOrderFilter' => null  // ExampleController:searchOrderFilter($request)
 'paidOrderFilter' => null  // ExampleController::paidOrderFilter($request,$order)

示例

处理方案

  1. 请求从 merchant.webmoney.ru 发来 GET 请求 http://yourproject.com/webmoney/result 以检查您的网站是否可用。
  2. 请求从 merchant.webmoney.ru 发来 POST 请求 http://yourproject.com/webmoney/result(带有参数)。
  3. 运行验证过程的功能 ExampleController@payOrderFromGate(自动验证请求参数)。
  4. 将调用静态函数 searchOrderFilter(请参阅 config/webmoney-merchant.php 中的 searchOrderFilter)以通过唯一 ID 搜索订单。
  5. 如果当前订单状态在您的数据库中不是 已支付,则将调用静态函数 paidOrderFilter(请参阅 config/webmoney-merchant.php 中的 paidOrderFilter)。

将路由添加到 routes/web.php

Route::post('/webmoney/result', 'ExampleController@payOrderFromGate');
Route::get('/webmoney/result',  'ExampleController@payOrderFromGateOK');

注意:请务必在 merchant.webmoney.ru 上保存您的完整路由 URL(例如 http://example.com/webmoney/result)以供您的项目使用。

创建以下控制器: /app/Http/Controllers/ExampleController.php

class ExampleController extends Controller
{

    /**
     * Search the order if the request from WebMoney Merchant is received.
     * Return the order with required details for the webmoney request verification.
     *
     * @param Request $request
     * @param $order_id
     * @return mixed
     */
    public static function searchOrderFilter(Request $request, $order_id) {

        // If the order with the unique order ID exists in the database
        $order = Order::where('unique_id', $order_id)->first();

        if ($order) {
            $order['WEBMONEY_orderSum'] = $order->amount; // from your database

            // if the current_order is already paid in your database, return strict "paid"; 
            // if not, return something else
            $order['WEBMONEY_orderStatus'] = $order->order_status; // from your database
            return $order;
        }

        return false;
    }

    /**
     * When the payment of the order is received from WebMoney Merchant, you can process the paid order.
     * !Important: don't forget to set the order status as "paid" in your database.
     *
     * @param Request $request
     * @param $order
     * @return bool
     */
    public static function paidOrderFilter(Request $request, $order)
    {
        // Your code should be here:
        YourOrderController::saveOrderAsPaid($order);

        // Return TRUE if the order is saved as "paid" in the database or FALSE if some error occurs.
        // If you return FALSE, then you can repeat the failed paid requests on the WebMoney Merchant website manually.
        return true;
    }

    /**
     * Process the request from the WebMoney Merchant route.
     * searchOrderFilter is called to search the order.
     * If the order is paid for the first time, paidOrderFilter is called to set the order status.
     * If searchOrderFilter returns the "paid" order status, then paidOrderFilter will not be called.
     *
     * @param Request $request
     * @return mixed
     */
    public function payOrderFromGate(Request $request)
    {
        return WebMoneyMerchant::payOrderFromGate($request);
    }
    
    /**
    * Returns the service status for WebMoney Merchant request
    */
    public function payOrderFromGateOK()
    {
        return "YES";
    }
    
}

变更日志

请参阅 CHANGELOG 了解最近更改的信息。

测试

$ composer test

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全性

如果您发现任何与安全相关的问题,请通过电子邮件发送给我,而不是使用问题跟踪器,我的电子邮件是:actionmanager@gmail.com

致谢

许可协议

MIT 许可协议(MIT)。有关更多信息,请参阅许可文件