コード例 #1
0
 /**
  * Pay Retail Commission
  *
  * Used by Commission Sqs Queue to pay commissions
  *
  * @param $commission
  * @param null $queue_message
  * @see PayCommissionTask
  * @see CommissionSqsShell
  * @see QueueCommissionsTask
  * @return bool|mixed|stdClass
  */
 public function payRetailCommission($commission, &$queue_message = null)
 {
     $config = array();
     $config_file = parse_ini_file("/etc/younique/payquicker.ini", true);
     $address = $this->Presenter->loadAddressDetails($commission['presenter_id']);
     $state_code = $address['User']['Address']['State']['abbrev'];
     $country_code = $address['User']['Address']['Country']['country_code'];
     $us_domestic = FALSE;
     switch ($commission['currency']) {
         case 'USD':
             if (in_array($state_code, $this->us_territories)) {
                 $config['payquicker'] = $config_file['USD_INT'];
             } else {
                 $config['payquicker'] = $config_file['USD_DOM'];
             }
             $us_domestic = TRUE;
             break;
         case 'CAD':
             $config['payquicker'] = $config_file['CAD'];
             break;
         case 'AUD':
             $config['payquicker'] = $config_file['AUD'];
             break;
         case 'NZD':
             //NZD Gets paid from the USD international account
             $config['payquicker'] = $config_file['NZD'];
             break;
         case 'GBP':
             $config['payquicker'] = $config_file['GBP'];
             break;
         case 'EUR':
             $config['payquicker'] = $config_file['EUR'];
             break;
         case 'MXN':
             $config['payquicker'] = $config_file['MXN'];
             break;
         default:
             // this should never happen
             $this->apiLog("royalties_earned.id", $commission['id'], "RoyaltiesEarned->payRetailCommission", "PayQuicker API", var_export($commission, true), "", "Could not load config for this currency", 1);
             error_log("Could not load config for this currency");
             return FALSE;
             break;
     }
     $this->Presenter->RoyaltiesEarned->id = $commission['id'];
     //Withhold appropriate taxes:
     switch ($commission['market_id']) {
         case 6:
             //Mexico
             $commission = $this->withholdMexicoTaxes($commission);
             break;
         case 8:
             //France
             $payFr = $this->payFranceCommissions($commission['presenter_id']);
             if (strtoupper($payFr) == 'VDI') {
                 $commission = $this->withholdFranceTaxes($commission);
             }
             break;
         default:
             break;
     }
     App::uses("PayquickerAPI", "Lib");
     $royalties_withheld = $this->Presenter->getDynamicData($commission['presenter_id'], 'royalties_withheld');
     if (isset($royalties_withheld[0]) && $royalties_withheld[0]['value'] == 1) {
         $this->Presenter->RoyaltiesEarned->saveField("reference_id", 'Royalties_Withheld');
         return 'Royalties_Withheld';
     }
     $dateEarned = $commission['date_earned'];
     $dateExpires = date("m/d/Y", strtotime("next year", strtotime($dateEarned)));
     $orderId = $commission['order_id'];
     $payeeName = $commission['first_name'];
     $recipientEmail = $commission['payquickeremail'];
     $paymentObject = array("authorizedKey" => $config['payquicker']['authorizedKey'], "senderEmail" => $config['payquicker']["senderEmail"], "recipientEmail" => $recipientEmail, "amount" => $commission['amount'], "comment" => "Hi {$payeeName}, This is your retail royalty for order #{$orderId}.  Congratulations! We are proud of your online success.", "expirationDate" => $dateExpires, "forceDebitCard" => $commission['forceCard'], "accountingId" => $orderId, "currency" => $commission['currency'], "countryCode" => $country_code);
     if ($us_domestic === TRUE) {
         $paymentObject['stateCode'] = $state_code;
     }
     $this->Presenter->RoyaltiesEarned->saveField("date_attempted", date("Y-m-d H:i:s"));
     /**
      * Empty amounts should not be tried against payquicker
      * and are set to paid status
      */
     if (empty($paymentObject['amount'])) {
         $this->Presenter->RoyaltiesEarned->saveField("date_paid", date("Y-m-d H:i:s"));
         $this->Presenter->RoyaltiesEarned->saveField("royalty_status_id", RoyaltiesEarned::STATUS_IS_PAID);
         return true;
     }
     if (YOUNIQUE_TESTSERVER === true) {
         $response = new stdClass();
         $response->success = true;
         $response->reference = 'QATesting:' . $commission['order_id'];
     } else {
         $response = PayquickerAPI::call("instantPayment", $paymentObject);
     }
     if ($response->success == true) {
         $this->Presenter->RoyaltiesEarned->saveField("date_paid", date("Y-m-d H:i:s"));
         $this->Presenter->RoyaltiesEarned->saveField("reference_id", $response->reference);
         $this->Presenter->RoyaltiesEarned->saveField("royalty_status_id", RoyaltiesEarned::STATUS_IS_PAID);
     } else {
         /**
          * If error is duplicate update royalties earned data
          * if it is not already set.
          */
         if (!empty($response) && isset($response->status)) {
             if ($response->status == 'Duplicate') {
                 $duplicate = $this->find('first', ['conditions' => ['RoyaltiesEarned.id' => $commission['id']]]);
                 if (empty($duplicate['RoyaltiesEarned']['date_paid'])) {
                     $this->Presenter->RoyaltiesEarned->saveField("date_paid", date("Y-m-d H:i:s"));
                 }
                 if (empty($duplicate['RoyaltiesEarned']['reference_id'])) {
                     $this->Presenter->RoyaltiesEarned->saveField("reference_id", $response->reference);
                 }
                 if (empty($duplicate['RoyaltiesEarned']['royalty_status_id'])) {
                     $this->Presenter->RoyaltiesEarned->saveField("royalty_status_id", RoyaltiesEarned::STATUS_IS_PAID);
                 }
                 return true;
             }
         }
         /**
          * Send pay quicker error only once
          */
         if (!empty($queue_message) && empty($queue_message['failure'])) {
             $queue_message['failure'] = $response;
             // Remove the key since this is going into an email
             unset($paymentObject['authorizedKey']);
             $message_body = "There was an error posting a retail commission, here are the details:\n\n" . var_export($paymentObject, true) . "\n\nHere is the response we got:\n\n" . var_export($response, true);
             SNS::sendSNS('PayQuicker_Issues', "Failure to Pay Retail Commission [{$recipientEmail}]", $message_body);
         }
         /**
          * Return true status on state code failure
          * so queue will not retry it.
          */
         if (!empty($response) && isset($response->errorMessage)) {
             if ($response->errorMessage == 'stateCode is Required.') {
                 return true;
             }
         }
         return false;
     }
     return $response;
 }
