rodion15/laravel-payok-io

为 Laravel 提供的 payok.io 支付解决方案

v1.0.2 2024-01-12 23:01 UTC

This package is auto-updated.

Last update: 2024-09-13 00:47:07 UTC


README

通过 PayokIo (payok.io) 使用此 Laravel 框架包 (Laravel) 接收支付。

  • 只需添加两个回调即可接收支付

Laravel >= 10.*, PHP >= 8.1

安装

使用 composer 安装此包。

composer require rodion15/laravel-payok-io

如果您不使用自动发现,请将 ServiceProvider 添加到 config/app.php 中的 providers 数组

Rodion15\PayokIo\PayokIoServiceProvider::class,

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

'PayokIo' => Rodion15\PayokIo\Facades\PayokIo::class,

使用发布命令将包配置复制到您的本地配置

php artisan vendor:publish --provider="Rodion15\PayokIo\PayokIoServiceProvider"

配置

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

  • payok.io 上创建账户
  • 添加您的项目,复制 project_idsecret_key 参数,并将其粘贴到 config/payokio.php
  • 配置发布后,编辑 config/payokio.php
  • searchOrderpaidOrder 设置回调静态函数
  • 创建到您控制器的路由,并调用 PayokIo::handle 方法

用法

  1. 生成支付 URL 或获取重定向
$amount = 100; // Payment`s amount

$url = PayokIo::getPayUrl($amount, $order_id);

$redirect = PayokIo::redirectToPayUrl($amount, $order_id);

您可以为支付添加自定义字段

$rows = [
    'time' => Carbon::now(),
    'info' => 'Local payment'
];

$url = PayokIo::getPayUrl($amount, $order_id, $desc, $payment_methood, $rows);

$redirect = PayokIo::redirectToPayUrl($amount, $order_id, $desc, $payment_methood, $rows);

$desc$payment_methood 可以是 null。

  1. 处理来自 PayokIo 的请求
PayokIo::handle(Request $request)

重要

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

'searchOrder' => null  // PayokIoController@searchOrder(Request $request)
'paidOrder' => null  // PayokIoController@paidOrder(Request $request, $order)

示例

处理方案

  1. 请求来自 payok.ioGETPOSThttp://yourproject.com/payokio/result (带有参数)。
  2. 函数 PayokIoController@handlePayment 执行验证过程(自动验证请求参数)。
  3. 将调用 searchOrder 方法(参见 config/payokio.php 中的 searchOrder),以通过唯一 ID 搜索订单。
  4. 如果当前订单状态在您的数据库中不是 paid,则将调用 paidOrder 方法(参见 config/payokio.php 中的 paidOrder)。

将路由添加到 routes/web.php

 Route::get('/payokio/result', 'PayokIoController@handlePayment');

注意:不要忘记在 payok.io 上保存您项目的完整路由 URL(例如,http://example.com/payokio/result)。

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

class PayokIoController extends Controller
{
    /**
     * Search the order in your database and return that order
     * to paidOrder, if status of your order is 'paid'
     *
     * @param Request $request
     * @param $order_id
     * @return bool|mixed
     */
    public function searchOrder(Request $request, $order_id)
    {
        $order = Order::where('id', $order_id)->first();

        if($order) {
            $order['_orderSum'] = $order->sum;

            // If your field can be `paid` you can set them like string
            $order['_orderStatus'] = $order['status'];

            // Else your field doesn` has value like 'paid', you can change this value
            $order['_orderStatus'] = ('1' == $order['status']) ? 'paid' : false;

            return $order;
        }

        return false;
    }

    /**
     * When paymnet is check, you can paid your order
     *
     * @param Request $request
     * @param $order
     * @return bool
     */
    public function paidOrder(Request $request, $order)
    {
        $order->status = 'paid';
        $order->save();

        //

        return true;
    }

    /**
     * Start handle process from route
     *
     * @param Request $request
     * @return mixed
     */
    public function handlePayment(Request $request)
    {
        return PayokIo::handle($request);
    }
}

变更日志

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

贡献

请参阅 CONTRIBUTING 了解详细信息。

安全

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

致谢

许可证

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