function __invoke(DelayedOrRepeatTransaction $delayedTxn, Basket $basket) { $delayedSuccessOutput = (array) $delayedTxn; #unset( $delayedSuccessOutput[ 'validationError' ] ); // This *is* set on the delayed TXN because it's the time the customer was created $delayedSuccessOutput['time'] = null; ksort($delayedSuccessOutput); if ($delayedTxn->providerClass == "\\PatternSeek\\ECommerce\\Stripe") { $creds = ["apiPrivKey" => "dummy_api_key"]; $finalTxn = $delayedTxn->charge($creds); $finalTxnOutput = (array) $finalTxn; unset($finalTxnOutput['validationError']); $finalTxnOutput['time'] = null; ksort($finalTxnOutput); } else { throw new \Exception("Txn provider should be Stripe"); } $out = ['delayedTxn' => $delayedSuccessOutput, 'actualTxn' => $finalTxnOutput]; krsort($out); return new Response("text/plain", var_export($out, true)); }
/** * @param array $credentials * @param DelayedOrRepeatTransaction $delayedTxn * @return \PatternSeek\ComponentView\Response * @throws \Exception */ public static function chargeDelayedOrRepeatPaymentTransaction($credentials, DelayedOrRepeatTransaction $delayedTxn) { $stripe = new StripeFacade(); $stripe->setApiKey($credentials['apiPrivKey']); $charge = $stripe->chargeCreate(["amount" => $delayedTxn->transactionAmount * 100, "currency" => $delayedTxn->transactionCurrency, "description" => $delayedTxn->transactionDescription, "customer" => $delayedTxn->storedToken]); /** @var Transaction $finalTxn */ $finalTxn = Transaction::fromArray($delayedTxn->toArray(), true); $finalTxn->chargeID = $charge->id; $finalTxn->time = time(); try { $finalTxn->validate(); } catch (\Exception $e) { $finalTxn->validationError = $e->getMessage(); } return $finalTxn; }
/** * @param DelayedOrRepeatTransaction $txn * @return Response */ public function delayedTransactionSuccess(DelayedOrRepeatTransaction $txn) { $this->state->complete = true; $txn->time = time(); try { $txn->validate(); } catch (\Exception $e) { $txn->validationError = $e->getMessage(); } $this->state->successMessage = $this->state->delayedTransactionSuccessCallback->__invoke($txn, $this)->content; // Render full component, including parent of basket, if any. $root = $this->getRootComponent(); $root->updateState(); return $root->render(); }