composer require sanmai/gmopg
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 to true
if you're using a test shop password.
By calling these static methods:
GMOAPIDefaults::setShopID($shopId);
GMOAPIDefaults::setShopName($shopName);
GMOAPIDefaults::setPassword($shopPassword);
// When using a test password, this constant is mandatory
//define('GMO_TRIAL_MODE', true);
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.
// A wrapper object that does everything for you.
$payment = new GMOImmediatePayment();
// 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 GMOAPIResponseExecTranResponse $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 GMOAPIResponseExecTranResponse#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"
}
A payment object can accept a token received from the JavaScript API instead of credit card details:
$payment = new GMOImmediatePayment();
$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.
Now you naturally want to load transaction details for the current payment.
$searchTrade = new GMOAPICallSearchTrade();
$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 GMOAPIResponseSearchTradeResponse#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) ""
}
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.