Example #1
0
<?php

$MerchantID = '0164205';
$Password = '******';
$Price = 1000;
//Price By Toman
if (isset($_POST['status']) && $_POST['status'] == 100) {
    $Status = $_POST['status'];
    $Refnumber = $_POST['refnumber'];
    $Resnumber = $_POST['resnumber'];
    //Your Order ID
    $client = new SoapClient('http://merchant.parspal.com/WebService.asmx?wsdl');
    $res = $client->VerifyPayment(array("MerchantID" => $MerchantID, "Password" => $Password, "Price" => $Price, "RefNum" => $Refnumber));
    $Status = $res->verifyPaymentResult->ResultStatus;
    $PayPrice = $res->verifyPaymentResult->PayementedPrice;
    if ($Status == 'success') {
        echo '<div style="color:green; font-family:tahoma; direction:rtl; text-align:right">
			پرداخت با موفقیت انجام شد ، شماره رسید پرداخت : ' . $Refnumber . ' ،  مبلغ پرداختی : ' . $PayPrice . ' !
			<br /></div>';
    } else {
        echo '<div style="color:green; font-family:tahoma; direction:rtl; text-align:right">
			خطا در پردازش عملیات پرداخت ، نتیجه پرداخت : ' . $Status . ' !
			<br /></div>';
    }
} else {
    echo '<div style="color:red; font-family:tahoma; direction:rtl; text-align:right">
		بازگشت از عمليات پرداخت، خطا در انجام عملیات پرداخت ( پرداخت ناموق ) !
		<br /></div>';
}
 public function finish_cc_processing()
 {
     $return_code = $this->sales_controller->input->get("ReturnCode");
     //TODO
     //Check return code 0
     //Check return code 101: Decline
     //Only make verify payment call with the above return codes
     $service_url = (!defined("ENVIRONMENT") or ENVIRONMENT == 'development') ? 'https://hc.mercurydev.net/hcws/hcservice.asmx?WSDL' : 'https://hc.mercurypay.com/hcws/hcservice.asmx?WSDL';
     $parameters = array('request' => array('MerchantID' => $this->sales_controller->Location->get_info_for_key('merchant_id'), 'PaymentID' => $this->sales_controller->input->get('PaymentID'), 'Password' => $this->sales_controller->Location->get_info_for_key('merchant_password')));
     $client = new SoapClient($service_url, array('trace' => TRUE));
     $result = $client->VerifyPayment($parameters);
     $response_code = $result->VerifyPaymentResult->ResponseCode;
     $status = $result->VerifyPaymentResult->Status;
     $total_amount = $result->VerifyPaymentResult->Amount;
     $auth_amount = $result->VerifyPaymentResult->AuthAmount;
     $auth_code = $result->VerifyPaymentResult->AuthCode;
     $acq_ref_data = $result->VerifyPaymentResult->AcqRefData;
     $ref_no = $result->VerifyPaymentResult->RefNo;
     $token = $result->VerifyPaymentResult->Token;
     $masked_account = $result->VerifyPaymentResult->MaskedAccount;
     $process_data = $result->VerifyPaymentResult->ProcessData;
     $card_issuer = $result->VerifyPaymentResult->CardType;
     if ($response_code == 0 && $status == 'Approved') {
         $result = $client->AcknowledgePayment($parameters);
         $response_code = $result->AcknowledgePaymentResult;
         $this->sales_controller->session->set_userdata('ref_no', $ref_no);
         $this->sales_controller->session->set_userdata('auth_code', $auth_code);
         if ($response_code == 0 && $auth_amount == $total_amount) {
             $this->sales_controller->session->set_userdata('masked_account', $masked_account);
             $this->sales_controller->session->set_userdata('card_issuer', $card_issuer);
             $info = $this->sales_controller->Customer->get_info($this->sales_controller->sale_lib->get_customer());
             //We want to save/update card:
             //1. User decides to save credit card info
             //2. We already have a saved credit and need to update
             if (($this->sales_controller->sale_lib->get_save_credit_card_info() or $info->cc_token && $info->cc_preview) && $this->sales_controller->sale_lib->get_customer() != -1) {
                 $person_info = array('person_id' => $this->sales_controller->sale_lib->get_customer());
                 $customer_info = array('cc_token' => $token, 'cc_preview' => $masked_account, 'card_issuer' => $card_issuer);
                 $this->sales_controller->Customer->save($person_info, $customer_info, $this->sales_controller->sale_lib->get_customer());
             }
             //If the sale payments cover the total, redirect to complete (receipt)
             if ($this->sales_controller->_payments_cover_total()) {
                 redirect(site_url('sales/complete'));
             } else {
                 $invoice_number = substr(date('mdy') . (time() - strtotime("today")) . $this->sales_controller->Employee->get_logged_in_employee_info()->person_id, 0, 16);
                 $credit_card_amount = to_currency_no_money($this->sales_controller->sale_lib->get_payment_amount(lang('sales_credit')));
                 $partial_transaction = array('AuthCode' => $auth_code, 'Frequency' => 'OneTime', 'Memo' => 'PHP POS ' . APPLICATION_VERSION, 'Invoice' => $invoice_number, 'MerchantID' => $this->sales_controller->Location->get_info_for_key('merchant_id'), 'OperatorID' => (!defined("ENVIRONMENT") or ENVIRONMENT == 'development') ? 'test' : $this->sales_controller->Employee->get_logged_in_employee_info()->person_id, 'PurchaseAmount' => $credit_card_amount, 'RefNo' => $ref_no, 'Token' => $token, 'AcqRefData' => $acq_ref_data, 'ProcessData' => $process_data);
                 $this->sales_controller->sale_lib->delete_payment($this->sales_controller->sale_lib->get_payment_ids(lang('sales_credit')));
                 $this->sales_controller->sale_lib->add_payment(lang('sales_partial_credit'), $credit_card_amount, FALSE, $masked_account, $card_issuer);
                 $this->sales_controller->sale_lib->add_partial_transaction($partial_transaction);
                 $this->sales_controller->_reload(array('warning' => lang('sales_credit_card_partially_charged_please_complete_sale_with_another_payment_method')), false);
             }
         } elseif ($response_code == 0 && $auth_amount < $total_amount) {
             $invoice_number = substr(date('mdy') . (time() - strtotime("today")) . $this->sales_controller->Employee->get_logged_in_employee_info()->person_id, 0, 16);
             $partial_transaction = array('AuthCode' => $auth_code, 'Frequency' => 'OneTime', 'Memo' => 'PHP POS ' . APPLICATION_VERSION, 'Invoice' => $invoice_number, 'MerchantID' => $this->sales_controller->Location->get_info_for_key('merchant_id'), 'OperatorID' => (!defined("ENVIRONMENT") or ENVIRONMENT == 'development') ? 'test' : $this->sales_controller->Employee->get_logged_in_employee_info()->person_id, 'PurchaseAmount' => $auth_amount, 'RefNo' => $ref_no, 'Token' => $token, 'AcqRefData' => $acq_ref_data, 'ProcessData' => $process_data);
             $this->sales_controller->sale_lib->delete_payment($this->sales_controller->sale_lib->get_payment_ids(lang('sales_credit')));
             $this->sales_controller->sale_lib->add_payment(lang('sales_partial_credit'), $auth_amount, FALSE, $masked_account, $card_issuer);
             $this->sales_controller->sale_lib->add_partial_transaction($partial_transaction);
             $this->sales_controller->_reload(array('warning' => lang('sales_credit_card_partially_charged_please_complete_sale_with_another_payment_method')), false);
         } else {
             $this->sales_controller->_reload(array('error' => lang('sales_acknowledge_payment_failed_please_contact_support')), false);
         }
     } else {
         $client->AcknowledgePayment($parameters);
         $this->sales_controller->_reload(array('error' => $result->VerifyPaymentResult->StatusMessage . ': ' . $result->VerifyPaymentResult->DisplayMessage), false);
     }
 }