square決済フォームサンプル(js + php + Wordpress)
このサンプルはWordpress環境における、pure JavaScript と phpを利用したsquareの決済フォームサンプルです。
※テスト購入するためのSandboxとしてサンプルコード
あくまでもサンプルですので、取り扱いは自己責任でお願いいたします。
セキュリティ面なども気をつけてください✨
このコードを元に、ChatGPTなどに質問しながら制作を進めれば、スムーズに進めることができると思います。
ステップ1:Composerのインストール
Windows:
Composerの公式ウェブサイト(getcomposer.org)からWindows用のインストーラーをダウンロードします。
ダウンロードしたファイルを実行し、指示に従ってインストールします。
コマンドプロンプトを開き、composerコマンドが動作することを確認します。
macOS/Linux:
ターミナルを開きます。
以下のコマンドを実行してComposerをインストールします:
curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer
chmod +x /usr/local/bin/composer
3.composer コマンドが動作することを確認します。
ステップ2:Composerを使ってSquare SDKをプロジェクトに追加
ターミナルまたはコマンドプロンプトを開きます。
プロジェクトディレクトリがまだ存在しない場合は、作成します:
mkdir my-square-project
cd my-square-project
3.Composerを使ってSquare SDKをインストールします:
composer require square/square
これにより、vendor ディレクトリがプロジェクト内に作成され、必要なライブラリがすべてインストールされます。composer.json ファイルと composer.lock ファイルも作成され、これによりどのライブラリがどのバージョンであるかが記録されます。
require 'vendor/autoload.php';
$client = new \Square\SquareClient([
'accessToken' => 'アクセストークンをここに',
'environment' => \Square\Environment::SANDBOX // または \Square\Environment::PRODUCTION
]);
このコードスニペットは、Square APIにアクセスするためのクライアントインスタンスを作成します。これを使用して、支払いの処理や顧客情報の管理など、さまざまなAPI呼び出しを行うことができます。
これで、ComposerとSquare SDKを設定する基本的な手順が完了しました。
ステップ3:フロント(html + js)を制作
<?php get_header(); ?>
<script src="https://sandbox.web.squarecdn.com/v1/square.js"></script>
<h1>支払いフォーム</h1>
<div id="card-container"></div>
<button id="card-button">支払う</button>
<script>
async function initializeCard(payments) {
const card = await payments.card();
await card.attach('#card-container');
return card;
}
async function createPayment(token) {
const response = await fetch('ここにサーバーサイドのURL', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ nonce: token }) // ここで 'token' を 'nonce' としてJSONにセット
});
if (response.ok) {
console.log('Payment successful!');
alert('支払いが成功しました!');
} else {
const errorResponse = await response.json();
console.error('Payment failed.', errorResponse);
alert('支払いに失敗しました。エラー: ' + errorResponse.message);
}
}
document.addEventListener('DOMContentLoaded', async function() {
if (!window.Square) {
console.error('Square.js failed to load properly');
alert('Square.jsの読み込みに失敗しました。');
return;
}
const payments = Square.payments('あなたのSandbox Application ID', 'あなたの Location ID');
const card = await initializeCard(payments);
document.getElementById('card-button').addEventListener('click', async function(event) {
event.preventDefault();
try {
const result = await card.tokenize();
if (result.status === 'OK') {
await createPayment(result.token);
} else {
console.error('Tokenization failed:', result.errors);
alert('カードのトークン化に失敗しました。');
}
} catch (error) {
console.error('Payment failed', error);
alert('支払い処理中にエラーが発生しました。');
}
});
});
</script>
<?php get_footer(); ?>
ステップ4:サーバーサイド(PHP)を制作
<?php
// JSON形式でデータを受け取る
$data = json_decode(file_get_contents('php://input'), true);
$nonce = $data['nonce'] ?? null; // nonceの安全な取り出し
if (!$nonce) {
http_response_code(400);
echo 'エラー: トークンがありません。';
error_log('Error: No token provided');
exit;
}
require_once(__DIR__.'/../../../../wp-load.php');//ここはファイルの場所によってパスを変更してください
require __DIR__.'../../vendor/autoload.php';//ここはファイルの場所によってパスを変更してください
$client = new \Square\SquareClient([
'accessToken' => 'あなたの Sandbox Access token',
'environment' => \Square\Environment::SANDBOX
]);
$paymentsApi = $client->getPaymentsApi();
$reference_id = is_user_logged_in() ? wp_get_current_user()->ID : "Guest-" . uniqid();
$amountMoney = new \Square\Models\Money();
$amountMoney->setAmount(3000); // 金額の設定
$amountMoney->setCurrency("JPY"); // 通貨の設定
$idempotency_key = uniqid('idemp_');
// コンストラクタに必要な引数を渡す
$createPaymentRequest = new \Square\Models\CreatePaymentRequest($nonce, $idempotency_key);
$createPaymentRequest->setAmountMoney($amountMoney); // amount_moneyのセット
$createPaymentRequest->setReferenceId($reference_id); // reference_idのセット
$apiResponse = $paymentsApi->createPayment($createPaymentRequest);
if ($apiResponse->isSuccess()) {
$payment = $apiResponse->getResult()->getPayment();
echo '支払い成功! Transaction ID: ' . $payment->getId();
} else {
$errors = $apiResponse->getErrors();
http_response_code(400);
echo '支払いエラー: ';
foreach ($errors as $error) {
echo '<p>Error: ' . htmlspecialchars($error->getDetail()) . '</p>';
error_log('Payment error: ' . $error->getDetail());
}
}
?>
本番決済にする場合
デモ決済ではなく、本番決済に切り替える場合は下記の2点を本番用に変更してください。
認証用のidなどを本番用に変更
・Application ID
・Access token
・Location ID
フロントサイトのCDNを本番ように変更
<!-- デモ用 -->
<script src="https://sandbox.web.squarecdn.com/v1/square.js"></script>
<!-- 本番用 -->
<script src="https://web.squarecdn.com/v1/square.js"></script>
サーバーサイドのアクセストークンの部分
// デモ用
$client = new \Square\SquareClient([
'accessToken' => 'あなたのデモ用アクセストークン',
'environment' => \Square\Environment::SANDBOX
]);
// 本番用
$client = new \Square\SquareClient([
'accessToken' => 'あなたの本番用アクセストークン',
'environment' => \Square\Environment::PRODUCTION
]);
この記事が気に入ったらサポートをしてみませんか?