protected function _loadFromXml(DOMElement $elem)
 {
     parent::_parseFromXml($elem);
     $elems = $elem->getElementsByTagName('invoice');
     if ($elems->length != 1) {
         throw new Exception('Mobilpay_Payment_Request_Card::loadFromXml failed; invoice element is missing', self::ERROR_LOAD_FROM_XML_ORDER_INVOICE_ELEM_MISSING);
     }
     $this->invoice = new Mobilpay_Payment_Invoice($elems->item(0));
     return $this;
 }
示例#2
0
文件: Sms.php 项目: bardascat/blogify
 protected function _loadFromXml(DOMElement $elem)
 {
     parent::_parseFromXml($elem);
     //SMS request specific data
     $elems = $elem->getElementsByTagName('service');
     if ($elems->length != 1) {
         throw new Exception('Mobilpay_Payment_Request_Sms::loadFromXml failed: service is missing', self::ERROR_LOAD_FROM_XML_SERVICE_ELEM_MISSING);
     }
     $xmlElem = $elems->item(0);
     $this->service = $xmlElem->nodeValue;
     $elems = $elem->getElementsByTagName('msisdn');
     if ($elems->length == 1) {
         $this->msisdn = $elems->item(0)->nodeValue;
     }
     $elem = $elem;
     return $this;
 }
示例#3
0
 public static function factoryFromEncrypted($envKey, $encData, $privateKeyFilePath, $privateKeyPassword = null)
 {
     $privateKey = null;
     if ($privateKeyPassword == null) {
         $privateKey = @openssl_get_privatekey("file://{$privateKeyFilePath}");
     } else {
         $privateKey = @openssl_get_privatekey("file://{$privateKeyFilePath}", $privateKeyPassword);
     }
     if ($privateKey === false) {
         throw new Exception('Error loading private key', self::ERROR_CONFIRM_LOAD_PRIVATE_KEY);
     }
     $srcData = base64_decode($encData);
     if ($srcData === false) {
         @openssl_free_key($privateKey);
         throw new Exception('Failed decoding data', self::ERROR_CONFIRM_FAILED_DECODING_DATA);
     }
     $srcEnvKey = base64_decode($envKey);
     if ($srcEnvKey === false) {
         throw new Exception('Failed decoding envelope key', self::ERROR_CONFIRM_FAILED_DECODING_ENVELOPE_KEY);
     }
     $data = null;
     $result = @openssl_open($srcData, $data, $srcEnvKey, $privateKey);
     if ($result === false) {
         throw new Exception('Failed decrypting data', self::ERROR_CONFIRM_FAILED_DECRYPT_DATA);
     }
     return Mobilpay_Payment_Request_Abstract::factory($data);
 }
