effective_orders 1.7.0 → 1.7.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: cb1d6669051ee4a4c2caf28dccbac451bdd3221b
4
- data.tar.gz: 6ad503455f871663204142a019802e58e0761139
3
+ metadata.gz: 880e18d649a95f87eba2e87fd7fc941849fd08be
4
+ data.tar.gz: 8c8fc70f4bc7f85a2c63bddcf50cbee72ac64396
5
5
  SHA512:
6
- metadata.gz: 384f81697a59dce11cd020734531dc460d4d2e6fbb771687d13179375ad166d7f4c01d9a21b819018e2d91ddf760e605f1c1e022645a72e9bbfa7f92b212f63d
7
- data.tar.gz: 49ed6f3e16ca6745070ac459f181f20c89767b3dd7a472a2424aec5415f91724237c589ac667e853010e58458cc545015771e04f0c1242db8bb80a84c8fea4fe
6
+ metadata.gz: c950647d5032d3ef4f95751f822f22377a4c1e78e1d0037fb3b76c6cc5791b768c206aec0fd936b52d5ed7f841d95eb36c6b279886abec958a6b15b00f3395c5
7
+ data.tar.gz: 5b761e368af7fd83c8cd272b568aea5dac030b30920e483907c11c9733c803833382bd2603f6289448fed782696f6f01da491b04b9e745a3b35b494102a34903
data/README.md CHANGED
@@ -852,9 +852,86 @@ Register an additional Webhook, to accept Stripe subscription creation events fr
852
852
  root_url/webhooks/stripe
853
853
 
854
854
 
855
- ### PayPal
855
+ ## Paying Via PayPal
856
856
 
