adyen-ruby-api-library 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (142) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/.travis.yml +14 -0
  4. data/Gemfile +12 -0
  5. data/LICENSE +21 -0
  6. data/README.md +140 -0
  7. data/Rakefile +6 -0
  8. data/adyen-ruby-api-library.gemspec +28 -0
  9. data/bin/console +13 -0
  10. data/bin/setup +8 -0
  11. data/docs/checkout.html +111 -0
  12. data/docs/index.html +50 -0
  13. data/docs/install-library.html +61 -0
  14. data/docs/javascripts/prism.js +5 -0
  15. data/docs/javascripts/scale.fix.js +17 -0
  16. data/docs/marketpay.html +169 -0
  17. data/docs/params.json +1 -0
  18. data/docs/payment.html +106 -0
  19. data/docs/payout.html +135 -0
  20. data/docs/recurring.html +113 -0
  21. data/docs/stylesheets/github-light.css +115 -0
  22. data/docs/stylesheets/prism.css +140 -0
  23. data/docs/stylesheets/styles.css +324 -0
  24. data/docs/using-library.html +67 -0
  25. data/lib/adyen-ruby-api-library.rb +21 -0
  26. data/lib/adyen/client.rb +174 -0
  27. data/lib/adyen/errors.rb +76 -0
  28. data/lib/adyen/services/checkout.rb +50 -0
  29. data/lib/adyen/services/checkout_utility.rb +16 -0
  30. data/lib/adyen/services/marketpay.rb +92 -0
  31. data/lib/adyen/services/payments.rb +23 -0
  32. data/lib/adyen/services/payouts.rb +21 -0
  33. data/lib/adyen/services/recurring.rb +19 -0
  34. data/lib/adyen/services/service.rb +19 -0
  35. data/lib/adyen/version.rb +4 -0
  36. data/spec/account_spec.rb +27 -0
  37. data/spec/checkout_spec.rb +94 -0
  38. data/spec/checkout_utility_spec.rb +27 -0
  39. data/spec/client_spec.rb +40 -0
  40. data/spec/fund_spec.rb +19 -0
  41. data/spec/mocks/requests/Account/close_account.json +3 -0
  42. data/spec/mocks/requests/Account/close_account_holder.json +3 -0
  43. data/spec/mocks/requests/Account/create_account.json +3 -0
  44. data/spec/mocks/requests/Account/create_account_holder.json +15 -0
  45. data/spec/mocks/requests/Account/delete_bank_accounts.json +6 -0
  46. data/spec/mocks/requests/Account/delete_shareholders.json +6 -0
  47. data/spec/mocks/requests/Account/get_account_holder.json +3 -0
  48. data/spec/mocks/requests/Account/get_uploaded_documents.json +4 -0
  49. data/spec/mocks/requests/Account/suspend_account_holder.json +3 -0
  50. data/spec/mocks/requests/Account/un_suspend_account_holder.json +3 -0
  51. data/spec/mocks/requests/Account/update_account.json +7 -0
  52. data/spec/mocks/requests/Account/update_account_holder.json +33 -0
  53. data/spec/mocks/requests/Account/update_account_holder_state.json +6 -0
  54. data/spec/mocks/requests/Account/upload_document.json +9 -0
  55. data/spec/mocks/requests/Checkout/payment-details.json +18 -0
  56. data/spec/mocks/requests/Checkout/payment-result.json +3 -0
  57. data/spec/mocks/requests/Checkout/payment_methods.json +3 -0
  58. data/spec/mocks/requests/Checkout/payment_session.json +15 -0
  59. data/spec/mocks/requests/Checkout/payments.json +17 -0
  60. data/spec/mocks/requests/Checkout/verify.json +3 -0
  61. data/spec/mocks/requests/CheckoutUtility/origin_keys.json +7 -0
  62. data/spec/mocks/requests/Fund/account_holder_balance.json +3 -0
  63. data/spec/mocks/requests/Fund/account_holder_transaction_list.json +16 -0
  64. data/spec/mocks/requests/Fund/payout_account_holder.json +10 -0
  65. data/spec/mocks/requests/Fund/refund_not_paid_out_transfers.json +4 -0
  66. data/spec/mocks/requests/Fund/setup_beneficiary.json +5 -0
  67. data/spec/mocks/requests/Fund/transfer_funds.json +9 -0
  68. data/spec/mocks/requests/Notification/create_notification_configuration.json +20 -0
  69. data/spec/mocks/requests/Notification/delete_notification_configurations.json +6 -0
  70. data/spec/mocks/requests/Notification/get_notification_configuration.json +3 -0
  71. data/spec/mocks/requests/Notification/get_notification_configuration_list.json +1 -0
  72. data/spec/mocks/requests/Notification/test_notification_configuration.json +4 -0
  73. data/spec/mocks/requests/Notification/update_notification_configuration.json +26 -0
  74. data/spec/mocks/requests/Payment/adjust_authorisation.json +12 -0
  75. data/spec/mocks/requests/Payment/authorise.json +28 -0
  76. data/spec/mocks/requests/Payment/authorise3d.json +6 -0
  77. data/spec/mocks/requests/Payment/cancel.json +4 -0
  78. data/spec/mocks/requests/Payment/cancel_or_refund.json +4 -0
  79. data/spec/mocks/requests/Payment/capture.json +8 -0
  80. data/spec/mocks/requests/Payment/refund.json +8 -0
  81. data/spec/mocks/requests/Payout/confirm_third_party.json +4 -0
  82. data/spec/mocks/requests/Payout/decline_third_party.json +4 -0
  83. data/spec/mocks/requests/Payout/store_detail.json +33 -0
  84. data/spec/mocks/requests/Payout/store_detail_and_submit_third_party.json +33 -0
  85. data/spec/mocks/requests/Payout/submit_third_party.json +22 -0
  86. data/spec/mocks/requests/Recurring/disable.json +5 -0
  87. data/spec/mocks/requests/Recurring/list_recurring_details.json +4 -0
  88. data/spec/mocks/requests/Recurring/store_token.json +15 -0
  89. data/spec/mocks/responses/Account/close_account.json +5 -0
  90. data/spec/mocks/responses/Account/close_account_holder.json +7 -0
  91. data/spec/mocks/responses/Account/create_account.json +7 -0
  92. data/spec/mocks/responses/Account/create_account_holder.json +116 -0
  93. data/spec/mocks/responses/Account/delete_bank_accounts.json +4 -0
  94. data/spec/mocks/responses/Account/delete_shareholders.json +4 -0
  95. data/spec/mocks/responses/Account/get_account_holder.json +71 -0
  96. data/spec/mocks/responses/Account/get_uploaded_documents.json +16 -0
  97. data/spec/mocks/responses/Account/suspend_account_holder.json +24 -0
  98. data/spec/mocks/responses/Account/un_suspend_account_holder.json +24 -0
  99. data/spec/mocks/responses/Account/update_account.json +9 -0
  100. data/spec/mocks/responses/Account/update_account_holder.json +95 -0
  101. data/spec/mocks/responses/Account/update_account_holder_state.json +27 -0
  102. data/spec/mocks/responses/Account/upload_document.json +77 -0
  103. data/spec/mocks/responses/Checkout/payment-details.json +14 -0
  104. data/spec/mocks/responses/Checkout/payment-result.json +4 -0
  105. data/spec/mocks/responses/Checkout/payment_methods.json +66 -0
  106. data/spec/mocks/responses/Checkout/payment_session.json +572 -0
  107. data/spec/mocks/responses/Checkout/payments.json +95 -0
  108. data/spec/mocks/responses/Checkout/verify.json +121 -0
  109. data/spec/mocks/responses/CheckoutUtility/origin_keys.json +7 -0
  110. data/spec/mocks/responses/Fund/account_holder_balance.json +47 -0
  111. data/spec/mocks/responses/Fund/account_holder_transaction_list.json +73 -0
  112. data/spec/mocks/responses/Fund/payout_account_holder.json +6 -0
  113. data/spec/mocks/responses/Fund/refund_not_paid_out_transfers.json +5 -0
  114. data/spec/mocks/responses/Fund/setup_beneficiary.json +5 -0
  115. data/spec/mocks/responses/Fund/transfer_funds.json +6 -0
  116. data/spec/mocks/responses/Notification/create_notification_configuration.json +41 -0
  117. data/spec/mocks/responses/Notification/delete_notification_configurations.json +23 -0
  118. data/spec/mocks/responses/Notification/get_notification_configuration.json +41 -0
  119. data/spec/mocks/responses/Notification/get_notification_configuration_list.json +65 -0
  120. data/spec/mocks/responses/Notification/test_notification_configuration.json +49 -0
  121. data/spec/mocks/responses/Notification/update_notification_configuration.json +47 -0
  122. data/spec/mocks/responses/Payment/adjust_authorisation.json +4 -0
  123. data/spec/mocks/responses/Payment/authorise.json +95 -0
  124. data/spec/mocks/responses/Payment/authorise3d.json +30 -0
  125. data/spec/mocks/responses/Payment/cancel.json +4 -0
  126. data/spec/mocks/responses/Payment/cancel_or_refund.json +4 -0
  127. data/spec/mocks/responses/Payment/capture.json +4 -0
  128. data/spec/mocks/responses/Payment/refund.json +4 -0
  129. data/spec/mocks/responses/Payout/confirm_third_party.json +4 -0
  130. data/spec/mocks/responses/Payout/decline_third_party.json +4 -0
  131. data/spec/mocks/responses/Payout/store_detail.json +5 -0
  132. data/spec/mocks/responses/Payout/store_detail_and_submit_third_party.json +8 -0
  133. data/spec/mocks/responses/Payout/submit_third_party.json +8 -0
  134. data/spec/mocks/responses/Recurring/disable.json +30 -0
  135. data/spec/mocks/responses/Recurring/list_recurring_details.json +62 -0
  136. data/spec/mocks/responses/Recurring/store_token.json +7 -0
  137. data/spec/notification_spec.rb +19 -0
  138. data/spec/payments_spec.rb +20 -0
  139. data/spec/payouts_spec.rb +18 -0
  140. data/spec/recurring_spec.rb +17 -0
  141. data/spec/spec_helper.rb +94 -0
  142. metadata +246 -0
