key_is_valid() public method

Check if an order key is valid.
public key_is_valid ( mixed $key ) : boolean
$key mixed
return boolean
示例#1
0
 /**
  * Test: key_is_valid
  */
 function test_key_is_valid()
 {
     $object = new WC_Order();
     $object->save();
     $this->assertFalse($object->key_is_valid('1234'));
     $object->set_order_key('1234');
     $this->assertTrue($object->key_is_valid('1234'));
 }
示例#2
0
		/**
		 * Relay response - handles response from NAB Transact CRN
		 * At this stage we've just added a CRN record, and now we must process the payment to this CRN
		 * 
		 * @since 1.2.0
		 */
		function relay_response_crn() {
			global $woocommerce;

			// Process response
			$response = new stdClass;
			foreach ($_GET as $key => $value) {
				$response->$key = $value;
			}
		    foreach ($_POST as $key => $value) {
	            $response->$key = $value;
	        }

			if ( ! empty( $response->order ) ) {
		    
		        $order = new WC_Order( (int) $response->order );

				if ((!isset($response->afrescode) || $response->afrescode=='400' || $response->afrescode=='000') && ($response->rescode == '00' || $response->rescode == '08' || $response->rescode == '11')) { // Approved
					if ($order->key_is_valid( $response->key ) && $order->status != 'completed' && $order->status != 'processing') {

						// Save CRN to order meta also
						$this->save_subscription_meta( (int)$response->order , $response->CRN);

						// Add Order Note
						$order->add_order_note(__('Credit card details stored.','wc-nab'));

						if (!function_exists('wcs_get_subscriptions_for_order')) {
							$amount = WC_Subscriptions_Order::get_total_initial_payment($order);
						} else {
							$amount = $order->get_total();
						}

						if (isset($response->is_payment_change) && $response->is_payment_change == '1' && get_post_meta($order->id,'_is_mid_change_method',true)) {
							$amount = 0;
							delete_post_meta($order->id,'_is_mid_change_method',true);
						}

						if ($amount == 0) {
							$order->payment_complete();
						} else {
							// Now to process payment, but only if it hasn't already been done
							// (this url is used by result AND return)
							if ($order->status != 'completed') {
								$data = array(
									'crn'=>$response->CRN,
									'amountcents'=>($amount*100),
									'reference'=>substr(urlencode($response->order.'-'.$order->order_key),0,32),
									'currency'=>get_woocommerce_currency());
								$payment_xml = $this->generatePaymentXMLMessage($data);
								$payment_result = $this->send($payment_xml,$this->xmlapiurl,true);

								$result_object = simplexml_load_string($payment_result); 


								if ($result_object->Periodic->PeriodicList->PeriodicItem->responseCode == '00' || $result_object->Periodic->PeriodicList->PeriodicItem->responseCode == '08' || $result_object->Periodic->PeriodicList->PeriodicItem->responseCode == '11') {
									// Payment success!
									$order->add_order_note(sprintf(__("NAB Transaction id: %s\r\nNAB Settlement date: %s",'wc-nab'),$result_object->Periodic->PeriodicList->PeriodicItem->txnID,$result_object->Periodic->PeriodicList->PeriodicItem->settlementDate));

									$order->payment_complete((string)$result_object->Periodic->PeriodicList->PeriodicItem->txnID);
									// Remove cart
									$woocommerce->cart->empty_cart();

								} else {
									if ($order->status != 'completed' && $order->status != 'processing') {
										$order->update_status( 'failed', sprintf(__("NAB error whilst processing payment via XML API using CRN: code %s - %s.", 'wc-nab'), $result_object->Status->statusCode, $result_object->Status->statusDescription) );
									}
								}
							}
						}

					} else { // payment received but order key didn't match!

						// Key did not match order id
						$order->add_order_note( sprintf(__('Payment received, but order ID did not match key: code %s - %s.', 'wc-nab'), $response->response_code, $response->response_reason_text ) );

						// Put on hold if pending
						if ($order->status == 'pending' || $order->status == 'failed') {
							$order->update_status( 'on-hold' );
						}
					}
				} else { // Transaction failed
					if ($order->status != 'completed' && $order->status != 'processing') {
						$order->update_status( 'failed', sprintf(__("NAB error whilst adding CRN: code %s - %s. PAYMENT NOT PROCESSED!", 'wc-nab'), $response->rescode, $response->restext) );
					}
				}
				
				// It's possible we just processed a change of payment method, not a proper order
		        // so we might want to just go back to the My Account page
		        if (isset($_GET['is_payment_change']) && $_GET['is_payment_change'] == '1') {
		        	wp_redirect(get_permalink( woocommerce_get_page_id( 'myaccount' ) ));
		        } else {
		        	wp_redirect( $this->get_return_url( $order ) );
		        }
				exit;

			}
			wp_redirect( $this->get_return_url() );
			exit;
		}