示例#4
0
 public function payment_confirm()
 {
     require_once 'application/libraries/Mobilpay/Payment/Request/Abstract.php';
     require_once 'application/libraries/Mobilpay/Payment/Request/Card.php';
     require_once 'application/libraries/Mobilpay/Payment/Invoice.php';
     require_once 'application/libraries/Mobilpay/Payment/Request/Notify.php';
     require_once 'application/libraries/Mobilpay/Payment/Address.php';
     $errorCode = 0;
     $errorType = \Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
     if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) {
         if (isset($_POST['env_key']) && isset($_POST['data'])) {
             $privateKeyFilePath = 'application/libraries/Mobilpay/private.key';
             try {
                 $objPmReq = \Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($_POST['env_key'], $_POST['data'], $privateKeyFilePath);
                 $order = $this->OrdersModel->getOrderByCode($objPmReq->orderId);
                 if ($objPmReq->objPmNotify->errorCode != 0) {
                     $this->OrdersModel->setOrderPaymentStatus(App_constants::$PAYMENT_STATUS_CANCELED, $order);
                 } else {
                     switch ($objPmReq->objPmNotify->action) {
                         #orice action este insotit de un cod de eroare si de un mesaj de eroare. Acestea pot fi citite folosind $cod_eroare = $objPmReq->objPmNotify->errorCode; respectiv $mesaj_eroare = $objPmReq->objPmNotify->errorMessage;
                         #pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId;
                         case 'confirmed':
                             $this->OrdersModel->setOrderPaymentStatus(App_constants::$PAYMENT_STATUS_CONFIRMED, $order);
                             $email = $order->getUser()->getEmail();
                             $subject = "Confirmare comandă nr. " . $order->getOrderNumber();
                             $email = $order->getUser()->getEmail();
                             $body = "Buna Ziua<br/> Plata dumneavoastra pe Mobilpay.ro a fost finalizata cu success. <br/><br/> Va multumim,<br/> <b>Helpie</b>";
                             \NeoMail::genericMail($body, $subject, $email);
                             break;
                         case 'confirmed_pending':
                             #cand action este confirmed_pending inseamna ca tranzactia este in curs de verificare antifrauda. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
                             $this->OrdersModel->setOrderPaymentStatus(App_constants::$PAYMENT_STATUS_PENDING, $order);
                             break;
                         case 'paid_pending':
                             $this->OrdersModel->setOrderPaymentStatus($objPmReq->objPmNotify->action, $order);
                             #cand action este paid_pending inseamna ca tranzactia este in curs de verificare. Nu facem livrare/expediere. In urma trecerii de aceasta verificare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
                             $errorMessage = $objPmReq->objPmNotify->getCrc();
                             break;
                         case 'paid':
                             $this->OrdersModel->setOrderPaymentStatus($objPmReq->objPmNotify->action, $order);
                             #cand action este paid inseamna ca tranzactia este in curs de procesare. Nu facem livrare/expediere. In urma trecerii de aceasta procesare se va primi o noua notificare pentru o actiune de confirmare sau anulare.
                             $errorMessage = $objPmReq->objPmNotify->getCrc();
                             break;
                         case 'canceled':
                             $this->OrdersModel->setOrderPaymentStatus($objPmReq->objPmNotify->action, $order);
                             #cand action este canceled inseamna ca tranzactia este anulata. Nu facem livrare/expediere.
                             $errorMessage = $objPmReq->objPmNotify->getCrc();
                             break;
                         case 'credit':
                             #cand action este credit inseamna ca banii sunt returnati posesorului de card. Daca s-a facut deja livrare, aceasta trebuie oprita sau facut un reverse.
                             $errorMessage = $objPmReq->objPmNotify->getCrc();
                             $this->OrdersModel->setOrderPaymentStatus(App_constants::$PAYMENT_STATUS_CANCELED, $order);
                             break;
                         default:
                             $errorType = \Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
                             $errorCode = \Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
                             $errorMessage = 'mobilpay_refference_action paramaters is invalid';
                             break;
                     }
                 }
             } catch (Exception $e) {
                 $errorType = \Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY;
                 $errorCode = $e->getCode();
                 $errorMessage = $e->getMessage();
             }
         } else {
             $errorType = \Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
             $errorCode = \Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_PARAMETERS;
             $errorMessage = 'mobilpay.ro posted invalid parameters';
         }
     } else {
         $errorType = \Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
         $errorCode = \Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
         $errorMessage = 'invalid request metod for payment confirmation';
     }
     header('Content-type: application/xml');
     echo "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
     if (isset($errorCode) && isset($errorMessage) && $errorCode == 0) {
         echo "<crc>{$errorMessage}</crc>";
     } else {
         if (!isset($errorMessage)) {
             $errorMessage = "";
         }
         echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>";
     }
 }
