중동 결제 시스템을 PHP와 통합하는 방법은 무엇인가요?

PHP와 중동 결제 시스템 통합

PHP에서 중동 결제 시스템을 통합하려면 다음과 같은 주요 단계와 일반적인 중동 결제 게이트웨이 옵션을 고려해야 합니다:

주요 중동 결제 게이트웨이 옵션

  1. PayFort - 걸프 국가(사우디아라비아, UAE 등)에서 널리 사용됨
  2. Telr - 중동 및 북아프리카 지역 커버리지
  3. Checkout.com - 중동 지역에서의 강력한 입지
  4. 모야사르 - 사우디 아라비아에서 인기 있는 솔루션
  5. 페이탭 - 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);}}

라라벨 패키지 권장 사항

라라벨 프로젝트의 경우 통합을 간소화하기 위해 이러한 패키지를 고려하세요.

  1. 라라벨-페이포트 - PayFort에서 관리하는 공식 SDK 래퍼입니다.
    2. `모하마드 와지리/라라벨-탤런트'-탤런트의 비공식 라라벨 래퍼.

설치는 일반적으로 공급업체/패키지 이름을 요구하는 컴포저를 작성한 다음 구성 파일을 게시하여 판매자 ID 등을 설정하는 방식으로 이루어집니다.

주의:
-신용 카드 데이터 처리를 위한 PCI DSS 보안 표준을 준수합니다.
-사우디 SAMA 금융 규제 요건과 같은 현지 규정을 고려하세요.
-아랍어 오류 메시지 및 인터페이스를 제공합니다.

중동 결제 시스템과의 지속적인 PHP 통합에 대한 심층 가이드

보안 및 규정 준수 고려 사항

중동 지역에서 결제를 처리할 때는 다음과 같은 보안 및 규정 준수 요구 사항에 특별한 주의를 기울여야 합니다:

  1. PCI DSS 규정 준수::

    // 신용카드 정보를 직접 저장하지 마십시오.
    // 대신 토큰화 사용
    $토큰 = $결제 게이트웨이->토큰 생성([
    'card_number' => '411111111111111111',
    '만료_날짜' => '12/25',
    'cvv' => '123'
    ]);

    // 후속 거래는 실제 카드 번호 대신 토큰을 사용합니다.
    $response = $결제 게이트웨이->충전([
    'amount' => 100,
    '통화' => 'SAR',
    '토큰' => $token
    ]);
  2. 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 설명서를 주의 깊게 읽고 현지 법률 고문과 상담하여 현지 규정을 완벽하게 준수해야 합니다.