PHPによるタイの決済ゲートウェイのチュートリアル例へのアクセス

# PHP Access to Thailand Payment Gateway チュートリアル例

1.準備作業

始める前に
- タイの決済ゲートウェイ(2C2P、Omise、TrueMoneyなど)のマーチャントアカウント。
- PHP開発環境(PHP 7.0以上を推奨)
- コンポーザー依存関係管理ツール
- ウェブサーバー(Apache/Nginx)

2.必要なライブラリのインストール

「バッシュ
composer require guzzlehttp/guzzle
“`

3.Omiseペイメントゲートウェイの統合例

a) おみせの初期化設定

"`php
クライアント = 新しいクライアント([
'base_uri' => $this->apiUrl、
'auth' => [$this->secretKey, "].
]);
}
}
“`

b) 支払いリクエストの作成

"`php
public function createCharge($amount, $currency, $token) {.
を試す。
$response = $this->client->post('/charges', [)
'form_params' => [
'amount' => intval($amount * 100), // Omiseは最小通貨単位(セント)を使用します。
'currency' => strtolower($currency)、
'card' => $token.
// 必要であれば、タイ固有のパラメータを指定する。
// …
]
]);

return json_decode($response->getBody(), true);

} catch (例外 $e) {.
error_log('Omise charge error: '.$e->getMessage());
return ['error' => true];
}
}
“`

c) トークン生成フロントエンド・コード例(JavaScript)

「ジャバスクリプト
// HTMLでOmise.jsライブラリを紹介した後。

“`

4.TrueMoneyウォレットとの統合例

a) API 設定クラス

