sanmai / gmopg
GMO Payment Gateway API for simple credit card payments
Installs: 1 045
Dependents: 0
Suggesters: 0
Security: 0
Stars: 7
Watchers: 2
Forks: 5
Open Issues: 0
Requires
- php: ^7.0
- guzzlehttp/guzzle: ^6
- sanmai/pipeline: ^0.3.2|^2.0|^3.0.1
Requires (Dev)
- friendsofphp/php-cs-fixer: ^2.6
- php-coveralls/php-coveralls: >=1.0
- phpunit/phpunit: ^6
README
Installation
composer require sanmai/gmopg
Configuration
There are two ways to configure the API:
-
With global constants. Namely, you need to have defined:
// ショップ情報 define('GMO_SHOP_ID', 'tshop0000001'); // ショップID define('GMO_SHOP_PASSWORD', 'qwerty'); // ショップ名 define('GMO_SHOP_NAME', 'My Shop'); // ショップパスワード define('GMO_TRIAL_MODE', false);
Where first three you can get from the management panel or from emails from GMO PG.
The last constant
GMO_TRIAL_MODE
should be set totrue
if you're using a test shop password. -
By calling these static methods:
\GMO\API\Defaults::setShopID($shopId); \GMO\API\Defaults::setShopName($shopName); \GMO\API\Defaults::setPassword($shopPassword); // When using a test password, this constant is mandatory //define('GMO_TRIAL_MODE', true);
Testing payments
Currently there is no other way to enable a test mode other than by defining a constant GMO_TRIAL_MODE
set to true
.
define('GMO_TRIAL_MODE', true);
Testing payments with directly-entered card numbers with test environment credentials requires you to enable such payments as outlined in the documentation.
Basic usage
// A wrapper object that does everything for you. $payment = new \GMO\ImmediatePayment(); // Unique ID for every payment; probably should be taken from an auto-increment field from the database. $payment->paymentId = 123; $payment->amount = 1000; // This card number can be used for tests. $payment->cardNumber = '4111111111111111'; // A date in the future. $payment->cardYear = '2020'; $payment->cardMonth = '7'; $payment->cardCode = '123'; // Returns false on an error. if (!$payment->execute()) { $errors = $payment->getErrors(); foreach ($errors as $errorCode => $errorDescription) { // Show an error code and a description to the customer? Your choice. // Probably you want to log the error too. } return; } // Success! $response = $payment->getResponse(); /** @var \GMO\API\Response\ExecTranResponse $response */ // You would probably want to save the response in the database for future reference. // The response can be used to query details about a transaction, make refunds and so on.
Array of $errors
comes in a form similar to this:
array(1) {
'E01040010' =>
string(34) "This order ID was used previously."
}
A list of most known error codes. In a readable form. And another.
A typical $response
will look like so:
class GMO\API\Response\ExecTranResponse#1 (9) {
public $ACS =>
string(1) "0"
public $OrderID =>
string(10) "1517000000"
public $Forward =>
string(7) "0afd1200"
public $Method =>
string(1) "1"
public $PayTimes =>
string(0) ""
public $Approve =>
string(7) "0112234"
public $TranID =>
string(28) "180111111111111111111344439"
public $TranDate =>
string(14) "20221222213141"
public $CheckString =>
string(32) "68b329da9893e34099c7d8ad5cb9c940"
}
Paying with a token
A payment object can accept a token received from the JavaScript API instead of credit card details:
$payment = new \GMO\ImmediatePayment(); $payment->paymentId = 123; // Unique ID for every payment; see above $payment->amount = 1000; // Card details are unnecessary in this case $payment->token = $_POST['token']; if (!$payment->execute()) { // ... same as above } // ... same as above
One should use the above method of payment if they're getting the venerable error E61040001.
Transaction details
Now you naturally want to load transaction details for the current payment.
$searchTrade = new \GMO\API\Call\SearchTrade(); $searchTrade->OrderID = $payment->getResponse()->OrderID; // Copy credential from the original payment $payment->setupOther($searchTrade); $response = $searchTrade->dispatch();
In this $response
you would find these fields:
class GMO\API\Response\SearchTradeResponse#4950 (21) {
public $AccessID =>
string(32) "b026324c6904b2a9cb4b88d6d61c81d1"
public $AccessPass =>
string(32) "26ab0db90d72e28ad0ba1e22ee510510"
public $OrderID =>
string(10) "1517000000"
public $Status =>
string(5) "SALES"
public $ProcessDate =>
string(14) "20221222213141"
public $JobCd =>
string(5) "SALES"
public $ItemCode =>
string(7) "0000000"
public $Amount =>
string(4) "4999"
public $Tax =>
string(1) "0"
public $SiteID =>
string(0) ""
public $MemberID =>
string(0) ""
public $CardNo =>
string(16) "************1111"
public $Expire =>
string(4) "2307"
public $Method =>
string(1) "1"
public $PayTimes =>
string(0) ""
public $Forward =>
string(7) "0afd1200"
public $TranID =>
string(28) "180111111111111111111344439"
public $Approve =>
string(7) "0112234"
public $ClientField1 =>
string(0) ""
public $ClientField2 =>
string(0) ""
public $ClientField3 =>
string(0) ""
}
Futher API Documentation
GMO-PG is very secretive seemingly for no reason at all (that's a complete opposite of Stripe), and typically you can only access their documentation upon signing a non-disclosure agreement.