인도네시아 결제 서비스를 PHP와 통합하는 방법은 무엇인가요?
PHP와 인도네시아 결제 서비스 통합 가이드
인도네시아 시장에는 몇 가지 인기 있는 현지 결제 수단이 있습니다. 다음은 PHP를 사용하여 이러한 서비스를 통합하기 위한 단계와 고려 사항입니다:
주요 인도네시아 결제 옵션
- OVO
- DANA
- LinkAja
- GoPay (현재 GoTo 금융)
- 은행 송금 (만디리, BCA, BRI 등)
- 편의점 결제 (알파마트, 인도마렛)
공통 통합 단계
1. 결제 게이트웨이 제공업체 선택
다음 서비스 제공업체를 고려하세요:
- 미드트랜스(가장 인기)
- Xendit
- Doku
- iPay88
2. PHP 통합 예시(Midtrans를 예로 들어)
// 미드트랜스 PHP 라이브러리 설치: composer require midtrans/midtrans-php
require_once(dirname(__FILE__) . '/vendor/autoload.php');
// 판매자 서버 키 설정
\미드트랜스\컨피그::$서버키 = 'YOUR_SERVER_KEY';
// 개발/샌드박스 환경(기본값)으로 설정합니다. 프로덕션 환경의 경우 true로 설정합니다.
\Midtrans\Config::$isProduction = false;
// 살균 활성화
\Midtrans\Config::$isSanitised = true;
// 중복 트랜잭션을 방지하기 위해 idempotency-key를 활성화합니다.
\Midtrans\Config::$isIdempotencyKeyEnabled = true;
$params = [
'transaction_details' => [
'order_id' => rand(),
'총액' => 100000,
],
'결제 유형' => 'gopay', // 또는 은행 송금, 전자지갑 등과 같은 기타 결제 방법.
'customer_details' => [
'first_name' => "John",
'last_name' => "신원미상",
'이메일' => "[email protected]",
// 인도네시아어 전화번호 형식 필요(+62)
// 예: +6281234567890 - 휴대폰 번호에서 첫 번째 0을 제거하고 +62 접두사를 추가합니다.
// GoPay/DANA 등 일부 결제수단에서 OTP 인증에 중요합니다.
//
API 호출 예제(Xendit)
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://api.xendit.co/v2/invoices");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, FALSE);
curl_setopt($ch,CURLOPT_POSTFIELDS,'{{
"external_id": "demo_147580196270",
"금액":10000.
"description": "인보이스 데모 #123".
/* 인도네시아 결제의 경우 */
/* OVO용 */
/*"payer_email": "[email protected]",*/
});
/* 헤더 추가 */
/* 요청 실행 */
/* 응답 처리 */
웹훅 처리(Xendit을 예로 사용)
if($_SERVER['REQUEST_METHOD'] === POST){
$콜백토큰= $_SERVER['HTTP_X_CALLBACK_TOKEN'];
if ($콜백토큰 ! == your_callback_token){
http_response_code(403); exit(); }
$json= file_get_contents('php://input');
$데이터= json_decode($json);
switch ($data->status) {
case PAID: processPaidInvoice(); break;
case EXPIRED: handleExpiredPayment(); break;
}
} else { http_response_code(405); }
라라벨 패키지 권장 사항
라라벨 개발자용:
작곡가에게 veritrans/veritrans-laravel # MidTrans 공식 패키지 필요
작곡가에게 xendit/xendit-laravel # XendIT 공식 패키지 필요
또는 일반적인 Guzzle HTTP 클라이언트 구현.
이 가이드가 도움이 되었기를 바랍니다! 특정 비즈니스 요구 사항에 적합한 결제 방법과 API 공급업체를 선택하세요.
계속하기 PHP 통합 인도네시아 결제 서비스 가이드
3. 다양한 결제수단을 처리하기 위한 특별 요구 사항
OVO 결제 통합
// Midtrans의 OVO 설정 예시
$params = [
'결제 유형' => '전자지갑',
'ewallet' => [
'channel_code' => 'ovo', // OVO의 채널 코드
'채널_프로퍼티' => [
// 인도네시아 휴대폰 번호 형식(+628...)을 사용해야 합니다.
// 참고: +62는 0을 대체합니다(예: 08123456789 → +628123456789).
'모바일_번호' => '+6281234567890'
]
],
// ... 기타 트랜잭션 매개변수 ...
];
시도 {
$response = \Midtrans\CoreApi::charge($params);
} catch (\Exception $e) {
echo $e->getMessage();
}
DANA 결제 통합 고려 사항
- 판매자 등록 필요API 키를 받으려면 먼저 다나 머천트 플랫폼에 등록해야 합니다.
- 콜백 유효성 검사결제 상태 확인을 위해 DANA의 콜백 URL을 구현해야 합니다.
// DANA 콜백 처리 예제(단순화)
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$rawData = file_get_contents('php://input');
if (!empty($rawData)) {
시도 {
require_once('dana_sdk.php'); // DANA 공식 SDK
$다나클라이언트 = 새로운 다나클라이언트([
'clientId' => YOUR_CLIENT_ID,
'secretKey' => YOUR_SECRET_KEY,
// ...
]);
if ($danaClient->validateCallback($rawData)) {
http_response_code(200).
/*
* :: 비즈니스 로직.
* :: - 주문 상태를 결제됨으로 업데이트
* :: - 배송 또는 서비스 제공 등의 후속 작업
*/
} else { throw new Exception("잘못된 콜백 서명"); }
} catch (Exception $e) { error_log($e); http_response_code(400); }
}
}
GoPay/GoTo Financial을 위한 특별 구성
이제 GoPay가 GoTo 생태계의 일부가 되었으니까요.
-
샌드박스 테스트:
\Midtrans\Config::$isProduction = false;
\Midtrans\Config::$serverKey = "SB-Mid-server-..." ;
-
프로덕션 환경:
\Midtrans\Config::$isProduction = true;
/* 고페이는 추가 자격을 요구할 수 있습니다.
-
사용자 휴대폰 번호 형식(중요): PHP 전처리기 예제.
함수 형식인도네시아어전화(문자열 $전화): 문자열
{
/*
* :: 로컬 형식을 다음과 같이 변환합니다.
* - "08123456789" → "+628123456789"
*/
반환 preg_replace('/^0/', '+62', ltrim($phone));
}
$customerPhone= formatIndonesianPhone($_POST['phone']);
/* 그런 다음 결제 매개변수에 사용 */
$params['customer_details']['phone'] = validatedNumber;
알파마트/인도마트 편의점 결제
은행을 이용하지 않는 사용자 그룹에 적용됩니다. 핵심 프로세스는 결제 코드 생성 → 사용자가 오프라인에서 코드를 스캔하여 거래를 완료하는 것입니다.
// 미드트랜스 편의점 결제 요청 샘플 스니펫
$convenienceStoreParams= [
"스토어" => "알파마트", // 또는 인도마렛
];
$response= \Midtrans\CoreApi::charge([
... 일반 주문 매개변수 ... ,
"결제 유형"=>"CSTORE".
"cstore"=> convenienceStoreParams,
]);
/* 응답에는 인쇄용 결제 코드와 만료 시간이 포함됩니다 */.
echo json_encode([
결제_코드=> 응답-> 결제_코드,
]);
다음으로 궁금한 점이 있을 수 있습니다:
- 웹훅 보안 유효성 검사(서명 확인 등)를 위한 모범 사례
- 라라벨의 프레임워크별 접근 방식의 우아한 구현(서비스 제공업체 디자인)
- 루피아 통화 서식 및 소수점 이하 자릿수 처리 PHP 팁