定制 appwilio/yakassa 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

appwilio/yakassa

Composer 安装命令:

composer require appwilio/yakassa

包简介

Yandex.Kassa payments

README 文档

README

Latest Version on Packagist Testing Quality Score Code Coverage StyleCI Total Downloads License MIT

Ранняя альфа, использовать осторожно!

Возможности:

  • создание платёжной формы;
  • передача данных согласно 54-ФЗ;
  • обработка уведомлений checkOrder и paymentAviso.

Требования:

  • php >= 7.1
  • Laravel >= 5.3

Установка

composer require appwilio/yakassa

Подключение сервис-провайдера:

// config/app.php
'providers' => [
    ...
    Appwilio\YaKassa\YaKassaServiceProvider::class,
],

Настройки:

Описание параметров.

// config/services.php
...
'yakassa' => [
    'test_mode'     => env('YAKASSA_TEST_MODE', true),
    'shop_id'       => env('YAKASSA_SHOP_ID', ''),
    'showcase_id'   => env('YAKASSA_SHOWCASE_ID', ''),
    'shop_password' => env('YAKASSA_SHOP_PASSWORD', ''),        
],
...

Подготовка основных данных для платёжной формы

Заказ должен имплементировать интерфейс \Appwilio\YaKassa\Contracts\YaKassaOrder:

use Appwilio\YaKassa\Contracts\YaKassaOrder;

class Order implements YaKassaOrder
{
    public function getOrderSum(): float
    {
        return $this->total;
    }
    
    public function getCustomerNumber(): string
    {
        return $this->customer->id;
    }
    
    public function getOrderNumber(): ?string
    {
        return $this->id;
    }
    
    public function getPaymentType(): ?string
    {
        return 'PC';
    }
    
    public function getCustomerEmail(): ?string
    {
        return $this->customer->email;
    }
    
    public function getCustomerPhone(): ?string
    {
        return $this->customer->phone;
    }
}

Дополнительные данные согласно требованиям 54-ФЗ

Внимание! Протокол дополняется, текущая версия 2.1. Общая информация, описание изменений.

Заказ должен имплементировать интерфейс \Appwilio\YaKassa\Contracts\YaKassaOrder54FZ:

use Appwilio\YaKassa\Contracts\YaKassaOrder54FZ;

class Order implements YaKassaOrder54FZ
{
    public function getOrderSum(): float
    {
        return $this->total;
    }
    
    public function getCustomerNumber(): string
    {
        return $this->customer->id;
    }
    
    public function getItems(): iterable
    {
        return $this->items; // товары/услуги в заказе
    }
    
    public function getTaxSystem(): ?int
    {
        return YaKassaOrder54FZ::TAX_OSN;
    }
    
    public function getCustomerContact(): string
    {
        return $this->customer->phone;
    }
        
    public function getOrderNumber(): ?string
    {
        return $this->id;
    }
    
    public function getPaymentType(): ?string
    {
        return 'PC';
    }
    
    public function getCustomerEmail(): ?string
    {
        return $this->customer->email;
    }
    
    public function getCustomerPhone(): ?string
    {
        return $this->customer->phone;
    }
}

Каждая позиция заказа должна имплементировать интерфейс \Appwilio\YaKassa\Contracts\YaKassaOrderItem54FZ:

use Appwilio\YaKassa\Contracts\YaKassaOrderItem54FZ;

class OrderItem implements YaKassaOrderItem54FZ
{
    public function getAmount(): float
    {
        return $this->amount;
    }

    public function getQuantity(): float
    {
        return $this->quantity;
    }

    public function getTaxRate(): int
    {
        return YaKassaOrderItem54FZ::VAT_18;
    }

    public function getCurrency(): ?string
    {
        return null; // равнозначно RUB
    }

    public function getTitle(): string
    {
        return $this->product->title;
    }
}

Создание платёжной формы

В контролллере:

use Appwilio\YaKassa\YaKassa;

class OrdersController
{
    public function showPaymentForm(YaKassa $kassa, $orderId)
    {
        $order = Order::find($orderId);
        
        $paymentForm = $kassa->buildPaymentForm($order);
        
        return view('payment', ['form' => $paymentForm]);
    }    
}

В шаблоне:

<form method="POST" action="{{ $form->getPaymentUrl() }}">
    @foreach ($form->toArray() as $k => $v) 
        <input type="hidden" name="{{ $k }}" value="{{ $v }}" />
    @endforeach
    
    ...
</form>

Обработка уведомлений

Общее описание механизма уведомлений

use Appwilio\YaKassa\YaKassa;

class YaHookController extends Controller
{
    public function checkOrder(YaKassa $kassa)
    {
        $order = Order::find($kassa->getRequest()->getOrderNumber());

        if (! $order) {
            return $kassa->responseDeclined();
        }

        // используем реальное значение суммы заказа, а не присланное Я.Кассой
        $kassa->setGenuineOrderSumAmount($order->total);

        if (! $kassa->verify()) {
            return $kassa->responseUnauthorized();
        }

        return $kassa->responseAccepted();
    }
}

统计信息

  • 总下载量: 3.87k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 35
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 35
  • Watchers: 10
  • Forks: 6
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2017-06-14

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固