در این مقاله قصد دارم تا روش استفاده از این امکان رو به شما آموزش بدم
متدهایی که من قصد دارم تا نحوه استفاده از اون ها رو براتون قرار بدم :
- GetCommitReport : این متد لیست ۱۰۰ تراکنش موفق آخر رو برای شما برمی گردونه
- GetCommitReportByPageNumber : این متد هم دقیقا کار متد بالایی رو انجام میده با این تفاوت که لیست تراکنش های رو بر اساس بازه زمانی مد نظرتون بر می گردونه
- GetTransactionReportByPageNumber : این متد هم لیست تراکنش ها رو برمی گردونه
خوب برای شروع آموزش متد GetCommitReportByPageNumberرو توضیح می دم :
GetCommitReportByPageNumber($merchant_id,$terminal_id,$timestamp,$fp,$from_date,$to_date,$from_hour,$to_hour,$trace_no,$amount,$order_id,$page)
این متد لیستی از تراکنش های موفق رو در بازه زمانی خاصی برمیگردونه. اگر لیست تراکنش های شما بیشتر از ۱۰۰ تا باشه با استفاده از این متد میتونید با ارسال شماره صفحه گزارشات رو به صورت صفحه بندی شده دریافت کنید.
پارامترهای این تابع به صورت زیر باید ارسال بشن :
$merchant_id : شماره مشتری
$terminal_id : شماره پذیرنده
$timestamp : زمان سرور
$fp : امضای دیجیتال
$from_date : تاریخ شروع گزارش به صورت شمسی و به فرمت ۱۳۹۳۰۴۲۹ ( همون تاریخ شمسی خودمون بدون / )
$to_date : تاریخ پایان گزارش به صورت شمسی و به فرمت ۱۳۹۳۰۴۳۱ ( همون تاریخ شمسی خودمون بدون / )
$from_hour : ساعت شروع با فرمت ۰۰:۰۰
$to_hour : ساعت پایان با فرمت ۲۳:۵۹
$trace_no : شماره پیگیری
$amount : مبلغ تراکنش
$order_id : شماره سفارش
$page : شماره صفحه
خروجی این تابع یه آرایه است که به صورت زیر برای شما برگشت داده میشه :
array( XMLReportSchema, # شمای خروجی xml TotalPage, # تعداد کل صفحات GetCommitReportByPageNumberResult # لیست تراکنش ها به صورت xml )
چند تا نکته مهم در مورد این متد :
- متاسفانه سداد در محاسبه ساعت های شروع و پایان مشکل داره و اگه شما ساعت پایان رو کمتر از ساعت شروع قرار بدید نتیجه ایی رو براتون برنمی گردونه و حتما باید ساعت شروع از ساعت پایان کمتر باشه برای همین من هر زمان که نیاز به استفاده از این متد دارم ساعت شروع رو ۰۰:۰۰ در نظر می گیرم و ساعت پایان رو ۲۳:۵۹ که برای گزارش گیری مشکلی به وجود نیاد
- پارامتر های trace_no , amount و order_id برای این هستن که شما بخواین از سفارش های خاصی گزارش بگیرید مثلا اگه قصد دارید تا از یک شماره پیگیری خاصی گزارشی بگیرید باید trace_no رو مقدار دهی کنید و یا اگر قصد داشته باشید به دنبال شماره سفارش خاصی بگردید باید order_id رو مقدار دهی کنید
- حداکثر نتایجی که در هر صفحه به شما برگشت داده میشه ۱۰۰ رکورد هست
- بازه زمانی نهایتا باید ۳ روز باشد.
تابع GetCommitReport
این متد هم مثل متد GetCommitReportByPageNumber هست با این تفاوت که تنها ۱۰۰ تراکنش آخر رو برمی گردونه و دیگه خبری از شماره صفحه و تعداد کل صفحات نیست.
GetCommitReport($merchant_id,$terminal_id,$timestamp,$fp,$from_date,$to_date,$from_hour,$to_hour,$trace_no,$amount,$order_id)
پارامتر های این متد به صورت زیر هست
$merchant_id : شماره مشتری
$terminal_id : شماره پذیرنده
$timestamp : زمان سرور
$fp : امضای دیجیتال
$from_date : تاریخ شروع گزارش به صورت شمسی و به فرمت ۱۳۹۳۰۴۲۹
$to_date : تاریخ پایان گزارش به صورت شمسی و به فرمت ۱۳۹۳۰۴۳۱
$from_hour : ساعت شروع با فرمت ۰۰:۰۰
$to_hour : ساعت پایان با فرمت ۲۳:۵۹
$trace_no : شماره پیگیری
$amount : مبلغ تراکنش
$order_id : شماره سفارش
خروجی این متد به صورت زیر هست
array( XMLReportSchema, # شمای خروجی xml GetCommitReportResult # لیست تراکنش ها به صورت xml ) که GetCommitReportResult لیست تراکنش ها به صورت xml هست
متد GetTransactionReportByPageNumber
این متد تراکنش های شما در تاریخ خاصی رو به صورت صفحه های ۱۰۰ تایی در اختیار شما قرار میده
GetTransactionReportByPageNumber($merchant_id,$terminal_id,$timestamp,$fp,$date,$page)
پارامتر های این متد به صورت زیر هست
$merchant_id : شماره مشتری
$terminal_id : شماره پذیرنده
$timestamp : زمان سرور
$fp : امضای دیجیتال
$date : تاریخ تراکنش ها به صورت ۱۳۹۳۰۴۳۱
$page: شماره صفحه
خروجی این متد به صورت زیر هست
array( XMLReportSchema, # شمای خروجی xml TotalPage, # تعداد کل صفحات GetTransactionReportByPageNumberResult # لیست تراکنش ها به صورت xml )
متد GetTransactionReportWithSettlementDateByPageNumber
این متد تراکنش ها رو براساس تاریخ تسویه به صورت صفحه های ۱۰۰ تایی برمی گرداند
GetTransactionReportWithSettlementDateByPageNumber($merchant_id,$terminal_id,$timestamp,$fp,$date,$date_settle,$page)
پارامتر های این متد به صورت زیر هست
$merchant_id : شماره مشتری
$terminal_id : شماره پذیرنده
$timestamp : زمان سرور
$fp : امضای دیجیتال
$date : تاریخ تراکنش ها به صورت ۱۳۹۳۰۴۳۱
$date_settle : تاریخ تسویه به صورت ۱۳۹۳۰۴۳۱
$page: شماره صفحه
خروجی این متد به صورت زیر هست
array( XMLReportSchema, # شمای خروجی xml TotalPage, # تعداد کل صفحات GetTransactionReportByPageNumberResult # لیست تراکنش ها به صورت xml )
تو تمام خروجی ها ما با XMLReportSchema کاری نداریم و از اون استفاده نمی کنیم.
خب متدهای بالا رو که مطالعه کردید.حالا بریم یه نمونه کد هم ببینیم تا همه چی برامون روشن بشه :
_merchant_id.$this->_terminal_id.$this->_transactionKey; $hash = strtoupper(md5($string)); $len = strlen($hash); $i = 0; $fp = ''; while($i < $len) { $fp.=substr($hash,$i,2).'-'; $i += 2; } $fp = substr($fp,0,-1); return $fp; } /** * دریافت کانکشن وب سرویس درگاه بانکی * @return nusoap_client * @throws Exception */ private function getClient() { $client = new nusoap_client($this->_url,'wsdl'); if($client !== FALSE) return $client->getProxy(); throw new Exception('در اتصال به وب سرویس بانک خطایی رخ داده است.'); } /** * دریافت لیست تراکنش های موفق * @param string $from تاریخ شروع * @param string $from_hour ساعت شروع * @param string $to تاریخ پایان * @param string $to_hour تاریخ پایان * @param int $page شماره صفحه * @return array */ public function commit_transactions($from,$from_hour,$to,$to_hour,$page = 1) { $client = $this->getClient(); $time = $client->CalcTimeStamp(); # دریافت زمان سرور سداد $time = $time['CalcTimeStampResult']; $result = $client->GetCommitReportByPageNumber($this->_merchant_id,$this->_terminal_id,$time,$this->generate_fp($time),$from,$to,$from_hour,$to_hour,NULL,NULL,NULL,$page); # چون خروجی به صورت xml هست اول باید اون رو parse کنیم تا بتونیم ازش در پروژه مون استفاده کنیم $output = array(); if(isset($result['GetCommitReportByPageNumberResult'])) { $xml = simplexml_load_string($result['GetCommitReportByPageNumberResult']); foreach($xml->Transaction as $transaction) { $output['transaction'] = objectToArray($transaction); } $output['total_page'] = $xml['TotalPage']; } return $output; } /** * دریافت لیست تراکنش های یک تاریخ خاص * @param string $date تاریخ * @param int $page شماره صفحه * @return array */ public function transactions($date,$page = 1) { $client = $this->getClient(); $time = $client->CalcTimeStamp(); # دریافت زمان سرور سداد $time = $time['CalcTimeStampResult']; $result = $client->GetTransactionReportByPageNumber($this->_merchant_id,$this->_terminal_id,$time,$this->generate_fp($time),$date,$page); # چون خروجی به صورت xml هست اول باید اون رو parse کنیم تا بتونیم ازش در پروژه مون استفاده کنیم $output = array(); if(isset($result['GetTransactionReportByPageNumber'])){ $xml = simplexml_load_string($result['GetTransactionReportByPageNumber']); foreach($xml->InternetTransaction as $transaction) { $output['transaction'] = objectToArray($transaction); } $output['total_page'] = $xml['TotalPage']; } return $output; } /** * دریافت لیست تراکنش ها براساس تاریخ تسویه * @param string $date تاریخ تسویه * @param int $page شماره صفحه * @return array */ public function transactions_settle($date,$page = 1) { $client = $this->getClient(); $time = $client->CalcTimeStamp(); # دریافت زمان سرور سداد $time = $time['CalcTimeStampResult']; $result = $client->GetTransactionReportWithSettlementDateByPageNumber($this->_merchant_id,$this->_terminal_id,$time,$this->generate_fp($time),$date,$page); # چون خروجی به صورت xml هست اول باید اون رو parse کنیم تا بتونیم ازش در پروژه مون استفاده کنیم $output = array(); if(isset($result['GetTransactionReportWithSettlementDateByPageNumberResult'])){ $xml = simplexml_load_string($result['GetTransactionReportWithSettlementDateByPageNumberResult']); foreach($xml->InternetTransaction as $transaction) { $output['transaction'] = objectToArray($transaction); } $output['total_page'] = $xml['TotalPage']; } return $output; } } /** * تبدیل آبجت به آرایه * @param object $object * @return array */ function objectToArray( $object ) { if( !is_object( $object ) && !is_array( $object ) ) { return $object; } if( is_object( $object ) ) { $object = get_object_vars( $object ); } return array_map( 'objectToArray', $object ); } $report = new ReportSadad(); echo ''; print_r($report->transactions('13930431',1)); print_r($report->commit_transactions('13930428','00:00','13930430','23:59',1)); print_r($report->transactions_settle('13930431',1)); echo ''; ?>
کد های بالا کاملا واضح هستند و فکر نکنم نیاز به توضیح باشه. فقط یک نکته که می تونم بگم این هست که برای این که برای بدست آوردن زمان سرور سداد هربار از متد CalcTimeStamp استفاده نکنیم بهتر هست که یکبار این متد رو از وب سرویس صدا بزنیم و اختلاف زمانی بین سرور خودتون و سرور سداد رو بدست بیارید به جای دریافت زمان از سرور سداد خودتون زمان رو تولید کنید.
هر سوالی داشتید من در خدمتم
موفق باشید
نظرات شما عزیزان:
برچسبها: