omidgfx / payir-gateway
使您的(pay.ir)支付变得简单,并为支付网关实现可靠的接口。
v1.0.8
2021-02-04 08:37 UTC
Requires
- php: >=5.6
- ext-curl: *
- ext-json: *
- ext-mbstring: *
README
使您的(pay.ir)支付变得简单,并为支付网关实现可靠的接口。
Payir Gateway 是一个 composer 库,用于帮助与 pay.ir 支付网关一起工作。
- 安全
- 可靠
- 易于使用
教程
▷ 在 aparat 观看教程视频
基本场景
为了健康的支付,首先您需要将订单信息发送到 pay.ir 并获取一个令牌,并将其存储在您的数据库中(唯一),然后通过涉及您刚获取的令牌的地址将您的客户发送过去。客户支付后,再次返回您的网站。
现在客户已在您的网站上,您应该验证他的支付并销售您的商品。
如何使用?
-
步骤 1
将 Payir Gateway 添加到您的项目中。
$ composer require omidgfx/payir-gateway
-
步骤 2
使用您的
API-KEY
创建Omidgfx\Payir
类的一个实例。$payir = new Omidgfx\Payir( # api key 'API-KEY-STRING', # language Payir::LANGUAGE_FARSI // or Payir::LANGUAGE_ENGLISH );
-
步骤 3
通过
send
方法从 pay.ir 获取一个新的token
并用于打开支付网关。$response = $payir->send( # total amount of the order 1000, # callback url to your website 'https://myshop.com/verify?order=123', # mobile number [optional] '09121111111', # factor number '123', # description of the order 'Some description', # valid card number '6219861012345678' );
> Use `try-catch` to catch the exceptions.
-
步骤 4
检查
$response
是否是Omidgfx\Payir\SendResponse
类的实例。- 如果
$response
是Omidgfx\Payir\SendResponse
类的实例,则将令牌保存到您的数据库中,然后通过$response->redirectToPayLink()
或通过$response->getPayLink()
获取 支付链接 作为字符串,将您的客户重定向到 支付链接。 - 如果
$response
是Omidgfx\Payir\ErrorResponse
类的实例,则通过$response->error()
向您的客户显示错误消息或追踪它以修复它。
if ($response instanceof Omidgfx\Payir\SendResponse) { $response->redirectToPayLink(); # redirection } elseif ($response instanceof Omidgfx\Payir\ErrorResponse) { echo 'ERR ' . $response->errorCode . ': ' . $response->error(); }
- 如果
-
步骤 5
支付操作执行后,客户将被传递到您的网站,现在您需要验证交易。Payir Gateway 将为您执行此操作,如下面的回调监听器所示:
假设
https://site.com/verify.php?invoice=123
是您的回调(重定向),以下代码必须在您的回调监听器控制器中编写,例如verify.php
。在
verify.php
中再次执行 步骤 2。$payir = new Omidgfx\Payir( # api key 'API-KEY-STRING', # language Payir::LANGUAGE_FARSI // or Payir::LANGUAGE_ENGLISH );
创建您的回调监听器
$cb = $payir->makeCallbackListener();
设置回调监听器的事件
- setOnError
- setOnSuccess
- setOnException
$cb->setOnError(function (Payir\ErrorResponse $errorResponse) { echo 'ERR ' . $errorResponse->errorCode . ': ' . $errorResponse->error(); })->setOnSuccess(function (Payir\VerifyResponse $verifyResponse) { // $verifyResponse->status is always 1 here /* // Save these data or use them to check if transId is in your database already. $status = $verifyResponse->status; $amount = $verifyResponse->amount; $transId = $verifyResponse->transId; $factorNumber = $verifyResponse->factorNumber; $mobile = $verifyResponse->mobile; $factorNumber = $verifyResponse->factorNumber; $description = $verifyResponse->description; $message = $verifyResponse->message; */ if(DB::getInstance()->exists('orders', ['trans_id' => $verifyResponse->transId]) == false){ // SELL YOUR STUFF HERE }else{ echo 'ERR: Security reason'; } })->setOnException(function (Exception $exception) { //throw $exception; echo 'ERR: ' . $exception->getMessage(); });
现在按照以下方式启动您的回调监听器:
$cb->listen();
由 Pejman Chatrrouz (Omidgfx) 以 ❤ 创建