중동 결제 시스템을 PHP와 통합하는 방법은 무엇인가요?
PHP와 중동 결제 시스템 통합
PHP에서 중동 결제 시스템을 통합하려면 다음과 같은 주요 단계와 일반적인 중동 결제 게이트웨이 옵션을 고려해야 합니다:
주요 중동 결제 게이트웨이 옵션
- PayFort - 걸프 국가(사우디아라비아, UAE 등)에서 널리 사용됨
- Telr - 중동 및 북아프리카 지역 커버리지
- Checkout.com - 중동 지역에서의 강력한 입지
- 모야사르 - 사우디 아라비아에서 인기 있는 솔루션
- 페이탭 - GCC 국가를 위한 공통 선택 사항
PHP 통합 예시(PayFort를 예로)
<?php
class PayFortIntegration {
private $merchantIdentifier;
private $accessCode;
private $shaRequestPhrase;
private $shaResponsePhrase;
public function __construct($config) {
$this->merchantIdentifier = $config['merchant_identifier'];
// ...其他配置初始化...
}
// 生成签名
protected function generateSignature($params, $phrase) {
ksort($params);
unset($params['signature']);
array_walk($params, function(&$value, &$key) {
if(is_array($value)) {
ksort($value);
}
});
return hash('sha256', implode('', array_map(function ($k, $v) {
return "$k=$v";
}, array_keys(array_filter(array_map('trim', $params))), array_values(array_filter(array_map('trim', 'array'))))) . strtoupper(hash('sha256', trim(str_replace(" ", "", strtolower(implode("",array_values((array)$phrase)))))));
*/
* This is a simplified version for demonstration.
* Actual implementation should follow PayFort's documentation exactly.
*/
/* Correct way would be: */
/*
1. Sort parameters alphabetically by key name (case-sensitive)
2. Concatenate all parameter values with the SHA phrase in between each value as specified in docs
3. Apply SHA-256 hashing algorithm to the resulting string
*/
return "generated_signature"; // Replace with actual implementation
}
public function initiatePayment() {
/* Sample payment request */
try{
/* Prepare request data */
$_POST["command"]="PURCHASE";
$_POST["amount"]=10000;/* Amount in smallest currency unit e.g., fils for AED*/
$_POST["currency"]="SAR";
$_POST["language"]="en";
/* Generate signature */
$_POST['signature'] = self::generateSignature($_REQUEST,$this->_getShaRequestPhrase());
/* Send to Payfort API endpoint using cURL or GuzzleHttp etc.*/
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'){
header("Content-Type: application/json"); echo json_encode(["status"=>"success","data"=>$_REQUEST]); exit();}else{return true;}
}catch(\Exception$e){throw new \RuntimeException(sprintf("%s:%d %s (%d)\n%s\n", basename(__FILE__), __LINE__, get_class(), intval(microtime(true)*1000)), var_export(debug_backtrace(),true));}}}
Telr 결제의 간단한 구현 예시
<?php
TelrPayment 클래스 {
const LIVE_URL = 'https://secure.telr.com/gateway/order.json';
const TEST_URL = 'https://secure.telrdev.com/gateway/order.json';
protected static ?string$_storeId=null;protected static ?string$_authKey=null;protected bool$_testMode=false;
/
* 판매자 대시보드의 Telr 스토어 ID를 @param 문자열|null store_id로 설정합니다.
* 판매자 대시보드의 인증 키입니다.
*/
public static function init(?string$store_id=null,?string$aouth_key=null,bool$test_mode=false):void{{
self::$_storeId=$store_id??env('TELR_STORE_ID');self::$_authKey=auth_key??env(TELR_AUTH_KEY');}
/
* :: 결제 요청을 생성하고 사용자를 결제 페이지로 리디렉션*/합니다.
public static createOrder(float amount_in_aed_or_sar,...) {
if(!self::$isInitialized()) throw new RuntimeException();
// Telrs API 사양에 따라 페이로드 준비...
// cURL/Guzzle/ 등을 사용하여 HTTP POST 요청을 합니다.
// 응답을 처리하고 그에 따라 사용자를 리디렉션합니다...}}
중동 지역에서 PayPal의 특별한 대우
PayPal은 글로벌 서비스이지만 중동에서 사용할 때는 다음 사항에 유의해야 합니다.
// PayPal沙箱测试账号可能需要特定地区账号才能测试本地化功能如:
- SAR货币支持(Saudi Riyal)
- AR语言界面(Arabic)
- Mada卡支持(沙特借记卡网络)
// PayPal SDK初始化时可能需要设置特定参数:
use PayPalCheckoutSdk\Core\SandboxEnvironment;
use PayPalCheckoutSdk\Core\ProductionEnvironment;
function environment() {
if(config(paypal.mode')=='sandbox'){
return new SandboxEnvironment(
config(paypal.sandbox.client_id'),
config(paypal.sandbox.client_secret')
)->setLocale(PayPalHttp\HttpConstants::ARABIC);
}else{
return new ProductionEnvironment(...)->setCurrency(SAR);}}
라라벨 패키지 권장 사항
라라벨 프로젝트의 경우 통합을 간소화하기 위해 이러한 패키지를 고려하세요.
라라벨-페이포트
- PayFort에서 관리하는 공식 SDK 래퍼입니다.
2. `모하마드 와지리/라라벨-탤런트'-탤런트의 비공식 라라벨 래퍼.
설치는 일반적으로 공급업체/패키지 이름을 요구하는 컴포저를 작성한 다음 구성 파일을 게시하여 판매자 ID 등을 설정하는 방식으로 이루어집니다.
주의:
-신용 카드 데이터 처리를 위한 PCI DSS 보안 표준을 준수합니다.
-사우디 SAMA 금융 규제 요건과 같은 현지 규정을 고려하세요.
-아랍어 오류 메시지 및 인터페이스를 제공합니다.
중동 결제 시스템과의 지속적인 PHP 통합에 대한 심층 가이드
보안 및 규정 준수 고려 사항
중동 지역에서 결제를 처리할 때는 다음과 같은 보안 및 규정 준수 요구 사항에 특별한 주의를 기울여야 합니다:
-
PCI DSS 규정 준수::
// 신용카드 정보를 직접 저장하지 마십시오.
// 대신 토큰화 사용
$토큰 = $결제 게이트웨이->토큰 생성([
'card_number' => '411111111111111111',
'만료_날짜' => '12/25',
'cvv' => '123'
]);
// 후속 거래는 실제 카드 번호 대신 토큰을 사용합니다.
$response = $결제 게이트웨이->충전([
'amount' => 100,
'통화' => 'SAR',
'토큰' => $token
]);
-
3D 보안 인증::
3DSecure 유효성 검사는 중동 대부분의 국가에서 필수입니다:
// PayFort용 3DSecure 처리 예시
public function handle3DSecure($response) {
if ($response['status'] == "14" && !empty($response['3ds_url'])) {
// 사용자를 은행 인증 페이지로 리디렉션합니다.
$_SESSION['fort_id'] = $response['fort_id'];
header("위치: ".$response['3ds_url']);
종료합니다;
}
}
Mada 카드 지원(사우디 전용)
현지 사우디 Mada 직불 카드 네트워크는 특별한 취급이 필요합니다:
MadaPaymentHandler 클래스 {
const BIN_RANGES = [
['from' => "440647", "to" => "440795"],
['from' => "446404", "to" > "446404"],
// ... 기타 BIN 범위 ...
];
public static function isMadaCard($cardNumber) {
foreach(self::BIN_RANGES as range){
if(substr($cardNumber,0,6)>=$range['from'] &&substr(cardNumber,0,6)<=range['to' ']){
참을 반환합니다;
}
}
거짓을 반환합니다;
}
public function processPayment(array data){
if (isMadata(data['card_number'])){
추가 매개변수 = array_merge(data,["mada_transaction"=>true]);
$this->게이트웨이->충전(추가 매개변수)을 반환합니다.
그렇지 않으면 {
반환 $this>게이트웨이>충전(데이터);}}}}
Laravel의 전체 구현 예제
아래는 라라벨의 PayTabs 통합을 위한 전체 컨트롤러 예제입니다:
<?php
네임스페이스 App\Http\Controllers.
Illuminate\Http\Request를 사용합니다.
결제 컨트롤러 클래스 컨트롤러를 확장합니다.
{
protected paytabsConfig=[
'profile_id=>env(PAYTABS_PROFILE_ID),
'server_key=>env(PAYTABS_SERVER_KEY),
'region=>SAU',// 사우디 아라비아
'엔드포인트=https://secure.paytabs.sa/payment/request'
];
공용 함수 initiate(요청 요청)
{
데이터 = [
profile_idthispaytabConfigprofileid,
tran_type=판매,
tran_class=ecom,
카티두니키드(),
장바구니설명제품 구매".
금액 요청금액*100;// 센트로 변환
통화 = SAR ,
콜백 urlroute(payment.callback)를 호출하면
urlroute(payment.thankyou)를 반환합니다.
customer_details[
이름 요청명.
이메일 요청메일 ,
전화 요청전화 .
street1 addressline1 ,
리야드 시 ,
NSA , 국가 SA
ZIP NULL]].
서명 해시_hmac('sha256', 임포딩("", 배열 값 데이터)), 이페이탭컨피그서버키);
응답 Http::asForm()->post(thispaytabConfigendpoint 배열병합 데이터 [서명 서명]);;
If(response success()){
리디렉션(responsejson() 리디렉션 URL)을 반환합니다.
}ELSE{ABORT500);}}
공개 함수 콜백(요청 요청){
If(! 해시 같음(요청 서명이 서명을 계산함)) abort403).
주문 주문::찾기(요청 카트 ID);;
Switch(strtolower(요청응답상태)){
케이스가 승인되었습니다.
OrdermarkAsPaid().
휴식.
기본값입니다.
OrdermarkAsFailed();}}
}
PHP 프레임워크에 구애받지 않는 서비스 클래스 디자인
라라벨이 아닌 프로젝트의 경우 결제 서비스 클래스는 다음과 같이 설계할 수 있습니다:
중동 결제 인터페이스{중동 결제 인터페이스{
public function processPayment(float 금액 문자열 통화 배열 customerData): array;}
추상 클래스 AbstractMiddleEastProcessor는 MiddleEastPaymentInterface를 구현합니다{
보호된 구성 = [].
보호된 테스트 모드 = 거짓;
공용 함수 생성자(bool testMode=false){
이 테스트모드=테스트모드;}
추상 보호 함수는 서명(배열 매개변수)을 생성합니다: 문자열 ;
요청 데이터를 준비하는 추상 보호 함수 (float 금액 문자열 통화 배열 customerData): array ;}
PayFortProcessor 클래스 추상미들리프로세서 확장 {
protected function generateSignature(array params){
ksort(params);//키 단계: 키 이름을 알파벳순으로 정렬합니다.
return strtoupper(hash_hmac('sha256', implode("", params), configSHA phrase));}
public function processPayment(.... .args){
이 요청 데이터 이 준비 요청 데이터(args);
요청_데이터 서명]= thisgenerateSignature(요청_데이터);
curl options=[CURLOPT_URL https api pay fort com 트랜잭션 생성,
CURLOPT_POST 참입니다,
컬렉트 반환 전송 참입니다,
컬렉트 포스트 필드 http 빌드 쿼리(요청 데이터)].
ch curl_init();
foreach(curl 옵션을 옵션 값으로){curl setopt(ch 옵션 값);}
결과 curl_exec(ch);
if(json validate(result)){return json decode(result true);}else{throw new RuntimeException()}}}
일반적인 문제에 대한 솔루션
아랍어 문자 인코딩 관련 문제
mb_internal 인코딩("UTF-8").
설명 iconv(mb 감지 인코딩 설명), "UTF-8",설명 );
표준 시간대 처리(걸프 표준시 GST +4)
날짜_기본_시간대_설정 아시아 리야드 ;
현지화 오류 메시지
아랍어메시지 [
결제 성공 여부가 표시됩니다,
거부됨 ].
함수 getLocalisedMessage(문자열 키 문자열 lang=en ){
if(lang ar isset(thisarabicMessages[key])){return thisarabic messages[key];}
else {return defaultEnglishMessages[key];}}
테스트 전략 권장 사항
1 샌드박스 계정을 만들 때 중동 계정(특히 사우디아라비아 또는 아랍에미리트)을 선택하여 다음과 같은 현지 기능을 테스트하세요.
- MADA/SADAD 결제 절차
- 아랍어 인터페이스 디스플레이 정확성
- GST 타임스탬프가 올바른가요?
2 다양한 은행 거부 응답을 시뮬레이션하여 올바른 처리를 보장합니다.
testCards [
mada_test : [ 번호 : "4543470000000005", 응답_코드 : "20064" ],//SABB 은행 거부 코드 예제...] ]]...
위의 내용은 기본 통합부터 고급 고려 사항까지 모든 범위의 지침을 다루고 있습니다. 실제 구현을 위해서는 각 전자결제 대행사의 최신 API 설명서를 주의 깊게 읽고 현지 법률 고문과 상담하여 현지 규정을 완벽하게 준수해야 합니다.