示例#5
0
require_once 'extern/Mobilpay/Payment/Request/Abstract.php';
require_once 'extern/Mobilpay/Payment/Request/Card.php';
require_once 'extern/Mobilpay/Payment/Request/Notify.php';
require_once 'extern/Mobilpay/Payment/Invoice.php';
require_once 'extern/Mobilpay/Payment/Address.php';
$errorCode = 0;
$errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
$errorMessage = '';
if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) {
    if (isset($_POST['env_key']) && isset($_POST['data'])) {
        #calea catre cheia privata
        #cheia privata este generata de mobilpay, accesibil in Admin -> Conturi de comerciant -> Detalii -> Setari securitate
        $privateKeyFilePath = getUserConfig('mobilpay_key');
        try {
            global $objPmReq;
            $objPmReq = Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($_POST['env_key'], $_POST['data'], $privateKeyFilePath);
            #uncomment the line below in order to see the content of the request
            print_r($objPmReq);
            $errorCode = $objPmReq->objPmNotify->errorCode;
            // action = status only if the associated error code is zero
            if ($errorCode == "0") {
                switch ($objPmReq->objPmNotify->action) {
                    #orice action este insotit de un cod de eroare si de un mesaj de eroare. Acestea pot fi citite folosind $cod_eroare = $objPmReq->objPmNotify->errorCode; respectiv $mesaj_eroare = $objPmReq->objPmNotify->errorMessage;
                    #pentru a identifica ID-ul comenzii pentru care primim rezultatul platii folosim $id_comanda = $objPmReq->orderId;
                    case 'confirmed':
                        #cand action este confirmed avem certitudinea ca banii au plecat din contul posesorului de card si facem update al starii comenzii si livrarea produsului
                        //update DB, SET status = "confirmed/captured"
                        $_GET['mobilpayipn'] = true;
                        $_GET['mobilpayipn_post'] = true;
                        require_once "extensions/process_offer_ws.php";
                        global $objPmReq;
 function check_mobilpaycard_response()
 {
     global $woocommerce;
     require_once plugin_dir_path(__FILE__) . 'includes/request/class-mobilpay-abstract.php';
     require_once plugin_dir_path(__FILE__) . 'includes/request/class-mobilpay-card.php';
     require_once plugin_dir_path(__FILE__) . 'includes/request/class-mobilpay-notify.php';
     require_once plugin_dir_path(__FILE__) . 'includes/class-mobilpay-invoice.php';
     require_once plugin_dir_path(__FILE__) . 'includes/class-mobilpay-address.php';
     $errorCode = 0;
     $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_NONE;
     $errorMessage = '';
     if (strcasecmp($_SERVER['REQUEST_METHOD'], 'post') == 0) {
         if (isset($_POST['env_key']) && isset($_POST['data'])) {
             // Path to your merchant private key
             if ($this->environment == "yes") {
                 $privateKeyFilePath = plugin_dir_path(__FILE__) . 'certificates/sandbox.' . $this->merchant_id . 'private.key';
             } else {
                 $privateKeyFilePath = plugin_dir_path(__FILE__) . 'certificates/live.' . $this->merchant_id . 'private.key';
             }
             try {
                 $objPmReq = Mobilpay_Payment_Request_Abstract::factoryFromEncrypted($_POST['env_key'], $_POST['data'], $privateKeyFilePath);
                 // Get order information
                 $order = new WC_Order($objPmReq->orderId);
                 // action = status only if the associated error code is zero
                 if ($objPmReq->objPmNotify->errorCode == 0) {
                     switch ($objPmReq->objPmNotify->action) {
                         case 'confirmed':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             if ($order->status != 'processing') {
                                 // Mark order as paid
                                 $order->payment_complete();
                                 // Payment has been successful
                                 $order->add_order_note($errorMessage);
                                 // Empty shopping cart
                                 $woocommerce->cart->empty_cart();
                             }
                             break;
                         case 'confirmed_pending':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             break;
                         case 'paid_pending':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             break;
                         case 'paid':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             break;
                         case 'canceled':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             $order->update_status('cancelled');
                             break;
                         case 'credit':
                             $errorMessage = $objPmReq->objPmNotify->errorMessage;
                             $order->update_status('refunded');
                             break;
                         default:
                             $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
                             $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_ACTION;
                             $errorMessage = 'mobilPay refference action paramaters is invalid.';
                             break;
                     }
                 } else {
                     // Rejected transaction error message
                     $errorMessage = $objPmReq->objPmNotify->errorMessage;
                     $order->add_order_note($errorMessage);
                 }
             } catch (Exception $e) {
                 $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_TEMPORARY;
                 $errorCode = $e->getCode();
                 $errorMessage = $e->getMessage();
             }
         } else {
             $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
             $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_PARAMETERS;
             $errorMessage = 'mobilPay posted invalid parameters.';
         }
     } else {
         $errorType = Mobilpay_Payment_Request_Abstract::CONFIRM_ERROR_TYPE_PERMANENT;
         $errorCode = Mobilpay_Payment_Request_Abstract::ERROR_CONFIRM_INVALID_POST_METHOD;
         $errorMessage = 'Invalid request method for payment confirmation.';
     }
     // Generate xml response
     ob_start();
     echo "<?xml version=\"1.0\" encoding=\"utf-8\" ?>\n";
     if ($errorCode == 0) {
         echo "<crc>{$errorMessage}</crc>";
     } else {
         echo "<crc error_type=\"{$errorType}\" error_code=\"{$errorCode}\">{$errorMessage}</crc>";
     }
     ob_flush();
     exit;
 }