مشاوره در کدنویسی اسکریپت درگاه واسط

rocki3oy

کاربر عضو
با سلام و احترام خدمت دوستان عزیز.

مطمئنا این سوال را کسانی می توانند جواب بدن که اسکریپت درگاه واسط کدنویسی کرده اند از این دوستان ممنون میشم در این زمینه راهنمایی بفرماییند.

البته این اسکریپت کاربری عمومی ندارد و کاملا شخصی می باشد و تمامی قسمت های آن کدنویسی شده است و بر پایه php می باشد و در قسمتی من دچار مشکل هستند و از آنجایی که تجربه کدنویسی اسکریپت درگاه واسط ندارند ممنون میشم در این بخش کمکم کنید.

---------------------------------------

کمکی که نیاز دارم فقط بفرمایید با توجه به کدهای زیر کدنویسی سایر فایل ها به چه صورت باید باشد.

البته دوستان عزیز نیازی به تایپ کامل کد نیست حتی اگر الگوریتم کار یا تکه ای کد یا مقداری راهنمایی بفرمایید باقی موارد را یه جوری در میارم.

--------------------------------

کد زیر:

function Edd_Sampay_pay($api, $amount, $redirect){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://domain.ir/payment/send');
curl_setopt($ch, CURLOPT_POSTFIELDS,"MerchantID=$api&amount=$amount&redirect=$redirect");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}


همان طور می دانید تابع curl برای دریافت اطلاعات می باشد و من می خوام بدونم در اسکریپت های درگا واسط اطلاعاتی که از لینک زیر  دریافت میشه باید چه مقادیری باشه؟

function Edd_Sampay_verify($api, $transId) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://domain.ir/payment/verify');
curl_setopt($ch, CURLOPT_POSTFIELDS, "MerchantID=$api&transId=$transId");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}


و همین طور در لینک وریفای؟

دوستان عزیز حتی یک راهنمایی کوچیک خیلی کمک می کنه ممنون میشم راهنمایی بفرمایید.

 

hannanstd.ir

مدیر انجمن و توسعه دهنده ووکامرس پارسی
سوال خیلی مبهم و گنگ هست

 

rocki3oy

کاربر عضو
ممنونم آقای حنان عزیز که به سوال توجه کردید.
من یک توضیح دیگه بدم تشکر از وقتی که میزارید.

-----------------

شما فرض کنید درگاه واسط کدنویسی شد.

افزونه ای که برای edd کدنویسی شد دارای کدهای زیر هست.

<?php

/**
Plugin Name: درگاه واسط سام پی برای EDD
Description: درگاه واسط سام پی برای EDD
Version: 1.0
**/

function Edd_Sampay_pay($api, $amount, $redirect){
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://mysite.ir/payment/send');
curl_setopt($ch, CURLOPT_POSTFIELDS,"MerchantID=$api&amount=$amount&redirect=$redirect");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}
function Edd_Sampay_verify($api, $transId) {
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://mysite.ir/payment/verify');
curl_setopt($ch, CURLOPT_POSTFIELDS, "MerchantID=$api&transId=$transId");
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
$res = curl_exec($ch);
curl_close($ch);
return $res;
}


if (!function_exists('edd_rial')) {

function edd_rial($formatted, $currency, $price) {
return $price . ' ریال';
}

}
add_filter('edd_rial_currency_filter_after', 'edd_rial', 10, 3);
@session_start();

function add_Sampay_gateway($gateways) {
$gateways['Sampay'] = array(
'admin_label' => 'Sampay',
'checkout_label' => 'Sampay'
);
return $gateways;
}

add_filter('edd_payment_gateways', 'add_Sampay_gateway');

function Sampay_cc_form() {
return;
}

add_action('edd_Sampay_cc_form', 'Sampay_cc_form');

function Sampay_process($purchase_data) {
global $edd_options;

$payment_data = array(
'price' => $purchase_data['price'],
'date' => $purchase_data['date'],
'user_email' => $purchase_data['post_data']['edd_email'],
'purchase_key' => $purchase_data['purchase_key'],
'currency' => $edd_options['currency'],
'downloads' => $purchase_data['downloads'],
'cart_details' => $purchase_data['cart_details'],
'user_info' => $purchase_data['user_info'],
'status' => 'pending'
);
$payment = edd_insert_payment($payment_data);

if ($payment) {
$_SESSION['edd_Sampay_record'] = $payment;
$return = add_query_arg('verify', 'Sampay', get_permalink($edd_options['success_page']));
$price = $payment_data['price'];
$api = $edd_options['api'];

$result = Edd_Sampay_pay($api,$price,$return);
$result = json_decode($result);

if($result->status) {
echo 'ok';
$go = "https://mysite.ir/payment/gateway/$result->transId";
wp_redirect($go);
} else {
echo 'not';
edd_update_payment_status($payment, 'failed');
$msg = $result->errorMessage;
wp_die('خطای ' . $msg);
}
}
else {
edd_send_back_to_checkout('?payment-mode=' . $purchase_data['post_data']['edd-gateway']);
}
}

add_action('edd_gateway_Sampay', 'Sampay_process');

