stripe elements form submits a payment to stripe api

This commit is contained in:
Rimian Perkins 2017-02-16 16:29:42 +11:00
parent e1778d6bd8
commit de9a5cb6f9
9 changed files with 117 additions and 66 deletions

View File

@ -0,0 +1,29 @@
module DiscoursePayments
class ChargesController < ActionController::Base
skip_before_filter :verify_authenticity_token, only: [:create]
def create
# badge = Badge.find_by_name('Consumer Defender')
#
# if badge.nil?
# head 422 and return
# end
customer = Stripe::Customer.create(
:email => 'joe@example.com',
:source => params[:stripeToken]
)
charge = Stripe::Charge.create(
:customer => customer.id,
:amount => 1001,
:description => 'Consumer Defender',
:currency => 'aud'
)
# BadgeGranter.grant(badge, current_user)
render :json => { status: 'OK' }
end
end
end

View File

@ -7,29 +7,5 @@ module DiscoursePayments
def show
render json: {}
end
def create
# badge = Badge.find_by_name('Consumer Defender')
#
# if badge.nil?
# head 422 and return
# end
# customer = Stripe::Customer.create(
# :email => params[:stripeEmail],
# :source => params[:stripeToken]
# )
charge = Stripe::Charge.create(
:customer => 'x',
:amount => 1001,
:description => 'Consumer Defender',
:currency => 'aud'
)
# BadgeGranter.grant(badge, current_user)
render :json => { status: 'OK' }
end
end
end

View File

@ -1,3 +1,5 @@
<!--
<div class="payments">
{{username}}
</div>
@ -9,3 +11,73 @@
{{#if saved}}
<div class="payment-response">Response happens</div>
{{/if}}
-->
<form action="/charges" method="post" id="payment-form" style="width: 300px;">
<div class="form-row">
<label>
<span>Card</span>
<div id="card-element">
<!-- a Stripe Element will be inserted here. -->
</div>
</label>
</div>
<div id="payment-errors"></div>
<input type="submit" class="submit" value="Submit Payment">
</form>
<script>
$(document).ready(function() {
var stripe = Stripe('pk_test_b8RmhzlL8QPizJRqOrKF3JEV');
var elements = stripe.elements();
var card = elements.create('card');
// Add an instance of the card Element into the `card-element`
card.mount('#card-element');
card.addEventListener('change', function(event) {
var displayError = document.getElementById('payment-errors');
if (event.error) {
displayError.textContent = event.error.message;
}
});
// Create a token or display an error the form is submitted.
var form = document.getElementById('payment-form');
form.addEventListener('submit', function(event) {
event.preventDefault();
stripe.createToken(card).then(function(result) {
if (result.error) {
// Inform the user if there was an error
var errorElement = document.getElementById('payment-errors');
errorElement.textContent = result.error.message;
} else {
// Send the token to your server
stripeTokenHandler(result.token);
}
});
});
function stripeTokenHandler(token) {
// Insert the token ID into the form so it gets submitted to the server
var form = document.getElementById('payment-form');
var hiddenInput = document.createElement('input');
hiddenInput.setAttribute('type', 'hidden');
hiddenInput.setAttribute('name', 'stripeToken');
hiddenInput.setAttribute('value', token.id);
form.appendChild(hiddenInput);
form.submit();
}
});
</script>

View File

@ -1,4 +1,4 @@
DiscoursePayments::Engine.routes.draw do
resources :payments, only: [:create]
resources :charges, only: [:create]
get 'users/:username/payments' => 'payments#show'
end

View File

@ -6,6 +6,7 @@
gem 'stripe', '1.58.0'
load File.expand_path('../lib/discourse_payments/engine.rb', __FILE__)
load File.expand_path('../config/stripe.rb', __FILE__)
Discourse::Application.routes.prepend do
mount ::DiscoursePayments::Engine, at: '/'

View File

@ -0,0 +1,13 @@
require 'rails_helper'
module DiscoursePayments
RSpec.describe ChargesController, type: :controller do
routes { DiscoursePayments::Engine.routes }
#
it 'responds with ok' do
skip 'need to get fixtures'
post :create
expect(response).to have_http_status(200)
end
end
end

View File

@ -3,10 +3,5 @@ require 'rails_helper'
module DiscoursePayments
RSpec.describe PaymentsController, type: :controller do
routes { DiscoursePayments::Engine.routes }
#
it 'responds with ok' do
post :create
expect(response).to have_http_status(200)
end
end
end

View File

@ -1,21 +1,5 @@
import { acceptance } from 'helpers/qunit-helpers';
acceptance('Discourse Payments', {
loggedIn: true,
setup() {
const response = (object) => {
return [
200,
{"Content-Type": "application/json"},
object
];
};
server.post('/payments', () => {
return response({ });
});
}
}
);
acceptance('Discourse Payments', { loggedIn: true });
test('Payments Link Exists', () => {
visit('/users/eviltrout');
@ -24,22 +8,3 @@ test('Payments Link Exists', () => {
ok(exists('.discourse-payments > a'), 'Link exists on profile page');
});
});
test('Payments Page Exists', () => {
visit('/users/eviltrout/payments');
andThen(() => {
ok(exists('h1'), 'Heading exists');
ok($.trim($('.payments').text()) == 'eviltrout', 'username is present on page');
});
});
test('Payments Page response happens', () => {
visit('/users/eviltrout/payments');
click('.payment-btn');
andThen(() => {
ok(exists('.payment-response'), 'Response happens');
});
});