"`php
クラス TrueMoneyWalletPayment {
private const BASE_URL_SANDBOX = "https://sandbox.truemoney.com/api/v1″;
private const BASE_URL_PRODUCTION = "https://tmn-prod.apigee.net/api/v1";

public function __construct(private string|bool|null $_isSandbox=true){}。

protected function getBaseURL():string{
return ($this->_isSandbox)?self::BASE_URL_SANDBOX:self::BASE_URL_PRODUCTION;
}

protected static array $_headers=[
「Content-Type"=>"application/json"。
"Accept"=>"application/json"。
];

public static array $_requiredFields=["username", "password"];

}
“`

b) QRコード決済処理の流れ

"`php
/
* @param float|int|string amount - THB(฿)単位の支払額。
* param string merchantRef - トランザクション追跡のための一意の参照ID。
*/
public static async generateQRCode()
float|int|string amount=null 、
string merchantRef="" 、
bool isSandBox=false):array{。

トライ

# 必須項目と金額を検証する...

# TrueMoney APIのリクエストデータを準備する
$_requestData=[[リクエストデータ
"paymentAmount"=>floatval(number_format(floatval(str_replace(",",""),"",$amount)),2,"., "")),
"merchantReferenceId"=>strtoupper(substr(preg_replace("/[^A-Za-z0-9]+/i","",trim((empty($_merchantReference))?uniqid():$_merchantReference),0 ,20))、
... # TMNのドキュメントに従ったその他の必須パラメータ
];

}catch(¦Throwable|Exception|ExrrorException$exception){.
throw new \RuntimeException(sprintf("%s:%s ",__METHOD__,$exception));;
}

を返す;
}
“`
注: 実際の実装については、最新の TrueMoney API ドキュメントを参照してください。

5 .一般的な問題解決

Q: SSL証明書の検証に失敗しましたか?
A: `curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);` (テスト環境のみ)

Q: HTTPのレスポンス・ステータス・コードは403ですか?
A: IPホワイトリストが設定されていないか、APIキーが無効です。マーチャントのバックエンドのIP制限設定を確認してください。

上記は、タイの主要な決済ゲートウェイへのPHPアクセスの基本的な枠組みです。必ず正確に実装してください:

1.選択したゲートウェイの最新の公式ドキュメントを注意深く読む。
2.本番環境におけるHTTPSと厳格なデータ検証の有効化
3.すべてのトランザクションのリクエストとレスポンスを記録するログの追加を検討する。

お客様のビジネスニーズによっては、払い戻し処理や取引状況の確認、その他の機能が必要になる場合もあります。

PHPによるタイ決済ゲートウェイへのアクセス例チュートリアル(続き)

6. 2C2P決済ゲートウェイの統合例

a) コンフィギュレーションの初期化

クラス Payment2C2P {
private $merchantID = 'your_merchant_id';
private $secretKey = 'your_secret_key';
private $apiUrl = 'https://demo2.2c2p.com/'; // サンドボックスのURL

パブリック関数 __construct() {
$this->client = new Client([)
'base_uri' => $this->apiUrl、
'headers' => [
'Content-Type' => 'application/json'、
'Accept' => 'application/json'
]
]);
}
}

b) 支払いリクエストの作成

public function createPayment($orderId, $amount, $currency, array $customerInfo) {
try {
// Prepare payload according to 2C2P API specs
$payload = [
"merchantID" => $this->merchantID,
"invoiceNo" => str_pad($orderId, 12, "0", STR_PAD_LEFT),
"description" => "Order Payment",
"amount" => number_format($amount, 2),
"currencyCode" => ($currency === "THB") ? "764" : "", // ISO numeric code for THB is 764
// Thailand specific parameters:
"paymentChannel" => ["CC", ""], // Credit Card and other available channels in Thailand
...$customerInfo,
];

// Generate HMAC signature as required by 2C2P
ksort($payload);
foreach ($payload as &$value) {
if (is_array($value)) continue;
if (is_bool($value)) {
continue;
} else {
trim((string)$value);
}
}

$_signatureData=implode("",array_values(array_filter($_requestPayload)));

$_hashSignature=hash_hmac('sha256',$_signatureData,$this->_secretKey);

$_requestPayload['signature']=$_hashSignature;

return json_encode($_requestPayload);

} catch (\Exception|\Throwable$exception){
throw new \RuntimeException(sprintf("%s:%s ",__METHOD__,$exception));
}
}

/
* @param string|int orderId - unique identifier for transaction
*/
public static async verifyTransaction(string|int$_orderReference=""):bool{
# Implementation per API docs...
return false;
}

7 .コールバック通知の処理

ほとんどのタイの決済ゲートウェイは、サーバー間(SERVER-to-SERVER/S-TO-S)通知を送信します:


/
* :: Omiseウェブフック通知のコールバックハンドラの例
*/
関数 handleOmiseWebhook(){

file_put_contents(__DIR__."/.../logs/webhooks.log"、
sprintf("[%s] %sT."、
date("Y-m-d H:i:s")、
print_r($_POST?[],true))、
FILE_APPEND)。

トライ

if(!isset($_SERVER["HTTP_X_SIGNATURE"])){。
throw new \InvalidArgumentException("Missing X-Signature header");;
}

list(/*algo*/,/*timestamp*/,$expectedSig)=explode(",",trim(str_replace(["v1=", "t="],"",$_SERVER["HTTP_X_SIGNATURE"]));


/* エンドポイントの秘密を使って署名を検証する。
/* 参照:https://www.omise.co/webhook-signatures */


}catch(\Throwable|Exception$e){ { }.

http_response_code(400)。

最後に

exit();// ウェブフックを処理した後は、常にスクリプトを終了します!

}
}

8 .セキュリティのベストプラクティス

1.データ検証:


function sanitizeThaiInput(string|null$_input=""):?

if(is_null($_input))return null;

$_cleaned=preg_replace("/[^ก-๙\w\-\.@ ]+/u","".

strip_tags(

htmlspecialchars_decode()

filter_var(trim((string)$input)、

FILTER_UNSAFE_Raw.

["flags"=>FILTER_FLAG_NO_ENCODE_QUTES]])。

)

));

return (!empty(_cleaned)?mb_substr(_cleaneded,,255):null;

}

9 .テストとデバッグ技術

アナログ応答ツール:
ローカル開発環境をインターネットに公開し、Ngrokなどのツールを使ってWebhookを受信する。

ロギングに関する推奨事項:

php.ini で支払いロギングを設定する。
log_errors=オン
error_log="/var/log/php/payment_error.log"

10 .拡張機能の実装

a) 分割払い(タイのクレジットカードの場合)。

Omiseやステージングをサポートする他のAPIにパラメータを追加する:

{"installment_term":3}.   

b) PromptPay QRコード生成。

composer require endroid/qr-code    

次に、PromptPay URIを含むQRコードを生成します:

EndroidQrCode を使用する;     
EndroidQrCode Writerを使用する;

関数generatePromptPayQR(float$amount,int|string$arget){。

/ タイの銀行基準によるフォーマット */
promptpayUri=sprintf("00020101021129370016A000000677010111%s530376454%02d%s6304%s",...);

qrcode=new Qrcode(promptpayUri);

writer=new PngWriter();

result=$writer->write(qrcodE);

ヘッダ ("Content-Type:"".result->getMimeType()."");

echo result-getString(); exit();

}

このステップバイステップガイドが、タイ語決済統合をスムーズに立ち上げ、実行するための一助となれば幸いです!本番展開の前にサンドボックステストを徹底的に実施し、ユーザー向けのプロンプトをすべてチェックするためにプロのタイ語技術翻訳者を雇うことを忘れないでください。