コード例 #1
0
 function setSubscription()
 {
     global $user_ID;
     if (class_exists('WPSC_Subscription')) {
         $sub = new WPSC_Subscription($user_ID);
     }
     foreach ($this->cart_items as $itemIndex => $item) {
         if (isset($item['is_recurring']) && (int) $item['is_recurring'] > 0) {
             //If you already have a subscription then pass
             $subscription = new AuthorizeNet_Subscription();
             //If there is a predefined interval set it
             if (isGood($item['recurring_data']['rebill_interval']['unit']) && isGood($item['recurring_data']['rebill_interval']['length'])) {
                 $unit = $item['recurring_data']['rebill_interval']['unit'];
                 $length = $item['recurring_data']['rebill_interval']['length'];
                 if ($unit == 'month') {
                     $unit = 'months';
                 } elseif ($unit == 'days') {
                     $unit = 'days';
                 } elseif ($unit == 'week') {
                     $length = $length * 7;
                     $unit = 'days';
                 } elseif ($unit == 'year') {
                     $length = $length * 12;
                     $unit = 'months';
                 }
                 $subscription->intervalUnit = $unit;
                 $subscription->intervalLength = $length;
             }
             //Set rebill design
             if (isset($item['recurring_data']['charge_to_expiry']) && (int) $item['recurring_data']['charge_to_expiry'] > 0) {
                 //we bill forever, set the totalOccurences to 9999
                 $subscription->totalOccurrences = 9999;
             } elseif (isset($item['recurring_data']['times_to_rebill']) && (int) $item['recurring_data']['times_to_rebill'] > 0) {
                 //Only a specified ammount of times
                 $subscription->totalOccurrences = (int) $item['recurring_data']['times_to_rebill'];
             } else {
                 $subscription->totalOccurrences = 1;
             }
             //Always set the start date to today
             $subscription->startDate = date('Y-m-d');
             $subscription->amount = $item['price'] * $item['quantity'] + $item['tax'] + $item['shipping'];
             $amount = $subscription->amount;
             if (isGood($item['name'])) {
                 $subscription->name = $item['name'];
             }
             //Set the billing info
             if (isGood($this->cart_data['billing_address']['first_name'])) {
                 $subscription->billToFirstName = $this->cart_data['billing_address']['first_name'];
             }
             if (isGood($this->cart_data['billing_address']['last_name'])) {
                 $subscription->billToLastName = $this->cart_data['billing_address']['last_name'];
             }
             if (isGood($this->cart_data['billing_address']['address'])) {
                 $subscription->billToAddress = $this->cart_data['billing_address']['address'];
             }
             if (isGood($this->cart_data['billing_address']['city'])) {
                 $subscription->billToCity = $this->cart_data['billing_address']['city'];
             }
             if (isGood($this->cart_data['billing_address']['state'])) {
                 $subscription->billToState = $this->cart_data['billing_address']['state'];
             }
             if (isGood($this->cart_data['billing_address']['post_code'])) {
                 $subscription->billToZip = $this->cart_data['billing_address']['post_code'];
             }
             if (isGood($this->cart_data['billing_address']['country'])) {
                 $subscription->billToCountry = $this->cart_data['billing_address']['country'];
             }
             if (isGood($this->cart_data['email_address'])) {
                 $subscription->customerEmail = $this->cart_data['email_address'];
             }
             $subscription->customerId = $user_ID;
             //Trying to figure out how to set this
             //$subscription->customerPhoneNumber = $item[''];
             if (isGood($_REQUEST['payType']) && ($_REQUEST['payType'] = 'creditCardForms')) {
                 $ccInfo = $_REQUEST['auth_net']['creditCard'];
                 $subscription->creditCardCardNumber = $ccInfo['card_number'];
                 $subscription->creditCardExpirationDate = $ccInfo['expiry']['year'] . '-' . $ccInfo['expiry']['month'];
                 $subscription->creditCardCardCode = $ccInfo['card_code'];
             } elseif (isGood($_REQUEST['payType']) && ($_REQUEST['payType'] = 'checkForms')) {
                 $bInfo = $_REQUEST['auth_net']['bankAccount'];
                 $subscription->bankAccountAccountType = $bInfo['account_type'];
                 $subscription->bankAccountRoutingNumber = $bInfo['routing_number'];
                 $subscription->bankAccountAccountNumber = $bInfo['account_number'];
                 $subscription->bankAccountNameOnAccount = $bInfo['name_on_account'];
                 //$subscription->bankAccountEcheckType = "";
                 $subscription->bankAccountBankName = $bInfo['bank_name'];
             } else {
                 //TODO return if payment data is bad
             }
             $request = new AuthorizeNetARB();
             //Create a unique refid so if there are multiple subscriptions everything works out ok
             $refid = $this->cart_data['session_id'] . '-' . $item['cart_item_id'];
             $request->setRefId($refid);
             $this->response = $request->createSubscription($subscription);
             $this->response->transaction_id = $this->cart_data['session_id'];
             if ($this->response->isOk()) {
                 //This created subscription;
                 $this->response->authorization_code = $this->response->getSubscriptionId();
                 $subscriptionId = $this->response->getSubscriptionId();
                 $end = strtotime($length . ' ' . $unit);
                 $sub->saveSubscriptionMeta(array('purchase_id' => $this->purchase_id, 'producti_d' => $item['product_id'], 'ref_id' => $refid, 'subscription_id' => $this->response->getSubscriptionId(), 'startTime' => time(), 'endTime' => $end));
                 //If we setup the transaction and it worked, remove it from the cart
                 //if their are more subscriptions the foreach will catch the reset of them
                 //If there are other items non-subscription based this loop finishes and returns true
                 //THe submit function will then continue to see if it needs to do anything else.
                 unset($this->cart_items[$itemIndex]);
                 //Remove this ammount from cart_data['total_price'] & tax
                 $this->cart_data['total_price'] = $this->cart_data['total_price'] - $amount;
                 $this->cart_data['cart_tax'] = $this->cart_data['cart_tax'] - $item['tax'];
             } else {
                 //error occured, bailing back to checkout stand
                 $this->set_transaction_details($this->cart_data['session_id'], 6);
                 $this->set_error_message(__('Failed to Authorize the Subscription', 'wpsc_gold_cart'));
                 $this->return_to_checkout();
                 return false;
             }
         }
     }
     return true;
 }
