add anon payments

This commit is contained in:
Rimian Perkins 2017-03-20 12:08:30 +11:00
parent 118d71cfc7
commit 92e5bf76d7
10 changed files with 168 additions and 13 deletions

View File

@ -11,7 +11,7 @@ module DiscourseDonations
currency = SiteSetting.discourse_donations_currency
customer = Stripe::Customer.create(
:email => current_user.email,
:email => params[:email] || current_user.email,
:source => params[:stripeToken]
)

View File

@ -18,6 +18,7 @@ export default Ember.Component.extend({
init() {
this._super();
this.set('anon', (Discourse.User.current() == null));
this.set('settings', getRegister(this).lookup('site-settings:main'));
this.set('stripe', Stripe(this.get('settings').discourse_donations_public_key));
},
@ -51,7 +52,8 @@ export default Ember.Component.extend({
let params = {
stripeToken: data.token.id,
amount: self.get('amount') * 100
amount: self.get('amount') * 100,
email: self.get('email')
};
ajax('/charges', { data: params, method: 'post' }).then(data => {

View File

@ -6,5 +6,5 @@ export default {
};
export default function() {
this.route('stripe');
this.route('dd');
};

View File

@ -15,6 +15,15 @@
<div id="card-element" class="controls"></div>
</div>
{{#if anon}}
<div class="control-group">
<label class="control-label" for="card-element">{{i18n 'user.email.title'}}</label>
<div class="controls">
{{text-field value=email}}
</div>
</div>
{{/if}}
<div class="control-group save-button">
<div class="controls">
{{#d-button action="submitStripeCard" disabled=transactionInProgress class="btn btn-primary btn-payment"}}
@ -32,6 +41,10 @@
</div>
{{#if success}}
<span>{{i18n 'discourse_donations.messages.success'}}</span>
<div class="control-group">
<div class="controls">
<span>{{i18n 'discourse_donations.messages.success'}}</span>
</div>
</div>
{{/if}}
</form>

View File

@ -1,5 +1,3 @@
{{#if currentUser.username}}
<a href="/users/{{currentUser.username}}/payments">
{{i18n 'discourse_donations.nav_item'}}
</a>
{{/if}}
<a href="/dd">
{{i18n 'discourse_donations.nav_item'}}
</a>

View File

@ -0,0 +1,2 @@
<h1>{{i18n 'discourse_donations.title'}}</h1>
{{stripe-card}}

View File

@ -1 +0,0 @@
hello world

View File

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

View File

@ -1,11 +1,16 @@
require 'rails_helper'
require_relative '../../support/dd_helper'
module DiscourseDonations
RSpec.describe ChargesController, type: :controller do
routes { DiscourseDonations::Engine.routes }
#
before do
SiteSetting.stubs(:discourse_donations_secret_key).returns('secret-key-yo')
current_user = log_in(:coding_horror)
end
it 'responds with ok' do
skip 'need to get fixtures'
post :create
expect(response).to have_http_status(200)
end

136
spec/support/dd_helper.rb Normal file
View File

@ -0,0 +1,136 @@
#TODO register some fixtures
FakeWeb.register_uri(:post, 'https://api.stripe.com/v1/customers',
:body => '{
"id": "cus_AJqrL4OU1sffPl",
"object": "customer",
"account_balance": 0,
"created": 1489965018,
"currency": "aud",
"default_source": "card_19zDADEfVxQsvRbHVooMYHqg",
"delinquent": false,
"description": null,
"discount": null,
"email": "jo@example.com",
"livemode": false,
"metadata": {
},
"shipping": null,
"sources": {
"object": "list",
"data": [
{
"id": "card_19zDADEfVxQsvRbHVooMYHqg",
"object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "MasterCard",
"country": "US",
"customer": "cus_AJqrL4OU1sffPl",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 11,
"exp_year": 2022,
"funding": "credit",
"last4": "4444",
"metadata": {
},
"name": null,
"tokenization_method": null
}
],
"has_more": false,
"total_count": 1,
"url": "/v1/customers/cus_AJqrL4OU1sffPl/sources"
}
}',
:status => ['200', 'OK']
)
FakeWeb.register_uri(:post, 'https://api.stripe.com/v1/charges',
:body => '{
"id": "ch_19zDAFEfVxQsvRbHtAwsCvV0",
"object": "charge",
"amount": 100,
"amount_refunded": 0,
"application": null,
"application_fee": null,
"balance_transaction": "txn_19wkkaEfVxQsvRbH8rnq3SAK",
"captured": true,
"created": 1489965019,
"currency": "aud",
"customer": "cus_AJqrL4OU1sffPl",
"description": "Donation",
"destination": null,
"dispute": null,
"failure_code": null,
"failure_message": null,
"fraud_details": {
},
"invoice": null,
"livemode": false,
"metadata": {
},
"on_behalf_of": null,
"order": null,
"outcome": {
"network_status": "approved_by_network",
"reason": null,
"risk_level": "normal",
"seller_message": "Payment complete.",
"type": "authorized"
},
"paid": true,
"receipt_email": null,
"receipt_number": null,
"refunded": false,
"refunds": {
"object": "list",
"data": [
],
"has_more": false,
"total_count": 0,
"url": "/v1/charges/ch_19zDAFEfVxQsvRbHtAwsCvV0/refunds"
},
"review": null,
"shipping": null,
"source": {
"id": "card_19zDADEfVxQsvRbHVooMYHqg",
"object": "card",
"address_city": null,
"address_country": null,
"address_line1": null,
"address_line1_check": null,
"address_line2": null,
"address_state": null,
"address_zip": null,
"address_zip_check": null,
"brand": "MasterCard",
"country": "US",
"customer": "cus_AJqrL4OU1sffPl",
"cvc_check": "pass",
"dynamic_last4": null,
"exp_month": 11,
"exp_year": 2022,
"funding": "credit",
"last4": "4444",
"metadata": {
},
"name": null,
"tokenization_method": null
},
"source_transfer": null,
"statement_descriptor": null,
"status": "succeeded",
"transfer_group": null
}',
:status => ['200', 'OK']
)