Legacy Hosted Page

This API is being deprecated and no longer being maintained. Please see the version of the Hosted Page API here.

KOMOJU provides a white-labeled hosted page which you can embed inside your web applications. The hosted page supports all major Japanese payment options, it also emails payment instructions to your customers in Japanese and English. Below are some screenshots of the checkout process:

Checkout 1 Checkout 2

Creating a payment

Endpoint

Payment requests should be made to the following URL:

  • https://komoju.com/{locale}/api/{merchant_uuid}/transactions/{payment_method}/new

URL Parameters

Name Description
locale Defines the language locale e.g. ja, en
merchant_uuid Provided to you after applying for an account
payment_method Defines the payment method. See available payment methods

Payment Methods

NOTE: Support for LINE Pay and Merpay is currently in development and will be coming to KOMOJU very soon.

Name API Value
Bank transfer bank_transfer
BitCash bit_cash
Credit Card credit_card
Konbini konbini
NET CASH net_cash
PayEasy pay_easy
WebMoney web_money
Japan Mobile japan_mobile
LINE Pay linepay
Merpay merpay
PayPay paypay
Rakuten Pay rakutenpay
Alipay alipay
Bancontact bancontact
BLIK blik
EPS eps
Giropay giropay
iDEAL ideal
Multibanco multibanco
MyBank mybank
paysafecard paysafe_card
paysafecash paysafe_cash
Przelewy24 przelewy24
SOFORT Banking sofortbanking
UnionPay unionpay
Wechat Pay wechatpay
PAYCO payco
Dragonpay dragonpay
GrabPay Singapore grabpayotp
eNETS enets
DOKU Wallet doku_wallet
OVO ovo
FPX Online Banking fpx
Happy Money happy_money
Culture Voucher culture_voucher
Carrier Billing mobile
Paidy paidy
Toss toss
Kakao Pay kakaopay

Request Parameters

The following parameters must be passed using GET or POST HTTP methods to the URL mentioned above. Optional parameters if passed, will be used to pre-populate the form displayed on checkout page. This can greatly help speed up the checkout process if you already have this information available. However, the customer will be able to overwrite those values before validating their purchase.

Required

Parameter Description Value
timestamp A UNIX epoch timestamp in UTC A timestamp must be within 5 minutes of the server time in order for the request to be considered valid.
transaction[amount] The amount to be charged before tax. Must be equal or greater than 0. Use a '.' as a decimal separator, and no thousands seperator Example: 1234.56
transaction[cancel_url] The URL to send the user back to after cancelling the transaction process. A valid URI using http or https
transaction[currency] 3 letter ISO currency code of the transaction JPY
transaction[external_order_num] This is your applications unique ID used to track this payment. A string, less than or equal to 255 characters long.
transaction[return_url] The URL to send the user back to upon successful completion of the process. A valid URI using http or https
transaction[tax] The amount of tax to be charged, or ‘auto’ to use the current consumption tax rate in Japan. Use a ‘.’ as a decimal separator, and no thousands separator. If the tax is more precise than the currency allows, it will be rounded using a round half up algorithm. Example: 1234.56
hmac HMAC verification of the query string with all values other than the HMAC See HMAC Verification

Optional

Parameter Description
transaction[metadata][] A set of configurable key/value pairs.
transaction[customer][email] The customer’s e-mail, to which an e-mail will be sent with payment information for convenience store, Pay-easy and bank transfer payments if the merchant is configured to send e-mails
transaction[customer][given_name] The customer's given name.
transaction[customer][given_name_kana] The phonetic pronunciation of the customer’s given name. This is common practice when writing Japanese names.
transaction[customer][family_name] The customer’s family name.
transaction[customer][family_name_kana] The phonetic pronunciation of the customer’s family name. This is common practice when writing Japanese names.
transaction[customer][phone] The customer's phone number.

One-click Payment

One-click payment allows returning shoppers to checkout faster using credit card. When a customer enters checkout they can choose to store their card information for future purchases. This improves checkout conversion as customers don't have to re-input their card information.

You can enable this feature by passing the following parameter:

Parameter Description Value
transaction[external_customer_id] A unique reference ID used to track a customer. A string, less than or equal to 255 characters long.