コード例 #2
0
 /**
  * @deprecated
  * */
 public function admin_payCommission($commissionId)
 {
     App::uses("PayquickerAPI", "Lib");
     $commission = $this->Presenter->RoyaltiesEarned->find("first", array("contain" => array("Presenter" => array("User" => array("RoyaltiesEmail"))), "conditions" => array("RoyaltiesEarned.id" => $commissionId, "RoyaltiesEarned.date_paid is null", "RoyaltiesEarned.date_attempted is null")));
     if ($commissionId != $commission['RoyaltiesEarned']['id']) {
         $this->sendError("404", "Invalid Commission");
     } else {
         $this->Presenter->RoyaltiesEarned->id = $commissionId;
         $this->Presenter->RoyaltiesEarned->saveField("date_attempted", date('Y-m-d h:i:s'));
         //Now I need to check if the payquicker email works
         $payquickerEmail = $commission['Presenter']['User']['RoyaltiesEmail']['email'];
         $dateEarned = $commission['RoyaltiesEarned']['date_earned'];
         $dateExpires = date("m/d/Y", strtotime("next year", strtotime($dateEarned)));
         $orderId = $commission['RoyaltiesEarned']['order_id'];
         $payeeName = $commission['Presenter']['User']['first_name'];
         //Withhold appropriate taxes:
         switch ($commission['RoyaltiesEarned']['market_id']) {
             case 6:
                 //Mexico
                 $commission = $this->withholdMexicoTaxes($commission);
                 break;
             default:
                 break;
         }
         //Gotta go see what we actually need to pay
         $amountToPay = $commission['RoyaltiesEarned']['amount'];
         $config = parse_ini_file("/etc/younique/configuration.ini", true);
         $paymentObject = array("authorizedKey" => $config['payquicker']['authorizedKey'], "senderEmail" => $config['payquicker']["senderEmail"], "recipientEmail" => $payquickerEmail, "amount" => $amountToPay, "comment" => "Hi {$payeeName}, This is your retail royalty for order #{$orderId}.  Congratulations!  We are proud of your online success.", "expirationDate" => $dateExpires, "accountingId" => $orderId);
         $response = PayquickerAPI::call("instantPayment", $paymentObject);
         if (YOUNIQUE_TESTSERVER === true) {
             $response->success = true;
         }
         if ($response->success === true) {
             $this->Presenter->RoyaltiesEarned->saveField("date_paid", date('Y-m-d h:i:s'));
             $this->Presenter->RoyaltiesEarned->saveField("reference_id", $response->reference);
             $this->sendSuccess(DruniqueAPIUtil::content('Processed', $this->DruniqueAPI->page_data));
         } else {
             $this->sendError(500, DruniqueAPIUtil::content('We were not able to process this payment', $this->DruniqueAPI->page_data));
         }
     }
 }