hos69shah / gateways
使用一个包即可使用所有伊朗网关,也许还可以使用国际网关
Requires
- php: >=5.3.0
- econea/nusoap: 0.9.5.3
This package is not auto-updated.
Last update: 2023-12-23 23:20:02 UTC
README
####在此处查看具有更好UX的文档
支持以下网关的Composer插件
- Mellat (Behpardakht)
其他网关也将很快实现,或者您可以自己实现并合并
包安装
-
下载包
php composer.phar require hos69shah/gateways -
在项目中要求包
如果您已经要求全局vendor/autoload.php,请跳过此部分,否则
require_once 'path/to/vendor/autoload.php'; -
使用命名空间
然后您必须使用我的命名空间来简单地访问类
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_name、index_value和traget的数组,您应该通过在target中提交名为index_name的target_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
为了更快地将费用退还给用户账户。此函数是可选的,并且仅在捕获块中使用。