e-ghl / merchant-api

此软件包为商家提供了一个简单的接口,用于与eGHL API进行交互,例如:捕获、查询、退款和撤销

v3.0.8 2022-11-24 11:14 UTC

This package is auto-updated.

Last update: 2024-09-24 15:07:00 UTC


README

此软件包为商家提供了一个简单的接口,用于与eGHL API进行交互。本软件包支持的API包括以下内容:

  1. 捕获
  2. 查询
  3. 退款
  4. 撤销

安装

  1. 运行以下composer命令来安装此软件包

    composer require e-ghl/merchant-api

  2. 使用以下命令从私有仓库克隆eGHL_hashing软件包。(通过联系support.eghl@ghl.com获取对私有仓库的访问权限)

    git clone https://bitbucket.org/eghl/eghl_hashing.git vendor/e-ghl/merchant-api/src/eghl_hashing

使用方法

使用这些API对象包括以下直观步骤。

  1. 要求自动加载器
  2. 调用相应的API对象的命名空间
  3. 定义要发送的参数的键值(关联)数组
  4. 实例化要使用的相应API对象。
  5. 开始使用对象

以下是对上述提到的每个API的示例用法。

查询

查询API用于获取任何现有交易的详细信息。假设现有交易与查询请求中发送的所有参数匹配,即 PymtMethodServiceIDPaymentIDAmountCurrencyCode

// 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支付网关启动对现有交易的在线退款过程。假设现有交易与退款请求中发送的所有参数匹配,即 PymtMethodServiceIDPaymentIDAmountCurrencyCode

并非所有交易都可以在线退款。只有 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$validateResponseSelf 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包管理器将自动安装以下包。

  1. eghl/param-validator(验证eGHL API请求的输入参数)
  2. e-ghl/hashing(一个帮助集成插件计算用于与eGHL支付网关通信的哈希值的类)
  3. guzzlehttp/guzzle(Guzzle是一个PHP HTTP客户端,它使发送HTTP请求变得简单,并且与Web服务的集成变得容易)