geniv / nette-comgate
Nette 框架的 Comgate 包装扩展
v1.0.3
2020-11-29 15:17 UTC
Requires
- php: >=7.0.0
- nette/nette: >=2.4.0
- renat-magadiev/comgate-client: ^1.0
This package is auto-updated.
Last update: 2024-08-29 04:20:14 UTC
README
Comgate 支付网关
灵感来自: https://github.com/renat-magadiev/comgate-client , https://github.com/LZaplata/Comgate
comgate 信息 pdf: https://www.comgate.cz/files/informacni-brozura-comgate-payments.pdf
测试支付列表: https://portal.comgate.cz/cs/testovaci-platby
API: https://platebnibrana.comgate.cz/cz/protokol-api
需要在
https://portal.comgate.cz/cs/propojeni-obchodu-detail/id/**XXmerchantIdXX**
- 支付成功 URL
- 取消 URL
- 未处理 URL
- 支付结果提交 URL
- 允许的 IP 地址
感谢代码审查: @AdamSmid
生产环境示例 URL
重定向 URL (Comgate 重定向 GET): https://example.cz/summary/result/${id}?refId=${refId}
状态 URL (Comgate POST 检查): https://example.cz/summary/status
安装
$ composer require geniv/nette-comgate
或
"geniv/nette-comgate": ">=1.0.0"
要求
"php": ">=7.0.0", "nette/nette": ">=2.4.0", "renat-magadiev/comgate-client": "^1.0"
包含在应用程序中
neon 配置
# comgate comgate: merchantId: "xxxyyy" secret: "******" sandbox: true
neon 配置扩展
extensions: comgate: Comgate\Bridges\Nette\Extension
创建支付演示
/** @var Comgate @inject */ public $comgate;
创建支付
try { // process Comgate $payment = $this->comgate->createPayment($values['order_price'] * 100, $values['order_id'], $values['email'], $game['name']); $payment->setPrepareOnly(true); $response = $this->comgate->sendResponse($payment); if ($response->isOk()) { // edit checkout_id $this->model->editItem($id, ['checkout_id' => $response->getTransId()]); $this->redirectUrl($response->getRedirectUrl()); } } catch (\Comgate\Exception\InvalidArgumentException $e) { Debugger::log($e); $this->redirect('error'); } catch (\Comgate\Exception\LabelTooLongException $e) { Debugger::log($e); $this->redirect('error'); }
支付状态
public function actionStatus() { $this->getHttpResponse()->setContentType('application/javascript'); $request = $this->getHttpRequest(); if ($request->isMethod('POST')) { $transId = $request->getPost('transId'); $status = $request->getPost('status'); if ($transId && $status) { $item = $this->model->getByCheckoutId($transId); if ($item) { if ($this->model->editItem((int) $item['id'], ['status' => $status, 'checkout_date%sql' => 'NOW()', 'active' => ($status == PaymentStatus::PAID)])) { $this->sendResponse(new ComgateResponse('code=0&message=OK')); } $this->sendResponse(new ComgateResponse('code=1&message=SAVE_ERROR')); } $this->sendResponse(new ComgateResponse('code=1&message=TRANS_ID_NOT_FOUND')); } $this->sendResponse(new ComgateResponse('code=1&message=MISSING_PARAMETERS')); } $this->sendResponse(new ComgateResponse('code=1&message=FAIL')); }
支付结果
public function actionResult(string $id, string $refId) { $item = $this->model->getByCheckoutId($id); if ($item) { if ($item['status'] == PaymentStatus::PAID) { //success } else { //danger } } $this->redirect('Homepage:'); }