gkocakaya / est
EST支付网关(土耳其)的虚拟POS接口
Requires
- php: >=5.2.1
This package is not auto-updated.
Last update: 2024-09-24 01:00:32 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。但是,银行可以根据自身情况调整这个时间。