コード例 #2
0
 public function testCreateSubscriptionECheck()
 {
     $subscription = new AuthorizeNet_Subscription();
     $subscription->name = "my test echeck subscription";
     $subscription->intervalLength = "1";
     $subscription->intervalUnit = "months";
     $subscription->startDate = "2015-04-12";
     $subscription->totalOccurrences = "2";
     $subscription->trialOccurrences = "";
     $subscription->amount = "11.99";
     $subscription->trialAmount = "";
     $subscription->bankAccountAccountType = "checking";
     $subscription->bankAccountRoutingNumber = "121000248";
     $subscription->bankAccountAccountNumber = "12345678";
     $subscription->bankAccountNameOnAccount = "John Doe";
     $subscription->bankAccountEcheckType = "WEB";
     $subscription->bankAccountBankName = "Bank of Earth";
     $subscription->orderInvoiceNumber = "";
     $subscription->orderDescription = "";
     $subscription->customerId = "12";
     $subscription->customerEmail = "*****@*****.**";
     $subscription->customerPhoneNumber = "";
     $subscription->customerFaxNumber = "";
     $subscription->billToFirstName = "john";
     $subscription->billToLastName = "doe";
     $subscription->billToCompany = "";
     $subscription->billToAddress = "";
     $subscription->billToCity = "";
     $subscription->billToState = "";
     $subscription->billToZip = "";
     $subscription->billToCountry = "";
     $subscription->shipToFirstName = "";
     $subscription->shipToLastName = "";
     $subscription->shipToCompany = "";
     $subscription->shipToAddress = "";
     $subscription->shipToCity = "";
     $subscription->shipToState = "";
     $subscription->shipToZip = "";
     $subscription->shipToCountry = "";
     $refId = "ref" . time();
     // Create the request and send it.
     $request = new AuthorizeNetARB();
     $request->setRefId($refId);
     $response = $request->createSubscription($subscription);
     // Handle the response.
     $this->assertTrue($response->isOk());
     $this->assertEquals($response->getMessageCode(), "I00001");
     $this->assertEquals($response->getMessageText(), "Successful.");
     $this->assertEquals($response->getRefId(), $refId);
     $this->assertEquals($response->getResultCode(), "Ok");
     // Cancel the subscription to avoid duplicate errors in future
     $cancellation = new AuthorizeNetARB();
     $cancellation->setRefId($refId);
     $cancel_response = $cancellation->cancelSubscription($response->getSubscriptionId());
     $this->assertTrue($cancel_response->isOk());
 }
