hos69shah/gateways

此包已被废弃,不再维护。未建议替代包。

使用一个包即可使用所有伊朗网关,也许还可以使用国际网关

v1.0.2 2017-08-07 16:11 UTC

This package is not auto-updated.

Last update: 2023-12-23 23:20:02 UTC


README

####在此处查看具有更好UX的文档

支持以下网关的Composer插件

  • Mellat (Behpardakht)

其他网关也将很快实现,或者您可以自己实现并合并

包安装

  1. 下载包
    php composer.phar require hos69shah/gateways

  2. 在项目中要求包
    如果您已经要求全局vendor/autoload.php,请跳过此部分,否则
    require_once 'path/to/vendor/autoload.php';

  3. 使用命名空间
    然后您必须使用我的命名空间来简单地访问类
    use Hossein\Gateway as HG;

Mellat 文档

在此查看实际使用情况

完成以上步骤后,您可以使用包通过Behpardakht提供的凭据信息连接到Mellat网关

开始支付

首先创建一个Mellat类的实例
$mellat = new HG\Mellat();

然后您应提供一些变量和凭据以开始支付,如下所示

$mellat->terminal = 'Your Terminal ID';
$mellat->username = 'Your Username';
$mellat->password = 'Your Password';
$mellat->order_id = mt_rand(0, 1000); //Unique number, Should be store somewhere to use it in callback
$mellat->amount = 1000; //Rials means 100 Toman
$mellat->callback = 'http://your-domain.com?specific_data_to_distinguish_request';

现在所有变量都已设置。 请注意,如果在开始支付之前未设置这些变量中的任何一个,您将遇到异常。

现在您需要做的就是开始支付

try{
    $mellat->start_payment();
    
}catch(HG\AllException $ae){
    echo '<b>Result Code: </b>' . $mellat->result_code . '<br />';
    echo HG\Language::get($ae->getMessage());
    
}

注意1
您应为此插件使用try-catch块,因为它在失败的情况下会抛出异常。

注意2
您应通过AllException类型捕获所有异常。

注意3
我们可以使用Language类来翻译异常消息,如上所示。
您可以使用它的静态函数get($index)来获取人类可读的消息。
要获取更多信息,请查看src/Language.php及其lang_fa()函数以查看索引和消息。您也可以随意更改消息或尝试添加额外的语言。

开始回调

当支付完成或银行端失败时,用户将通过$mellat->callback重定向到您之前提供的地址。

现在假设这是一个我们认为的回调页面。首先,我们应该提供和设置一些比之前更多的凭证限制

$mellat = new HG\Mellat();
$mellat->terminal = 'Your Terminal ID';
$mellat->username = 'Your Username';
$mellat->password = 'Your Password';
$mellat->order_id = 'Order ID'; //This is an order ID you supplied starting payment, you stored it and you can fetch it according to your callback parameters

之后,您应调用请求处理程序并等待其响应

try {
    $mellat->handle_payment();

    echo '<h1 style="color:green">Payment Was Successful</h1>';

    echo '<b>Sale Reference ID: </b>' . $mellat->sale_reference_id . '<br />';
    echo '<b>Sale Order ID: </b>' . $mellat->sale_order_id . '<br />';
    echo '<b>Card Holder Info: </b>' . $mellat->card_holder_info . '<br />';
    echo '<b>Card Holder Pan: </b>' . $mellat->card_holder_pan . '<br />';

} catch (HG\AllException $ae) {

    echo '<h1 style="color:red">Payment Was Unsuccessful</h1>';
    $mellat->refund_payment();
    echo '<b>Result Code: </b>' . $mellat->result_code . '<br />';
    echo HG\Language::get($ae->getMessage());

}

注意4
与注意1到3相同,请仔细阅读。

注意5
如果出现任何失败,您可以调用$mellat->refund_payment()来将费用退还给银行账户,如果其余额降低。这也是可选的,银行将在几分钟后自动执行此操作。

属性

所有变量都是可访问的,但不是必须设置的

$mode
可设置/可访问当一切正常,可以重定向到银行页面时,您有几个选项来处理这种情况

  • direct-immediate:(默认),立即将用户重定向到银行页面。
  • direct-delay: 在 $direct_delay 秒后直接将用户转到银行页面。
  • indirect: 通过 start_payment() 获取的结果字符串包含创建和提交表单的javascript函数,用于将参考ID发送到银行。
  • information: 获取包含 index_nameindex_valuetraget 的数组,您应该通过在 target 中提交名为 index_nametarget_value 来将用户重定向到 target

$direct_delay
可设置/可访问
direct-delay 模式下的秒数。 (默认:3)

$terminal
可设置/可访问
Behpardakht 提供的终端ID。

$username
可设置/可访问
Behpardakht 提供的用户名。

密码
可设置/可访问
Behpardakht 提供的密码。

$order_id
可设置/可访问
每个交易的唯一ID。您应该在数据库中生成并存储此值,以便在处理回调时使用。

$amount
可设置/可访问
应设置为里亚尔并大于0的交易手续费金额。

$callback
可设置/可访问
用户将从银行重定向到的链接。您应将其设置为可以从其中获取用户信息和获取交易订单ID。

$reference_id
仅可访问
在支付开始时为特定交易生成的字符串。

$result_code
仅可访问
银行在每一步返回的代码。几乎总是0表示成功。

$sale_order_id
仅可访问
银行返回的长整数包含应存储以进行进一步一致性的ID。

$sale_reference_id
仅可访问
银行返回的长整数包含应存储以进行进一步一致性的ID。

$card_holder_info
仅可访问
...

$card_holder_pan
仅可访问
包含用户用于支付交易的卡号的前6位和最后4位。

方法

init($terminal, $username, $password, $order, $amount, $callback, $additional)
所有这些都是可选的。
使用此函数一次性设置所有变量,而不是单独设置。

start_payment()
开始交易并将用户重定向到银行。在初始化变量和凭证后使用它。

  • 将自动回显表单并将其提交。
  • 将返回一个创建和提交表单的javascript函数。
  • 将返回一个数组以手动将用户转移。
  • 如果失败,将抛出 AllException。有关更多信息,请参阅 $mode 描述。

handle_payment
处理从银行返回的支付。在回调页面上使用它,并在初始化变量和凭证后调用它。

  • 将设置银行变量。
  • 如果失败,将抛出 AllException。

refund_payment
为了更快地将费用退还给用户账户。此函数是可选的,并且仅在捕获块中使用。