857
- TODO
857
+ Use the following to set up a PayPal sandbox store.
858
+
859
+ ### PayPal Account
860
+
861
+ Start by creating a PayPal Account. [Sign up or login](http://paypal.com/). You'll need a business account for use in production but a personal account is fine for creating sandbox apps.
862
+
863
+ _During sign up of a personal account, you may go to the next step in these directions when PayPal asks you to link a credit card or bank with your account._
864
+
865
+ _During sign up of a business account, you may go to the next step in these directions when PayPal asks "How do you want to set up PayPal on your website?"._
866
+
867
+ Confirm your email address using the email sent to you by PayPal.
868
+
869
+
870
+ ### Configuring Your App With a PayPal Sandbox
871
+
872
+ PayPal uses a series of public and private certificates and keys to communicate with third party applications.
873
+
874
+ You need to generate your application's private key (so that it is private!). To generate these, we'll use OpenSSL. If you're on Mac/Linux, you can run these commands inside `#{Rails.root}/config/paypalcerts/development/`:
875
+
876
+ ```
877
+ openssl genrsa -out app_key.pem 1024
878
+ openssl req -new -key app_key.pem -x509 -days 999 -out app_cert.pem
879
+ ```
880
+
881
+ The app_key.pem file is your private key and the app_cert.pem is the public certificate. We require one more certificate, the PayPal public certificate. This certificate will come from your sandbox seller account.
882
+
883
+ To login to the sandbox seller account:
884
+
885
+ 1. Visit the [PayPal developer portal](https://developer.paypal.com/) and click on "Sandbox" -> "Accounts".
886
+ It might take some time for the two default sandbox accounts to show up here if you just created your account (~10 minutes).
887
+ 2. Click on the facilitator account accordion, then click 'Profile'.
888
+ 3. Change the password of the facilitator account to whatever you want and copy the facilitator account email address.
889
+ 4. Go to the [PayPal sandbox site](https://www.sandbox.paypal.com/).
890
+ 5. Sign in using the facilitator account credentials
891
+
892
+ **If the seller account is from Canada, you can follow these directions:**
893
+
894
+ 1. Click "Profile". Then click "Encrypted Payment Settings" under the "Selling Preferences" column.
895
+ 2. Download the PayPal public certicate in the middle of the page and save it as `#{Rails.root}/config/paypalcerts/development/paypal_cert.pem`.
896
+ 3. Upload the public certificate that you generated earlier, `app_cert.pem`, at the bottom of the page.
897
+ 4. Copy the new `Cert ID` of the new public certificiate and add it to the effective_orders initializer with other PayPal settings as the `:cert_id`.
898
+
899
+ While you're logged in to the seller account, you should disable non-encrypted instant payment notifications (IPNs):
900
+
901
+ 1. Click on "Profile".
902
+ 2. Click on "Website Payment Preferences" under the "Selling Preferences" column.
903
+ 3. Under "Encrypted Website Payments", turn "Block Non-encrypted Website Payment" to "On"
904
+
905
+ **If the seller account is from elsewhere, please contribute what you find. =)**
906
+
907
+ Make sure all of the certificates/keys are available in the proper config directory (i.e. `#{Rails.root}/config/paypalcerts/development/paypal_cert.pem`)
908
+ or set up environment variables to hold the full text or file location.
909
+
910
+ Finally, finish adding config values in the effective_orders initializer. Set `config.paypal_enabled = true` and fill out the `config.paypal` settings:
911
+
912
+ * seller_email - email that you logged into the sandbox site with above
913
+ * secret - can be any string (see below)
914
+ * cert_id - provided by PayPal after uploading your public `app_cert.pem`
915
+ * paypal_url - https://www.sandbox.paypal.com/cgi-bin/webscr for sandbox or https://www.paypal.com/cgi-bin/webscr for real payments
916
+ * currency - [choose your preference](https://developer.paypal.com/docs/integration/direct/rest-api-payment-country-currency-support/)
917
+ * paypal_cert - PayPal's public certificate for your app, downloaded from PayPal earlier (this can be a string with `\n` in it or a path to the file)
918
+ * app_cert - Your generated public certificate (this can be a string with `\n` in it or a path to the file)
919
+ * app_key - Your generated private key (this can be a string with `\n` in it or a path to the file)
920
+
921
+ The secret can be any string. Here's a good way to come up with a secret:
922
+
923
+ ```irb
924
+ & irb
925
+ > require 'securerandom'
926
+ => true
927
+ > SecureRandom.base64
928
+ => "KWidsksL/KR4LAf2EcRSdQ=="
929
+ ```
930
+
931
+ ### Configuring PayPal For Use With Real Payments
932
+
933
+ This process should be very similar although you'll create and configure a seller account on paypal.com rather than the sandbox site.
934
+ You should generate separate private and public certificates/keys for this and it is advisable to not keep production certificates/keys in version control.
858
935
 
859
936
 
860
937
  ## License
@@ -143,7 +143,7 @@ module Effective
143
143
  def order_purchased(details = nil, redirect_url = nil, declined_redirect_url = nil)
144
144
  begin
145
145
  @order.purchase!(details)
146
- current_cart.try(:destroy)
146
+ Cart.where(user_id: @order.user_id).try(:destroy_all) # current_cart won't work for provider post backs here
147
147
 
148
148
  if EffectiveOrders.mailer[:send_order_receipt_to_buyer]
149
149
  flash[:success] = "Payment successful! Please check your email for a receipt."
@@ -1,8 +1,18 @@
1
1
  module EffectivePaypalHelper
2
+ class ConfigReader
3
+ def self.cert_or_key(config)
4
+ if File.exist?(EffectiveOrders.paypal[config])
5
+ File.read(EffectiveOrders.paypal[config]) rescue {}
6
+ else
7
+ EffectiveOrders.paypal[config] || {}
8
+ end
9
+ end
10
+ end
11
+
2
12
  # These're constants so they only get read once, not every order request
3
- PAYPAL_CERT_PEM = (File.read(EffectiveOrders.paypal[:paypal_cert]) rescue {})
4
- APP_CERT_PEM = (File.read(EffectiveOrders.paypal[:app_cert]) rescue {})
5
- APP_KEY_PEM = (File.read(EffectiveOrders.paypal[:app_key]) rescue {})
13
+ PAYPAL_CERT_PEM = ConfigReader.cert_or_key(:paypal_cert)
14
+ APP_CERT_PEM = ConfigReader.cert_or_key(:app_cert)
15
+ APP_KEY_PEM = ConfigReader.cert_or_key(:app_key)
6
16
 
7
17
  def paypal_encrypted_payload(order)
8
18
  raise ArgumentError.new("unable to read EffectiveOrders PayPal paypal_cert #{EffectiveOrders.paypal[:paypal_cert]}") unless PAYPAL_CERT_PEM.present?
@@ -122,11 +122,6 @@ module ActsAsPurchasable
122
122
  end
123
123
 
124
124
  def purchased!(order = nil, order_item = nil)
125
- # begin
126
- # self.quantity_purchased = (self.quantity_purchased + 1)
127
- # rescue
128
- # end
129
-
130
125
  after_purchase(order, order_item) if self.respond_to?(:after_purchase)
131
126
  save!
132
127
  end
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '1.7.0'.freeze
2
+ VERSION = '1.7.1'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_orders
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.7.0
4
+ version: 1.7.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-12-01 00:00:00.000000000 Z
11
+ date: 2015-12-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails