PHP-доступ к примерам учебников по платежным шлюзам Таиланда

# PHP Доступ к платежному шлюзу Таиланда Учебный пример

1. Подготовительная работа

Прежде чем приступить к работе, вам необходимо:
- Торговый счет в тайском платежном шлюзе (например, 2C2P, Omise, TrueMoney и т. д.).
- Среда разработки PHP (рекомендуется PHP 7.0+)
- Инструмент управления зависимостями Composer
- Веб-сервер (Apache/Nginx)

2. Установка необходимых библиотек

"bash
composer require guzzlehttp/guzzle
“`

3. Пример интеграции с платежным шлюзом Omise

a) Конфигурация инициализации Omise

"`php
client = new Client([
'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 (Exception $e) {
error_log('Ошибка заряда омизы: '.$e->getMessage());
return ['error' => true];
}
}
“`

c) Пример фронтального кода генерации токенов (JavaScript)

"javascript
// После представления библиотеки Omise.js в HTML.

“`

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=["имя пользователя", "пароль"];

}
“`

б) Поток обработки платежей по QR-коду

"`php
/
* @param float|int|string amount - сумма платежа в THB (฿)
* @param string merchantRef - уникальный идентификатор ссылки для отслеживания транзакций
*/
public static async generateQRCode(
float|int|string amount=null ,
string merchantRef="" ,
bool isSandBox=false):array{

попытка{

# Проверьте необходимые поля и суммы...

# Подготовка данных запроса для API TrueMoney
$_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|\ErrorException$exception){
throw new \RuntimeException(sprintf("%s:%s ",__METHOD__,$exception));;
}

вернуться [];
}
“`
Примечание: Для фактической реализации, пожалуйста, обратитесь к последней версии документации TrueMoney API.

5 . Решение общих проблем

Вопрос: Не удалось выполнить проверку сертификата SSL?
A: `curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,FALSE);` (только тестовая среда)

Вопрос: Код состояния ответа HTTP 403?
Ответ: Не установлен белый список 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-адрес песочницы

public function __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
*/
function handleOmiseWebhook(){

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

попытка{

if(!isset($_SERVER["HTTP_X_SIGNATURE"])){
бросьте новый \InvalidArgumentException("Отсутствует заголовок X-подписи");;
}

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).

} finally{

exit();// Всегда завершайте работу скрипта после обработки веб-крючков!

}
}

8 . Лучшие практики безопасности

1.Проверка достоверности данных:


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

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(_cleaned,,255):null;

}

9 . Методы тестирования и отладки

Аналоговый инструмент реагирования:
Выведите локальную среду разработки в Интернет, чтобы получать веб-крючки с помощью таких инструментов, как Ngrok.

Рекомендации по ведению журнала:

; Настройки php.ini для регистрации платежей.
log_errors=On
error_log="/var/log/php/payment_error.log"

10 . Реализация расширенной функциональности

a) Рассрочка (для тайских кредитных карт).

Добавьте параметры в Omise или другие API, поддерживающие стейджинг:

{"installment_term":3}   

б) Генерация QR-кода PromptPay.

composer require endroid/qr-code    

Затем сгенерируйте QR-код, содержащий URI PromptPay:

использовать Endroid\QrCode\QrCode;     
использовать Endroid\QrCode\Writer\PngWriter;

function generatePromptPayQR(float$amount,int|string$target){

/ Формат в соответствии с тайскими банковскими стандартами */
promptpayUri=sprintf("00020101021129370016A000000677010111%s530376454%02d%s6304%s",...);

qrcode=новый Qrcode(promptpayUri);

writer=new PngWriter();

result=$writer->write(qrcodE);

header ("Content-Type:"".result->getMimeType()."") ;

echo result-getString(); exit();

}

Мы надеемся, что это пошаговое руководство поможет вам обеспечить бесперебойную работу интеграции тайских платежей! Не забудьте провести тщательное тестирование в "песочнице" перед развертыванием на производстве и наймите профессионального технического переводчика тайского языка, чтобы проверить все подсказки, обращенные к пользователю.