ozgur / est
EST支付网关(土耳其)的虚拟POS接口
Requires
- php: >=5.2.1
This package is not auto-updated.
Last update: 2024-09-14 15:05:57 UTC
README
基于PHP的EST虚拟POS系统接口
该接口专门用于连接EST虚拟POS接口,以便进行信用卡订单处理。
该接口仅与以下银行的虚拟POS接口兼容:工商银行、安银行、安纳多卢银行、中国银行、金融银行。其他EST接口不兼容。
EST是土耳其的电子商务安全支付系统和服务提供商。几乎所有的在土耳其开展电子商务支付的银行都通过使用EST的产品、解决方案和服务来执行这些支付。
安装
此接口可在PHP 5.3.2或更高版本中使用。安装此接口需要您安装composer包管理器。
$ php composer.phar install
使用方法
要使用此接口,您需要提供以下信息:商户号、用户名和密码。为了使用每个银行的虚拟POS接口,您需要分别获取这些信息。如果您想获取这些信息,请发送电子邮件至destek@est.com.tr。
使用该接口可以执行以下POS操作:
- 下订单
- 取消订单
- 从订单中退还部分金额
- 查看已完成的订单详情
所有对虚拟POS系统的请求都由EST类处理。为了使EST类能够执行上述操作,已定义以下方法。
- purchase() ~ 调用此方法下订单。
- postAuth() ~ 调用此方法从卡中提取已冻结的金额。
- cancel() ~ 调用此方法取消订单。
- refund() ~ 调用此方法从订单中退还部分金额。
- getDetail() ~ 调用此方法查看订单详情。
require 'est.php'; $api = new EST("akbank", "100100000", "AKTEST", "AKTEST123", $debug=TRUE);
如果您想在真实环境中而不是测试服务器上运行,请将debug参数设置为FALSE。
要发送订单请求,必须调用.pay()方法。调用此方法需要以下参数。
$cc_num = "5456165456165454"; // kart numarası $cc_cvv = "000"; $month = "12"; $year = "12"; $amount = 10.00; $taksit = 0; // peşin $order_num = "qwaszx"; // sipariş numarası $result = $api->pay($cc_num, $cc_cvv, $month, $year, $amount, $taksit, $order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TeYF-1-1543 [groupid] => qwaszx [response] => Approved [return_code] => 00 [error_msg] => [host_msg] => Onay [auth_code] => 116745 [result] => 1 [transaction_time] => Array ( [tm_sec] => 24 [tm_min] => 30 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
如果使用相同的订单号再次发送请求,将会收到错误。
$result = $api->pay($cc_num, $cc_cvv, $month, $year, $amount, $taksit, $order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TfgE-1-1544 [groupid] => qwaszx [response] => Error [return_code] => 99 [error_msg] => Bu siparis numarasi ile zaten basarili bir siparis var. [host_msg] => [auth_code] => [result] => [transaction_time] => Array ( [tm_sec] => 32 [tm_min] => 31 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
您可以在额外参数中设置与发票地址和交货地址相关的详细信息。
$extra = array("shipping_address_name" => "Ev Adresim", "billing_address_name" => "Fatura Adresim"); $api->pay($cc_num, $cc_cvv, $month, $year, $amount, $taksit, $order_num, $typ="Auth", $extra=$extra);
要将特定金额锁定在用户的信用卡上,请将typ参数发送为PreAuth。
$api->pay($cc_num, $cc_cvv, $month, $year, $amount, $taksit, $order_num, $typ="PreAuth");
要提取我们冻结的金额,请使用带有所需金额的.postAuth()方法。
$result = $api->postAuth($amount, $order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TpIF-1-1549 [groupid] => qwaszx [response] => Approved [return_code] => 00 [error_msg] => [host_msg] => [auth_code] => 691348 [host_ref_num] => 017719080777 [result] => 1 [transaction_time] => Array ( [tm_sec] => 8 [tm_min] => 41 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
要取消订单或已提交的postAuth请求,请调用.cancel()方法。需要提供订单号作为参数。
$result = $api->cancel($order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TpIF-1-1549 [groupid] => qwaszx [response] => Approved [return_code] => 00 [error_msg] => [host_msg] => [auth_code] => 691348 [host_ref_num] => 017719080777 [result] => 1 [transaction_time] => Array ( [tm_sec] => 8 [tm_min] => 41 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
如果尝试再次取消一个不存在或已取消的订单,将从服务器收到以下类型的响应。
$result = $api->cancel("123456abcdef"); print_r($result); Array ( [orderid] => 123456abcdef [transid] => 10177-TtuB-1-1556 [groupid] => 123456abcdef [response] => Error [return_code] => 99 [error_msg] => İptal edilmeye uygun satış işlemi bulunamadı. [host_msg] => [auth_code] => [host_ref_num] => [result] => [transaction_time] => Array ( [tm_sec] => 46 [tm_min] => 45 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
要执行从订单中退还特定金额的操作,请调用.refund()方法。
$result = $api->refund($amount = 5.00, $orderid = $order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TxYA-1-1558 [groupid] => qwaszx [response] => Approved [return_code] => 00 [error_msg] => [host_msg] => Onay [auth_code] => 154681 [host_ref_num] => 017719080780 [result] => 1 [transaction_time] => Array ( [tm_sec] => 24 [tm_min] => 49 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
如果尝试取消比订单金额更大的金额,将收到以下类型的响应。
$result = $api->refund($amount = 9999.0, $orderid = $order_num); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TybA-1-1559 [groupid] => qwaszx [response] => Error [return_code] => 99 [error_msg] => Net miktardan fazlasi iade edilemez. [host_msg] => [auth_code] => [host_ref_num] => [result] => [transaction_time] => Array ( [tm_sec] => 27 [tm_min] => 50 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
如果您想取消使用.refund()方法进行的退款请求,请将退款操作中返回的transid和orderid值发送到.cancel()方法。
$result = $api->cancel($orderid = $order_num, $transid = '10177-TxYA-1-1558'); print_r($result); Array ( [orderid] => qwaszx [transid] => 10177-TxYA-1-1558 [groupid] => qwaszx [response] => Approved [return_code] => 00 [error_msg] => [host_msg] => [auth_code] => 154681 [host_ref_num] => 017719080780 [result] => 1 [transaction_time] => Array ( [tm_sec] => 24 [tm_min] => 49 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
若要了解先前已提交订单的详细信息,应使用.getDetail()方法。该方法需要一个参数,即订单编号。
$result = $api->getDetail($order_num); print_r($result); Array ( [transid] => 10177-TK3E-1-1540 [orderid] => testorderid01234 [return_code] => 00 [host_ref_num] => 017719080774 [error_msg] => Record(s) found for testorderid01234 [charge_type] => S [auth_code] => 931005 [amount] => 10 [transaction_time] => Array ( [tm_sec] => 53 [tm_min] => 10 [tm_hour] => 19 [tm_mday] => 26 [tm_mon] => 5 [tm_year] => 110 [tm_wday] => 6 [tm_yday] => 176 [unparsed] => ) )
取消与退款的区别
众所周知,在虚拟POS中,也存在与真实POS类似的日终概念。日终概念是指,在一天内通过POS进行的操作(如取款和退款)将在日终时转移到POS所有者的银行账户。
订单取消操作必须在日终之前,仅在同一天内进行。之前的订单无法取消。之前的订单只能通过调用.refund()方法,并输入订单金额进行退款。
如果取消订单,则订单的创建和取消细节不会出现在持卡人的账单中。如果进行退款,退款操作将反映在持卡人的账单上。大多数银行在日终时为晚上22:00,但银行可以根据自身情况调整这个时间。