appwilio / yakassa
Yandex.Kassa 支付
v0.5
2021-02-18 10:04 UTC
Requires
- php: >=7.1
- ext-json: *
- ext-mbstring: *
- illuminate/http: ~5.3|^6.0|^7.0
- illuminate/support: ~5.3|^6.0|^7.0
Requires (Dev)
- phpunit/phpunit: ^7.5
This package is auto-updated.
Last update: 2024-09-18 18:11:58 UTC
README
早期alpha版本,请谨慎使用!
功能
- 创建支付表单;
- 按照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-ФЗ要求的额外数据
订单必须实现接口 \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(); } }