@@ -0,0 +1,572 @@
1
+ {
2
+ "disableRecurringDetailUrl": "https://checkoutshopper-test.adyen.com/checkoutshopper/services/PaymentInitiation/v1/disableRecurringDetail",
3
+ "generationtime": "2018-04-25T18:16:24Z",
4
+ "html": "\n\n\n\n\n\n<div class=\"chckt-sdk\" id=\"co-1524680184593-525\" data-payment-container>\n\n <div class=\"chckt-mustache-templates\">\n \n \n <script type=\"text/template+mustache\" data-template=\"textFieldType\">\n <label class=\"chckt-form-label chckt-form-label--full-width\" data-enrich=\"{{key}}\" >\n <span class=\"chckt-form-label__text\">{{{translateHelper key}}}:</span>\n {{! Returnfieldtype will create a js variable from the key and attach it to the class of the field }}\n <input class=\"chckt-input-field {{{returnFieldTypeHelper key}}}\" name=\"{{key}}\" placeholder=\"{{placeholder}}\" data-shopper-locale=\"{{h_shopperLocale}}\" type=\"text\" size=\"20\"\n onkeyup=\"{{returnTextFieldTypeFnyHelper key}}\"\n {{#if @root.addExtraTextEvents}}\n onkeypress=\"{{returnTextFieldKeyPressFnyHelper key}}\"\n oninput=\"{{returnTextFieldInputFnyHelper key}}\"\n onfocus=\"return chckt.textFieldSetFocus(this, true)\"\n onblur=\"return chckt.textFieldSetFocus(this, false)\"\n {{/if}}\n />\n</label>\n\n\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"checkboxFieldType\">\n <label class=\"chckt-form-label chckt-form-label--full-width\">\n <input class=\"chckt-checkbox\" checked type=\"checkbox\" name=\"{{key}}\" value=\"true\"/>{{!-- NOTE: value=\\\"true\\\" here ensures that the checkbox, if checked, sends storeDetails:\\\"true\\\" in the paymentDetails object of the payment initiation request. Without it we send storeDetails:\\\"on\\\" which the backend doesn't recognise --}}\n <span class=\"chckt-form-label__text\">\n {{label}}{{#unless label}}{{translateHelper key}}{{/unless}}\n </span>\n</label>\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"selectFieldType\">\n \n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"issuerListFieldType\">\n {{#if items}}\n <label class=\"chckt-form-label chckt-form-label--full-width\">\n <span class=\"chckt-form-label__text\">{{translateHelper \"idealIssuer.selectField.title\"}}:</span>\n <select class=\"chckt-select-box js-chckt-issuer-select-box\" onchange=\"chckt.selectIssuer(this)\" name=\"{{key}}\"\n {{#if @root.addExtraTextEvents}}\n onfocus=\"return chckt.selectFieldSetFocus(this, true)\"\n onblur=\"return chckt.selectFieldSetFocus(this, false)\"\n {{/if}}\n >\n <option value=\"placeholder\">{{translateHelper \"idealIssuer.selectField.placeholder\"}}</option>\n {{#items}}\n <option value=\"{{id}}\" name=\"{{../key}}\" data-issuer-image=\"{{imageUrl}}\">{{name}}</option>\n {{/items}}\n </select>\n </label>\n{{/if}}\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"paymentMethods\">\n {{#if @root.SDKVersion}}\n <div class=\"js-chckt-pm__pm-holder chckt-pm__pm-holder\">\n{{else}}\n <form>\n{{/if}}\n\n <input type=\"hidden\" name=\"txvariant\" value=\"{{type}}\" />\n {{#if inputDetails}}\n <div class=\"chckt-pm__details js-chckt-pm__details\">\n {{#each inputDetails}}\n {{#if @first}}\n <div class=\"chckt-form chckt-form--max-width\">\n {{/if}}\n {{/each}}\n {{/if}}\n\n {{#inputDetailHelper inputDetails}}\n {{! POPULATED DYNAMICALLY VIA 'inputDetailHelper'}}\n {{/inputDetailHelper}}\n {{#if inputDetails}}\n {{#each inputDetails}}\n {{#if @first}}\n </div>\n {{/if}}\n {{/each}}\n </div>\n {{/if}}\n\n{{#if @root.SDKVersion}}\n </div>\n{{else}}\n </form>\n{{/if}}\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"selectPaymentMethod\">\n <div class=\"chckt-pm-list js-chckt-pm-list\">\n {{^paymentMethods}}\n <div class=\"chckt-pm-list--empty\">There are no payment methods for your combination of currency and country.</div>\n {{/paymentMethods}}\n\n\n {{#paymentMethods}}\n\n {{! If recurringdetails are there... load them from the recurring object and replace the name with them... }}\n <div class=\"chckt-pm chckt-pm-{{type}} js-chckt-pm\" {{#inputDetailsMandatoryHelper inputDetails}} {{! Will assess inputDetails objects to see if the data-additional-required flag is needed }} {{/inputDetailsMandatoryHelper}} data-pm=\"{{type}}\">\n <div class=\"chckt-pm__header js-chckt-pm__header\" onclick=\"return chckt.selectPaymentMethod(this, '{{type}}')\">\n <input class=\"chckt-pm__radio-button js-chckt-pm-radio-button\" type=\"radio\" name=\"payment-method\" id=\"{{type}}\" data-chckt-submit-link=\"{{hppUrl}}\">\n <span class=\"chckt-pm__name js-chckt-pm__name\">{{{name}}}</span>\n <span class=\"chckt-pm__image\">\n <img width=\"40\" src=\"{{@root.logoBaseUrl}}{{#pmImageHelper type}}{{/pmImageHelper}}@2x.png\" alt=\"{{label}}\" />\n <span class=\"chckt-pm__image-border\"></span>\n </span>\n </div>\n {{>paymentMethods shopperLocale=@root.payment.shopperLocale}}\n </div>\n {{/paymentMethods}}\n\n\n {{#if paymentMethods}}\n <div class=\"chckt-button-container js-chckt-button-container\">\n <a class=\"chckt-pm-list__button chckt-more-pm-button js-chckt-extra-pms-button\" data-pm=\"extra-pms-button\" target=\"_blank\" onclick=\"return chckt.toggleExcessPaymentMethods(this, 'js-chckt-extra-pms-button')\">\n <span class=\"chckt-more-pm-button__icon\">+</span><span class=\"chckt-more-pm-button__text\">{{{translateHelper \"paymentMethods.moreMethodsButton\"}}}</span>\n </a>\n\n {{#buttonActionHelper}}\n {{! POPULATED DYNAMICALLY VIA 'buttonActionHelper' which places either the 'payButton' or the 'reviewButton' template here}}\n {{/buttonActionHelper}}\n </div>\n {{/if}}\n\n</div>\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"payment\">\n <div class=\"chckt-preloader-container\">\n <div class=\"chckt-preloader__bar chckt-preloader__bar--loading\"></div>\n</div>\n{{>selectPaymentMethod}}\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"pending\">\n <div class=\"chckt-pm__pending-message js-chckt-pending-details\">\n {{translateHelper \"payment.processing\"}}\n</div>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"redirect-complete\">\n <div class=\"co-charge-redirect\">\n <div class=\"co-loader-bar\"></div>\n Your payment is being processed.\n\n <form method=\"get\" action=\"{{response.url}}\">\n <input type=\"hidden\" name=\"payload\" value=\"{{response.payload}}\" />\n <input type=\"button\" value=\"Continue\" />\n </form>\n</div>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"redirect-details\">\n <div class=\"chckt-pm__pending-message js-chckt-redirect\">\n <span class=\"chckt-pm__pending-details\">{{translateHelper \"payment.redirecting\"}}</span>\n</div>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"giropay\">\n <input type=\"hidden\" id=\"js-chckt-giropay-bic\" name=\"giropay.bic\">\n<label class=\"chckt-form-label chckt-form-label--full-width\">\n <span class=\"chckt-form-label__text\">{{translateHelper \"giropay.searchField.placeholder\"}}:</span>\n <input type=\"text\" autocomplete=\"false\" class=\"chckt-input-field\" id=\"js-chckt-giropay-input-field\" placeholder=\"{{translateHelper 'giropay.minimumLength'}}\" onkeyup=\"chckt.giroPayLookup(event, this, '{{@root.originKey}}', '{{giroPayIssuersUrl}}')\"/>\n</label>\n<label class=\"chckt-form-label chckt-form-label--full-width\">\n <span class=\"chckt-form-label__text\">{{translateHelper \"giropay.searchField.placeholder\"}}:</span>\n <select class=\"chckt-pm__giropay-suggestions\" size=\"4\" id=\"js-chckt-giropay-suggestion-list\">\n <option disabled class=\"chckt-form-label__helper\">\n Deutsche Bank PGK Berlin 10883 Berlin (10070024 / DEUTDEDBBER)\n </option>\n </select>\n</label>\n\n\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldTypeRecurring\">\n <div class=\"chckt-pm__recurring-details\">\n <label class=\"chckt-form-label chckt-form-label--exp-date\">\n <span class=\"chckt-form-label__text\">{{{translateHelper \"creditCard.expiryDateField.title\"}}}:</span>\n <span class=\"chckt-input-field chckt-input-field--recurring\" data-cse=\"{{key}}\">{{recurring.expiryMonth}}/{{recurring.expiryYear}}</span>\n </label>\n <label class=\"chckt-form-label chckt-form-label--cvc\">\n <span class=\"chckt-form-label__text js-chckt-cvc-field-label\">{{translateHelper \"creditCard.cvcField.title\"}}:</span>\n <span class=\"chckt-input-field chckt-input-field--cvc js-chckt-hosted-input-field\" data-hosted-id=\"hostedSecurityCodeField\" data-cse=\"{{key}}\" data-optional=\"{{optional}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.oneClickVerification.invalidInput.title\"}}</span>\n </label>\n\n {{!--<label class=\"chckt-form-label chckt-form--labelholder\">\n <span class=\"chckt-form-label__text js-chckt-holder-field-label\">{{{translateHelper \"cardholder_name\"}}}:</span>\n <span class=\"chckt-input-field js-chckt-hosted-input-field\" data-hosted-id=\"hostedHolderField\" data-cse=\"{{key}}\"></span>\n <span class=\"chckt-form-label__error-text\"></span>\n </label>--}}\n</div>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"error\">\n <div class=\"chckt-pm__pending-message chckt-pm__error-message js-chckt-error\">\n {{translateHelper \"error.subtitle.payment\"}}: {{message}}\n</div>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"payButton\">\n <button type=\"button\" class=\"chckt-button chckt-pm-list__button chckt-button--submit js-chckt-button--submit\" onclick=\"chckt.submitPaymentForm(true, event)\">\n <span class=\"chckt-button__text-content\">\n {{#if payment.amount.value}}\n <span class=\"chckt-button__text\">{{translateHelper \"payButton\"}}</span>\n <span class=\"chckt-button__amount\">{{getLocalisedAmountHelper @root.payment.amount.value @root.payment.shopperLocale @root.payment.amount.currency}}</span>\n {{else}}\n <span class=\"chckt-button__text\">{{translateHelper \"payButton\"}}</span>\n {{/if}}\n </span>\n <span class=\"chckt-button__loading-icon\">\n <div class=\"circle1\"></div>\n <div class=\"circle2\"></div>\n <div class=\"circle3\"></div>\n </span>\n</button>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"reviewButton\">\n <button type=\"button\" class=\"chckt-button chckt-pm-list__button chckt-button--submit js-chckt-button--submit\" onclick=\"chckt.submitPaymentForm(false, event)\">\n <span class=\"chckt-button__text\">Review order</span>\n <span class=\"chckt-button__loading-icon\">\n <div class=\"circle1\"></div>\n <div class=\"circle2\"></div>\n <div class=\"circle3\"></div>\n </span>\n</button>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldCardNumber\">\n <label class=\"chckt-form-label chckt-form-label--full-width\">\n <span class=\"chckt-form-label__text js-chckt-card-label\" onclick=\"chckt.setFocusOnField(this, true)\">{{translateHelper \"creditCard.numberField.title\"}}:</span>\n <span class=\"chckt-input-field js-chckt-hosted-input-field\" data-hosted-id=\"hostedCardNumberField\" data-cse=\"{{key}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.numberField.invalid\"}}</span>\n</label>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldExpiryDate\">\n <label class=\"chckt-form-label chckt-form-label--exp-date\">\n <span class=\"chckt-form-label__text\" onclick=\"chckt.setFocusOnField(this, true)\">{{translateHelper \"creditCard.expiryDateField.title\"}}:</span>\n <span class=\"chckt-input-field js-chckt-hosted-input-field\" data-hosted-id=\"hostedExpiryDateField\" data-cse=\"{{key}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.expiryDateField.invalid\"}}</span>\n</label>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldExpiryMonth\">\n <label class=\"chckt-form-label chckt-form-label--exp-month\">\n <span class=\"chckt-form-label__text\" onclick=\"chckt.setFocusOnField(this, true)\">{{translateHelper \"creditCard.expiryDateField.month\"}}:</span>\n <span class=\"chckt-input-field js-chckt-hosted-input-field\" data-hosted-id=\"hostedExpiryMonthField\" data-cse=\"{{key}}\" name=\"{{key}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.expiryDateField.invalid\"}}</span>\n</label>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldExpiryYear\">\n <label class=\"chckt-form-label chckt-form-label--exp-year\">\n <span class=\"chckt-form-label__text\" onclick=\"chckt.setFocusOnField(this, true)\">{{translateHelper \"creditCard.expiryDateField.year\"}}:</span>\n <span class=\"chckt-input-field js-chckt-hosted-input-field\" data-hosted-id=\"hostedExpiryYearField\" data-cse=\"{{key}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.expiryDateField.invalid\"}}</span>\n</label>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"cardFieldSecurityCode\">\n <label class=\"chckt-form-label chckt-form-label--cvc\">\n <span class=\"chckt-form-label__text js-chckt-cvc-field-label\" onclick=\"chckt.setFocusOnField(this, true)\">{{translateHelper \"creditCard.cvcField.title\"}}:</span>\n <span class=\"chckt-input-field chckt-input-field--cvc js-chckt-hosted-input-field\" data-hosted-id=\"hostedSecurityCodeField\" data-cse=\"{{key}}\" data-optional=\"{{optional}}\"></span>\n <span class=\"chckt-form-label__error-text\">{{translateHelper \"creditCard.oneClickVerification.invalidInput.message\"}}</span>\n</label>\n </script>\n\n \n \n <script type=\"text/template+mustache\" data-template=\"applepay\">\n <label class=\"chckt-form-label chckt-form-label--full-width\">\n <input class=\"chckt-applepay\" type=\"button\" name=\"{{key}}\" onclick=\"chckt.applePayButtonClicked('{{h_merchantIdentifier}}')\" />\n</label>\n\n </script>\n\n <noscript id=\"co-1524680184593-525-ssr\">\n Template 'payment' not found.\n </noscript>\n </div>\n</div>\n\n\n\n\n\n",
5
+ "initiationUrl": "https://checkoutshopper-test.adyen.com/checkoutshopper/services/PaymentInitiation/v1/initiate?token=pub.v2.8115054323780109.aHR0cDovL3d3dy50ZXN0LW1lcmNoYW50LmNvbQ.wWmY6dgOP0L3lZkc-B8w1tWPls75lROTGX0RbWfgV0Y",
6
+ "logoBaseUrl": "https://checkoutshopper-test.adyen.com/checkoutshopper/img/pm/",
7
+ "origin": "http://www.test-merchant.com",
8
+ "originKey": "pub.v2.8115054323780109.aHR0cDovL3d3dy50ZXN0LW1lcmNoYW50LmNvbQ.wWmY6dgOP0L3lZkc-B8w1tWPls75lROTGX0RbWfgV0Y",
9
+ "payment": {
10
+ "amount": {
11
+ "currency": "EUR",
12
+ "value": 1500
13
+ },
14
+ "countryCode": "US",
15
+ "reference": "PM Checkout setup",
16
+ "sessionValidity": "2018-04-25T19:16:24Z",
17
+ "shopperLocale": "en_GB",
18
+ "shopperReference": "crrood"
19
+ },
20
+ "paymentData": "Ab02b4c0!BQABAgBeQ2V810FwD+2qzp00UscdKjkbM3C2LayIt0I3X3+UVJXpviG3nZRvpyznXA3qeNqfi/sfkMgvwgSu5nGt0CfwydFRDpJZHGbbd+q4c1BziBIHQI/MhRZe/EF62iiBqoYFc6tTyJ2prj3Aylubo+sYphGU1haB6XGB19IbBadUByS3LIzYf0qPGN7Y7cQWqq+yG/Y7ZlfpObT3fum85nyoSX0rlJ0mu1hYTn47F37qO6L7b2/wpczUvWSgQHEgqM0l4eJP4oQQR7JrK3WrwxXhdg6fbCPqVtiurqTiZb929GKP8uA1HoCQR1ZEhhdkAgZPTUDQ1ICAmtwEJwilyFC864sPiisBKaE1nHBG7DmQTZ7xKNUx3fflqu5BOf2h85Ghu3kXMw91AYoLDenn8lwy6YmyjTe3JPkWCn7/NkVbWK5VWlwRQ5kSktAEHFEC6mUCm7XBlWoStyGAsQIkMbIMiW69dh/4PBjlfmwcnZB3R8z419A2MXMXG+4cUpQnVm4G9qBp9/NCwVlVkCMdWqqcwv6tkXsU7Voukv9TpxwF2JQHz3sdvqJbEjnHpSJzdHR6EZtKoqe3pZNBY6K1WV4a7w5iT30gQbapHFjWYc/4A6PPxJXK/cfFYhim1W/KERaP2ORNQDQoU7t5+J52UfXyw+m9z2Th7BSvn2uqcBSqDxDTosWFSicp57AtR3weDGqEAEp7ImtleSI6IkFGMEFBQTEwM0NBNTM3RUFFRDg3QzI0REQ1MzkwOUI4MEE3OEE5MjNFMzgyM0Q2OERBQ0M5NEI5RkY4MzA1REMifSnGc0T0lS8hMzfQR2saTlUI2l9uVK9uRQy5jITxqznPhgdbRci0QeOsXRu8qI6vWKoB4Yplba+jDBJT9Ly4leEiG13xWqDUX4gUpd3FGvYSW7UQI/phxmmPOBNunQdVPhBr+Nh+5QEvI2/Fpkv36Nk16OZXnTqYPPiLVbvX2j/ARu/jIN7Qh6gy+4ofc7UVxxacWADOtPy9H9Nk8+pAcf9zjRxyJR8mflDXjTVBmBtIgGqfbLOtKs1lDQT3TpH7l/SDjqPuA/DGEWJp7azGov8DEkIQ5X/nDGkun86Ww1ojTULoal+eluwZEhB8fb3H2T9NUqdbueajtB+vwiVx8cNFRv9+XAM9F0xOtPFObXSKgvxSyFvRjEWhqb+fYRfdLVQ5vePFs+yt5jdSFuPjXacpsGOvTZDFv95uXZF/GRVa8XlfSJ+cyL6AwX+I/sAw9JqvU/qZ4f8sDD98/SfJmnmW/WnYxcQgYucVrvOp1UpL7MwtYP/RGfZxWtuVQoToo04aW3f9nY5gZzsT9CdgkcRx1i3RYNQJRUlHSLjp9k1uAFhyXLpwWWrf0WpXVfIwNMGODFacYZDqGMoOMJdjbnQPQc11gBmj4UqO9q5QY3Y9dY96nCJHsv9n8+P1ACdc8wEWC5JhN7DcSK3cY0cwP/OCv/YEKbbfyRIY4xOS31avVAulsnPgQYhbfyb3laQq2PHCdF7oOgr+j++nw56k9UMQMGnkPh/R9vo+HlG4/ICm/n1ot1lP1PwhnSsSyQgOmFaXu5Oxwwlca1I3oBRxPsWMteDXSPmJSV+fR6yjaMtWnacsiz5wTZtUeT6Gggi47SsBIF5iXZ0r59gBDIJYC6k2fGs7Lhndrtflh+3PKj+Yf8lVp7fXnqVBhb0JAO3z0I2ZMpD24mfjYLKy0DkPQvoolBftK2YLXMx1w5VH+cXFwS8bSEyOTSZWVRpgXUoUGBgdjWxEv+QUtUDypR3N7TRR5DCVHsYs8Mc6ziIerunok0SX8hXF9zTHJiK+iRVXTZfoOKfxsw+1iG5+k9+wos88QLZbks3nWSZMVdCmQMaNHCLwxRbWruQvs1fLXUmT+APkCyaQmcFYc+S3/oAEUkCW33twCQ==",
21
+ "paymentMethods": [
22
+ {
23
+ "group": {
24
+ "name": "Credit Card",
25
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
26
+ "type": "card"
27
+ },
28
+ "inputDetails": [
29
+ {
30
+ "key": "encryptedCardNumber",
31
+ "type": "cardToken"
32
+ },
33
+ {
34
+ "key": "encryptedSecurityCode",
35
+ "type": "cardToken"
36
+ },
37
+ {
38
+ "key": "encryptedExpiryMonth",
39
+ "type": "cardToken"
40
+ },
41
+ {
42
+ "key": "encryptedExpiryYear",
43
+ "type": "cardToken"
44
+ },
45
+ {
46
+ "key": "holderName",
47
+ "optional": "true",
48
+ "type": "text"
49
+ },
50
+ {
51
+ "key": "storeDetails",
52
+ "optional": "true",
53
+ "type": "boolean"
54
+ },
55
+ {
56
+ "inputDetails": [
57
+ {
58
+ "key": "street",
59
+ "type": "text"
60
+ },
61
+ {
62
+ "key": "houseNumberOrName",
63
+ "type": "text"
64
+ },
65
+ {
66
+ "key": "city",
67
+ "type": "text"
68
+ },
69
+ {
70
+ "key": "postalCode",
71
+ "type": "text"
72
+ },
73
+ {
74
+ "key": "stateOrProvince",
75
+ "optional": "true",
76
+ "type": "text"
77
+ },
78
+ {
79
+ "key": "country",
80
+ "type": "text"
81
+ }
82
+ ],
83
+ "key": "billingAddress",
84
+ "type": "address"
85
+ }
86
+ ],
87
+ "name": "American Express",
88
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWFtZXg=",
89
+ "type": "amex"
90
+ },
91
+ {
92
+ "group": {
93
+ "name": "Credit Card",
94
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
95
+ "type": "card"
96
+ },
97
+ "inputDetails": [
98
+ {
99
+ "key": "encryptedCardNumber",
100
+ "type": "cardToken"
101
+ },
102
+ {
103
+ "key": "encryptedSecurityCode",
104
+ "type": "cardToken"
105
+ },
106
+ {
107
+ "key": "encryptedExpiryMonth",
108
+ "type": "cardToken"
109
+ },
110
+ {
111
+ "key": "encryptedExpiryYear",
112
+ "type": "cardToken"
113
+ },
114
+ {
115
+ "key": "holderName",
116
+ "optional": "true",
117
+ "type": "text"
118
+ },
119
+ {
120
+ "key": "storeDetails",
121
+ "optional": "true",
122
+ "type": "boolean"
123
+ },
124
+ {
125
+ "inputDetails": [
126
+ {
127
+ "key": "street",
128
+ "type": "text"
129
+ },
130
+ {
131
+ "key": "houseNumberOrName",
132
+ "type": "text"
133
+ },
134
+ {
135
+ "key": "city",
136
+ "type": "text"
137
+ },
138
+ {
139
+ "key": "postalCode",
140
+ "type": "text"
141
+ },
142
+ {
143
+ "key": "stateOrProvince",
144
+ "optional": "true",
145
+ "type": "text"
146
+ },
147
+ {
148
+ "key": "country",
149
+ "type": "text"
150
+ }
151
+ ],
152
+ "key": "billingAddress",
153
+ "type": "address"
154
+ }
155
+ ],
156
+ "name": "ExpressPay",
157
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWN1cA==",
158
+ "type": "cup"
159
+ },
160
+ {
161
+ "group": {
162
+ "name": "Credit Card",
163
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
164
+ "type": "card"
165
+ },
166
+ "inputDetails": [
167
+ {
168
+ "key": "encryptedCardNumber",
169
+ "type": "cardToken"
170
+ },
171
+ {
172
+ "key": "encryptedSecurityCode",
173
+ "type": "cardToken"
174
+ },
175
+ {
176
+ "key": "encryptedExpiryMonth",
177
+ "type": "cardToken"
178
+ },
179
+ {
180
+ "key": "encryptedExpiryYear",
181
+ "type": "cardToken"
182
+ },
183
+ {
184
+ "key": "holderName",
185
+ "optional": "true",
186
+ "type": "text"
187
+ },
188
+ {
189
+ "key": "storeDetails",
190
+ "optional": "true",
191
+ "type": "boolean"
192
+ },
193
+ {
194
+ "inputDetails": [
195
+ {
196
+ "key": "street",
197
+ "type": "text"
198
+ },
199
+ {
200
+ "key": "houseNumberOrName",
201
+ "type": "text"
202
+ },
203
+ {
204
+ "key": "city",
205
+ "type": "text"
206
+ },
207
+ {
208
+ "key": "postalCode",
209
+ "type": "text"
210
+ },
211
+ {
212
+ "key": "stateOrProvince",
213
+ "optional": "true",
214
+ "type": "text"
215
+ },
216
+ {
217
+ "key": "country",
218
+ "type": "text"
219
+ }
220
+ ],
221
+ "key": "billingAddress",
222
+ "type": "address"
223
+ }
224
+ ],
225
+ "name": "Diners Club",
226
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWRpbmVycw==",
227
+ "type": "diners"
228
+ },
229
+ {
230
+ "group": {
231
+ "name": "Credit Card",
232
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
233
+ "type": "card"
234
+ },
235
+ "inputDetails": [
236
+ {
237
+ "key": "encryptedCardNumber",
238
+ "type": "cardToken"
239
+ },
240
+ {
241
+ "key": "encryptedSecurityCode",
242
+ "type": "cardToken"
243
+ },
244
+ {
245
+ "key": "encryptedExpiryMonth",
246
+ "type": "cardToken"
247
+ },
248
+ {
249
+ "key": "encryptedExpiryYear",
250
+ "type": "cardToken"
251
+ },
252
+ {
253
+ "key": "holderName",
254
+ "optional": "true",
255
+ "type": "text"
256
+ },
257
+ {
258
+ "key": "storeDetails",
259
+ "optional": "true",
260
+ "type": "boolean"
261
+ },
262
+ {
263
+ "inputDetails": [
264
+ {
265
+ "key": "street",
266
+ "type": "text"
267
+ },
268
+ {
269
+ "key": "houseNumberOrName",
270
+ "type": "text"
271
+ },
272
+ {
273
+ "key": "city",
274
+ "type": "text"
275
+ },
276
+ {
277
+ "key": "postalCode",
278
+ "type": "text"
279
+ },
280
+ {
281
+ "key": "stateOrProvince",
282
+ "optional": "true",
283
+ "type": "text"
284
+ },
285
+ {
286
+ "key": "country",
287
+ "type": "text"
288
+ }
289
+ ],
290
+ "key": "billingAddress",
291
+ "type": "address"
292
+ }
293
+ ],
294
+ "name": "Discover",
295
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWRpc2NvdmVy",
296
+ "type": "discover"
297
+ },
298
+ {
299
+ "name": "DOKU wallet",
300
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWRva3Vfd2FsbGV0",
301
+ "type": "doku_wallet"
302
+ },
303
+ {
304
+ "name": "Givex",
305
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWdpdmV4",
306
+ "type": "givex"
307
+ },
308
+ {
309
+ "group": {
310
+ "name": "Credit Card",
311
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
312
+ "type": "card"
313
+ },
314
+ "inputDetails": [
315
+ {
316
+ "key": "encryptedCardNumber",
317
+ "type": "cardToken"
318
+ },
319
+ {
320
+ "key": "encryptedSecurityCode",
321
+ "type": "cardToken"
322
+ },
323
+ {
324
+ "key": "encryptedExpiryMonth",
325
+ "type": "cardToken"
326
+ },
327
+ {
328
+ "key": "encryptedExpiryYear",
329
+ "type": "cardToken"
330
+ },
331
+ {
332
+ "key": "holderName",
333
+ "optional": "true",
334
+ "type": "text"
335
+ },
336
+ {
337
+ "key": "storeDetails",
338
+ "optional": "true",
339
+ "type": "boolean"
340
+ },
341
+ {
342
+ "inputDetails": [
343
+ {
344
+ "key": "street",
345
+ "type": "text"
346
+ },
347
+ {
348
+ "key": "houseNumberOrName",
349
+ "type": "text"
350
+ },
351
+ {
352
+ "key": "city",
353
+ "type": "text"
354
+ },
355
+ {
356
+ "key": "postalCode",
357
+ "type": "text"
358
+ },
359
+ {
360
+ "key": "stateOrProvince",
361
+ "optional": "true",
362
+ "type": "text"
363
+ },
364
+ {
365
+ "key": "country",
366
+ "type": "text"
367
+ }
368
+ ],
369
+ "key": "billingAddress",
370
+ "type": "address"
371
+ }
372
+ ],
373
+ "name": "JCB",
374
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPWpjYg==",
375
+ "type": "jcb"
376
+ },
377
+ {
378
+ "group": {
379
+ "name": "Credit Card",
380
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
381
+ "type": "card"
382
+ },
383
+ "inputDetails": [
384
+ {
385
+ "key": "encryptedCardNumber",
386
+ "type": "cardToken"
387
+ },
388
+ {
389
+ "key": "encryptedSecurityCode",
390
+ "type": "cardToken"
391
+ },
392
+ {
393
+ "key": "encryptedExpiryMonth",
394
+ "type": "cardToken"
395
+ },
396
+ {
397
+ "key": "encryptedExpiryYear",
398
+ "type": "cardToken"
399
+ },
400
+ {
401
+ "key": "holderName",
402
+ "optional": "true",
403
+ "type": "text"
404
+ },
405
+ {
406
+ "key": "storeDetails",
407
+ "optional": "true",
408
+ "type": "boolean"
409
+ },
410
+ {
411
+ "inputDetails": [
412
+ {
413
+ "key": "street",
414
+ "type": "text"
415
+ },
416
+ {
417
+ "key": "houseNumberOrName",
418
+ "type": "text"
419
+ },
420
+ {
421
+ "key": "city",
422
+ "type": "text"
423
+ },
424
+ {
425
+ "key": "postalCode",
426
+ "type": "text"
427
+ },
428
+ {
429
+ "key": "stateOrProvince",
430
+ "optional": "true",
431
+ "type": "text"
432
+ },
433
+ {
434
+ "key": "country",
435
+ "type": "text"
436
+ }
437
+ ],
438
+ "key": "billingAddress",
439
+ "type": "address"
440
+ }
441
+ ],
442
+ "name": "MasterCard",
443
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPW1j",
444
+ "type": "mc"
445
+ },
446
+ {
447
+ "name": "Moneybookers",
448
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPW1vbmV5Ym9va2Vycw==",
449
+ "type": "moneybookers"
450
+ },
451
+ {
452
+ "name": "NETELLER",
453
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPW5ldGVsbGVy",
454
+ "type": "neteller"
455
+ },
456
+ {
457
+ "name": "PayPal",
458
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXBheXBhbA==",
459
+ "type": "paypal"
460
+ },
461
+ {
462
+ "name": "Paysafecard",
463
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXBheXNhZmVjYXJk",
464
+ "type": "paysafecard"
465
+ },
466
+ {
467
+ "name": "Qiwi Wallet",
468
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXFpd2l3YWxsZXQ=",
469
+ "type": "qiwiwallet"
470
+ },
471
+ {
472
+ "name": "UnionPay",
473
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXVuaW9ucGF5",
474
+ "type": "unionpay"
475
+ },
476
+ {
477
+ "group": {
478
+ "name": "Credit Card",
479
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
480
+ "type": "card"
481
+ },
482
+ "inputDetails": [
483
+ {
484
+ "key": "encryptedCardNumber",
485
+ "type": "cardToken"
486
+ },
487
+ {
488
+ "key": "encryptedSecurityCode",
489
+ "type": "cardToken"
490
+ },
491
+ {
492
+ "key": "encryptedExpiryMonth",
493
+ "type": "cardToken"
494
+ },
495
+ {
496
+ "key": "encryptedExpiryYear",
497
+ "type": "cardToken"
498
+ },
499
+ {
500
+ "key": "holderName",
501
+ "optional": "true",
502
+ "type": "text"
503
+ },
504
+ {
505
+ "key": "storeDetails",
506
+ "optional": "true",
507
+ "type": "boolean"
508
+ },
509
+ {
510
+ "inputDetails": [
511
+ {
512
+ "key": "street",
513
+ "type": "text"
514
+ },
515
+ {
516
+ "key": "houseNumberOrName",
517
+ "type": "text"
518
+ },
519
+ {
520
+ "key": "city",
521
+ "type": "text"
522
+ },
523
+ {
524
+ "key": "postalCode",
525
+ "type": "text"
526
+ },
527
+ {
528
+ "key": "stateOrProvince",
529
+ "optional": "true",
530
+ "type": "text"
531
+ },
532
+ {
533
+ "key": "country",
534
+ "type": "text"
535
+ }
536
+ ],
537
+ "key": "billingAddress",
538
+ "type": "address"
539
+ }
540
+ ],
541
+ "name": "VISA",
542
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXZpc2E=",
543
+ "type": "visa"
544
+ }
545
+ ],
546
+ "publicKey": "10001|DAAA84F903B74D76E2E452201F49998FAF18743AF5BBE880E169752F3C60B8C5C601E99CBF66C4DAE57B818ECA837FD0A53A70FFC7515796E0CB4D4A07B15A1D0496B3E2D41A8099A25E055E5224E15AF203F8EDFBDA9FCCF6A5793AA3C620CB62D81F9103BF5EF362531D8742B84B597F46D2B29ABFE680DB09F1AE6B9D4ED3CBEDA22E3CC4D388BAC76A39116E0CA787483419B941F24FFD9EB2DC158EA20CA5A84D1DB1E3B5FEE2B8AB5512EAF7DE572366B10D5C57C09F3002CF0FD0AE557887C4078DE00EB48CDD6763BD976C969D91200C5DB11B2C3B002B4C31EC5BBFB27B00791813757C21D631DCC1E9B74610BCA05F5CFA4DE0662C0F561CF616BB",
547
+ "publicKeyToken": "8115054323780109",
548
+ "recurringDetails": [
549
+ {
550
+ "group": {
551
+ "name": "Credit Card",
552
+ "paymentMethodData": "Cf62f1e3!YnJhbmRDb2RlPXNjaGVtZQ==",
553
+ "type": "card"
554
+ },
555
+ "inputDetails": [
556
+ {
557
+ "key": "encryptedSecurityCode",
558
+ "type": "cardToken"
559
+ }
560
+ ],
561
+ "name": "VISA",
562
+ "paymentMethodData": "Ab02b4c0!BQABAgAJcc0Mfmnb5uvJeS00zHNqol1QGDJJp5fHM7GH69oHibX74WnkRMJbIAJk8Ip07jX1XfCbWBzaPzezgqaA4dZtkvSzwhl2dQPTUtEKpbpY2ydxfjvl+1X8d8A4YEDHwTZ9702BtCGWjzUw+IxEpVlWG1DaW8eWrJXq7UMzDcSNZFI0veKoL9aC3x/AmzdHaYOxDMrqt9tcY4myi5K83EbV9Yl52wlm8iNGg5QjRCzVMXATmh6KD9ZTOj39AqdiUfqmnRqhCTsdI3WUiqRTuoo6In9xB/0n1jzvVOXaUxC+6OoxtRXIdmoaQ4VkjDc9XeJFWKdC4AVyB963yaqVzgWqCZ2YNFIMZOjmdTxzo7lO5XqhE7G+HhYoInN8nNIDqX+irWSyQ7PmcfLPXCzvOQDDo3mITiKovo59SUhvn93R7TXqgB3HyAY5k4racn2yyl0zHJm5XOhSMD4XKJUe08jNy17BVcB4MTvCzRXC3UsVV4QdwcEL7VZu8rZf7yRV5+F2F8KOnkV70zw26Ve7rWw+CflXHTWvFpAttsURZRrMtIC72yez/WoXyvgBtbUNXXWO8t/7VsGODpIFRm/lXOzXnzNTOFOrn9ElqhO0+KzAFriNO+nGAho88JCO+zOJ/RafAIYFCv6L96N1GYKpqgyhSYlMEyLzmXVwDc/IkySLLRDwTn/GSZxnmK6sZ+LVtt3PAEp7ImtleSI6IkFGMEFBQTEwM0NBNTM3RUFFRDg3QzI0REQ1MzkwOUI4MEE3OEE5MjNFMzgyM0Q2OERBQ0M5NEI5RkY4MzA1REMifeMx8P5L/zG+OhnSWCLZiJ7yvFA+KSqaePRbANuhevlbcPrJy/dtbbWh/dljfZLUIZueSBVK9Us+Do/7I/sGenHCHrdTw8m1oyQq2rycsbr3aRANjd99zqd5hmvR",
563
+ "type": "visa",
564
+ "card": {
565
+ "expiryMonth": "8",
566
+ "expiryYear": "2018",
567
+ "holderName": "Test Person",
568
+ "number": "1111"
569
+ }
570
+ }
571
+ ]
572
+ }