{"id":20779131,"url":"https://github.com/solidusio/solidus_braintree","last_synced_at":"2025-04-06T04:13:48.204Z","repository":{"id":46952684,"uuid":"39141606","full_name":"solidusio/solidus_braintree","owner":"solidusio","description":"💳 Integrate Solidus with Braintree","archived":false,"fork":false,"pushed_at":"2023-12-06T09:50:06.000Z","size":3195,"stargazers_count":19,"open_issues_count":8,"forks_count":50,"subscribers_count":12,"default_branch":"main","last_synced_at":"2024-04-25T01:08:19.770Z","etag":null,"topics":["braintree","ecommerce","ecommerce-platform","hacktoberfest","payment","payment-methods","paypal","solidus"],"latest_commit_sha":null,"homepage":"https://www.braintreepayments.com/","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/solidusio.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"open_collective":"solidus"}},"created_at":"2015-07-15T14:30:52.000Z","updated_at":"2023-11-28T22:36:29.000Z","dependencies_parsed_at":"2023-02-16T18:31:23.821Z","dependency_job_id":"17077f6e-6d3b-4dc1-9971-4cd699f22e8b","html_url":"https://github.com/solidusio/solidus_braintree","commit_stats":null,"previous_names":[],"tags_count":18,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidusio%2Fsolidus_braintree","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidusio%2Fsolidus_braintree/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidusio%2Fsolidus_braintree/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/solidusio%2Fsolidus_braintree/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/solidusio","download_url":"https://codeload.github.com/solidusio/solidus_braintree/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247430883,"owners_count":20937874,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["braintree","ecommerce","ecommerce-platform","hacktoberfest","payment","payment-methods","paypal","solidus"],"created_at":"2024-11-17T13:26:11.481Z","updated_at":"2025-04-06T04:13:47.954Z","avatar_url":"https://github.com/solidusio.png","language":"Ruby","readme":"# SolidusBraintree\n\n[![Test](https://github.com/solidusio/solidus_braintree/actions/workflows/test.yml/badge.svg)](https://github.com/solidusio/solidus_braintree/actions/workflows/test.yml)\n[![codecov](https://codecov.io/gh/solidusio/solidus_braintree/branch/main/graph/badge.svg)](https://codecov.io/gh/solidusio/solidus_braintree)\n\n`solidus_braintree` is an extension that adds support for using [Braintree](https://www.braintreepayments.com) as a payment source in your [Solidus](https://solidus.io/) store. It uses Braintree's [JavaScript v3 SDK](https://braintree.github.io/braintree-web/current/) to support the following Braintree payment method types:\n\n* [Apple Pay](https://developer.paypal.com/braintree/docs/guides/apple-pay/overview)\n* [Venmo](https://developer.paypal.com/braintree/docs/guides/venmo/overview)\n* [PayPal Checkout](https://developer.paypal.com/braintree/docs/guides/paypal/overview/javascript/v3)\n* [Credit Cards](https://developer.paypal.com/braintree/docs/guides/credit-cards/overview) via [Hosted Forms](https://developer.paypal.com/braintree/docs/guides/hosted-fields/overview)\n\n## Installation\n\nAdd solidus_braintree to your Gemfile:\n\n```ruby\ngem 'solidus_braintree'\n```\n\nBundle your dependencies and run the installation generator:\n\n```shell\nbundle\nbundle exec rails g solidus_braintree:install\n```\n\n## Upgrading (including migration from SolidusPaypalBraintree)\n\nSee https://github.com/solidusio/solidus_braintree/wiki/Upgrading.\n\n## Compatibility\n\nHere are the versions of SolidusBraintree and their compatible Solidus and frontend versions:\n\n| Version              | Maintenance Status          | Frontend               | Branch   |\n|----------------------|-----------------------------|------------------------|----------|\n| SolidusBraintree 3.0 | New features                | SolidusStarterFrontend | [main]   |\n| SolidusBraintree 2.0 | Security patches, bug fixes | SolidusFrontend        | [v2.x]   |\n| SolidusBraintree 1.2 | Deprecated                  | SolidusFrontend        | [v1.x]   |\n\n[v1.x]: https://github.com/solidusio/solidus_braintree/tree/v1.x\n[v2.x]: https://github.com/solidusio/solidus_braintree/tree/v2.x\n[main]: https://github.com/solidusio/solidus_braintree/tree/main\n\n## Basic Setup\n\n### Retrieve Braintree account details\nYou'll need the following account details:\n- `Merchant ID`\n- `Public key`\n- `Private key`\n\nThese values can be obtained by logging in to your Braintree account, going\nto `Account -\u003e My User` and clicking `View Authorizations` in the **API Keys,\nTokenization Keys, Encryption Keys** section.\n\n### Create a new payment method\nPayment methods can accept preferences either directly entered in admin, or from a static source in code. For most projects we recommend using a static source, so that sensitive account credentials are not stored in the database.\n\n1. Set static preferences in an initializer\n  ```ruby\n  # config/initializers/spree.rb\n  Rails.application.config.to_prepare do\n    Spree::Config.static_model_preferences.add(\n      SolidusBraintree::Gateway,\n      'braintree_credentials', {\n        environment: Rails.env.production? ? 'production' : 'sandbox',\n        merchant_id: ENV['BRAINTREE_MERCHANT_ID'],\n        public_key: ENV['BRAINTREE_PUBLIC_KEY'],\n        private_key: ENV['BRAINTREE_PRIVATE_KEY'],\n        paypal_flow: 'vault', # 'checkout' is accepted too\n        use_data_collector: true # Fingerprint the user's browser when using Paypal\n      }\n    )\n  end\n  ```\n  Other optional preferences are discussed below.\n\n2. Visit `/admin/payment_methods/new`\n\n3. Set `provider` to SolidusBraintree::Gateway\n\n4. Click \"Save\"\n\n5. Choose `braintree_credentials` from the `Preference Source` select\n\n6. Click `Update` to save\n\nAlternatively, create a payment method from the Rails console with:\n```ruby\nSolidusBraintree::Gateway.new(\n  name: \"Braintree\",\n  preference_source: \"braintree_credentials\"\n).save\n```\n\n### Configure payment types\nYour payment method can accept payments in three ways: through Paypal, through ApplePay, or with credit card details entered directly by the customer. By default all are disabled for all your site's stores. Before proceeding to checkout, ensure you've created a Braintree configuration for your store:\n\n1. Visit /solidus_braintree/configurations/list\n\n2. Check the payment types you'd like to accept. If your site has multiple stores, there'll be a set of checkboxes for each.\n\n3. Click `Save changes` to save\n\n  Or from the console:\n  ```ruby\n  Spree::Store.all.each do |store|\n    store.create_braintree_configuration(\n      credit_card: true,\n      paypal: true,\n      apple_pay: true,\n      venmo: true\n    )\n  end\n  ```\n\n4. If your site uses an unmodified Solidus Starter Frontend, it should now be ready to take payments. See below for more information on configuring Paypal and ApplePay.\n\n5. Typical Solidus sites will have customized frontend code, and may require some additional work. Use `lib/views/frontend/spree/checkout/payment/_braintree.html.erb` and `app/assets/javascripts/solidus_braintree/checkout.js` as models.\n\n## Apple Pay\n### Developing with Apple Pay\nYou'll need the following:\n- A device running iOS 10+.\n- An Apple Pay sandbox account. You can check out Apple's [documentation](https://developer.apple.com/support/apple-pay-sandbox/) for additional help in performing this step.\n- A site served via HTTPS. To set this up for development we recommend setting up a reverse proxy server. There are [lots of guides](https://www.google.ca/search?q=nginx+reverse+proxy+ssl+localhost) on how this can be achieved.\n- A Braintree sandbox account with Apple Pay enabled (`Settings\u003eProcessing`) and configured (`Settings\u003eProcessing\u003eOptions`) with your Apple Merchant ID and the HTTPS domain for your site.\n- A sandbox user logged in to your device, with a [test card](https://developer.apple.com/support/apple-pay-sandbox/) in its Wallet\n\n### Enabling Apple Pay for custom frontends\nThe following is a relatively bare-bones implementation to enable Apple Pay on the frontend:\n\n```html\n\u003c% if current_store.braintree_configuration.apple_pay? %\u003e\n  \u003cscript src=\"https://js.braintreegateway.com/web/3.84.0/js/apple-pay.min.js\"\u003e\u003c/script\u003e\n\n  \u003cbutton id=\"apple-pay-button\" class=\"apple-pay-button\"\u003e\u003c/button\u003e\n\n  \u003cscript\u003e\n    var applePayButtonElement = document.getElementById('apple-pay-button');\n    var applePayOptions = {\n      paymentMethodId: \u003c%= id %\u003e,\n      storeName: \"\u003c%= current_store.name %\u003e\",\n      orderEmail: \"\u003c%= current_order.email %\u003e\",\n      amount: \"\u003c%= current_order.total %\u003e\",\n      shippingContact: {\n        emailAddress: '\u003c%= current_order.email %\u003e',\n        givenName: '\u003c%= address.firstname %\u003e',\n        familyName: '\u003c%= address.lastname %\u003e',\n        phoneNumber: '\u003c%= address.phone %\u003e',\n        addressLines: ['\u003c%= address.address1 %\u003e','\u003c%= address.address2 %\u003e'],\n        locality: '\u003c%= address.city %\u003e',\n        administrativeArea: '\u003c%= address.state.name %\u003e',\n        postalCode: '\u003c%= address.zipcode %\u003e',\n        country: '\u003c%= address.country.name %\u003e',\n        countryCode: '\u003c%= address.country.iso %\u003e'\n      }\n    };\n    var button = new SolidusBraintree.createApplePayButton(applePayButtonElement, applePayOptions);\n    button.initialize();\n  \u003c/script\u003e\n\u003c% end %\u003e\n```\n\n### Further Apple Pay information\nBraintree has some [excellent documentation](https://developers.braintreepayments.com/guides/apple-pay/configuration/javascript/v3) on what you'll need to do to get Apple Pay up and running.\n\nFor additional information check out [Apple's documentation](https://developer.apple.com/reference/applepayjs/) and [Braintree's documentation](https://developers.braintreepayments.com/guides/apple-pay/client-side/javascript/v3).\n\n## Venmo\nThere are two ways for users to use Venmo for payments:\n1. Braintree's native Venmo integration, which supports vaulting of payment sources. [See more.](#Braintree's-Venmo)\n2. Through the PayPal buttons when using checkout flow, therefore doesn't support vaulting. [See more.](#PayPal-financing-options)\n\n### PayPal's Venmo financing option\nTo add Venmo for PayPal, [see here](#paypal-venmo)\n\n### Braintree's Venmo\n#### Note\n- Only available as a financing option on the checkout page; Venmo currently does not support shipping callbacks so it cannot be on the cart page.\n- Currently available to US merchants and buyers and there are also other prequisites.\n  - https://developer.paypal.com/docs/business/checkout/pay-with-venmo/#eligibility\n  - https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#availability\n\n#### Integration:\n1. Enable Venmo in your [Braintree account](https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#setup)\n2. Enable Venmo in your [store's Braintree configuration](#configure-payment-types).\n3. Ensure your Braintree API credentials are in the Braintree payment method.\n4. Set your Braintree payment method's preference of `preferred_venmo_new_tab_support` to `false` if your store cannot handle Venmo returning a user to a new tab after payment. This may be because your website is a single-page applicaiton (SPA). On mobile, the user may be returned to the same store tab if their browser supports it, otherwise a new tab will be created (unless you have this preference as `false`).\n\nBy default your default Venmo business account will be used. If you want to use a non-default profile, override\nthe `SolidusBraintree::Gateway` `#venmo_business_profile_id` method with its id.\n\n#### Testing\nTest the following scenarios:\n- Ensure the Venmo checkout button opens a modal with a QR code and is closeable.\n- Do a full transaction\n- Ensure that you can also save the payment source in the user wallet.\n- Ensure the saved Venmo wallet payment source loads in the partial correctly.\n- Ensure the saved Venmo payment source can be reused for another order.\n- Test doing transactions on the admin\n- Testing voiding and refunding Venmo transactions\n\nYou'll need the Venmo app in order to fully test the integration. However, if you are outside of the US, this is not an option. You can fake the tokenization by:\n- Altering the `venmo_button.js` file to call the `handleVenmoSuccess` function instead of tokenizing; or\n- Manually doing its steps:\n  1. Update the #venmo_payment_method_nonce hidden input value to \"fake-venmo-account-nonce\".\n  2. Remove the disabled attributes from the venmo-fields inputs.\n  3. If you have hosted fields on the page (`credit_card` enabled in Braintree configuration), remove it's submit button listener:\n    `$('#checkout_form_payment').off('submit');`\n\n[More information](https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo#availability)\n\n#### Customization:\nIn your [store's Braintree configuration](#configure-payment-types), you can customize the Venmo checkout button's color and width.\n\nNote, other images such as Venmo's full logo and shortened \"V\" logo are included in the assets.\n\nEnsure that you follow [Venmo's guidelines](https://developer.paypal.com/braintree/docs/files/venmo-merchant-integration-guidelines.pdf) when making other style changes, otherwise failing to comply can lead to an interruption of your Venmo service.\n\n## PayPal\n\nA default checkout view is provided that will display PayPal as a payment option.\nIt will only be displayed if the `SolidusBraintree::Gateway` payment\nmethod is configured to display on the frontend and PayPal is enabled in the\nstore's configuration.\n\nYou can find button configuration options in\n`/solidus_braintree/configurations/list` if you want to change the color,\nshape, layout, and a few other options. For more information check out\n[PayPal's documentation](https://developer.paypal.com/docs/platforms/checkout/reference/style-guide/#layout).\n\nKeep in mind that:\n- `paypal_button_tagline` does not work when the `paypal_button_layout` is set to `vertical`, and will be ignored; and\n- `paypal_button_layout` of `horizontal` limits financing options/buttons to 2, where as `vertical` is 4.\n  Other available financing options after the limit will not be rendered in the PayPal's iframe DOM.\n\nThe checkout view\n[initializes the PayPal button](/lib/views/frontend/spree/checkout/payment/_braintree.html.erb)\nusing the\n[Vault flow](https://developers.braintreepayments.com/guides/paypal/overview/javascript/v3),\nwhich allows the source to be reused. Please note that PayPal messaging is disabled with vault flow. If you want, you can use [Checkout with PayPal](https://developers.braintreepayments.com/guides/paypal/checkout-with-paypal/javascript/v3)\ninstead, which doesn't allow you to reuse sources but allows your customers to pay with their PayPal\nbalance and with PayPal financing options ([see setup instructions](#create-a-new-payment-method)). More information about other [financing options below](#paypal-financing-options).\n\nIf you are creating your own checkout view or would like to customize the\n[options that get passed to tokenize](https://braintree.github.io/braintree-web/3.6.3/PayPal.html#tokenize)\n, you can initialize your own using the `CreatePaypalButton` JS object:\n\n```javascript\nvar paypalOptions = {\n  // your configuration options here\n}\n\nvar button = new SolidusBraintree.createPaypalButton(document.querySelector(\"#your-button-id\"), paypalOptions);\n\nbutton.initialize();\n```\n\n### Express checkout from the cart\n\nA PayPal button can also be included on the cart view to enable express checkouts:\n```ruby\nrender \"spree/shared/paypal_cart_button\"\n```\n\n### PayPal financing options\nWhen using 'checkout' `paypal flow` and not 'vault'. Your customers can have different finance options such as\n- paylater\n- Venmo\n\n#### PayPal Venmo\nVenmo is currently available to US merchants and buyers. There are also other [prequisites](https://developer.paypal.com/docs/business/checkout/pay-with-venmo/#eligibility).\n\nBy default, the extension and Braintree will try to render a Venmo button to buyers when prequisites are met and you have enabled it in your Braintree account).\n\nSet the SolidusBraintree `PaymentMethod` `enable_venmo_funding` preference to:\n- `enabled`, available as a PayPal funding option (if other prequisites are met); or\n- `disabled` (default).\n\nNote, Venmo is currently only available as a financing option on the checkout page; Venmo currently does not support shipping callbacks so it cannot be on the cart page.\n\n[_As Venmo is only available in the US, you may want to mock your location for testing_](#mocking-your-buyer-country)\n\n### PayPal Financing Messaging\n\nPayPal offers an [on-site messaging component](https://www.paypal.com/us/webapps/mpp/on-site-messaging) to notify the customer that there are financing options available. This component is included in both the cart and checkout partials, but is disabled by default. To enable this option, you'll need to use the `checkout` flow, and set the `paypal button messaging` option to `true` in your Braintree configuration.\n\nYou can also include this view partial to implement this messaging component anywhere - for instance, on the product page:\n```ruby\nrender \"spree/shared/paypal_messaging, options: {total: @product.price, placement: \"product\", currency: 'USD'}\"\n```\n\nWhile we provide the messaging component on the payment buttons for cart and checkout, you're expected to move these to where they make the most sense for your frontend. PayPal recommends keeping the messaging directly below wherever the order or product total is located.\n\n#### PayPal configuration\n\nIf your store requires the [phone number into user addresses](https://github.com/solidusio/solidus/blob/859143f3f061de79cc1b385234599422b8ae8e21/core/app/models/spree/address.rb#L151-L153)\nyou'll need to configure PayPal to return the phone back when it returns the\naddress used by the user:\n\n1. Log into your PayPal account\n2. Hover over the user in the Navbar to get the dropdown\n3. Click on Account Settings\n4. In the left panel under Products \u0026 Services, click Website Payments\n5. Click Update for Website Preferences\n6. Set Contact Telephone to `On (Required Field)` or `On (Optional Field)`\n\nUsing the option `Off` will not make the address valid and will raise a\nvalidation error.\n\n#### Disabling the data collector\n\nFor fraud prevention, PayPal recommends using a data collector to collect device\ninformation, which we've included by default. You're able to turn off the PayPal\ndata collector on the payment method preferences if you desire. If you use\nstatic preferences, add `use_data_collector: false` to your initializer.\n\n## Credit cards\n\n### Hosted Fields Styling\nYou can style the Braintree credit card fields by using the `credit_card_fields_style` preference on the payment method. The `credit_card_fields_style` will be passed to the `style` key when initializing the credit card fields. You can find more information about styling hosted fields can be found [here.](https://developers.braintreepayments.com/guides/hosted-fields/styling/javascript/v3)\n\nYou can also use the `placeholder_text` preference on the payment method to set the placeholder text you'd like to use for each of the hosted fields. You'll pass the field name in as the key, and the placeholder text you'd like to use as the value. For example:\n```ruby\n  { number: \"Enter card number\", cvv: \"Enter CVV\", expirationDate: \"mm/yy\" }\n```\n\n### 3D Secure\n\nThis gem supports [3D Secure 2](https://developers.braintreepayments.com/guides/3d-secure/overview),\nwhich satisfies the [Strong Customer Authentication (SCA)](https://www.braintreepayments.com/blog/getting-up-to-speed-on-psd2-regulation-2/)\nrequirements introduced by PSD2.\n\n3D Secure can be enabled from Solidus Admin -\u003e Braintree (left-side menu) -\u003e\ntick _3D Secure_ checkbox.\n\nOnce enabled, you can use the following card numbers to test 3DS 2 on your\nclient side in sandbox:\nhttps://developers.braintreepayments.com/guides/3d-secure/migration/javascript/v3#client-side-sandbox-testing.\n\n## Optional configuration\n\n### Accepting multiple currencies\nThe payment method also provides an optional preference `merchant_currency_map`.\nThis preference allows users to provide different Merchant Account Ids for\ndifferent currencies. If you only plan to accept payment in one currency, the\ndefaut Merchant Account Id will be used and you can omit this option.\nAn example of setting this preference can be found\n[here](https://github.com/solidusio/solidus_braintree/blob/bf5fe0e154d38f7c498f1c54450bb4de7608ff04/spec/support/gateway_helpers.rb#L11-L13).\n\nIn addition to this, you can also specify different PayPal accounts for each\ncurrency by using the `paypal_payee_email_map` preference. If you only want\nto use one PayPal account for all currencies, then you can ignore this option.\nYou can find an example of setting this preference [here](https://github.com/solidusio/solidus_braintree/blob/bf5fe0e154d38f7c498f1c54450bb4de7608ff04/spec/support/gateway_helpers.rb#L14-L16).\n\n### Default store configuration\nThe migrations for this gem will add a default configuration to all stores that\nhas each payment type disabled. It also adds a `before_create` callback to\n`Spree::Store` that builds a default configuration. You can customize the\ndefault configuration that gets created by overriding the private\n`build_default_configuration` method on `Spree::Store`.\n\n## Testing\n\nTo run the specs it is required to set the Braintree test account data in these environment variables:\n`BRAINTREE_PUBLIC_KEY`, `BRAINTREE_PRIVATE_KEY`, `BRAINTREE_MERCHANT_ID` and `BRAINTREE_PAYPAL_PAYEE_EMAIL`\n\nFirst bundle your dependencies, then run `rake`. `rake` will default to building the dummy app if it does not exist, then it will run specs, and [Rubocop](https://github.com/bbatsov/rubocop) static code analysis. The dummy app can be regenerated by using `rake test_app`.\n\n```shell\nbundle\nbundle exec rake\n```\n\nWhen testing your applications integration with this extension you may use it's factories.\nSimply add this require statement to your spec_helper:\n\n```ruby\nrequire 'solidus_braintree/factories'\n```\n\n## Development\n\n### Mocking your buyer country\nPayPal looks at the buyer's IP geolocation to determine what funding sources should be available to them. Because for example, Venmo is currently only available to US buyers. Because of this, you may want to pretend that you are from US so you can check if Venmo is correctly integrated for these customers. To do this, set the payment method's preference of `force_buyer_country` to \"US\". See more information about preferences above.\n\nThis preference has no effect on production.\n\n### Running the sandbox\n\nTo run this extension in a sandboxed Solidus application, you can run `bin/sandbox`. The path for\nthe sandbox app is `./sandbox` and `bin/rails` will forward any Rails commands to\n`sandbox/bin/rails`.\n\nHere's an example:\n\n```\n$ bin/rails server\n=\u003e Booting Puma\n=\u003e Rails 7.0.4 application starting in development\n* Listening on tcp://127.0.0.1:3000\nUse Ctrl-C to stop\n```\n\n\n### Releasing new versions\n\nPlease refer to the dedicated [page](https://github.com/solidusio/solidus/wiki/How-to-release-extensions) on Solidus wiki.\n\n\n## License\n\nCopyright (c) 2016-2020 Stembolt and others contributors, released under the New BSD License\n","funding_links":["https://opencollective.com/solidus","https://developer.paypal.com/braintree/docs/guides/apple-pay/overview","https://developer.paypal.com/braintree/docs/guides/venmo/overview","https://developer.paypal.com/braintree/docs/guides/paypal/overview/javascript/v3","https://developer.paypal.com/braintree/docs/guides/credit-cards/overview","https://developer.paypal.com/braintree/docs/guides/hosted-fields/overview","https://developer.paypal.com/docs/business/checkout/pay-with-venmo/","https://developer.paypal.com/braintree/articles/guides/payment-methods/venmo","https://developer.paypal.com/braintree/docs/files/venmo-merchant-integration-guidelines.pdf","https://developer.paypal.com/docs/platforms/checkout/reference/style-guide/","https://www.paypal.com/us/webapps/mpp/on-site-messaging"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidusio%2Fsolidus_braintree","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsolidusio%2Fsolidus_braintree","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsolidusio%2Fsolidus_braintree/lists"}