コード例 #3
0
 function onTP_Processpayment_recurring($data)
 {
     $order_id = $data['order_id'];
     require_once dirname(__FILE__) . '/authorizenet/lib/AuthorizeNet.php';
     $auth_net_login_id = $this->params->get('login_id', '1');
     $auth_net_tran_key = $this->params->get('tran_key', '1');
     $plgPaymentAuthorizenetHelper = new plgPaymentAuthorizenetHelper();
     $auth_net_url = $plgPaymentAuthorizenetHelper->buildAuthorizenetUrl();
     $auth_net_url;
     $DEBUGGING = 1;
     # Display additional information to track down problems
     $TESTING = 1;
     # Set the testing flag so that transactions are not live
     $ERROR_RETRIES = 2;
     # Number of transactions to post if soft errors occur
     $exp_date = explode('-', $data['expirationDate']);
     $data['expirationDate'] = $exp_date[1] . "-" . $exp_date[0];
     define("AUTHORIZENET_API_LOGIN_ID", $auth_net_login_id);
     define("AUTHORIZENET_TRANSACTION_KEY", $auth_net_tran_key);
     $subscription = new AuthorizeNet_Subscription();
     $subscription->name = $data['sub_name'];
     $subscription->intervalLength = $data['intervalLength'];
     $subscription->intervalUnit = $data['intervalUnit'];
     $subscription->startDate = $data['startDate'];
     $subscription->totalOccurrences = $data['totalOccurrences'];
     $subscription->amount = $data['amount'];
     $subscription->orderInvoiceNumber = $data['order_id'];
     $subscription->creditCardCardNumber = $data['cardNumber'];
     $subscription->creditCardExpirationDate = $data['expirationDate'];
     $subscription->creditCardCardCode = $data['cardcode'];
     $subscription->billToFirstName = $data['firstName'];
     $subscription->billToLastName = $data['lastName'];
     $subscription->billToAddress = $data['cardaddress1'];
     $subscription->billToCity = $data['cardcity'];
     $subscription->billToState = $data['cardstate'];
     $subscription->billToZip = $data['cardzip'];
     // Create the subscription.
     $request = new AuthorizeNetARB();
     $refId = $subscription->orderInvoiceNumber;
     $request->setRefId($refId);
     $testmode = $this->params->get('sandbox', '1');
     if ($testmode == 0) {
         $request->setSandbox(false);
         //turn OFF sandbox
     } else {
         $request->setSandbox(true);
         //turn ON sandbox
     }
     $response = $request->createSubscription($subscription);
     $subscription_id = $response->getSubscriptionId();
     $error = "";
     if ($response->xml->messages->resultCode != 'Ok') {
         $payment_status = "P";
         $error = JText::_('AUTH_SUB_FAIL') . $response->xml->messages->message->text;
     } else {
         $payment_status = "C";
         $success = JText::_('AUTH_SUB_SUCCESS') . $subscription_id;
     }
     $result = array('transaction_id' => $refId, 'subscription_id' => $subscription_id, 'order_id' => $data['order_id'], 'status' => $payment_status, 'total_paid_amt' => $data['amount'], 'raw_data' => $response, 'payment_type' => 'recurring', 'error' => $error, 'success' => $success, 'return' => $data['return']);
     return $result;
 }
