protected function setupWePay($accountGateway, &$response)
{
$user = Auth::user();
$account = $user->account;
$rules = ['company_name' => 'required', 'tos_agree' => 'required', 'first_name' => 'required', 'last_name' => 'required', 'email' => 'required'];
if (WEPAY_ENABLE_CANADA) {
$rules['country'] = 'required|in:US,CA';
}
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('gateways/create')->withErrors($validator)->withInput();
}
try {
$wepay = Utils::setupWePay();
$userDetails = ['client_id' => WEPAY_CLIENT_ID, 'client_secret' => WEPAY_CLIENT_SECRET, 'email' => Input::get('email'), 'first_name' => Input::get('first_name'), 'last_name' => Input::get('last_name'), 'original_ip' => \Request::getClientIp(true), 'original_device' => \Request::server('HTTP_USER_AGENT'), 'tos_acceptance_time' => time(), 'redirect_uri' => URL::to('gateways'), 'scope' => 'manage_accounts,collect_payments,view_user,preapprove_payments,send_money'];
$wepayUser = $wepay->request('user/register/', $userDetails);
$accessToken = $wepayUser->access_token;
$accessTokenExpires = $wepayUser->expires_in ? time() + $wepayUser->expires_in : null;
$wepay = new WePay($accessToken);
$accountDetails = ['name' => Input::get('company_name'), 'description' => trans('texts.wepay_account_description'), 'theme_object' => json_decode(WEPAY_THEME), 'callback_uri' => $accountGateway->getWebhookUrl()];
if (WEPAY_ENABLE_CANADA) {
$accountDetails['country'] = Input::get('country');
if (Input::get('country') == 'CA') {
$accountDetails['currencies'] = ['CAD'];
$accountDetails['country_options'] = ['debit_opt_in' => boolval(Input::get('debit_cards'))];
}
}
$wepayAccount = $wepay->request('account/create/', $accountDetails);
try {
$wepay->request('user/send_confirmation/', []);
$confirmationRequired = true;
} catch (\WePayException $ex) {
if ($ex->getMessage() == 'This access_token is already approved.') {
$confirmationRequired = false;
} else {
throw $ex;
}
}
$accountGateway->gateway_id = GATEWAY_WEPAY;
$accountGateway->setConfig(['userId' => $wepayUser->user_id, 'accessToken' => $accessToken, 'tokenType' => $wepayUser->token_type, 'tokenExpires' => $accessTokenExpires, 'accountId' => $wepayAccount->account_id, 'state' => $wepayAccount->state, 'testMode' => WEPAY_ENVIRONMENT == WEPAY_STAGE, 'country' => WEPAY_ENABLE_CANADA ? Input::get('country') : 'US']);
if ($confirmationRequired) {
Session::flash('message', trans('texts.created_wepay_confirmation_required'));
} else {
$updateUri = $wepay->request('/account/get_update_uri', ['account_id' => $wepayAccount->account_id, 'redirect_uri' => URL::to('gateways')]);
$response = Redirect::to($updateUri->uri);
return true;
}
$response = Redirect::to("gateways/{$accountGateway->public_id}/edit");
return true;
} catch (\WePayException $e) {
Session::flash('error', $e->getMessage());
$response = Redirect::to('gateways/create')->withInput();
return false;
}
}