As a security precaution, make sure this value is unique to your customer. Don't use a value that could conflict with another customer or easily be duped by an attacker to allow unauthorized use of another customers payment details.

HTTP Error Codes

Error code Error label Description
400 Bad Request This error indicates that the request landed at a valid endpoint, but was missing required fields. The most likely cause is if the transaction parameter is not specified or malformed.
401 Unauthorized This error indicates a problem with the HMAC, timestamp, account id, or other important identifying information. Example: 401 - Unauthorized. The HMAC provided is not correct.
422 Unprocessable Entity This error indicates that the transaction was unable to be saved. This is likely due to a validation failure of the transaction record. You will receive an error message describing the issue. Example: 422 - Unprocessable Entity. Amount is not a number

HMAC Verification

Requests to the KOMOJU API which contain potentially user modifiable attributes will use a Hash-based Message Authentication Code to ensure data integrity.

The hash is a SHA-256 hash computed on the parameters passed to the hosted page URL. Your account will have a shared secret API key to compute and verify the integrity of the message. The following restrictions are placed on computation of the hash:

  • The hash is case sensitive
  • Only valid parameters to the API call are included in computation of the hash. Additional parameters will be removed before the hash is verified.
  • The parameters must be alphabetically sorted before the hash is computed.
  • The URL keys and values should both be escaped (i.e. they should only contain the following characters: a-z, A-Z, 0-9, _, ., -, and +)

If you encounter a 401 Unauthorized error reporting an incorrect HMAC when you expected a successful result, please verify that the URL you used to generate the HMAC is the same as the one in the HTTP response header. The value is both case sensitive and parameter order sensitive.

Code Examples

Ruby

# Note: This depends on openssl support built in to ruby
require 'openssl'
require 'cgi'

# Use your secret API key here
secret_key = "ABCD1234567890";
endpoint = "/en/api/example-mart/transactions/credit_card/new"

params = {
  "timestamp" => "#{Time.now.to_i}",
  "transaction[amount]" => "130",
  "transaction[currency]" => "JPY",
  "transaction[customer][given_name]" => "John",
  "transaction[customer][family_name]" => "Smith",
  "transaction[customer][given_name_kana]" => "John",
  "transaction[customer][family_name_kana]" => "Smith",
  "transaction[external_order_num]" => "M8x6U6Z5HEeXv3",
  "transaction[return_url]" => "http://example.com/?sucess=true",
  "transaction[cancel_url]" => "http://example.com/?cancel=true",
  "transaction[tax]" => "0"
}.map { |key, val| "#{CGI.escape key}=#{CGI.escape val}" }
params.sort!

query_string = params.join '&'
url = "#{endpoint}?#{query_string}"
hmac = OpenSSL::HMAC.hexdigest('sha256', secret_key, url)

puts "#{url}&hmac=#{hmac}\n";

PHP

# Note: This depends on PHP 5.1.2 or having an implementation of hash_hmac
# http://www.php.net/manual/en/function.hash-hmac.php

# Use your secret API key here
$secret_key = "ABCD1234567890";
$endpoint = "/en/api/degica-mart/transactions/credit_card/new";

$params = array(
  "transaction[amount]" => "130",
  "transaction[currency]" => "JPY",
  "transaction[customer][given_name]" => "John",
  "transaction[customer][family_name]" => "Smith",
  "transaction[customer][given_name_kana]" => "John",
  "transaction[customer][family_name_kana]" => "Smith",
  "transaction[external_order_num]" => "M8x6U6Z5HEeXv3",
  "transaction[return_url]" => "http://example.com/?sucess=true",
  "transaction[cancel_url]" => "http://example.com/?cancel=true",
  "transaction[tax]" => "0",
  "timestamp" => time(),
);
$qs_params = array();
foreach ($params as $key => $val) {
  $qs_params[] = urlencode($key) . '=' . urlencode($val);
}
sort($qs_params);

$query_string = implode('&', $qs_params);
$url = $endpoint . '?' . $query_string;

$hmac = hash_hmac('sha256', $url, $secret_key);

echo "$url&hmac=$hmac\n";

Webhooks

You will need to setup a webhook to receive payment notifications from KOMOJU. When a customer completes the payment flow KOMOJU will send a payment.captured webhook to your application. Your application must process this webhook and record the payment as captured.