Accept Blue Subscriptions
Create recurring subscriptions with the Accept Blue platform.
Create recurring subscriptions with the Accept Blue platform.
- A customer places an order with products that represent subscriptions
- Customer adds a payment to order with
addPaymentToOrderand supplies credit card details:- A customer is created in Accept Blue
- A payment method with the card details is added to the customer
- A charge is created for the customer with the initial amount due
- A recurring subscription(s) for that customer is created
- If all succeed, the order is transitioned to
PaymentSettled
- Add to your Vendure config:
- Start the server, create a payment method and select Accept Blue as handler
- Place an order and use one of the payment methods below:
:warning: Set Use test mode in your payment handler in the admin UI to use Accept Blue in test mode.
Payment methods
These are the different payment methods you can use to pay for an order. Keep in mind that these examples use sample input data.
You can use the query eligibleAcceptBluePaymentMethods to check what payment methods and card types are enabled. This is configured in Vendure: your Accept Blue API Key should have all methods enabled for this to work.
Pay with Saved Payment Method
If a customer already has a payment method saved in Accept Blue, you can use that to pay for an order.
Pay with Check
Pay with Nonce/Tokenized card
With the hosted tokenization form, you can obtain a token that represents a credit card, and use that to pay for an order. More info on hosted tokenization here: https://docs.accept.blue/tokenization/v0.2
Managing payment methods
You can fetch payment methods on a customer: on active customer when you are logged in, or on any customer via the Admin API.
To update payment methods, you can use the following mutations. For the Shop API, you need to be logged in as the customer and be owner of the payment method. For the Admin API, you only need to be logged in as an admin and have UpdateCustomer permissions.
Or for a check payment method:
For creating a a card payment method, you need to use Hosted Tokenization (see Pay with Nonce/Tokenized card above). After getting a nonce token, you can use the following mutation to create a card payment method. For the Shop API, you need to be logged in. For the Admin API, you need to pass an Accept Blue customer ID into the mutation.
To create a check payment method, you can use the createAcceptBlueCheckPaymentMethod mutation.
To connect a new payment method to a subscription, you can use the updateAcceptBlueSubscription mutation.
For the Shop API, you need to be logged in as the customer and be owner of the payment method and the recurring schedule. For the Admin API, you only need to be logged in as an admin and have UpdateOrder permissions.
Fetching Transactions and Subscriptions for placed orders
After an order is placed, the order.lines.acceptBlueSubscriptions is populated with the actual subscription values from the Accept Blue platform, so it will not call your strategy anymore. This is to better reflect the subscription that was actually created at the time of ordering.
This means you can now also get the transactions per subscriptions with the field order.lines.acceptBlueSubscriptions.transactions. To refund a transaction, you first need to get the transaction id.
Refunding
Only the initial payment is handled as a Vendure payment, any other refunds are done via a dedicated mutation:
- Fetch transactions for a customer or a subscription as explained above
- Use the transaction ID to create a refund:
The arguments amount and cvv2 are optional, see the Accept Blue Docs for more info.
Updating Subscriptions
You can update created subscriptions in Accept Blue as Admin via de admin-api with UpdateOrder permissions:
This wil emit an AcceptBlueSubscriptionEvent of type updated.
Accept Blue Surcharges
You can use the query acceptBlueSurcharge to see what surcharges your account has configured.
CORS
If you run into CORS issues loading the Accept Blue hosted tokenization javascript library, you might need to remove the cross-origin key on your script tag.
Incoming events and webhooks
This plugin emits an AcceptBlueTransactionEvent whenever it receives a webhook with a transaction update from Accept Blue.
Google Pay
This plugin also allows you to integration Google Pay. You will need to implement the Google Pay button on your storefront first.
- Checkout the video to get a good understanding of the flow: https://developers.google.com/pay/api/web/overview
- The complete script is available here: https://developers.google.com/pay/api/web/guides/tutorial#full-example
- Integrate the Google Pay button on your storefront: https://docs.accept.blue/digital-wallet/google-pay
After that, you end up with a token you receive from Google. Send that data to Vendure like so:
Make sure that your amount equals the amount of the order! The amount is passed in as whole amount, not in cents, because this is how you will receive it from Google.
You can configure the Merchant ID and Gateway Merchant ID on the payment method in Vendure, and fetch them via eligiblePaymentMethods or eligibleAcceptBluePaymentMethods.
Additional Charge Input
For the initial charge, you can pass additional input to the charge creation. This is useful if you want to add additional information to the charge, such as tax, surcharges,shipping information, etc.
In your plugin initialization, you can pass a function that returns the additional input:
Changelog
- Upgraded to Vendure 3.5.3
- Allow passing additional input when creating a charge via the
additionalChargeInputoption. - Use parent
orderinstead oforderLine.orderingetSubscriptionsForOrderLineto prevent hydration issues.
- Documentation update
- Updated official documentation URL
- Allow disabling sending receipt emails to the customer via the Accept Blue platform.
- Breaking:
amountDueNowwas not actually being used to calculate the line price! If you usedvariant.pricein your subscription strategy, or used the default subscription strategy, everything still works as expected. - Allow subscriptions with
amount=0 - Delete created subscriptions if the one-time charge fails after that.
- Store payment metadata for declined transactions. Create recurring schedule after successful charge.
- POTENTIALLY BREAKING: Creating a card payment method now accepts a Vendure customer ID, which changed the input from
Int!toID!.
- Prevent empty metadata for orders with $0
- Enable updating payment method on a subscription via the Shop API for logged in customers
- Bug fix: Prevent updating a subscription to a payment method type (Visa, MasterCard, etc) that is not allowed. Only allow the methods set via the Admin UI.
- Enable creating and deleting payment methods via the Shop API for logged in customers
- Enable creating and deleting payment methods via the Admin API for all customers
- Upgraded to Vendure 3.3.2
- Added updating of payment methods via the Shop API for logged in customers
- Added updating of payment methods via the Admin API for all customers
- Changed
testModelog statement from warn to verbose - BREAKING: Removed
account_numberfromUpdateCheckPaymentMethodInputas it is never returned by Accept Blue
- Correctly encode email addresses when looking up customers in Accept Blue. This prevents incorrect
Customer not founderrors when using email addresses with+in them. - Fixed typo in error message
- BREAKING:
AcceptBlueSubscription.recurring.endDateis removed. - BREAKING:
AcceptBlueSubscription.recurring.startDateis now optional. - The fields
createdAt,nextRunDate,previousRunDateandnumLefthave been added toAcceptBlueSubscription.recurring.
- Prevent throwing an error when no enabled Accept Blue payment method is found when fetching other eligible Payment Methods.
- Don't expose Accept Blue config on non Accept Blue Payment Method Quotes
- Expose
acceptBlueTestModeon Payment Method Quotes
- Expose tokenization key, and Google merchant id's on payment method quote and eligible Accept Blue methods.
- Added
Apple PayandGoogle Payto eligible Accept Blue payment methods
- Fixed typo
Allow PaytoApple Pay
- Added Google Pay and Apple pay for creating subscriptions
- Renamed internals to Amex as well
- Not checking for
sec_codeinput anymore, as it is an optional argument
- Renamed payment method American Express to Amex
- Allow disabling certain payment methods, e.g. 'visa' or 'check', via the Vendure Admin UI
- Expose surcharges used by Accept Blue via GraphQL query
- Update a customer's shipping and billing details in Accept Blue on subscription creation
- Allow updating created subscriptions via the Admin API
- Moved refunding to admin-api, and only allow with permission UpdateOrder
- Publicly expose ctx in AcceptBlueTransactionEvent
- Add ctx to AcceptBlueTransactionEvent
- Update Vendure to 3.1.1
- Recurring amounts divided by 100
- Round up
nrOfBillingCyclesLeft, to prevent unwanted never-ending subscriptions. See #532 - Made both custom fields
customer.acceptBlueCustomerIdandorderLine.acceptBlueSubscriptionIdsnullable and readonly. DB migration needed - Included custom field type declaration file in published package
- Return Declined when payment handling fails, instead of throwing
- Bug fix: Return Settled state for successful refunds
- Implemented refunding via admin UI for initial AC transaction
- Export
AcceptBlueTransactionEventfrom package
- Don't throw error while resolving
PaymentMethodQuote.acceptBlueHostedTokenizationKeyif there is noAcceptBluemethod (#452)
- Automatically register webhooks with Accept Blue on payment method creation and update
- Emit
AcceptBlueTransactionEventon incoming webhooks from Accept Blue
- Update compatibility range (#480)
- Convert
biannuallyto every 6 months instead of once every 2 years
- Allow test mode to be set at payment method level.
- Removed the usage of env var ACCEPT_BLUE_TEST_MODE for test mode. Use the setting on payment method.
- Update Version to 2.2.6
- Return subscription id in Graphql type for created Accept Blue subscriptions
- Allow refunding a transaction via
refundAcceptBlueTransactionmutation.
Order.lines.acceptBlueSubscriptionsnow fetches created subscriptions from Accept Blue for placed orders, instead of calling your subscription strategyOrder.lines.acceptBlueSubscriptions.transactionsshows the transactions made for the given subscriptions
- Refactored order line custom field
subscriptionIdstoacceptBlueSubscriptionIdsto avoid conflicts with for example the Stripe Plugin
- Correctly check given input types
- Always save payment methods and create recurring schedules and one time charges with a saved payment method
- Allow payment for order with a saved payment method ID
- Implement Charge Transaction with e2e tests
- Implement Tokenized Credit Card Payment with e2e tests
- Initial release