コード例 #4
0
 function process_subscription($item, $data, $config)
 {
     //Check for subscriptions
     $sub = array();
     if (!defined('AUTHORIZENET_API_LOGIN_ID')) {
         define("AUTHORIZENET_API_LOGIN_ID", $config["x_login"]);
         define("AUTHORIZENET_TRANSACTION_KEY", $config["x_tran_key"]);
     }
     $unit = $item["subscription"]["period"] == 1 ? 'days' : 'months';
     $member_id = $this->EE->session->userdata["member_id"];
     $email = $this->EE->session->userdata["email"];
     // Set the start date
     $start_dt = date('Y-m-d', strtotime('+' . $item["subscription"]["length"] . ' ' . $unit));
     // Check if there is a trial subscription
     $price = $item["subscription"]["price"];
     $renewal_price = $item["subscription"]["price"];
     unset($item["subscription"]["price"]);
     $trial_occur = "";
     $trial_price = "";
     if ($item["subscription"]["trial_occur"] > 1) {
         // reduce the trial occurrences by one since we
         // already gave them the discount on the first
         // payment
         $occur = $item["subscription"]["trial_occur"] - 1;
         if ($occur >= 1) {
             #$renewal_price = $item["subscription"]["trial_price"];
             $trial_occur = $occur;
             $trial_price = $item["subscription"]["trial_price"];
         }
     }
     $subscription = new AuthorizeNet_Subscription();
     $subscription->name = $item["title"];
     $subscription->intervalLength = $item["subscription"]["length"];
     $subscription->intervalUnit = $unit;
     $subscription->startDate = $start_dt;
     $subscription->totalOccurrences = 9999;
     $subscription->trialOccurrences = $trial_occur;
     $subscription->amount = $price;
     $subscription->trialAmount = $trial_price;
     $subscription->creditCardCardNumber = $data["autho_cc_num"];
     $subscription->creditCardExpirationDate = $data["autho_cc_year"] . '-' . $data["autho_cc_month"];
     $subscription->creditCardCardCode = $data["autho_cc_code"];
     $subscription->orderInvoiceNumber = $data["order_id"];
     $subscription->orderDescription = "";
     $subscription->customerId = $member_id;
     $subscription->customerEmail = $email;
     $subscription->customerPhoneNumber = $data["br_billing_phone"];
     $subscription->billToFirstName = $data["br_billing_fname"];
     $subscription->billToLastName = $data["br_billing_lname"];
     $subscription->billToCompany = $data["br_billing_company"];
     $subscription->billToAddress = $data["br_billing_address1"] . ' ' . $data["br_billing_address2"];
     $subscription->billToCity = $data["br_billing_city"];
     $subscription->billToState = $data["br_billing_state"];
     $subscription->billToZip = $data["br_billing_zip"];
     $subscription->billToCountry = $data["br_billing_country"];
     $subscription->shipToFirstName = $data["br_shipping_fname"];
     $subscription->shipToLastName = $data["br_shipping_lname"];
     $subscription->shipToCompany = $data["br_shipping_company"];
     $subscription->shipToAddress = $data["br_shipping_address1"] . ' ' . $data["br_shipping_address2"];
     $subscription->shipToCity = $data["br_shipping_city"];
     $subscription->shipToState = $data["br_shipping_state"];
     $subscription->shipToZip = $data["br_shipping_zip"];
     $subscription->shipToCountry = $data["br_shipping_country"];
     $refId = "ref" . time();
     // Create the request and send it.
     $request = new AuthorizeNetARB();
     // do we need to process in sandbox mode
     if (array_key_exists("x_test_request", $config) && $config["x_test_request"] == 'FALSE') {
         $request->setSandbox(FALSE);
     }
     $request->setRefId($refId);
     $response = $request->createSubscription($subscription);
     $item["subscription"]["code"] = (string) $response->xml->refId;
     $item["subscription"]["status_id"] = 1;
     $item["subscription"]["result"] = (string) $response->xml->messages->resultCode;
     $item["subscription"]["message"] = (string) $response->xml->messages->message->text;
     $item["subscription"]["subscription_id"] = (int) $response->xml->subscriptionId;
     $item["subscription"]["renewal_price"] = $renewal_price;
     $item["subscription"]["trial_occur"] = $trial_occur;
     $item["subscription"]["trial_price"] = $trial_price;
     $item["subscription"]["next_renewal"] = $start_dt;
     $item["subscription"]["cc_last_four"] = substr($data["autho_cc_num"], -4, 4);
     $item["subscription"]["cc_month"] = $data["autho_cc_month"];
     $item["subscription"]["cc_year"] = $data["autho_cc_year"];
     return $item["subscription"];
 }
コード例 #5
0
 /**
  * function to create subscription
  * @param array $requestData form data
  * @param int $userId user id
  * @author Gaurav Bhandari
  */
 public function createSubscription($requestData, $userId)
 {
     //Create Subscription
     $subscription = new AuthorizeNet_Subscription();
     $subscription->name = $requestData['User']['user_email'];
     $subscription->intervalLength = "1";
     $subscription->intervalUnit = "months";
     $subscription->startDate = date('Y-m-d', time());
     $subscription->totalOccurrences = "999";
     $subscription->amount = $requestData['BusinessOwner']['memberShipPrice'];
     $subscription->creditCardCardNumber = $requestData['BusinessOwner']['CC_Number'];
     $subscription->creditCardExpirationDate = $requestData['BusinessOwner']['expiration'];
     $subscription->creditCardCardCode = $requestData['BusinessOwner']['cvv'];
     $subscription->billToFirstName = $requestData['BusinessOwner']['fname'];
     $subscription->billToLastName = $requestData['BusinessOwner']['lname'];
     $request = new AuthorizeNetARB();
     $response = $request->createSubscription($subscription);
     $subscriptionData['subscription_id'] = $response->getSubscriptionId();
     $subscriptionData['user_id'] = $userId;
     $monthChange = date('m') + 1;
     if ($monthChange <= 12) {
         $subscriptionData['next_subscription_date'] = date('Y-' . $monthChange . '-d');
     } else {
         $monthChange = 1;
         $year = date('Y') + 1;
         $subscriptionData['next_subscription_date'] = date($year . '-' . $monthChange . '-d');
     }
     $subscriptionData['transaction_id'] = $requestData['Subscription']['transaction_id'];
     $this->Subscription->create();
     $this->Subscription->save($subscriptionData);
 }
コード例 #6
0
 private function process_recurring(&$payment)
 {
     $data = $payment->get_data('billing-information');
     $arb = new AuthorizeNetARB(wpbdp_get_option('authorize-net-login-id'), wpbdp_get_option('authorize-net-transaction-key'));
     if (wpbdp_get_option('payments-test-mode')) {
         $arb->setSandbox(true);
     } else {
         $arb->setSandbox(false);
     }
     $recurring_item = $payment->get_recurring_item();
     //wpbdp_debug_e( $recurring_item );
     $s = new AuthorizeNet_Subscription();
     $s->intervalLength = $recurring_item->data['fee_days'];
     $s->intervalUnit = 'days';
     $s->totalOccurrences = '9999';
     $s->startDate = date('Y-m-d', strtotime('+1 day', current_time('timestamp')));
     $s->amount = $recurring_item->amount;
     $s->creditCardCardNumber = $data['cc_number'];
     $s->creditCardExpirationDate = $data['cc_exp_year'] . '-' . $data['cc_exp_month'];
     $s->creditCardCardCode = $data['cc_cvc'];
     $s->billToFirstName = $data['first_name'];
     $s->billToLastName = $data['last_name'];
     $s->billToAddress = $data['address_line1'];
     $s->billToCity = $data['address_city'];
     $s->billToState = $data['address_state'];
     $s->billToCountry = $data['address_country'];
     $s->billToZip = $data['zipcode'];
     $s->orderInvoiceNumber = $payment->get_id();
     $s->orderDescription = $payment->get_short_description();
     // TODO: maybe add zip, phone, email, cust_id.
     $response = $arb->createSubscription($s);
     if (!$response->isOk()) {
         $payment->add_error(_x('Could not process payment.', 'authorize-net', 'WPBDM'));
         $payment->set_status(WPBDP_Payment::STATUS_REJECTED, WPBDP_Payment::HANDLER_GATEWAY);
     } else {
         $subscription_id = $response->getSubscriptionId();
         $payment->set_data('recurring_id', $subscription_id);
         $payment->set_status(WPBDP_Payment::STATUS_COMPLETED, WPBDP_Payment::HANDLER_GATEWAY);
     }
     $payment->save();
     wp_redirect(esc_url_raw($payment->get_redirect_url()));
 }