e-ghl / merchant-api
此软件包为商家提供了一个简单的接口,用于与eGHL API进行交互,例如:捕获、查询、退款和撤销
Requires
- e-ghl/exception: ^1.0
- e-ghl/param-validator: ^1.0.7
- guzzlehttp/guzzle: ^6.3 || ^7.0
Requires (Dev)
- phpunit/phpunit: 4.0.*
README
此软件包为商家提供了一个简单的接口,用于与eGHL API进行交互。本软件包支持的API包括以下内容:
- 捕获
- 查询
- 退款
- 撤销
安装
- 运行以下composer命令来安装此软件包
composer require e-ghl/merchant-api
- 使用以下命令从私有仓库克隆eGHL_hashing软件包。(通过联系support.eghl@ghl.com获取对私有仓库的访问权限)
git clone https://bitbucket.org/eghl/eghl_hashing.git vendor/e-ghl/merchant-api/src/eghl_hashing
使用方法
使用这些API对象包括以下直观步骤。
- 要求自动加载器
- 调用相应的API对象的命名空间
- 定义要发送的参数的键值(关联)数组
- 实例化要使用的相应API对象。
- 开始使用对象
以下是对上述提到的每个API的示例用法。
查询
查询API用于获取任何现有交易的详细信息。假设现有交易与查询请求中发送的所有参数匹配,即 PymtMethod、ServiceID、PaymentID、Amount 和 CurrencyCode
// Requiring autoloader
require_once "../vendor/autoload.php";
// Invoke Namespace
use eGHL\MerchantAPI\Query;
// Defining Parameters to be sent
$ServiceID = 'SIT';
$merchantPass = 'sit12345';
$params = array(
'PymtMethod' => 'DD',
'ServiceID' => $ServiceID ,
'PaymentID' => '8308110000',
'Amount' => '123.10',
'CurrencyCode' => 'MYR'
);
// Instantiate Query API Object
/**
* First parameter: Key value pair of Data to be sent
* Secont Parameter: Merchant Password
* Third Paramete: if true then test mode and production mode if value is false
* */
$API = new Query($params, $merchantPass , true);
if($API->doTxnExist()){
echo "<pre>".print_r($API->getResponse(),1)."</pre>";
}
退款
退款API通过eGHL支付网关启动对现有交易的在线退款过程。假设现有交易与退款请求中发送的所有参数匹配,即 PymtMethod、ServiceID、PaymentID、Amount 和 CurrencyCode。
并非所有交易都可以在线退款。只有 PymtMethod = CC 的交易可以在线退款。金额不能超过原始交易金额。交易可以部分退款。
// Requiring autoloader
require_once "../vendor/autoload.php";
// Invoke Namespace
use eGHL\MerchantAPI\Refund;
// Defining Parameters to be sent
$ServiceID = 'SIT';
$merchantPass = 'sit12345';
$params = array(
'PymtMethod' => 'CC',
'ServiceID' => $ServiceID ,
'PaymentID' => '130#1547432197655ef9',
'Amount' => '1005.00',
'CurrencyCode' => 'MYR'
);
// Instantiate Refund API Object
/**
* First parameter: Key value pair of Data to be sent
* Secont Parameter: Merchant Password
* Third Paramete: if true then test mode and production mode if value is false
* */
$API = new Refund($params, $merchantPass, true);
if(!$API->isRefunded()){
$response = $API->sendRequest()->getResponse();
if($API->isSuccess()){
echo "<pre>".$response['TxnID']." is Refunded</pre>";
}
else{
echo "<pre>".print_r($response,1)."</pre>";
}
}
else{
echo "<pre>Already Refunded</pre>";
}
撤销
撤销API用于取消/撤销现有交易。撤销只能在银行结算之前完成。因此,强烈建议在发送撤销请求之前查询交易支付状态。
建议在原始销售时间后一小时内撤销交易。已由银行结算的交易撤销将被拒绝并带有 fail 状态。无法进行部分撤销,将带有 not found 状态被拒绝。
// Requiring autoloader
require_once "../vendor/autoload.php";
// Invoke Namespace
use eGHL\MerchantAPI\Reversal;
// Defining Parameters to be sent
$ServiceID = 'SIT';
$merchantPass = 'sit12345';
$params = array(
'PymtMethod' => 'DD',
'ServiceID' => $ServiceID ,
'PaymentID' => '8308110000',
'Amount' => '123.10',
'CurrencyCode' => 'MYR'
);
// Instantiate Reversal API Object
/**
* First parameter: Key value pair of Data to be sent
* Secont Parameter: Merchant Password
* Third Paramete: if true then test mode and production mode if value is false
* */
$API = new Reversal($params, $merchantPass, true);
if(!$API->isReversed()){
$response = $API->sendRequest()->getResponse();
if($API->isSuccess()){
echo "<pre>".$response['TxnID']." is Reversed</pre>";
}
else{
echo "<pre>".print_r($response,1)."</pre>";
}
}
else{
echo "<pre>already Reversed</pre>";
}
捕获
捕获API用于捕获已授权的交易。
已授权的交易是指提交给eGHL时带有 TransactionType = AUTH 参数的交易。
// Requiring autoloader
require_once "../vendor/autoload.php";
// Invoke Namespace
use eGHL\MerchantAPI\Capture;
// Defining Parameters to be sent
$ServiceID = 'SIT';
$merchantPass = 'sit12345';
$params = array(
'PymtMethod' => 'CC',
'ServiceID' => $ServiceID ,
'PaymentID' => 'IPGJAW20190111600003',
'Amount' => '1.00',
'CurrencyCode' => 'MYR'
);
// Instantiate Capture API Object
/**
* First parameter: Key value pair of Data to be sent
* Secont Parameter: Merchant Password
* Third Paramete: if true then test mode and production mode if value is false
* */
$API = new Capture($params, $merchantPass, true);
if(!$API->isCaptured()){
if($API->isAuthorised()){
$response = $API->sendRequest(false)->getResponse();
if($API->isSuccess()){
echo "<pre>".$response['TxnID']." is Captured</pre>";
}
else{
echo "<pre>".print_r($response,1)."</pre>";
}
}
else{
echo "<pre>Txn must be authorised prior to being captured</pre>";
}
}
else{
echo "<pre>Already Captured</pre>";
}
工厂用法
可以使用工厂对象实例化上述提到的任何API请求对象。以下示例展示了如何使用工厂实例化查询对象。
工厂对象是为了在API类上应用工厂设计模式而构建的。工厂对象的一个优点是我们不需要为每个类调用命名空间,因为工厂对象本身将承担这个责任。
// Requiring autoloader
require_once "../vendor/autoload.php";
// Invoke Namespace for Fctory object only
use eGHL\MerchantAPI\core\APIFactory;
$ServiceID = 'SIT';
$merchantPass = 'sit12345';
$params = array(
'PymtMethod' => 'DD',
'ServiceID' => $ServiceID ,
'PaymentID' => '8308110000',
'Amount' => '123.10',
'CurrencyCode' => 'MYR'
);
$API = APIFactory::create('Query', $params, $merchantPass, true);
$response = $API->sendRequest()->getResponse();
echo "<pre>".print_r($response,1)."</pre>";
公共方法描述
名称 | 参数 | 返回值 | 描述 | 操作 |
---|---|---|---|---|
sendRequest | $validateResponse | Self Object | 如果出现问题,则抛出异常。否则返回对象本身。如果提供输入参数 $validateResponse,则它将通过匹配HashValue来验证eGHL的响应。如果没有提供validateResponse,则默认值为true | 捕获、查询、退款、撤销 |
validateResponse | - | void | 通过匹配HashValue验证eGHL的响应。如果无效或发生错误,则抛出异常 | 捕获、查询、退款、撤销 |
getResponse | - | 关联数组 | 返回来自eGHL的响应数据的关联数组 | 捕获、查询、退款、撤销 |
isSuccess | - | 布尔值 | 检查操作是否成功 | 捕获、查询、退款、撤销 |
isFail | - | 布尔值 | 检查操作是否失败 | 捕获、查询、退款、撤销 |
isPending | - | 布尔值 | 检查操作是否挂起 | 捕获、查询、退款、撤销 |
isPendingByBank | - | 布尔值 | 检查交易是否由银行挂起 | 查询 |
isCaptured | - | 布尔值 | 检查交易是否已捕获 | 查询,捕获 |
isAuthorised | - | 布尔值 | 检查交易是否已授权 | 查询,捕获 |
isRefunded | - | 布尔值 | 检查交易是否已退款 | 查询,退款 |
isReversed | - | 布尔值 | 检查交易是否已撤销 | 查询,撤销 |
isReversalPending | - | 布尔值 | 检查交易撤销是否挂起 | 查询,撤销 |
doTxnNotExist | - | 布尔值 | 检查交易是否存在 | 查询,退款,撤销 |
gotSystemError | - | 布尔值 | 检查操作是否遇到系统错误 | 查询,退款,撤销 |
doTxnExist | - | 布尔值 | 检查交易是否存在 | 查询 |
依赖于
此包依赖于以下包。因此,在安装此包时,Composer包管理器将自动安装以下包。
- eghl/param-validator(验证eGHL API请求的输入参数)
- e-ghl/hashing(一个帮助集成插件计算用于与eGHL支付网关通信的哈希值的类)
- guzzlehttp/guzzle(Guzzle是一个PHP HTTP客户端,它使发送HTTP请求变得简单,并且与Web服务的集成变得容易)