function Sampay_verify() {

global $edd_options;
if (isset($_POST['status']) && $_POST['status'] == 1) {

$payment = $_SESSION['edd_Sampay_record'];
$api = $edd_options['api'];
$transId = $_POST['transId'];
$result = Edd_Sampay_verify($api,$transId);
$result = json_decode($result);

if($result->status == 1)
{
edd_update_payment_status($payment, 'publish');
edd_insert_payment_note($payment, 'نتیجه بازگشت: وضعیت: موفق و کد پرداخت: '.$transId);
edd_send_to_success_page();
}
else
{
edd_empty_cart();
edd_update_payment_status($payment, 'failed');
wp_redirect(get_permalink($edd_options['failure_page']));
}
}

}
add_action('init', 'Sampay_verify');

function Sampay_settings($settings) {
$Sampay_options = array(
array(
'id' => 'api',
'type' => 'text',
'name' => 'API SamPay',
'desc' => ''
)
);
return array_merge($settings, $Sampay_options);
}

add_filter('edd_settings_gateways', 'Sampay_settings');


حنان عزیز الگوریتم کار هم به من توضیح بدید باقی کارارو سعی می کنم پیدا کنم.ممنونم.

با توجه به کدهای افزونه ی بالا اول مشتری زمانی که روی خرید کلیک می کنه اول با تابع curl اطلاعات کاربری گه درگاه واسط داره چک می شه یعنی با دریافت از لینک زیر:



که با دستور curl اطلاعات api و amount و redirect را ارسال می کنه و خروجی $result->status و $result->transId رو میگیره که اگر این موارد اوکی بود بره به لینک زیر:

https://mysite.ir/payment/gateway/$result->transId




خوب مورد $result->status مشخصه که در صورت وجود api کاربر در درگاه واسط فرض می کنیم عدد 1 رو برگشت بده اما الان من می خوام بدونم $result->transId باید شامل چی باشه؟

و لینک زیر که ارسال میشه باید شامل چه موارد باشه؟ فکر می کنم این لینک به سمت بانک باید بره اما مقدار $result->transId باید چه عددی باشه؟

https://mysite.ir/payment/gateway/$result->transId


امیدوارم منظورمو متوجه شده باشید.

چون من درگاه واسط ننوشتم زیاد به روند کار  و الگوریتم آشنایی ندارم و متاسفانه در این قسمت که قسمت اصلی می باشد دچار مشکل شدم.

ممنون میشم راهنمایی بفرمایید اگر جایی را متوجه نشدید بفرمایید من بیشتر توضیح بدم.

با تشکر.

 

Mohammad

مدیر انجمن
پرسنل مدیریت
اطلاعات شامل مرچنت کد (api) - مبلغ و آدرس بازگشت به درگاه ارسال میشه. چرا؟

1. بررسی بشه وبسرویس کیه

2. مبلغ چقدر هست (بعدا شارژ کنه در حسابش و بررسیش بکنه هنگام بازگشت)

3. ادرس بازگشت رو بررسی میکنه که با ادرس سایت api یکی باشه . اینو هم بگم. ادرس وب سایت درخواست کننده رو هم بررسی میکنه (درخواست از چه دومینی ارسال شده)...

یک رکورد درون جدول ایجاد میکنه (فاکتور صادر میکنه) و میفرسته به کاربر (این رو به عنوان شماره فاکتور در اسکریپت ها در نظر میگیرن معمولا) ، کاربر رو میفرسته به درگاه...

درگاه وقتی برمیگرده وضعیت رو بروز میکنه (در واسطه) - ریدایرکت میشه به وب سایت مبدا (redirecturl)

حالا بررسی میکنه ، که وضعیت پرداخت چی بوده ، تو بعضی درگاه ها ، مبلغ واریزی درون درگاه رو با دیتابیس سایت مبدا مقایسه میکنن که اشتباه نشه (یا هک نشه...)

با وریفای کردن ، درگاه واسطه پول میزنه به حساب کاربری . اگر هم وریفای نشه ، به بانک (درگاه) اطلاع میده پرداخت موفق نبود و پول برمیگرده به پرداخت کننده

 
آخرین ویرایش توسط مدیر:

rocki3oy

کاربر عضو
با سلام و احترام.

آقا محمد عزیز ممنونم بابت راهنماییتون واقعا توضیح عالی بود.

----------------------

یک موردی هست من می خوام آی پی و لینک رو زمانی که اطلاعات ارسال و چک میشه بررسی کنم.

اما آی پی ارسالی با آی پی که به به طور مثال یک سری سایت ها هستند آی پی سایت را می دهند فرق می کنه!!!

من آی پی ارسالی را با دستورزیر دریافت می کنم.

$_SERVER['SERVER_ADDR'];


-----------------------------

در مورد لینک هم با دستور زیر تست می کنم اما مقدار خالیه گویا تشخیص نمیده.

$HTTP_REFERER = $_SERVER['HTTP_REFERER']; // سايت فرستنده
$ex_HTTP_REFERER = explode("/",$HTTP_REFERER);
$url_ex_HTTP_REFERER = $ex_HTTP_REFERER[2];
$url_REFERER = 'http://'.$url_ex_HTTP_REFERER;




بازم ممنونم بابت کمکتون.

 

Mohammad

مدیر انجمن
پرسنل مدیریت
نکته: فکر میکنم کاربر میتونه http referer رو عوض کنه! پس اطلاعاتی از اونجا دریافت نکنید! (تحقیق کن درباره اش)

یک راهنمایی اینجا شده:



 
آخرین ویرایش توسط مدیر:
بالا