Payment Plugins for Stripe WooCommerce - Version 3.0.0

Version Description

Download this release

Release Info

Developer mr.clayton
Plugin Icon wp plugin Payment Plugins for Stripe WooCommerce
Version 3.0.0
Comparing to
See all releases

Version 3.0.0

Files changed (156) hide show
  1. apple-developer-merchantid-domain-association +1 -0
  2. assets/css/admin/admin.css +138 -0
  3. assets/css/stripe.css +383 -0
  4. assets/img/alipay.svg +1 -0
  5. assets/img/applepay.svg +76 -0
  6. assets/img/bancontact.svg +1 -0
  7. assets/img/card_brand.svg +3 -0
  8. assets/img/card_brand2.svg +3 -0
  9. assets/img/cards/amex.svg +1 -0
  10. assets/img/cards/china_union_pay.svg +13 -0
  11. assets/img/cards/diners.svg +1 -0
  12. assets/img/cards/discover.svg +1 -0
  13. assets/img/cards/jcb.svg +1 -0
  14. assets/img/cards/laser.svg +1 -0
  15. assets/img/cards/maestro.svg +1 -0
  16. assets/img/cards/mastercard.svg +1 -0
  17. assets/img/cards/visa.svg +1 -0
  18. assets/img/chrome.svg +105 -0
  19. assets/img/edge.svg +1 -0
  20. assets/img/eps.svg +86 -0
  21. assets/img/giropay.svg +1 -0
  22. assets/img/googlepay_outline.svg +27 -0
  23. assets/img/googlepay_standard.svg +12 -0
  24. assets/img/ideal.svg +1 -0
  25. assets/img/klarna.svg +25 -0
  26. assets/img/logo.svg +122 -0
  27. assets/img/multibanco.svg +91 -0
  28. assets/img/p24.svg +63 -0
  29. assets/img/sepa.svg +39 -0
  30. assets/img/sofort.svg +1 -0
  31. assets/img/stripe_logo.svg +121 -0
  32. assets/img/wechat.svg +1 -0
  33. assets/js/admin/admin-settings.js +123 -0
  34. assets/js/admin/googlepay.js +37 -0
  35. assets/js/admin/help-widget.js +26 -0
  36. assets/js/admin/meta-boxes-order.js +145 -0
  37. assets/js/admin/modals.js +126 -0
  38. assets/js/frontend/applepay-cart.js +40 -0
  39. assets/js/frontend/applepay-checkout.js +56 -0
  40. assets/js/frontend/applepay-product.js +47 -0
  41. assets/js/frontend/credit-card.js +296 -0
  42. assets/js/frontend/form-handler.js +114 -0
  43. assets/js/frontend/googlepay-cart.js +57 -0
  44. assets/js/frontend/googlepay-checkout.js +68 -0
  45. assets/js/frontend/googlepay-product.js +64 -0
  46. assets/js/frontend/local-payment.js +139 -0
  47. assets/js/frontend/notices.js +25 -0
  48. assets/js/frontend/payment-request.js +210 -0
  49. assets/js/frontend/wc-stripe.js +1530 -0
  50. assets/js/frontend/wc-stripe.min.js +1 -0
  51. i18n/languages/woo-stripe.pot +1466 -0
  52. includes/abstract/abstract-wc-payment-gateway-stripe-charge.php +180 -0
  53. includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php +218 -0
  54. includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php +272 -0
  55. includes/abstract/abstract-wc-payment-gateway-stripe.php +973 -0
  56. includes/abstract/abstract-wc-payment-token-stripe.php +129 -0
  57. includes/abstract/abstract-wc-stripe-rest-controller.php +102 -0
  58. includes/abstract/abstract-wc-stripe-settings.php +90 -0
  59. includes/admin/class-wc-stripe-admin-assets.php +78 -0
  60. includes/admin/class-wc-stripe-admin-menus.php +48 -0
  61. includes/admin/class-wc-stripe-admin-settings.php +82 -0
  62. includes/admin/class-wc-stripe-admin-user-edit.php +132 -0
  63. includes/admin/meta-boxes/class-wc-stripe-admin-order-metaboxes.php +99 -0
  64. includes/admin/meta-boxes/views/html-charge-data-subview.php +88 -0
  65. includes/admin/meta-boxes/views/html-order-actions.php +47 -0
  66. includes/admin/meta-boxes/views/html-order-charge-data.php +40 -0
  67. includes/admin/meta-boxes/views/html-order-pay.php +59 -0
  68. includes/admin/settings/class-wc-stripe-api-settings.php +103 -0
  69. includes/admin/views/html-button-demo.php +13 -0
  70. includes/admin/views/html-description.php +1 -0
  71. includes/admin/views/html-paragraph.php +14 -0
  72. includes/admin/views/html-settings-local-payments-nav.php +12 -0
  73. includes/admin/views/html-settings-nav.php +18 -0
  74. includes/admin/views/html-user-profile.php +95 -0
  75. includes/class-stripe.php +246 -0
  76. includes/class-wc-stripe-customer-manager.php +126 -0
  77. includes/class-wc-stripe-field-manager.php +163 -0
  78. includes/class-wc-stripe-frontend-notices.php +56 -0
  79. includes/class-wc-stripe-frontend-scripts.php +101 -0
  80. includes/class-wc-stripe-gateway.php +368 -0
  81. includes/class-wc-stripe-install.php +26 -0
  82. includes/class-wc-stripe-redirect-handler.php +74 -0
  83. includes/class-wc-stripe-rest-api.php +114 -0
  84. includes/controllers/class-wc-stripe-controller-cart.php +237 -0
  85. includes/controllers/class-wc-stripe-controller-checkout.php +134 -0
  86. includes/controllers/class-wc-stripe-controller-gateway-settings.php +69 -0
  87. includes/controllers/class-wc-stripe-controller-googlepay.php +141 -0
  88. includes/controllers/class-wc-stripe-controller-order-actions.php +285 -0
  89. includes/controllers/class-wc-stripe-controller-payment-intent.php +45 -0
  90. includes/controllers/class-wc-stripe-controller-payment-method.php +47 -0
  91. includes/controllers/class-wc-stripe-controller-webhook.php +53 -0
  92. includes/gateways/class-wc-payment-gateway-stripe-applepay.php +82 -0
  93. includes/gateways/class-wc-payment-gateway-stripe-cc.php +127 -0
  94. includes/gateways/class-wc-payment-gateway-stripe-eps.php +57 -0
  95. includes/gateways/class-wc-payment-gateway-stripe-giropay.php +59 -0
  96. includes/gateways/class-wc-payment-gateway-stripe-googlepay.php +173 -0
  97. includes/gateways/class-wc-payment-gateway-stripe-ideal.php +55 -0
  98. includes/gateways/class-wc-payment-gateway-stripe-klarna.php +105 -0
  99. includes/gateways/class-wc-payment-gateway-stripe-multibanco.php +58 -0
  100. includes/gateways/class-wc-payment-gateway-stripe-p24.php +57 -0
  101. includes/gateways/class-wc-payment-gateway-stripe-payment-request.php +80 -0
  102. includes/gateways/class-wc-payment-gateway-stripe-sepa.php +66 -0
  103. includes/gateways/class-wc-payment-gateway-stripe-sofort.php +70 -0
  104. includes/gateways/class-wc-payment-gateway-stripe-wechat.php +63 -0
  105. includes/gateways/settings/applepay-settings.php +126 -0
  106. includes/gateways/settings/cc-settings.php +127 -0
  107. includes/gateways/settings/googlepay-settings.php +144 -0
  108. includes/gateways/settings/payment-request-settings.php +109 -0
  109. includes/tokens/class-wc-payment-token-stripe-applepay.php +24 -0
  110. includes/tokens/class-wc-payment-token-stripe-cc.php +126 -0
  111. includes/tokens/class-wc-payment-token-stripe-googlepay.php +24 -0
  112. includes/tokens/class-wc-payment-token-stripe-local-payment.php +34 -0
  113. includes/wc-stripe-functions.php +771 -0
  114. includes/wc-stripe-hooks.php +21 -0
  115. includes/wc-stripe-webhook-functions.php +45 -0
  116. readme.txt +55 -0
  117. stripe-payments.php +32 -0
  118. stripe-php-6.40.0/.gitignore +17 -0
  119. stripe-php-6.40.0/CHANGELOG.md +715 -0
  120. stripe-php-6.40.0/LICENSE +21 -0
  121. stripe-php-6.40.0/README.md +257 -0
  122. stripe-php-6.40.0/VERSION +1 -0
  123. stripe-php-6.40.0/build.php +36 -0
  124. stripe-php-6.40.0/composer.json +37 -0
  125. stripe-php-6.40.0/data/ca-certificates.crt +3646 -0
  126. stripe-php-6.40.0/init.php +145 -0
  127. stripe-php-6.40.0/lib/Account.php +393 -0
  128. stripe-php-6.40.0/lib/AccountLink.php +21 -0
  129. stripe-php-6.40.0/lib/AlipayAccount.php +72 -0
  130. stripe-php-6.40.0/lib/ApiOperations/All.php +34 -0
  131. stripe-php-6.40.0/lib/ApiOperations/Create.php +28 -0
  132. stripe-php-6.40.0/lib/ApiOperations/Delete.php +27 -0
  133. stripe-php-6.40.0/lib/ApiOperations/NestedResource.php +118 -0
  134. stripe-php-6.40.0/lib/ApiOperations/Request.php +61 -0
  135. stripe-php-6.40.0/lib/ApiOperations/Retrieve.php +27 -0
  136. stripe-php-6.40.0/lib/ApiOperations/Update.php +46 -0
  137. stripe-php-6.40.0/lib/ApiRequestor.php +508 -0
  138. stripe-php-6.40.0/lib/ApiResource.php +112 -0
  139. stripe-php-6.40.0/lib/ApiResponse.php +32 -0
  140. stripe-php-6.40.0/lib/ApplePayDomain.php +28 -0
  141. stripe-php-6.40.0/lib/ApplicationFee.php +98 -0
  142. stripe-php-6.40.0/lib/ApplicationFeeRefund.php +60 -0
  143. stripe-php-6.40.0/lib/Balance.php +30 -0
  144. stripe-php-6.40.0/lib/BalanceTransaction.php +75 -0
  145. stripe-php-6.40.0/lib/BankAccount.php +109 -0
  146. stripe-php-6.40.0/lib/BitcoinReceiver.php +49 -0
  147. stripe-php-6.40.0/lib/BitcoinTransaction.php +14 -0
  148. stripe-php-6.40.0/lib/Capability.php +83 -0
  149. stripe-php-6.40.0/lib/Card.php +130 -0
  150. stripe-php-6.40.0/lib/Charge.php +207 -0
  151. stripe-php-6.40.0/lib/Checkout/Session.php +40 -0
  152. stripe-php-6.40.0/lib/Collection.php +108 -0
  153. stripe-php-6.40.0/lib/CountrySpec.php +26 -0
  154. stripe-php-6.40.0/lib/Coupon.php +36 -0
  155. stripe-php-6.40.0/lib/CreditNote.php +74 -0
  156. stripe-php-6.40.0/lib/Customer.php +235 -0
apple-developer-merchantid-domain-association ADDED
@@ -0,0 +1 @@
 
1
+ 7B227073704964223A2239373943394538343346343131343044463144313834343232393232313734313034353044314339464446394437384337313531303944334643463542433731222C2276657273696F6E223A312C22637265617465644F6E223A313437313435343137313137362C227369676E6174757265223A2233303830303630393261383634383836663730643031303730326130383033303830303230313031333130663330306430363039363038363438303136353033303430323031303530303330383030363039326138363438383666373064303130373031303030306130383033303832303365363330383230333862613030333032303130323032303836383630663639396439636361373066333030613036303832613836343863653364303430333032333037613331326533303263303630333535303430333063323534313730373036633635323034313730373036633639363336313734363936663665323034393665373436353637373236313734363936663665323034333431323032643230343733333331323633303234303630333535303430623063316434313730373036633635323034333635373237343639363636393633363137343639366636653230343137353734363836663732363937343739333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303165313730643331333633303336333033333331333833313336333433303561313730643332333133303336333033323331333833313336333433303561333036323331323833303236303630333535303430333063316636353633363332643733366437303264363237323666366236353732326437333639363736653566353534333334326435333431346534343432346635383331313433303132303630333535303430623063306236393466353332303533373937333734363536643733333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353333303539333031333036303732613836343863653364303230313036303832613836343863653364303330313037303334323030303438323330666461626333396366373565323032633530643939623435313265363337653261393031646436636233653062316364346235323637393866386366346562646538316132356138633231653463333364646365386532613936633266366166613139333033343563346538376134343236636539353162313239356133383230323131333038323032306433303435303630383262303630313035303530373031303130343339333033373330333530363038326230363031303530353037333030313836323936383734373437303361326632663666363337333730326536313730373036633635326536333666366432663666363337333730333033343264363137303730366336353631363936333631333333303332333031643036303335353164306530343136303431343032323433303062396165656564343633313937613461363561323939653432373138323163343533303063303630333535316431333031303166663034303233303030333031663036303335353164323330343138333031363830313432336632343963343466393365346566323765366334663632383663336661326262666432653462333038323031316430363033353531643230303438323031313433303832303131303330383230313063303630393261383634383836663736333634303530313330383166653330383163333036303832623036303130353035303730323032333038316236306338316233353236353663363936313665363336353230366636653230373436383639373332303633363537323734363936363639363336313734363532303632373932303631366537393230373036313732373437393230363137333733373536643635373332303631363336333635373037343631366536333635323036663636323037343638363532303734363836353665323036313730373036633639363336313632366336353230373337343631366536343631373236343230373436353732366437333230363136653634323036333666366536343639373436393666366537333230366636363230373537333635326332303633363537323734363936363639363336313734363532303730366636633639363337393230363136653634323036333635373237343639363636393633363137343639366636653230373037323631363337343639363336353230373337343631373436353664363536653734373332653330333630363038326230363031303530353037303230313136326136383734373437303361326632663737373737373265363137303730366336353265363336663664326636333635373237343639363636393633363137343635363137353734363836663732363937343739326633303334303630333535316431663034326433303262333032396130323761303235383632333638373437343730336132663266363337323663326536313730373036633635326536333666366432663631373037303663363536313639363336313333326536333732366333303065303630333535316430663031303166663034303430333032303738303330306630363039326138363438383666373633363430363164303430323035303033303061303630383261383634386365336430343033303230333439303033303436303232313030646131633633616538626535663634663865313165383635363933376239623639633437326265393365616333323333613136373933366534613864356538333032323130306264356166626638363966336330636132373462326664646534663731373135396362336264373139396232636130666634303964653635396138326232346433303832303265653330383230323735613030333032303130323032303834393664326662663361393864613937333030613036303832613836343863653364303430333032333036373331316233303139303630333535303430333063313234313730373036633635323035323666366637343230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333031653137306433313334333033353330333633323333333433363333333035613137306433323339333033353330333633323333333433363333333035613330376133313265333032633036303335353034303330633235343137303730366336353230343137303730366336393633363137343639366636653230343936653734363536373732363137343639366636653230343334313230326432303437333333313236333032343036303335353034306230633164343137303730366336353230343336353732373436393636363936333631373436393666366532303431373537343638366637323639373437393331313333303131303630333535303430613063306134313730373036633635323034393665363332653331306233303039303630333535303430363133303235353533333035393330313330363037326138363438636533643032303130363038326138363438636533643033303130373033343230303034663031373131383431396437363438356435316135653235383130373736653838306132656664653762616534646530386466633462393365313333353664353636356233356165323264303937373630643232346537626261303866643736313763653838636237366262363637306265633865383239383466663534343561333831663733303831663433303436303630383262303630313035303530373031303130343361333033383330333630363038326230363031303530353037333030313836326136383734373437303361326632663666363337333730326536313730373036633635326536333666366432663666363337333730333033343264363137303730366336353732366636663734363336313637333333303164303630333535316430653034313630343134323366323439633434663933653465663237653663346636323836633366613262626664326534623330306630363033353531643133303130316666303430353330303330313031666633303166303630333535316432333034313833303136383031346262623064656131353833333838396161343861393964656265626465626166646163623234616233303337303630333535316431663034333033303265333032636130326161303238383632363638373437343730336132663266363337323663326536313730373036633635326536333666366432663631373037303663363537323666366637343633363136373333326536333732366333303065303630333535316430663031303166663034303430333032303130363330313030363061326138363438383666373633363430363032306530343032303530303330306130363038326138363438636533643034303330323033363730303330363430323330336163663732383335313136393962313836666233356333353663613632626666343137656464393066373534646132386562656631396338313565343262373839663839386637396235393966393864353431306438663964653963326665303233303332326464353434323162306133303537373663356466333338336239303637666431373763326332313664393634666336373236393832313236663534663837613764316239396362396230393839323136313036393930663039393231643030303033313832303136303330383230313563303230313031333038313836333037613331326533303263303630333535303430333063323534313730373036633635323034313730373036633639363336313734363936663665323034393665373436353637373236313734363936663665323034333431323032643230343733333331323633303234303630333535303430623063316434313730373036633635323034333635373237343639363636393633363137343639366636653230343137353734363836663732363937343739333131333330313130363033353530343061306330613431373037303663363532303439366536333265333130623330303930363033353530343036313330323535353330323038363836306636393964396363613730663330306430363039363038363438303136353033303430323031303530306130363933303138303630393261383634383836663730643031303930333331306230363039326138363438383666373064303130373031333031633036303932613836343838366637306430313039303533313066313730643331333633303338333133373331333733313336333133313561333032663036303932613836343838366637306430313039303433313232303432303733343832623432653665366332323264616536643963303961346336663332316534656136653666326661626631356430376562333338643264613435646233303061303630383261383634386365336430343033303230343438333034363032323130306564333264376438616131623536623036626164623162396639396264643063653662363931316530623032393232633934333362663564326130656135353830323231303066393433353637663030323361643061343561373236663238376636303062656334666566373335383832383935633733313531383337336163383934383137303030303030303030303030227D
assets/css/admin/admin.css ADDED
@@ -0,0 +1,138 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-stripe-settings-container{
2
+ padding: 0 0.5em;
3
+ }
4
+ .wc-stripe-cc-desc{
5
+ margin: 0;
6
+ }
7
+ .wc-stripe-settings-logo {
8
+ margin: 1.5em 1em 0.5em 0;
9
+ }
10
+ .wc-stripe-settings-logo img{
11
+ width: 150px;
12
+ max-width: 150px;
13
+ margin-left: 0.5em;
14
+ }
15
+ .wc-stripe-advanced-settings-nav{
16
+ margin-top: 1em;
17
+ }
18
+ .nav-tab-wrapper.woo-nav-tab-wrapper{
19
+ min-height:35px;
20
+ }
21
+ @media(max-width: 690px){
22
+ .nav-tab-wrapper.woo-nav-tab-wrapper{
23
+ min-height:70px;
24
+ }
25
+ }
26
+ .wc-stripe-advanced-settings-nav .nav-link:nth-child(n+2){
27
+ margin-left: 0.5em;
28
+ }
29
+ .wc-stripe-advanced-settings-nav .nav-link-active{
30
+ color: #555;
31
+ font-weight: 500;
32
+ }
33
+ .stripe_cc .wc-stripe-card-icon{
34
+ width: 36px;
35
+ vertical-align: middle;
36
+ }
37
+ #order_data .order_data_column .transaction-data {
38
+
39
+ }
40
+ #order_data .order_data_column .transaction-data h3{
41
+ margin-bottom: 5px;
42
+ }
43
+ #order_data .order_data_column .transaction-data a{
44
+ text-decoration: none;
45
+ border: 2px solid transparent;
46
+ border-radius: 4px;
47
+ }
48
+ #order_data .order_data_column .transaction-data a:before{
49
+ font-family: WooCommerce;
50
+ content: "\e010";
51
+ font-size: 18px;
52
+ width: 16px;
53
+ }
54
+ #order_data .order_data_column .transaction-data .do-transaction-view:hover{
55
+ border: 2px solid #00a0d2;
56
+ }
57
+ .wc-transaction-data .data-container{
58
+ display: flex;
59
+ flex-wrap: wrap;
60
+ }
61
+ .wc-transaction-data h2{
62
+ margin: 0 0 1em 0;
63
+ }
64
+ .wc-transaction-data .charge-actions{
65
+ margin-bottom: 0.5em;
66
+ }
67
+ .wc-transaction-data .data-container .column-6{
68
+ width: 50%;
69
+ margin-bottom: 0.5em;
70
+ }
71
+ .wc-transaction-data .data-container .column-6 label{
72
+ display: inline-block;
73
+ font-weight: 600;
74
+ vertical-align: bottom;
75
+ }
76
+ .wc-transaction-data .data-container .metadata{
77
+ margin-bottom: 0.5em;
78
+ }
79
+ #wc-stripe-card-container{
80
+ margin: 1em 0;
81
+ border: 1px solid #e8e8e8;
82
+ }
83
+ #wc-stripe-card-container #card-element{
84
+ background-color: #fff;
85
+ padding: 12px 6px;
86
+ }
87
+ #wc-stripe-pay-order-form .modal-wide{
88
+ width: 100%;
89
+ margin-bottom: 1.5em;
90
+ }
91
+ #wc-stripe-pay-order-form .modal-wide label{
92
+ font-weight: 500;
93
+ }
94
+ #wc-stripe-pay-order-form .modal-wide.option label{
95
+ display: block;
96
+ margin-bottom: 0.5em;
97
+ }
98
+ #wc-stripe-pay-order-form .token-container{
99
+ margin: 1em 0em;
100
+ }
101
+ #wc-stripe-pay-order-form .woocommerce-error{
102
+ background: #b22222;
103
+ color: #fff;
104
+ padding: 1em;
105
+ margin-bottom: 1em;
106
+ }
107
+ .wc-stripe-docs{
108
+ padding: 0 6px;
109
+ margin-top: 1em;
110
+ }
111
+ .wc-stripe-advanced-settings-nav.local-gateways{
112
+ margin-left: 0.5em;
113
+ }
114
+ .wc-stripe-webhook{
115
+ font-weight: 500;
116
+ margin-bottom: 0.75em;
117
+ }
118
+ .profile-php .wc-stripe-payment-methods th,
119
+ .user-edit-php .wc-stripe-payment-methods th{
120
+ padding: 10px 0;
121
+ }
122
+ .profile-php .wc-stripe-payment-methods th,
123
+ .profile-php .wc-stripe-payment-methods td,
124
+ .user-edit-php .wc-stripe-payment-methods th,
125
+ .user-edit-php .wc-stripe-payment-methods td{
126
+ text-align: left;
127
+ }
128
+ .profile-php .wc-stripe-payment-methods th:nth-child(n+2),
129
+ .user-edit-php .wc-stripe-payment-methods th:nth-child(n+2){
130
+ padding: 5px 10px;
131
+ }
132
+ .profile-php .wc-stripe-payment-methods td:nth-child(n+2),
133
+ .user-edit-php .wc-stripe-payment-methods td:nth-child(n+2){
134
+ padding: 5px 10px;
135
+ }
136
+ .wc-stripe-user-info{
137
+ padding: 10px 0;
138
+ }
assets/css/stripe.css ADDED
@@ -0,0 +1,383 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ .wc-stripe-card-icons-container,
2
+ .wc-stripe-paymentRequest-icons-container{
3
+ float: right;
4
+ display: inline-block;
5
+ }
6
+ .wc-stripe-gateway-desc{
7
+ margin-bottom: 10px;
8
+ }
9
+ li.payment_method_stripe_cc .wc-stripe-card-icons-container img.wc-stripe-card-icon,
10
+ li.payment_method_stripe_payment_request .wc-stripe-paymentRequest-icons-container img{
11
+ max-width: 44px;
12
+ max-height: 27px;
13
+ width: 44px;
14
+ height: 27px;
15
+ float: none;
16
+ display: inline;
17
+ }
18
+ li.payment_method_stripe_payment_request .wc-stripe-paymentRequest-icons-container img{
19
+ width: 25px;
20
+ height: 25px;
21
+ max-width: 25px;
22
+ max-height: 25px;
23
+ }
24
+ ul.payment_methods label[for*="payment_method_stripe"]:after{
25
+ clear: right;
26
+ content: "";
27
+ display: block;
28
+ }
29
+ li.payment_method_stripe_cc .wc-stripe-card-icons-container img.wc-stripe-card-icon:nth-child(2n+2) {
30
+ margin: 0px 2px;
31
+ }
32
+ li.payment_method_stripe_cc .wc-stripe-card-icons-container img.wc-stripe-card-icon.open.visa{
33
+ padding-top: 2px;
34
+ }
35
+ ul.payment_methods li[class*=payment_method_stripe_] label>img:first-of-type{
36
+ float: right;
37
+ }
38
+ .wc-stripe_cc-new-method-container{
39
+ margin-bottom: 1em;
40
+ }
41
+ .StripeElement {
42
+ box-sizing: border-box;
43
+ height: 40px;
44
+ padding: 10px 12px;
45
+ border: 1px solid transparent;
46
+ border-radius: 4px;
47
+ background-color: white;
48
+ box-shadow: 0 1px 3px 0 #e6ebf1;
49
+ -webkit-transition: box-shadow 150ms ease;
50
+ transition: box-shadow 150ms ease;
51
+ }
52
+ input.wc-stripe-payment-type{
53
+ display: none;
54
+ }
55
+ label.wc-stripe-label-payment-type{
56
+ margin-bottom: 1em;
57
+ display: block;
58
+ }
59
+ label.wc-stripe-label-payment-type:before{
60
+ content: "";
61
+ display: inline-block;
62
+ width: 14px;
63
+ height: 14px;
64
+ border: 2px solid #fff;
65
+ box-shadow: 0 0 0 2px #000;
66
+ background: #fff;
67
+ margin-left: 4px;
68
+ margin-right: .5em;
69
+ border-radius: 100%;
70
+ -webkit-transform: translateY(2px);
71
+ -ms-transform: translateY(2px);
72
+ transform: translateY(2px);
73
+ }
74
+ input.wc-stripe-payment-type:checked+label.wc-stripe-label-payment-type:before{
75
+ background: #000;
76
+ }
77
+ .select2-container .select2-selection--single .wc-stripe-select2-container,
78
+ .select2-results__options li.wc-stripe-select2-container{
79
+ display: flex;
80
+ align-items: center;
81
+ line-height: 42px !important;
82
+ }
83
+ .select2-container .select2-selection--single .wc-stripe-select2-container:before,
84
+ .select2-results__options li.wc-stripe-select2-container:before{
85
+ content: '';
86
+ background-repeat: no-repeat;
87
+ background-size: 40px 24px;
88
+ width: 40px;
89
+ height: 42px;
90
+ display: inline-block;
91
+ margin-right: 8px;
92
+ background-position: center;
93
+ }
94
+ .select2-container .select2-selection--single .wc-stripe-select2-container.Visa:before,
95
+ .select2-results__options li.wc-stripe-select2-container.Visa:before,
96
+ .select2-results__options li.wc-stripe-select2-container.Visa:before{
97
+ background-image: url(../img/cards/visa.svg);
98
+ }
99
+ .select2-container .select2-selection--single .wc-stripe-select2-container.MasterCard:before,
100
+ .select2-results__options li.wc-stripe-select2-container.MasterCard:before,
101
+ .select2-results__options li.wc-stripe-select2-container.MasterCard:before{
102
+ background-image: url(../img/cards/mastercard.svg);
103
+ }
104
+ .select2-container .select2-selection--single .wc-stripe-select2-container.AmericanExpress:before,
105
+ .select2-results__options li.wc-stripe-select2-container.AmericanExpress:before,
106
+ .select2-results__options li.wc-stripe-select2-container.AmericanExpress:before{
107
+ background-image: url(../img/cards/amex.svg);
108
+ }
109
+ .select2-container .select2-selection--single .wc-stripe-select2-container.Discover:before,
110
+ .select2-results__options li.wc-stripe-select2-container.Discover:before,
111
+ .select2-results__options li.wc-stripe-select2-container.Discover:before{
112
+ background-image: url(../img/cards/discover.svg);
113
+ }
114
+ .select2-container .select2-selection--single .wc-stripe-select2-container.MasterCard:before,
115
+ .select2-results__options li.wc-stripe-select2-container.MasterCard:before,
116
+ .select2-results__options li.wc-stripe-select2-container.MasterCard:before{
117
+ background-image: url(../img/cards/mastercard.svg);
118
+ }
119
+ .select2-container .select2-selection--single .wc-stripe-select2-container.DinersClub:before,
120
+ .select2-results__options li.wc-stripe-select2-container.DinersClub:before,
121
+ .select2-results__options li.wc-stripe-select2-container.DinersClub:before{
122
+ background-image: url(../img/cards/diners.svg);
123
+ }
124
+ .select2-container .select2-selection--single .wc-stripe-select2-container.JCB:before,
125
+ .select2-results__options li.wc-stripe-select2-container.JCB:before,
126
+ .select2-results__options li.wc-stripe-select2-container.JCB:before{
127
+ background-image: url(../img/cards/jcb.svg);
128
+ }
129
+ #wc-stripe-card-element{
130
+ margin-bottom: 1em;
131
+ }
132
+ .wc-stripe_cc-container .wc-stripe-save-source .save-source-label{
133
+ display: block;
134
+ margin-top: 10px;
135
+ }
136
+ .wc-stripe_cc-container .wc-stripe-save-source input[type="checkbox"]{
137
+ opacity: 0;
138
+ position: absolute;
139
+ width: 20px;
140
+ height: 20px;
141
+ }
142
+ .wc-stripe_cc-container .wc-stripe-save-source label.checkbox{
143
+ position: relative;
144
+ }
145
+ .wc-stripe_cc-container .save-source-checkbox{
146
+ height: 20px;
147
+ width: 20px;
148
+ position: relative;
149
+ background-color: white;
150
+ display: block;
151
+ border-radius: 3px;
152
+ }
153
+ .wc-stripe_cc-container .save-source-checkbox:after{
154
+ content: "";
155
+ position: absolute;
156
+ top: 0;
157
+ left: 0;
158
+ }
159
+ .wc-stripe_cc-container .wc-stripe-save-source input[type="checkbox"]:checked + .save-source-checkbox:after{
160
+ left: 6px;
161
+ top: 3px;
162
+ width: 7px;
163
+ height: 12px;
164
+ border: solid #2196F3;
165
+ border-width: 0 3px 3px 0;
166
+ -webkit-transform: rotate(45deg);
167
+ -ms-transform: rotate(45deg);
168
+ transform: rotate(45deg);
169
+ }
170
+ li.payment_method_stripe_googlepay,
171
+ li.payment_method_stripe_applepay,
172
+ li.payment_method_stripe_payment_request{
173
+ display: none;
174
+ }
175
+
176
+ #place_order.wc-stripe-hide{
177
+ display: none !important;
178
+ }
179
+ .wc-stripe-product-checkout-container{
180
+ width: 100%;
181
+ margin-top: 1em;
182
+ }
183
+ .wc-stripe-product-checkout-container ul.wc_stripe_product_payment_methods,
184
+ .wc-stripe-cart-checkout-container ul.wc_stripe_cart_payment_methods{
185
+ list-style: none;
186
+ margin: 0px;
187
+ padding: 0px;
188
+ }
189
+ .wc-stripe-cart-checkout-container ul.wc_stripe_cart_payment_methods{
190
+ margin-bottom: 1.5em;
191
+ }
192
+ .wc-stripe-product-checkout-container ul.wc_stripe_product_payment_methods li[class*=payment_method_stripe_],
193
+ .wc-stripe-cart-checkout-container ul.wc_stripe_cart_payment_methods li[class*=payment_method_stripe_]{
194
+ margin-bottom: 1em;
195
+ }
196
+ .wc_stripe_product_payment_methods .gpay-button,
197
+ .wc_stripe_cart_payment_methods .gpay-button{
198
+ width: 100%;
199
+ }
200
+ .wc_stripe_product_payment_methods .disabled{
201
+ opacity: 0.45;
202
+ }
203
+ .wc-stripe-cart-or{
204
+ margin: 1em 0;
205
+ text-align: center;
206
+ }
207
+ li.wc-stripe-payment-method.or{
208
+ display: none;
209
+ }
210
+ li[class*=payment_method_stripe_].active ~ li.wc-stripe-payment-method.or{
211
+ display: block;
212
+ }
213
+ li.payment_method_stripe_applepay label:first-of-type img{
214
+ width: 49px;
215
+ max-height: 32px;
216
+ }
217
+ li.payment_method_stripe_googlepay label:first-of-type img{
218
+ width: 48px;
219
+ max-height: 35px;
220
+ }
221
+ li.payment_method_stripe_googlepay label:first-of-type img[src*=googlepay_standard]{
222
+ width: 60px;
223
+ max-height: 35px;
224
+ }
225
+ .gpay-button:hover{
226
+ background-origin: content-box;
227
+ background-position: center center;
228
+ background-repeat: no-repeat;
229
+ background-size: contain;
230
+ }
231
+ .gpay-button:active{
232
+ background-origin: content-box;
233
+ background-position: center center;
234
+ background-repeat: no-repeat;
235
+ background-size: contain;
236
+ }
237
+ .gpay-button:focus{
238
+ background-origin: content-box;
239
+ background-position: center center;
240
+ background-repeat: no-repeat;
241
+ background-size: contain;
242
+ }
243
+ @supports (-webkit-appearance: -apple-pay-button) {
244
+ .apple-pay-button {
245
+ display: inline-block;
246
+ -webkit-appearance: -apple-pay-button;
247
+ width: 100%;
248
+ min-width: 200px;
249
+ height: 40px;
250
+ max-height: 40px;
251
+ }
252
+ .apple-pay-button-black {
253
+ -apple-pay-button-style: black;
254
+ }
255
+ .apple-pay-button-white {
256
+ -apple-pay-button-style: white;
257
+ }
258
+ .apple-pay-button-white-with-line {
259
+ -apple-pay-button-style: white-outline;
260
+ }
261
+ .applepay-top-container .apple-pay-button{
262
+ max-width: 240px;
263
+ }
264
+ }
265
+ .wc-stripe-banner-checkout ul.wc_stripe_checkout_banner_gateways{
266
+ list-style: none;
267
+ margin: 0 0 1.5em 0;
268
+ padding: 0;
269
+ }
270
+ .wc-stripe-banner-checkout ul.wc_stripe_checkout_banner_gateways li.wc-stripe-checkout-banner-gateway{
271
+ margin-bottom: 1em;
272
+ }
273
+ .wc-stripe-banner-checkout ul.wc_stripe_checkout_banner_gateways .gpay-button{
274
+ width: 100%;
275
+ }
276
+
277
+ .wc_stripe_product_payment_methods .payment_method_stripe_payment_request .StripeElement,
278
+ .wc_stripe_cart_payment_methods .payment_method_stripe_payment_request .StripeElement{
279
+ padding: 0px;
280
+ width: 100%;
281
+ }
282
+ .woocommerce-checkout #wc-stripe-payment-request-container.StripeElement{
283
+ width: 240px;
284
+ padding: 0px;
285
+ }
286
+ #wc_stripe_local_payment_stripe_ideal{
287
+ padding: 0px;
288
+ }
289
+ .wc-stripe-checkout-banner-gateway #wc-stripe-payment-request-banner.StripeElement{
290
+ width: 100%;
291
+ }
292
+ ul.payment_methods li.payment_method_stripe_p24 img{
293
+ max-width: 90px;
294
+ width: 90px;
295
+ max-height: 45px;
296
+ }
297
+ ul.payment_methods li.payment_method_stripe_ideal img{
298
+ max-width: 38px;
299
+ width: 38px;
300
+ max-height: 35px;
301
+ }
302
+ ul.payment_methods li.payment_method_stripe_klarna img{
303
+ max-width: 72px;
304
+ width: 72px;
305
+ max-height: 20px;
306
+ }
307
+ ul.payment_methods li.payment_method_stripe_giropay img{
308
+ max-width: 65px;
309
+ width: 65px;
310
+ max-height: 28px;
311
+ }
312
+ ul.payment_methods li.payment_method_stripe_eps img{
313
+ max-width: 70px;
314
+ width: 70px;
315
+ max-height: 46px;
316
+ }
317
+ ul.payment_methods li.payment_method_stripe_multibanco img{
318
+ max-width: 48px;
319
+ width: 48px;
320
+ max-height: 48px;
321
+ }
322
+ ul.payment_methods li.payment_method_stripe_sepa img{
323
+ max-width: 67px;
324
+ width: 67px;
325
+ max-height: 18px;
326
+ }
327
+ ul.payment_methods li.payment_method_stripe_sofort img{
328
+ max-width: 70px;
329
+ width: 70px;
330
+ max-height: 21px;
331
+ }
332
+ ul.payment_methods li.payment_method_stripe_wechat img{
333
+ max-width: 82px;
334
+ width: 82px;
335
+ max-height: 23px;
336
+ }
337
+ #wc-stripe-card-element{
338
+ width: 100%;
339
+ }
340
+ li.banner_payment_method_stripe_payment_request .StripeElement{
341
+ padding: 0px;
342
+ }
343
+ .single-product .blockMsg {
344
+ border: none !important;
345
+ background-color: transparent !important;
346
+ }
347
+ #wc-stripe-card{
348
+ position: absolute;
349
+ top: 50%;
350
+ right: 8px;
351
+ transform: translatey(-50%);
352
+ width: 23px;
353
+ height: 15px;
354
+ }
355
+ #wc-stripe-card.active{
356
+ width: 32px;
357
+ height: 20px;
358
+ }
359
+ input[id=stripe-postal-code]:focus{
360
+ outline: none;
361
+ background: transparent;
362
+ border: none;
363
+ }
364
+ div.postalCode:focus{
365
+ outline: none;
366
+ border: none;
367
+ }
368
+ li[class*="payment_method_stripe"] .select2-container .select2-selection--single{
369
+ height: 42px;
370
+ }
371
+ li[class*="payment_method_stripe"] .select2-container--default .select2-selection--single .select2-selection__arrow{
372
+ height: 42px;
373
+ }
374
+ .blockUI.blockMsg{
375
+ font-size: 20px;
376
+ white-space: nowrap;
377
+ }
378
+ #wc-stripe-payment-request-container.disabled{
379
+ opactity: 0.45;
380
+ }
381
+ .wc-stripe-paymentRequest-icons-container img{
382
+ float: none;
383
+ }
assets/img/alipay.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 374.01" preserveAspectRatio="xMidYMid meet"><defs><style>.cls-1{fill:#ec6c00;}.cls-2{fill:#003f96;}</style></defs><title>alipay</title><path class="cls-1" d="M325.82,287.4l-7.34,1.4-7.33,2.79-5.59,4.2a10.21,10.21,0,0,0-2.09,5.58l1.74,4.54c1.4,2.1,4.54,2.1,4.54,2.1l5.94-1.75,2.1-3.84-1.4-7.68,3.84-2.1,5.59-.7,6.63,1.75,3.49,3.84,1.4,3.84.7,3.15v5.58l-12.22,4.19-11.88,3.85-5.23,2.44-4.19,3.14a16.37,16.37,0,0,0-3.15,4.54l-1.05,6.29c0,6.28,4.89,10.48,4.89,10.48,4.54,4.19,11.88,4.19,11.88,4.19l8.73-1.4,2.79-1.05,9.43-6.29a9.73,9.73,0,0,0,4.19,5.94c2.79,2.45,8,2.45,8,2.45l5.24-.7,5.24-1.75v-3.49h-4.19l-3.15-1.05-2.79-2.09L349.56,336l.7-29.34-1.74-9.43-5.24-5.93-7.34-3.15-10.12-.7ZM338,315l-.35,20.61-5.94,4.88-5.93,2.1h-2.45a10.25,10.25,0,0,1-7-2.45c-2.79-2.44-2.79-7.33-2.79-7.33a13.21,13.21,0,0,1,1.74-6.29l5.24-4.88,7.68-3.5L338,315Zm23-25.84h29.33v4.19l-4.54.7s-2.79.7-2.79,1.74l.35,1.05,16.06,34.92,15.37-34.22-2.8-2.79L406.14,293v-3.84h23.74V293L425,294.74a13.64,13.64,0,0,0-4.88,5.24l-13.62,29.68-16.77,32.83-6.28,7.33-5.24,3.49L373,374s-4.54,0-7.68-2.44a6.27,6.27,0,0,1-2.79-4.89l1.39-4.54a7.72,7.72,0,0,1,4.89-2.1l3.49.7,2.45,1.75,3.84,4.89,8-8s6.64-10.13,4.19-18.16l-19.21-41.9L367,295.09l-5.93-2.1v-3.84m-99.88-1.4-8.38,2.1-8.38,5.93h-.7v-6.63l-1.05-.7-21.65,1.4v3.84l4.19.7,3.15,1.05,2.44,2.44,1,3.49v62.16l-.7,3.49-2.79,2.1-3.49.7h-3.85V374h36v-4.19l-9.43-1.4-2.44-2.09-1.4-3.5V345.37h.7l6.29,2.45,9.43,1.39h1l10.48-2.09,9.43-6.64,7-9.42,2.45-12.93-2.1-12.22a32.94,32.94,0,0,0-6.28-9.78,27.47,27.47,0,0,0-8.38-6.28L263,287.75Zm-.35,8.72h.35c8.38.7,13.27,7.34,13.27,7.34,4.19,5.58,3.84,14,3.84,14a25.61,25.61,0,0,1-4.53,14.31c-4.55,6.64-12.58,7.69-12.58,7.69-7.68.69-17.46-4.54-17.46-4.54V300.67a42.55,42.55,0,0,1,17.11-4.2ZM95,262.26,64.61,332.8l-2.8,4.89-4.19,3.49-4.19,1.75-4.19.35v4.19H84.16v-4.19l-9.08-1.4c-4.54-1.4-4.54-3.84-4.54-3.84l.35-2.44,6.29-17.47h32.47l7.69,19.21.35,1.4v1.4c0,1.39-3.15,1.74-3.15,1.74l-8.38,1.4v4.19h38.42v-4.19l-3.85-.35-4.19-1.4-3.14-3.14A6.74,6.74,0,0,1,131,334.9l-30.73-72.64Zm-1.75,18.51h.35l13.62,32.48H79.62Zm101.27,0a8,8,0,0,1-5.58-2.45,7.81,7.81,0,0,1-2.45-5.58,9.26,9.26,0,0,1,2.45-5.59,8.9,8.9,0,0,1,5.58-2.44,9.9,9.9,0,0,1,6.29,2.44l2.09,5.24-2.09,5.93a9.53,9.53,0,0,1-6.29,2.45M206,289.5V337l1,3.49,2.8,1.75,5.94,1.4v3.84H184.74v-3.84l5.58-.7,2.8-1.75,1-3.49v-36l-1-3.84-2.8-2.44-3.49-1.05-4.19-.7v-3.84l22.7-1.4.7,1.05m-40.16-33.87L143.18,257l-1.4.35v3.49h1.4l3.49.7,4.19,1.4,2.8,2.79,1,4.19v67.75l-1,3.49-2.8,1.75-5.93.7v3.84h31.42v-3.84l-3.14-.35-2.79-1-2.8-1.74-.69-3.5V256.67l-1.05-1m424.29,34.22,21.65-1.4,1,1.05v8h.35l3.84-3.49,4.54-3.14a22.8,22.8,0,0,1,5.59-2.45l7.33-.7,10.83,2.8,6.64,7.33,3.84-3.49,4.89-3.15a23.68,23.68,0,0,1,5.58-2.79l7.69-.7s8.38,0,12.92,4.89c0,0,4.89,4.89,4.89,14.67V337l.69,3.49,2.45,2.1,3.14.7,3.49.35v3.84H670.14v-3.84l5.59-.7,2.79-1.75.7-3.49v-30s0-6.29-2.79-9.78a11.86,11.86,0,0,0-7.68-3.14l-6.29.7-5.24,2.44-3.14,2.79-1.75,2.8V337l.7,3.49,2.8,2.1,2.79.7,3.14.35v3.84H631v-3.84l5.24-.7,2.79-1.75.7-3.49v-30s0-6.29-2.79-9.78a10.83,10.83,0,0,0-7.68-3.14l-5.94.7-5.24,2.44L615,301l-2.1,2.45V337l.7,3.49,2.79,1.75,2.8,1,3.14.35v3.84H591.22v-3.84l5.94-.7,2.79-1.75.7-3.49V301.37l-1-3.49-2.44-2.44L594,294.39l-3.85-.7v-3.84M464.46,320.58s0,11.87,5.93,18.86c0,0,5.59,7.33,15,7.33l11.52-3.14,8.73-8.73,4.19,2.79A37.3,37.3,0,0,1,498,349.21a36.08,36.08,0,0,1-16.06,4.2s-14.67,0-23.4-8.73a35.36,35.36,0,0,1-8.73-23.75,35,35,0,0,1,2.44-11.87,35.81,35.81,0,0,1,6.64-10.48,38.47,38.47,0,0,1,10.47-7A40.08,40.08,0,0,1,483,288.8s10.13,0,16.77,4.19c0,0,6.28,4.89,6.28,11.88l-1.74,5.58-5.24,2.1-6.64-1.75S490,309.4,490,307l1.05-5.59,1.05-4.54-3.85-2.44-5.58-.7-6.29,1.05-5.94,4.89L466.2,308a43.84,43.84,0,0,0-1.74,12.57m84.85-31.78a39.82,39.82,0,0,0-24.44,9.08c-9.08,9.08-9.08,23.4-9.08,23.4a37.05,37.05,0,0,0,2.45,13.62l7.33,10.47a38.66,38.66,0,0,0,10.82,6.29L549,353.75h.35l14.31-2.44A34.13,34.13,0,0,0,574.46,344l7-10.48,2.1-12.92a33.44,33.44,0,0,0-9.43-23.05C564.68,288.8,550,288.8,550,288.8h-.71Zm-.21,4.89h.56l9.08,2.09,5.94,6.29,3.14,8.73,1,10.13c0,12.92-4.89,20.6-4.89,20.6a19,19,0,0,1-14.31,7.68h-.35l-8.73-2.44-5.94-6.29-3.49-9.08a61.31,61.31,0,0,1-1-11.17l.7-9.43,3.14-8.38a26.07,26.07,0,0,1,6.64-6.63,20.6,20.6,0,0,1,8.51-2.1ZM430.93,349.21a5.24,5.24,0,0,0,5.24-5.58s0-5.24-5.24-5.24c0,0-5.59,0-5.59,5.24,0,0,0,5.58,5.59,5.58"/><path d="M700.53,0V2.44h5.93V18.16h2.1V2.44h5.93V0Zm16.41,0V18.16h2.44v-15l5.24,15h2.1L731.6,3.49V18.16h2.45V0h-3.14l-5.24,15.37L720.43,0Z"/><path class="cls-2" d="M585.63,0l-9.08.7S567.12,2.79,567.12,7V21l-40.85,1.4V14.67H507.41s-18.86,1.39-18.86,7v51h78.57v34.92H513v14h54.12v80l40.16-4.19V121.53H664.9v-14H607.28V72.64H675v-7h1.75s5.24,0,8.38-8.38l3.14-23.05S688,17.46,670.14,17.46l-62.86,2.1V0Zm62.16,32.13a5.58,5.58,0,0,1,5.94,5.59L650.94,59H526.27V36l40.85-1v.35l40.16-1.75Z"/><path class="cls-1" d="M341.53,107.56l12.92,15,15,13.28s4.19,4.19,8.38,0l14.67-13.28,12.92-15s4.54-3.84,0-8.73L392.52,84.16,377.85,71.24s-4.19-4.19-8.38,0L354.8,84.16,341.53,98.83s-3.84,4.89,0,8.73m335.25,46.09a5.68,5.68,0,0,0,0-6.63l-10.13-11.18-11.17-9.77a4.72,4.72,0,0,0-6.64,0l-11.17,9.77L627.89,147s-2.8,3.49,0,6.63l9.78,11.18,11.17,9.78s3.49,3.49,6.64,0l11.17-9.78,10.13-11.18"/><path class="cls-2" d="M77.88,90.8H197.66a166.4,166.4,0,0,1-12.23,30.73s-15,29.33-38.06,51.33c0,0-43.3,40.51-71.24,40.51,0,0-20.6,0-33.87-7.68,0,0-16.42-10.13-16.42-31.08,0,0,0-27.59,42.26-35.62,0,0-27.24-1.75-41.56,12.57,0,0-13.27,12.57-13.27,34.57,0,0,0,21,19.21,33.53A78.57,78.57,0,0,0,74,230.83l5.59.35s47.5-2.44,91.5-39.11c0,0,37.71-31.43,56.57-76.48a187.78,187.78,0,0,0,9.08-27.94l2.09-10.82v.35h-64.6V46.45h81.37V32.83H174.26V1.05H153l-9.08.7S134.45,3.84,134.45,8v24.8H55.88V46.45h78.57V77.18H77.88V90.8M346.42,0l-.7,6.64-4.54,16.41A94.53,94.53,0,0,1,329,43v157.5l-40.16-4.89v-125s-15,7.68-27.94,12.57l-5.23-8.38A238.27,238.27,0,0,0,282.86,52s26.89-26.89,26.89-45c0,0,0-4.2,9.43-6.29l9.08-.7h18.16"/><path class="cls-2" d="M335.25,60.41h75.43V205.69l40.16.7v-146h21v-14h-21V0H429.19l-9.08.7S410.68,2.79,410.68,7V46.45H335.25v14"/><path class="cls-1" d="M152.61,144.92s-51-22.35-82.42-23.39c0,0-25.84-1.4-47.14,13.62,0,0-22.35,15.71-23,39.11,0,0,0,27.24,21.65,42.6,0,0,19.91,14.32,52,14.32h3.15l-5.24-.35s-23.4,0-39.81-11.52c0,0-18.16-12.92-18.16-34.23,0,0,0-23,16.06-34.92,0,0,13.62-9.77,35.62-10.12l31.08,3.49,24.1,9.43,57.62,29.33s39.46,20.6,77.18,33.18c0,0,131.3,43.65,425,15L696,227.34s5.58-2.45,10.12-9.78c0,0,3.85-5.94,30-29.33,0,0,18.85-17.12,12.57-22.7l-9.08,1.39s-96,21.66-242.36,27.59c0,0-164.48,6.64-245.84-16.76,0,0-56.23-16.06-98.83-32.83"/></svg>
assets/img/applepay.svg ADDED
@@ -0,0 +1,76 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!-- Generator: Adobe Illustrator 21.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ width="165.5211px" height="105.9651px" viewBox="0 0 165.5211 105.9651" enable-background="new 0 0 165.5211 105.9651"
5
+ xml:space="preserve">
6
+ <g>
7
+ <path id="XMLID_96_" d="M150.6981,0H14.8232c-0.5659,0-1.1328,0-1.6977,0.0033C12.648,0.0067,12.1716,0.012,11.6952,0.025
8
+ c-1.039,0.0281-2.0869,0.0894-3.1129,0.2738C7.5399,0.4864,6.5699,0.7924,5.6236,1.2742c-0.9303,0.4731-1.782,1.0919-2.5201,1.8303
9
+ c-0.7384,0.7384-1.3572,1.5887-1.8302,2.52C0.7914,6.5708,0.4852,7.5411,0.2989,8.5843c-0.1854,1.0263-0.2471,2.074-0.2751,3.1119
10
+ c-0.0128,0.4764-0.0183,0.9528-0.0214,1.4291c-0.0033,0.5661-0.0022,1.1318-0.0022,1.6989V91.142
11
+ c0,0.5671-0.0011,1.1318,0.0022,1.699c0.0031,0.4763,0.0086,0.9527,0.0214,1.4291c0.028,1.037,0.0897,2.0847,0.2751,3.1107
12
+ c0.1863,1.0436,0.4925,2.0135,0.9744,2.9599c0.473,0.9313,1.0918,1.7827,1.8302,2.52c0.7381,0.7396,1.5898,1.3583,2.5201,1.8302
13
+ c0.9463,0.4831,1.9163,0.7892,2.9587,0.9767c1.026,0.1832,2.0739,0.2456,3.1129,0.2737c0.4764,0.0108,0.9528,0.0172,1.4303,0.0194
14
+ c0.5649,0.0044,1.1318,0.0044,1.6977,0.0044h135.8749c0.5649,0,1.1318,0,1.6966-0.0044c0.4764-0.0022,0.9528-0.0086,1.4314-0.0194
15
+ c1.0368-0.0281,2.0845-0.0905,3.113-0.2737c1.041-0.1875,2.0112-0.4936,2.9576-0.9767c0.9313-0.4719,1.7805-1.0906,2.5201-1.8302
16
+ c0.7372-0.7373,1.356-1.5887,1.8302-2.52c0.483-0.9464,0.7889-1.9163,0.9743-2.9599c0.1855-1.026,0.2457-2.0737,0.2738-3.1107
17
+ c0.013-0.4764,0.0194-0.9528,0.0216-1.4291c0.0044-0.5672,0.0044-1.1319,0.0044-1.699V14.8242c0-0.5671,0-1.1328-0.0044-1.6989
18
+ c-0.0022-0.4763-0.0086-0.9527-0.0216-1.4291c-0.0281-1.0379-0.0883-2.0856-0.2738-3.1119
19
+ c-0.1854-1.0432-0.4913-2.0135-0.9743-2.9598c-0.4742-0.9313-1.093-1.7816-1.8302-2.52c-0.7396-0.7384-1.5888-1.3572-2.5201-1.8303
20
+ c-0.9464-0.4818-1.9166-0.7878-2.9576-0.9754c-1.0285-0.1844-2.0762-0.2457-3.113-0.2738c-0.4786-0.013-0.955-0.0183-1.4314-0.0217
21
+ C151.8299,0,151.263,0,150.6981,0L150.6981,0z"/>
22
+ <path id="XMLID_227_" fill="#FFFFFF" d="M150.6981,3.532l1.6715,0.0032c0.4528,0.0032,0.9056,0.0081,1.3609,0.0205
23
+ c0.792,0.0214,1.7185,0.0643,2.5821,0.2191c0.7507,0.1352,1.3803,0.3408,1.9845,0.6484c0.5965,0.3031,1.143,0.7003,1.6202,1.1768
24
+ c0.479,0.4797,0.8767,1.0271,1.1838,1.6302c0.3059,0.5995,0.5102,1.2261,0.6446,1.9823c0.1544,0.8542,0.1971,1.7832,0.2188,2.5801
25
+ c0.0122,0.4498,0.0182,0.8996,0.0204,1.3601c0.0043,0.5569,0.0042,1.1135,0.0042,1.6715V91.142
26
+ c0,0.558,0.0001,1.1136-0.0043,1.6824c-0.0021,0.4497-0.0081,0.8995-0.0204,1.3501c-0.0216,0.7957-0.0643,1.7242-0.2206,2.5885
27
+ c-0.1325,0.7458-0.3367,1.3725-0.6443,1.975c-0.3062,0.6016-0.7033,1.1484-1.1802,1.6251c-0.4799,0.48-1.0246,0.876-1.6282,1.1819
28
+ c-0.5997,0.3061-1.2282,0.5115-1.9715,0.6453c-0.8811,0.157-1.8464,0.2002-2.5734,0.2199
29
+ c-0.4574,0.0103-0.9126,0.0165-1.3789,0.0187c-0.5557,0.0043-1.1134,0.0042-1.6692,0.0042H14.8232c-0.0074,0-0.0146,0-0.0221,0
30
+ c-0.5494,0-1.0999,0-1.6593-0.0043c-0.4561-0.0021-0.9112-0.0082-1.3512-0.0182c-0.7436-0.0201-1.7095-0.0632-2.5834-0.2193
31
+ c-0.7497-0.1348-1.3782-0.3402-1.9858-0.6503c-0.5979-0.3032-1.1422-0.6988-1.6223-1.1797
32
+ c-0.4764-0.4756-0.8723-1.0207-1.1784-1.6232c-0.3064-0.6019-0.5114-1.2305-0.6462-1.9852
33
+ c-0.1558-0.8626-0.1986-1.7874-0.22-2.5777c-0.0122-0.4525-0.0173-0.9049-0.0202-1.3547l-0.0022-1.3279l0.0001-0.3506V14.8242
34
+ l-0.0001-0.3506l0.0021-1.3251c0.003-0.4525,0.0081-0.9049,0.0203-1.357c0.0214-0.7911,0.0642-1.7163,0.2213-2.5861
35
+ C3.9094,8.4575,4.1143,7.8289,4.4223,7.224C4.726,6.6261,5.1226,6.0803,5.6015,5.6015c0.477-0.4772,1.0231-0.8739,1.6248-1.1799
36
+ C7.8274,4.1155,8.4571,3.91,9.2068,3.7751c0.8638-0.1552,1.7909-0.198,2.5849-0.2195c0.4526-0.0123,0.9052-0.0172,1.3544-0.0203
37
+ l1.6771-0.0033H150.6981"/>
38
+ <g id="XMLID_34_">
39
+ <g id="XMLID_44_">
40
+ <path id="XMLID_46_" d="M43.5084,35.7697c1.4032-1.755,2.3554-4.1116,2.1043-6.5197c-2.0541,0.1022-4.5606,1.3551-6.0118,3.1116
41
+ c-1.303,1.5041-2.4563,3.9593-2.1557,6.2665C39.751,38.8281,42.0547,37.4756,43.5084,35.7697"/>
42
+ <path id="XMLID_45_" d="M45.5865,39.0786c-3.3486-0.1995-6.1956,1.9004-7.7948,1.9004c-1.5999,0-4.0487-1.7999-6.6972-1.7514
43
+ c-3.4472,0.0506-6.6458,1.9997-8.3952,5.0996c-3.598,6.2015-0.9495,15.4004,2.5494,20.4511
44
+ c1.6992,2.4988,3.7469,5.2501,6.4452,5.1512c2.5494-0.1,3.5486-1.6507,6.6475-1.6507c3.0966,0,3.9967,1.6507,6.6954,1.6007
45
+ c2.7986-0.05,4.5482-2.5,6.2474-5.0011c1.9492-2.8485,2.7471-5.5989,2.7973-5.7499c-0.0502-0.05-5.3964-2.101-5.446-8.2509
46
+ c-0.0505-5.1494,4.1974-7.5987,4.3973-7.7506C50.634,39.5791,46.8859,39.1791,45.5865,39.0786"/>
47
+ </g>
48
+ <g id="XMLID_35_">
49
+ <path id="XMLID_41_" d="M78.9732,32.1102c7.278,0,12.3464,5.0168,12.3464,12.3209c0,7.3302-5.1722,12.3733-12.5284,12.3733
50
+ H70.733v12.8142h-5.8225V32.1102H78.9732z M70.733,51.9172h6.6804c5.0689,0,7.9538-2.729,7.9538-7.46
51
+ c0-4.7305-2.8849-7.434-7.9278-7.434H70.733V51.9172z"/>
52
+ <path id="XMLID_38_" d="M92.7641,61.8472c0-4.8092,3.6651-7.5645,10.4231-7.9801l7.252-0.4423v-2.0792
53
+ c0-3.0413-2.0015-4.7049-5.5623-4.7049c-2.9376,0-5.069,1.5076-5.5107,3.821h-5.2509c0.1564-4.8609,4.731-8.3956,10.9175-8.3956
54
+ c6.6543,0,10.9952,3.4831,10.9952,8.8894v18.6631h-5.3808v-4.4964h-0.1298c-1.5337,2.9371-4.913,4.7822-8.5781,4.7822
55
+ C96.5329,69.9044,92.7641,66.6815,92.7641,61.8472z M110.4392,59.4296v-2.1058l-6.4723,0.4161
56
+ c-3.639,0.2337-5.5362,1.5854-5.5362,3.9509c0,2.2873,1.9754,3.7694,5.0684,3.7694
57
+ C107.4499,65.4602,110.4392,62.9382,110.4392,59.4296z"/>
58
+ <path id="XMLID_36_" d="M120.9746,79.6522v-4.4964c0.364,0.0512,1.2475,0.1033,1.7152,0.1033
59
+ c2.5736,0,4.0291-1.091,4.9131-3.8987l0.5199-1.6636l-9.8516-27.2928h6.0822l6.8624,22.1457h0.1298l6.8624-22.1457h5.9268
60
+ l-10.2156,28.6706c-2.3394,6.5761-5.0168,8.734-10.6834,8.734C122.7941,79.8086,121.3642,79.7565,120.9746,79.6522z"/>
61
+ </g>
62
+ </g>
63
+ </g>
64
+ <g>
65
+ </g>
66
+ <g>
67
+ </g>
68
+ <g>
69
+ </g>
70
+ <g>
71
+ </g>
72
+ <g>
73
+ </g>
74
+ <g>
75
+ </g>
76
+ </svg>
assets/img/bancontact.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 530.13" preserveAspectRatio="xMidYMid meet"><defs><style>.cls-1{fill:#fff;}.cls-2{fill:#005498;}.cls-3{fill:#ffd800;}.cls-4{fill:none;}</style></defs><title>bancontact</title><path class="cls-1" d="M750,484.59a45.64,45.64,0,0,1-45.54,45.54H45.77A45.64,45.64,0,0,1,.23,484.59v-439A45.64,45.64,0,0,1,45.77,0H704.46A45.64,45.64,0,0,1,750,45.54V484.59Z"/><path class="cls-2" d="M602.58,148.11H422.49l-18.4,20.7-59.33,66.93h0l-18.4,20.7H148.8l17.94-20.93,8.51-9.89,17.94-20.93H111.55c-15,0-27.14,12.65-27.14,27.83h0V291.4c0,15.41,12.19,27.83,27.14,27.83H424.79c14.95,0,35.42-9.2,45.31-20.7l47.38-53.82Z"/><path class="cls-3" d="M638.68,85.33c15,0,27.14,12.65,27.14,27.83V171.8c0,15.41-12.19,27.83-27.14,27.83H557.27l18.17-20.7h0l9-10.35,18.17-20.7H422.49L326.59,256H147.88L276,111.09l4.83-5.52c10.12-11.27,30.59-20.7,45.54-20.7H638.68Z"/><path class="cls-2" d="M665.82,442.5V434c0-1.15-.69-1.84-2.3-1.84H658c-1.61,0-2.76-.23-3-.92-.46-.69-.46-2.07-.46-4.37v-32.2h9a2.36,2.36,0,0,0,2.3-2.3v-9a2.36,2.36,0,0,0-2.3-2.3h-9V369.37a1.94,1.94,0,0,0-.46-1.38,3.27,3.27,0,0,0-1.38-.46h-.23l-13.34,2.3a11.21,11.21,0,0,0-1.61.69,2,2,0,0,0-.69,1.38v9h-9a2.36,2.36,0,0,0-2.3,2.3v7.36a1.39,1.39,0,0,0,.69,1.38,3.71,3.71,0,0,0,1.61.92l9,1.38v32.2a37,37,0,0,0,1.15,9.66,15.28,15.28,0,0,0,3.45,5.75,12.22,12.22,0,0,0,5.75,2.76,42,42,0,0,0,8,.69,26.41,26.41,0,0,0,4.37-.23c1.15-.23,2.76-.46,4.37-.69a1.69,1.69,0,0,0,1.84-1.84M618,441.35v-9.89a1.39,1.39,0,0,0-.69-1.38,3.27,3.27,0,0,0-1.38-.46h-.23a56.63,56.63,0,0,1-6,.46,69.5,69.5,0,0,1-7.59.23,8.4,8.4,0,0,1-3.45-.69,8.75,8.75,0,0,1-3-2.07,8.85,8.85,0,0,1-1.84-3.91,23.15,23.15,0,0,1-.69-6.21v-9.2a23.15,23.15,0,0,1,.69-6.21,12.39,12.39,0,0,1,1.84-3.91,8.75,8.75,0,0,1,3-2.07,9.23,9.23,0,0,1,3.45-.69,69.5,69.5,0,0,1,7.59.23c1.84.23,3.91.23,6,.46h.23a1.94,1.94,0,0,0,1.38-.46,1.39,1.39,0,0,0,.69-1.38v-9.89a2.2,2.2,0,0,0-.46-1.61,6.74,6.74,0,0,0-1.84-.92c-1.61-.46-3.45-.69-6-1.15a50.09,50.09,0,0,0-8.74-.46c-7.82,0-14,2.3-18.86,7.13-4.6,4.83-7.13,11.73-7.13,20.93v9.2c0,9,2.3,16.1,7.13,20.93,4.6,4.83,11,7.13,18.86,7.13,3.22,0,6.21-.23,8.74-.46a55.86,55.86,0,0,0,6-1.15,3.46,3.46,0,0,0,1.84-.92c.46-.23.46-.92.46-1.61m-72-11.73a24.52,24.52,0,0,1-4.37,1.61,17.51,17.51,0,0,1-4.83.69c-2.3,0-4.14-.23-5.29-.92s-1.61-2.07-1.61-4.6v-.92a13.92,13.92,0,0,1,.46-3.45A6,6,0,0,1,532,419.5a6,6,0,0,1,3-1.38,24.4,24.4,0,0,1,4.83-.46H546v12Zm17.48-26.91a26.89,26.89,0,0,0-1.84-10.35,19.21,19.21,0,0,0-5.06-6.9,18.84,18.84,0,0,0-8.05-3.91,39.72,39.72,0,0,0-10.81-1.38,82.63,82.63,0,0,0-10.81.69,47.92,47.92,0,0,0-8.28,1.61c-1.38.46-2.07,1.15-2.07,2.53v9a3.32,3.32,0,0,0,.46,1.61,3.27,3.27,0,0,0,1.38.46h.46c.92,0,2.07-.23,3.22-.23,1.38,0,2.76-.23,4.37-.23s3.45-.23,5.29-.23H537a11,11,0,0,1,6,1.38c1.38.92,2.3,3,2.3,6.21v3.91h-6c-9.43,0-16.56,1.38-20.7,4.37-4.37,3-6.44,7.82-6.44,14.26v.92c0,3.68.46,6.67,1.61,9a16.81,16.81,0,0,0,4.37,6,18.78,18.78,0,0,0,6,3.22,24.27,24.27,0,0,0,7.13.92,23.57,23.57,0,0,0,8.51-1.38,33.56,33.56,0,0,0,6.9-3.68v1.84a2.36,2.36,0,0,0,2.3,2.3h12.42a2.36,2.36,0,0,0,2.3-2.3V402.71ZM504.37,442.5V434c0-1.15-.69-1.84-2.3-1.84h-5.52c-1.61,0-2.76-.23-3-.92-.46-.69-.46-2.07-.46-4.37v-32.2h9a2.36,2.36,0,0,0,2.3-2.3v-9a2.36,2.36,0,0,0-2.3-2.3h-9V369.37a1.94,1.94,0,0,0-.46-1.38,3.27,3.27,0,0,0-1.38-.46H491l-13.34,2.3a11.21,11.21,0,0,0-1.61.69,2,2,0,0,0-.69,1.38v9h-9.2a2.36,2.36,0,0,0-2.3,2.3v7.36a1.39,1.39,0,0,0,.69,1.38,3.71,3.71,0,0,0,1.61.92l9,1.38v32.2a37,37,0,0,0,1.15,9.66,15.28,15.28,0,0,0,3.45,5.75,12.22,12.22,0,0,0,5.75,2.76,42,42,0,0,0,8.05.69,26.41,26.41,0,0,0,4.37-.23c1.15-.23,2.76-.46,4.37-.69,1.38,0,2.07-.69,2.07-1.84m-48.3-.23v-36.8a46.55,46.55,0,0,0-.92-9.89,22.48,22.48,0,0,0-3-8.05,13.39,13.39,0,0,0-6-5.29,20.38,20.38,0,0,0-9.89-2.07,30.1,30.1,0,0,0-9.43,1.38,32.28,32.28,0,0,0-8.74,4.6v-2.76a2.36,2.36,0,0,0-2.3-2.3H403.4a2.36,2.36,0,0,0-2.3,2.3v58.88a2.36,2.36,0,0,0,2.3,2.3h13.34a2.36,2.36,0,0,0,2.3-2.3V398.8a58.81,58.81,0,0,1,5.52-2.53,13.11,13.11,0,0,1,5.06-.92,20.63,20.63,0,0,1,4.14.46,4.83,4.83,0,0,1,2.53,1.61,6.71,6.71,0,0,1,1.15,3.22,30.87,30.87,0,0,1,.23,4.83v36.8a2.36,2.36,0,0,0,2.3,2.3h13.34a2.09,2.09,0,0,0,1.61-.69,1.82,1.82,0,0,0,1.15-1.61m-83.71-25.53c0,9-3.22,13.57-9.89,13.57-3.22,0-5.75-1.15-7.36-3.45s-2.53-5.75-2.53-10.12v-7.82c0-4.6.92-7.82,2.53-10.12s4.14-3.45,7.36-3.45c6.44,0,9.89,4.6,9.89,13.57Zm17.93-7.82a38.4,38.4,0,0,0-1.84-12,25.06,25.06,0,0,0-5.29-9,23.19,23.19,0,0,0-8.74-5.75,35.56,35.56,0,0,0-23.91,0,23.19,23.19,0,0,0-8.74,5.75,25.06,25.06,0,0,0-5.29,9,38.4,38.4,0,0,0-1.84,12v7.82a38.4,38.4,0,0,0,1.84,12,25.06,25.06,0,0,0,5.29,9,23.19,23.19,0,0,0,8.74,5.75,35.56,35.56,0,0,0,23.91,0,23.19,23.19,0,0,0,8.74-5.75,25.06,25.06,0,0,0,5.29-9,38.4,38.4,0,0,0,1.84-12Zm-61.4,32.43v-9.89a1.39,1.39,0,0,0-.69-1.38,3.32,3.32,0,0,0-1.61-.46h-.23a56.63,56.63,0,0,1-6,.46,69.5,69.5,0,0,1-7.59.23,8.4,8.4,0,0,1-3.45-.69,8.75,8.75,0,0,1-3-2.07,8.85,8.85,0,0,1-1.84-3.91,23.15,23.15,0,0,1-.69-6.21v-9.2a23.15,23.15,0,0,1,.69-6.21,12.39,12.39,0,0,1,1.84-3.91,8.75,8.75,0,0,1,3-2.07,9.23,9.23,0,0,1,3.45-.69,69.5,69.5,0,0,1,7.59.23c1.84.23,3.91.23,6,.46h.23a3.32,3.32,0,0,0,1.61-.46,1.39,1.39,0,0,0,.69-1.38v-9.89a2.2,2.2,0,0,0-.46-1.61,6.74,6.74,0,0,0-1.84-.92c-1.61-.46-3.45-.69-6-1.15a50.09,50.09,0,0,0-8.74-.46c-7.82,0-14,2.3-18.86,7.13-4.6,4.83-7.13,11.73-7.13,20.93v9.2c0,9,2.3,16.1,7.13,20.93,4.6,4.83,11,7.13,18.86,7.13,3.22,0,6.21-.23,8.74-.46,2.53-.46,4.37-.69,6-1.15a3.46,3.46,0,0,0,1.84-.92,2.68,2.68,0,0,0,.46-1.61m-54.51.92v-36.8a46.55,46.55,0,0,0-.92-9.89,22.48,22.48,0,0,0-3-8.05,13.39,13.39,0,0,0-6-5.29,20.38,20.38,0,0,0-9.89-2.07,30.1,30.1,0,0,0-9.43,1.38,32.28,32.28,0,0,0-8.74,4.6v-2.76a2.36,2.36,0,0,0-2.3-2.3H221.71a2.36,2.36,0,0,0-2.3,2.3v58.88a2.36,2.36,0,0,0,2.3,2.3h13.34a2.36,2.36,0,0,0,2.3-2.3V398.8a58.81,58.81,0,0,1,5.52-2.53,13.11,13.11,0,0,1,5.06-.92,20.63,20.63,0,0,1,4.14.46,4.83,4.83,0,0,1,2.53,1.61,6.71,6.71,0,0,1,1.15,3.22,30.87,30.87,0,0,1,.23,4.83v36.8a2.36,2.36,0,0,0,2.3,2.3h13.34a2.09,2.09,0,0,0,1.61-.69,1.82,1.82,0,0,0,1.15-1.61m-85.56-12.65a24.52,24.52,0,0,1-4.37,1.61,17.51,17.51,0,0,1-4.83.69c-2.3,0-4.14-.23-5.29-.92s-1.61-2.07-1.61-4.6v-.92a13.92,13.92,0,0,1,.46-3.45,6,6,0,0,1,1.61-2.53,6,6,0,0,1,3-1.38,24.4,24.4,0,0,1,4.83-.46h6.21Zm17.71-26.91a26.89,26.89,0,0,0-1.84-10.35,19.21,19.21,0,0,0-5.06-6.9,18.84,18.84,0,0,0-8-3.91,39.72,39.72,0,0,0-10.81-1.38,82.63,82.63,0,0,0-10.81.69,47.92,47.92,0,0,0-8.28,1.61c-1.38.46-2.07,1.15-2.07,2.53v9a3.32,3.32,0,0,0,.46,1.61,3.27,3.27,0,0,0,1.38.46h.46c.92,0,2.07-.23,3.22-.23,1.38,0,2.76-.23,4.6-.23,1.61,0,3.45-.23,5.29-.23h5.29a11,11,0,0,1,6,1.38c1.38.92,2.3,3,2.3,6.21v3.91h-6c-9.43,0-16.56,1.38-20.7,4.37-4.37,3-6.44,7.82-6.44,14.26v.92c0,3.68.46,6.67,1.61,9a16.81,16.81,0,0,0,4.37,6,18.78,18.78,0,0,0,6,3.22,24.27,24.27,0,0,0,7.13.92,23.57,23.57,0,0,0,8.51-1.38,33.56,33.56,0,0,0,6.9-3.68v1.84a2.36,2.36,0,0,0,2.3,2.3h12.42a2.36,2.36,0,0,0,2.3-2.3V402.71Zm-79.12,17.48a8.78,8.78,0,0,1-3.21,7.13c-2.07,1.61-6.21,2.53-11.73,2.53h-9.2v-20.7h12.42c4.37,0,7.59.92,9.2,3a11.14,11.14,0,0,1,2.52,6.9ZM127,387.3a17.75,17.75,0,0,1-.46,3.45,5.92,5.92,0,0,1-1.83,2.76,12.19,12.19,0,0,1-3.45,1.84,18,18,0,0,1-5.52.69H103.27V377h8.51c5.75,0,9.66.69,12,2.07a7.28,7.28,0,0,1,3.44,6.67L127,387.3ZM145.81,419a17.24,17.24,0,0,0-2.76-9.89,17.48,17.48,0,0,0-7.13-6.44,15.59,15.59,0,0,0,6.9-6.44,20.17,20.17,0,0,0,2.53-9.66v-2.07a23,23,0,0,0-2.53-11,19.28,19.28,0,0,0-7.13-7.13,34.57,34.57,0,0,0-11-3.91,89.53,89.53,0,0,0-14.26-1.15h-5.52c-1.84,0-3.68.23-5.52.23a34.45,34.45,0,0,0-5.06.46c-1.61.23-2.76.23-3.68.46-2.07.46-3.68.92-4.6,2.07-.92.92-1.38,2.76-1.38,5.29v67.38c0,2.53.46,4.14,1.38,5.29a9.53,9.53,0,0,0,4.6,2.07,20.26,20.26,0,0,0,3.91.46c1.61.23,3.22.23,5.06.46a44.32,44.32,0,0,0,5.52.23h5.75a82.93,82.93,0,0,0,13.57-1.15,33.12,33.12,0,0,0,11-3.91,21.8,21.8,0,0,0,7.59-7.59,24.51,24.51,0,0,0,2.76-12.19V419Z"/><rect class="cls-4" width="749.77" height="530.13"/></svg>
assets/img/card_brand.svg ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 21"><g fill="#fff" fill-rule="evenodd"><g id="unknown" class="Icon-fill"><path id="shape" d="M26.58 21H2.42A2.4 2.4 0 0 1 0 18.62V4.38A2.4 2.4 0 0 1 2.42 2h24.16A2.4 2.4 0 0 1 29 4.38v14.25A2.4 2.4 0 0 1 26.58 21zM10 7.83c0-.46-.35-.83-.78-.83H3.78c-.43 0-.78.37-.78.83v3.34c0 .46.35.83.78.83h5.44c.43 0 .78-.37.78-.83V7.83zM25 17c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1H4c-.65 0-1 .3-1 1s.35 1 1 1h3z"></path></g></g></svg>
assets/img/card_brand2.svg ADDED
@@ -0,0 +1,3 @@
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg focusable="false" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 32 21"><g fill="#cccccc" fill-rule="evenodd"><g id="unknown" class="Icon-fill"><path id="shape" d="M26.58 21H2.42A2.4 2.4 0 0 1 0 18.62V4.38A2.4 2.4 0 0 1 2.42 2h24.16A2.4 2.4 0 0 1 29 4.38v14.25A2.4 2.4 0 0 1 26.58 21zM10 7.83c0-.46-.35-.83-.78-.83H3.78c-.43 0-.78.37-.78.83v3.34c0 .46.35.83.78.83h5.44c.43 0 .78-.37.78-.83V7.83zM25 17c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1h-3c-.65 0-1 .3-1 1s.35 1 1 1h3zm-6 0c.65 0 1-.3 1-1s-.35-1-1-1H4c-.65 0-1 .3-1 1s.35 1 1 1h3z"></path></g></g></svg>
assets/img/cards/amex.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="471" width="752" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#2557d6" height="471" rx="40" width="750" x="1"/><path d="M1.003 221.185h36.024l8.123-19.51h18.185l8.101 19.51h70.88V206.27l6.327 14.98h36.796l6.327-15.202v15.138h176.151l-.082-32.026h3.408c2.386.083 3.083.302 3.083 4.226v27.8h91.106v-7.455c7.349 3.92 18.779 7.455 33.819 7.455h38.328l8.203-19.51h18.185l8.021 19.51h73.86v-18.532l11.186 18.532h59.187V98.678h-58.576v14.468l-8.202-14.468h-60.105v14.468l-7.532-14.468h-81.188c-13.59 0-25.536 1.889-35.186 7.153v-7.153h-56.026v7.153c-6.14-5.426-14.508-7.153-23.812-7.153H180.908l-13.734 31.641-14.104-31.641H88.6v14.468l-7.083-14.468H26.534L1 156.924v64.261zm227.396-17.67h-21.614l-.08-68.794-30.573 68.793H157.62l-30.652-68.854v68.854H84.084l-8.101-19.592h-43.9L23.9 203.514H1l37.756-87.837h31.326l35.859 83.164v-83.164h34.412l27.593 59.587 25.347-59.587h35.104v87.837h.003zM68.777 165.692l-14.43-35.017-14.35 35.017zm245.642 37.821h-70.433v-87.837h70.433v18.291h-49.348V149.8h48.165v18.005H265.07v17.542h49.348v18.166zm99.256-64.18c0 14.004-9.386 21.24-14.856 23.412 4.613 1.748 8.553 4.838 10.43 7.397 2.976 4.369 3.49 8.271 3.49 16.116v17.255h-21.266l-.08-11.077c0-5.285.508-12.886-3.328-17.112-3.081-3.09-7.777-3.76-15.368-3.76h-22.633v31.95H328.98v-87.838h48.495c10.775 0 18.714.283 25.53 4.207 6.67 3.924 10.67 9.652 10.67 19.45zm-26.652 13.042c-2.898 1.752-6.324 1.81-10.43 1.81H350.98v-19.51h25.962c3.674 0 7.508.164 9.998 1.584 2.735 1.28 4.427 4.003 4.427 7.765 0 3.84-1.61 6.929-4.344 8.351zm60.466 51.138h-21.513v-87.837h21.513zm249.74 0H667.35l-39.964-65.927v65.927h-42.94l-8.204-19.592h-43.799l-7.96 19.592H499.81c-10.248 0-23.224-2.257-30.572-9.715-7.41-7.458-11.265-17.56-11.265-33.533 0-13.027 2.304-24.936 11.366-34.347 6.816-7.01 17.49-10.242 32.02-10.242h20.412v18.821h-19.984c-7.694 0-12.039 1.14-16.224 5.203-3.594 3.699-6.06 10.69-6.06 19.897 0 9.41 1.878 16.196 5.797 20.628 3.245 3.476 9.144 4.53 14.694 4.53h9.469l29.716-69.076h31.592l35.696 83.081v-83.08h32.103l37.062 61.174V115.68h21.596v87.834zm-128.159-37.82l-14.591-35.017-14.51 35.017h29.1zm181.885 178.074c-5.121 7.458-15.101 11.239-28.611 11.239h-40.718v-18.84h40.553c4.022 0 6.837-.527 8.532-2.175a7.71 7.71 0 0 0 2.493-5.73c0-2.56-1.024-4.592-2.575-5.81-1.53-1.341-3.757-1.95-7.429-1.95-19.797-.67-44.495.609-44.495-27.194 0-12.743 8.125-26.157 30.25-26.157h41.998v-17.48h-39.02c-11.776 0-20.33 2.808-26.388 7.174v-7.175H627.83c-9.23 0-20.063 2.279-25.187 7.175v-7.175H499.578v7.175c-8.203-5.892-22.043-7.175-28.431-7.175h-67.983v7.175c-6.49-6.258-20.92-7.175-29.716-7.175h-76.085l-17.41 18.763-16.307-18.763H149.99v122.592h111.516l17.94-19.06 16.9 19.06 68.739.061v-28.838h6.757c9.12.14 19.878-.226 29.368-4.31v33.085h56.697v-31.952h2.735c3.49 0 3.834.143 3.834 3.616v28.333H636.71c10.935 0 22.365-2.787 28.695-7.845v7.845h54.632c11.369 0 22.471-1.587 30.918-5.651zm-341.503-47.154c0 24.406-18.286 29.445-36.716 29.445H346.43v29.469h-40.98l-25.962-29.085-26.981 29.085H168.99v-87.859h84.8l25.941 28.799 26.819-28.799h67.371c16.732 0 35.532 4.613 35.532 28.945zm-167.625 40.434h-51.839v-17.481h46.289V301.64h-46.289v-15.973h52.86l23.062 25.604zm83.526 10.06l-32.37-35.788 32.37-34.651zm47.873-39.066H345.98v-22.374h27.492c7.612 0 12.896 3.09 12.896 10.773 0 7.598-5.04 11.601-13.14 11.601zm142.744-40.373h70.369v18.17h-49.372v15.973h48.167v17.925h-48.167v17.481l49.372.08v18.23h-70.37v-87.859zm-27.054 47.03c4.693 1.724 8.53 4.816 10.329 7.375 2.977 4.29 3.408 8.293 3.493 16.037v17.417H481.57v-10.992c0-5.286.511-13.112-3.408-17.198-3.08-3.147-7.777-3.9-15.468-3.9h-22.533v32.09h-21.186v-87.859h48.678c10.674 0 18.448.47 25.369 4.146 6.654 4.004 10.839 9.488 10.839 19.51-.003 14.024-9.395 21.18-14.945 23.373zM477 303.59c-2.82 1.667-6.308 1.81-10.41 1.81h-25.614v-19.733h25.962c3.754 0 7.51.08 10.062 1.587 2.732 1.423 4.366 4.144 4.366 7.903 0 3.76-1.634 6.788-4.366 8.433zm190.336 5.597c4.106 4.23 6.306 9.572 6.306 18.614 0 18.9-11.858 27.723-33.122 27.723h-41.065v-18.84h40.9c4 0 6.836-.527 8.613-2.175 1.45-1.359 2.49-3.333 2.49-5.73 0-2.56-1.125-4.592-2.573-5.81-1.612-1.34-3.836-1.95-7.508-1.95-19.717-.67-44.41.61-44.41-27.193 0-12.744 8.04-26.158 30.144-26.158h42.269v18.7h-38.677c-3.834 0-6.327.143-8.447 1.587-2.31 1.422-3.166 3.534-3.166 6.32 0 3.315 1.96 5.57 4.613 6.545 2.224.77 4.613.996 8.205.996l11.35.305c11.446.278 19.303 2.249 24.078 7.066zM751 285.667h-38.427c-3.836 0-6.385.143-8.532 1.587-2.224 1.423-3.081 3.534-3.081 6.322 0 3.314 1.878 5.569 4.61 6.544 2.225.77 4.614.996 8.126.996l11.427.304c11.531.284 19.228 2.258 23.921 7.072.855.67 1.368 1.422 1.956 2.175z" fill="#fff"/></g></svg>
assets/img/cards/china_union_pay.svg ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg id="icon-unionpay" width="40" height="24" viewBox="0 0 40 24" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
4
+ <title>Union Pay</title>
5
+ <path d="M9.877 2h8.126c1.135 0 1.84.93 1.575 2.077l-3.783 16.35c-.267 1.142-1.403 2.073-2.538 2.073H5.13c-1.134 0-1.84-.93-1.574-2.073L7.34 4.076C7.607 2.93 8.74 2 9.878 2z" style="fill: #E21836" />
6
+ <path d="M17.325 2h9.345c1.134 0 .623.93.356 2.077l-3.783 16.35c-.265 1.142-.182 2.073-1.32 2.073H12.58c-1.137 0-1.84-.93-1.574-2.073l3.783-16.35C15.056 2.93 16.19 2 17.324 2z" style="fill: #00447B" />
7
+ <path d="M26.3 2h8.126c1.136 0 1.84.93 1.575 2.077l-3.782 16.35c-.266 1.142-1.402 2.073-2.54 2.073h-8.122c-1.137 0-1.842-.93-1.574-2.073l3.78-16.35C24.03 2.93 25.166 2 26.303 2z" style="fill: #007B84" />
8
+ <path d="M27.633 14.072l-.99 3.3h.266l-.208.68h-.266l-.062.212h-.942l.064-.21H23.58l.193-.632h.194l1.005-3.35.2-.676h.962l-.1.34s.255-.184.498-.248c.242-.064 1.636-.088 1.636-.088l-.206.672h-.33zm-1.695 0l-.254.843s.285-.13.44-.172c.16-.04.395-.057.395-.057l.182-.614h-.764zm-.38 1.262l-.263.877s.29-.15.447-.196c.157-.037.396-.066.396-.066l.185-.614h-.766zm-.614 2.046h.767l.222-.74h-.765l-.223.74z" style="fill: #FEFEFE" />
9
+ <path d="M28.055 13.4h1.027l.01.385c-.005.065.05.096.17.096h.208l-.19.637h-.555c-.48.035-.662-.172-.65-.406l-.02-.71zM28.193 16.415h-.978l.167-.566H28.5l.16-.517h-1.104l.19-.638h3.072l-.193.638h-1.03l-.16.516h1.032l-.17.565H29.18l-.2.24h.454l.11.712c.013.07.014.116.036.147.023.026.158.038.238.038h.137l-.21.694h-.348c-.054 0-.133-.004-.243-.01-.105-.008-.18-.07-.25-.105-.064-.03-.16-.11-.182-.24l-.11-.712-.507.7c-.162.222-.38.39-.748.39h-.712l.186-.62h.273c.078 0 .15-.03.2-.056.052-.023.098-.05.15-.126l.74-1.05zM17.478 14.867h2.59l-.19.622H18.84l-.16.53h1.06l-.194.64h-1.06l-.256.863c-.03.095.25.108.353.108l.53-.072-.212.71h-1.193c-.096 0-.168-.013-.272-.037-.1-.023-.145-.07-.19-.138-.043-.07-.11-.128-.064-.278l.343-1.143h-.588l.195-.65h.592l.156-.53h-.588l.188-.623zM19.223 13.75h1.063l-.194.65H18.64l-.157.136c-.067.066-.09.038-.18.087-.08.04-.254.123-.477.123h-.466l.19-.625h.14c.118 0 .198-.01.238-.036.046-.03.098-.096.157-.203l.267-.487h1.057l-.187.356zM20.74 13.4h.905l-.132.46s.286-.23.487-.313c.2-.075.65-.143.65-.143l1.464-.007-.498 1.672c-.085.286-.183.472-.244.555-.055.087-.12.16-.248.23-.124.066-.236.104-.34.115-.096.007-.244.01-.45.012h-1.41l-.4 1.324c-.037.13-.055.194-.03.23.02.03.068.066.135.066l.62-.06-.21.726h-.698c-.22 0-.383-.004-.495-.013-.108-.01-.22 0-.295-.058-.065-.058-.164-.133-.162-.21.007-.073.037-.192.082-.356l1.268-4.23zm1.922 1.69h-1.484l-.09.3h1.283c.152-.018.184.004.196-.003l.096-.297zm-1.402-.272s.29-.266.786-.353c.112-.022.82-.015.82-.015l.106-.357h-1.496l-.216.725z" style="fill: #FEFEFE" />
10
+ <path d="M23.382 16.1l-.084.402c-.036.125-.067.22-.16.302-.1.084-.216.172-.488.172l-.502.02-.004.455c-.006.13.028.117.048.138.024.022.045.032.067.04l.157-.008.48-.028-.198.663h-.552c-.385 0-.67-.008-.765-.084-.092-.057-.105-.132-.103-.26l.035-1.77h.88l-.013.362h.212c.072 0 .12-.007.15-.026.027-.02.047-.048.06-.093l.087-.282h.692zM10.84 7.222c-.032.143-.596 2.763-.598 2.764-.12.53-.21.91-.508 1.152-.172.14-.37.21-.6.21-.37 0-.587-.185-.624-.537l-.007-.12.113-.712s.593-2.388.7-2.703c.002-.017.005-.026.007-.035-1.152.01-1.357 0-1.37-.018-.007.024-.037.173-.037.173l-.605 2.688-.05.23-.1.746c0 .22.042.4.13.553.275.485 1.06.557 1.504.557.573 0 1.11-.123 1.47-.345.63-.375.797-.962.944-1.48l.067-.267s.61-2.48.716-2.803c.003-.017.006-.026.01-.035-.835.01-1.08 0-1.16-.018zM14.21 12.144c-.407-.006-.55-.006-1.03.018l-.018-.036c.042-.182.087-.363.127-.548l.06-.25c.086-.39.173-.843.184-.98.007-.084.036-.29-.2-.29-.1 0-.203.048-.307.096-.058.207-.174.79-.23 1.055-.118.558-.126.62-.178.897l-.036.037c-.42-.006-.566-.006-1.05.018l-.024-.04c.08-.332.162-.668.24-.998.203-.9.25-1.245.307-1.702l.04-.028c.47-.067.585-.08 1.097-.185l.043.047-.077.287c.086-.052.168-.104.257-.15.242-.12.51-.155.658-.155.223 0 .468.062.57.323.098.232.034.52-.094 1.084l-.066.287c-.13.627-.152.743-.225 1.174l-.05.036zM15.87 12.144c-.245 0-.405-.006-.56 0-.153 0-.303.008-.532.018l-.013-.02-.015-.02c.062-.238.097-.322.128-.406.03-.084.06-.17.115-.41.072-.315.116-.535.147-.728.033-.187.052-.346.075-.53l.02-.014.02-.018c.244-.036.4-.057.56-.082.16-.024.32-.055.574-.103l.008.023.008.022c-.047.195-.094.39-.14.588-.047.197-.094.392-.137.587-.093.414-.13.57-.152.68-.02.105-.026.163-.063.377l-.022.02-.023.017zM19.542 10.728c.143-.633.033-.928-.108-1.11-.213-.273-.59-.36-.978-.36-.235 0-.793.023-1.23.43-.312.29-.458.687-.546 1.066-.088.387-.19 1.086.447 1.344.198.085.48.108.662.108.466 0 .945-.13 1.304-.513.278-.312.405-.775.448-.965zm-1.07-.046c-.02.106-.113.503-.24.673-.086.123-.19.198-.305.198-.033 0-.235 0-.238-.3-.003-.15.027-.304.063-.47.108-.478.236-.88.56-.88.255 0 .27.298.16.78zM29.536 12.187c-.493-.004-.635-.004-1.09.015l-.03-.037c.124-.472.248-.943.358-1.42.142-.62.175-.882.223-1.244l.037-.03c.49-.07.625-.09 1.135-.186l.015.044c-.093.388-.186.777-.275 1.166-.19.816-.258 1.23-.33 1.658l-.044.035z" style="fill: #FEFEFE" />
11
+ <path d="M29.77 10.784c.144-.63-.432-.056-.525-.264-.14-.323-.052-.98-.62-1.2-.22-.085-.732.025-1.17.428-.31.29-.458.683-.544 1.062-.088.38-.19 1.078.444 1.328.2.085.384.11.567.103.638-.034 1.124-1.002 1.483-1.386.277-.303.326.115.368-.07zm-.974-.047c-.024.1-.117.503-.244.67-.083.117-.283.192-.397.192-.032 0-.232 0-.24-.3 0-.146.03-.3.067-.467.11-.47.235-.87.56-.87.254 0 .363.293.254.774zM22.332 12.144c-.41-.006-.55-.006-1.03.018l-.018-.036c.04-.182.087-.363.13-.548l.057-.25c.09-.39.176-.843.186-.98.008-.084.036-.29-.198-.29-.1 0-.203.048-.308.096-.057.207-.175.79-.232 1.055-.115.558-.124.62-.176.897l-.035.037c-.42-.006-.566-.006-1.05.018l-.022-.04.238-.998c.203-.9.25-1.245.307-1.702l.038-.028c.472-.067.587-.08 1.098-.185l.04.047-.073.287c.084-.052.17-.104.257-.15.24-.12.51-.155.655-.155.224 0 .47.062.575.323.095.232.03.52-.098 1.084l-.065.287c-.133.627-.154.743-.225 1.174l-.05.036zM26.32 8.756c-.07.326-.282.603-.554.736-.225.114-.498.123-.78.123h-.183l.013-.074.336-1.468.01-.076.007-.058.132.015.71.062c.275.105.388.38.31.74zM25.88 7.22l-.34.003c-.883.01-1.238.006-1.383-.012l-.037.182-.315 1.478-.793 3.288c.77-.01 1.088-.01 1.22.004l.21-1.024s.153-.644.163-.667c0 0 .047-.066.096-.092h.07c.665 0 1.417 0 2.005-.437.4-.298.675-.74.797-1.274.03-.132.054-.29.054-.446 0-.205-.04-.41-.16-.568-.3-.423-.896-.43-1.588-.433zM33.572 9.28l-.04-.043c-.502.1-.594.118-1.058.18l-.034.034-.005.023-.003-.007c-.345.803-.334.63-.615 1.26-.003-.03-.003-.048-.004-.077l-.07-1.37-.044-.043c-.53.1-.542.118-1.03.18l-.04.034-.006.056.003.007c.06.315.047.244.108.738.03.244.065.49.093.73.05.4.077.6.134 1.21-.328.55-.408.757-.722 1.238l.017.044c.478-.018.587-.018.94-.018l.08-.088c.265-.578 2.295-4.085 2.295-4.085zM16.318 9.62c.27-.19.304-.45.076-.586-.23-.137-.634-.094-.906.095-.273.186-.304.45-.075.586.228.134.633.094.905-.096z" style="fill: #FEFEFE" />
12
+ <path d="M31.238 13.415l-.397.684c-.124.232-.357.407-.728.41l-.632-.01.184-.618h.124c.064 0 .11-.004.148-.022.03-.01.054-.035.08-.072l.233-.373h.988z" style="fill: #FEFEFE" />
13
+ </svg>
assets/img/cards/diners.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg width="750" height="471" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#0079BE" width="750" height="471" rx="40"/><path d="M584.934 237.947c0-99.415-82.981-168.133-173.895-168.1h-78.242c-92.003-.033-167.73 68.705-167.73 168.1 0 90.93 75.727 165.64 167.73 165.204h78.242c90.914.436 173.895-74.293 173.895-165.204z" fill="#FFF"/><path d="M333.28 83.93c-84.07.027-152.194 68.308-152.214 152.58.02 84.258 68.144 152.533 152.214 152.56 84.09-.027 152.228-68.302 152.24-152.56-.012-84.272-68.15-152.553-152.24-152.58z" fill="#0079BE"/><path d="M237.066 236.098c.08-41.18 25.746-76.296 61.94-90.25v180.48c-36.194-13.947-61.861-49.044-61.94-90.23zm131 90.275V145.847c36.207 13.92 61.914 49.057 61.98 90.257-.066 41.212-25.773 76.322-61.98 90.269z" fill="#FFF"/></g></svg>
assets/img/cards/discover.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="501" width="780" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><path d="M54.992 0C24.627 0 0 24.63 0 55.004v390.992C0 476.376 24.619 501 54.992 501h670.016C755.373 501 780 476.37 780 445.996V55.004C780 24.624 755.381 0 725.008 0z" fill="#4d4d4d"/><path d="M415.13 161.213c30.941 0 56.022 23.58 56.022 52.709v.033c0 29.13-25.081 52.742-56.021 52.742s-56.022-23.613-56.022-52.742v-.033c0-29.13 25.082-52.71 56.022-52.71zm-87.978.68c8.837 0 16.248 1.784 25.268 6.09v22.751c-8.544-7.863-15.955-11.154-25.756-11.154-19.264 0-34.414 15.015-34.414 34.05 0 20.075 14.681 34.196 35.37 34.196 9.312 0 16.586-3.12 24.8-10.857v22.763c-9.341 4.14-16.911 5.776-25.756 5.776-31.278 0-55.582-22.596-55.582-51.737 0-28.826 24.951-51.878 56.07-51.878zm-97.113.627c11.546 0 22.11 3.72 30.943 10.994l-10.748 13.248c-5.35-5.646-10.41-8.028-16.564-8.028-8.853 0-15.3 4.745-15.3 10.989 0 5.354 3.619 8.188 15.944 12.482 23.365 8.044 30.29 15.176 30.29 30.926 0 19.193-14.976 32.553-36.32 32.553-15.63 0-26.994-5.795-36.458-18.872l13.268-12.03c4.73 8.61 12.622 13.222 22.42 13.222 9.163 0 15.947-5.952 15.947-13.984 0-4.164-2.055-7.734-6.158-10.258-2.066-1.195-6.158-2.977-14.2-5.647-19.291-6.538-25.91-13.527-25.91-27.185 0-16.225 14.214-28.41 32.846-28.41zm234.723 1.728h22.437l28.084 66.592 28.446-66.592h22.267l-45.494 101.686h-11.053zm-397.348.152h30.15c33.312 0 56.534 20.382 56.534 49.641 0 14.59-7.104 28.696-19.118 38.057-10.108 7.901-21.626 11.445-37.574 11.445H67.414zm96.135 0h20.54v99.143h-20.54zm411.734 0h58.252v16.8H595.81v22.005h36.336v16.791H595.81v26.762h37.726v16.785h-58.252V164.4zm71.858 0h30.455c23.69 0 37.265 10.71 37.265 29.272 0 15.18-8.514 25.14-23.986 28.105l33.148 41.766h-25.26l-28.429-39.828h-2.678v39.828h-20.515zm20.515 15.616v30.025h6.002c13.117 0 20.069-5.362 20.069-15.328 0-9.648-6.954-14.697-19.745-14.697zM87.94 181.199v65.559h5.512c13.273 0 21.656-2.394 28.11-7.88 7.103-5.955 11.376-15.465 11.376-24.98 0-9.499-4.273-18.725-11.376-24.681-6.785-5.78-14.837-8.018-28.11-8.018z" fill="#fff"/><path d="M779.982 288.361c-26.05 18.33-221.077 149.34-558.754 212.623H724.99c30.365 0 54.992-24.63 54.992-55.004z" fill="#f47216"/></g></svg>
assets/img/cards/jcb.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg width="750" height="471" xmlns="http://www.w3.org/2000/svg"><defs><linearGradient x1=".032%" y1="50%" x2="99.974%" y2="50%" id="a"><stop stop-color="#007B40" offset="0%"/><stop stop-color="#55B330" offset="100%"/></linearGradient><linearGradient x1=".472%" y1="50%" x2="99.986%" y2="50%" id="b"><stop stop-color="#1D2970" offset="0%"/><stop stop-color="#006DBA" offset="100%"/></linearGradient><linearGradient x1=".114%" y1="50.001%" x2="99.986%" y2="50.001%" id="c"><stop stop-color="#6E2B2F" offset="0%"/><stop stop-color="#E30138" offset="100%"/></linearGradient></defs><g fill="none" fill-rule="evenodd"><rect fill="#0E4C96" width="750" height="471" rx="40"/><path d="M617.243 346.766c0 41.615-33.728 75.36-75.36 75.36H132.757V124.245c0-41.626 33.733-75.37 75.365-75.37l409.12-.001v297.892h.001z" fill="#FFF"/><path d="M483.859 242.045c11.684.253 23.437-.516 35.077.4 11.787 2.2 14.628 20.043 4.156 25.888-7.141 3.85-15.633 1.432-23.379 2.113H483.86v-28.401zm41.833-32.145c2.596 9.165-6.238 17.392-15.066 16.13h-26.767c.185-8.642-.368-18.021.272-26.208 10.724.301 21.549-.616 32.21.48 4.58 1.15 8.413 4.916 9.35 9.598zM590.12 73.997c.498 17.501.071 35.927.214 53.783-.035 72.596.072 145.194-.055 217.79-.469 27.207-24.582 50.844-51.6 51.387-27.046.111-54.095.016-81.142.047v-109.75c29.47-.154 58.959.307 88.417-.232 13.667-.86 28.632-9.876 29.27-24.915 1.61-15.102-12.632-25.55-26.153-27.201-5.198-.135-5.044-1.515 0-2.117 12.892-2.787 23.02-16.133 19.226-29.499-3.236-14.058-18.773-19.499-31.697-19.472-26.351-.18-52.709-.026-79.063-.077.172-20.489-.354-41 .286-61.474 2.087-26.716 26.806-48.747 53.447-48.27h78.85z" fill="url(#a)"/><path d="M159.74 125.04c.674-27.163 24.889-50.611 51.875-51.007 26.944-.083 53.891-.012 80.837-.036-.074 90.885.148 181.777-.112 272.658-1.038 26.834-24.99 49.834-51.679 50.307-26.996.099-53.995.014-80.992.042V283.551c26.223 6.194 53.722 8.832 80.473 4.721 15.993-2.575 33.488-10.424 38.902-27.014 3.986-14.192 1.742-29.126 2.334-43.692v-33.824h-46.297c-.208 22.37.426 44.78-.335 67.125-1.248 13.734-14.846 22.46-27.8 21.995-16.066.169-47.898-11.64-47.898-11.64-.08-41.917.466-94.408.692-136.182z" fill="url(#b)"/><path d="M309.72 197.39c-2.434.517-.49-8.3-1.114-11.646.166-21.15-.346-42.323.284-63.458 2.083-26.829 26.991-48.916 53.739-48.288h78.766c-.074 90.884.147 181.775-.112 272.656-1.039 26.834-24.992 49.833-51.68 50.308-26.998.1-53.998.015-80.997.043V272.708c18.44 15.128 43.5 17.484 66.472 17.525 17.317-.006 34.534-2.675 51.35-6.67V260.79c-18.953 9.447-41.233 15.446-62.243 10.018-14.656-3.65-25.294-17.811-25.056-32.936-1.699-15.728 7.524-32.335 22.981-37.011 19.19-6.008 40.108-1.413 58.096 6.398 3.855 2.018 7.765 4.521 6.222-1.921v-17.9c-30.084-7.157-62.101-9.792-92.329-2.004-8.748 2.468-17.27 6.21-24.379 11.956z" fill="url(#c)"/></g></svg>
assets/img/cards/laser.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="Layer_1" xmlns="http://www.w3.org/2000/svg" viewBox="-45 62.3 750 471"><style>.st0{fill:#283a97}.st1{fill:#ee4799}.st2{fill:none;stroke:#ee4799;stroke-width:1.0006;stroke-miterlimit:2.6131}.st3{fill:#fff}</style><path id="Rectangle-1" class="st0" d="M-5 62.3h670c22.1 0 40 17.9 40 40v391c0 22.1-17.9 40-40 40H-5c-22.1 0-40-17.9-40-40v-391c0-22.1 17.9-40 40-40z"/><path class="st0" d="M160.2 477.3h340v-359h-340z"/><path class="st1" d="M500.3 127.6l-10.1 17.1-330.5-7.6v-1.7zm-11.2 19.3l-10.4 17-313.2-7.9-.8-1.2zm-11.7 19.4l-10.2 16.9-290.2-7.9-.7-1.1zm-11.7 19.3l-9.9 17-266.6-7.9-.8-1.2zm-11.2 19.2l-10.1 17.1-243.7-7.9-.8-1.3zm-11.7 19.5l-10.1 16.9-220-7.9-.7-1.1zm-11.5 19.2l-10.1 17.1-196.1-7.9-.8-1.3zm-11.4 19.3l-10.2 17.1-173.1-7.9-.8-1.3zm-11.3 19.3l-10.5 17-150-7.9-.8-1.1zM397 301.5l-10.2 17-126.5-8-.8-1.1zm-11.5 19.3l-10.3 17-102.9-7.9-.8-1.2zM374 340l-10.3 17.1-79.4-7.9-.8-1.3zm-11.5 19.5l-10.2 16.8-56.3-7.8-.8-1.2zm-11.4 19.2l-10.4 17.1-33.2-7.9-.8-1.3zm-12 19.9l-10.4 17.7-11.1-9.2-.3-1.2zm-179.4 7.9h340.6-340.6z"/><path class="st2" d="M159.7 406.5h340.6"/><path class="st1" d="M159.7 387.2h340.6-340.6z"/><path class="st2" d="M159.7 387.2h340.6"/><path class="st1" d="M159.7 368h340.6-340.6z"/><path class="st2" d="M159.7 368h340.6"/><path class="st1" d="M159.7 348.6h340.6-340.6z"/><path class="st2" d="M159.7 348.6h340.6"/><path class="st1" d="M159.7 329.3h340.6-340.6z"/><path class="st2" d="M159.7 329.3h340.6"/><path class="st1" d="M159.7 310h340.6-340.6z"/><path class="st2" d="M159.7 310h340.6"/><path class="st1" d="M159.7 290.8h340.6-340.6z"/><path class="st2" d="M159.7 290.8h340.6"/><path class="st1" d="M159.7 271.3h340.6-340.6z"/><path class="st2" d="M159.7 271.3h340.6"/><path class="st1" d="M159.7 252.1h340.6-340.6z"/><path class="st2" d="M159.7 252.1h340.6"/><path class="st1" d="M159.7 232.8h340.6-340.6z"/><path class="st2" d="M159.7 232.8h340.6"/><path class="st1" d="M159.7 213.5h340.6-340.6z"/><path class="st2" d="M159.7 213.5h340.6"/><path class="st1" d="M159.7 194.1h340.6-340.6z"/><path class="st2" d="M159.7 194.1h340.6"/><path class="st1" d="M159.7 174.8h340.6-340.6z"/><path class="st2" d="M159.7 174.8h340.6"/><path class="st1" d="M159.7 155.6h340.6-340.6z"/><path class="st2" d="M159.7 155.6h340.6"/><path class="st3" d="M364.5 427.4v37.4h25.4l3.2-7.1c-4.6.2-7.9.3-12.6.3h-5.4v-9.3h.6c2.7 0 5.7.2 8.8.3l3.2-7.3c-1.6.2-1.9.2-4.1.2-3.9.2-4.9.2-8.5.2v-7.7h1.3c3.2 0 7.3.2 12.8.3l3-7.3h-27.7zm-97.1 0l2.7 4-14.4 33.5h10.4l2.4-5.7h14.8l2.4 5.7h10.9l-16.4-37.4-12.8-.1zm12.9 24.9h-9l4.4-10.7 4.6 10.7zM221.4 425h-10.6v39.8h25.6l3-7.1c-3.3.2-7.6.3-12.2.3h-5.8v-33zm118.5 4.3c-4.1-1.9-7.7-2.7-11.4-2.7-8.1 0-13.6 4.4-13.6 10.7 0 4 1.7 6.6 6.3 9.6l5.4 3.6c2.5 1.7 3.5 3 3.5 4.9 0 2.4-2.2 3.8-5.5 3.8-2.8 0-4.6-.8-7.7-3.3l-2.8 6.6c4.7 2.5 7.1 3.2 11.2 3.2 9.3 0 15.2-4.6 15.2-11.7 0-4.1-1.9-6.8-6.6-10.1l-5.5-4c-2.4-1.6-3-2.4-3-3.6 0-2.1 1.6-3.3 4.3-3.3 2.4 0 4.4.8 7.6 2.8l2.6-6.5zm75.6-1.9v37.4h10.6v-30.5h2.3c4.7 0 7.3 1.9 7.3 5.4 0 3.6-3 6-7.7 6-.5 0-.8 0-1.6-.2l12.8 19.3h11.7l-10.6-15.5c4.6-2.7 6.5-5.7 6.5-10.3 0-7.9-5.5-11.7-16.7-11.7l-14.6.1z"/></svg>
assets/img/cards/maestro.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="471" width="750" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#000" height="471" rx="40" width="750"/><path d="M675 235.506c0 99.134-80.35 179.496-179.483 179.496-99.121 0-179.48-80.362-179.48-179.496 0-99.141 80.359-179.508 179.48-179.508C594.65 55.998 675 136.365 675 235.506" fill="#d9222a"/><path d="M356.87 349.49a177.907 177.907 0 0 1-13.674-19.009h63.612a178.646 178.646 0 0 0 10.342-19.012h-84.292a178.39 178.39 0 0 1-7.596-19h99.476c5.987-17.904 9.229-37.05 9.229-56.963 0-13.046-1.392-25.762-4.03-38.012H320.076a178.242 178.242 0 0 1 5.208-19.009h99.442a181.479 181.479 0 0 0-7.592-19.004H332.88a180.954 180.954 0 0 1 10.338-19.008h63.57a181.425 181.425 0 0 0-13.67-18.992h-36.225a181.098 181.098 0 0 1 18.112-19c-31.854-28.883-74.137-46.483-120.517-46.483C155.358 55.998 75 136.365 75 235.506c0 99.134 80.358 179.496 179.487 179.496 46.388 0 88.667-17.596 120.517-46.475a180.409 180.409 0 0 0 18.134-19.037z" fill="#0097d0"/><path d="M651.075 335.544c0-3.2 2.596-5.796 5.8-5.796 3.2 0 5.792 2.596 5.792 5.796 0 3.204-2.592 5.8-5.792 5.8a5.799 5.799 0 0 1-5.8-5.8zm5.8 4.408a4.401 4.401 0 0 0 4.404-4.408 4.396 4.396 0 0 0-4.404-4.396 4.4 4.4 0 0 0-4.408 4.396 4.405 4.405 0 0 0 4.408 4.408zm-.787-1.862h-1.184v-5.092h2.15c.446 0 .904.004 1.3.258.417.284.646.775.646 1.271 0 .583-.337 1.113-.88 1.317l.934 2.246h-1.316l-.775-2.009h-.875zm0-2.88h.658c.246 0 .504.017.725-.1a.712.712 0 0 0 .3-.591.652.652 0 0 0-.288-.513c-.212-.125-.541-.1-.762-.1h-.633zm-283.642-51.204c-7.671 2.034-15.088 3.025-22.93 3.009-25.016-.025-38.045-11.417-38.045-33.2 0-25.459 16.587-44.184 39.1-44.184 18.416 0 30.175 10.5 30.175 26.946 0 5.458-.796 10.77-2.746 18.296h-44.488c-1.583 10.633 6.188 15.304 19.413 15.304 7.925 0 15.092-1.425 23.025-4.612zm-11.963-44.15c0-1.608 2.475-13.033-10.4-13.283-7.108 0-12.208 4.725-14.27 13.283zm27.034-4.991c0 9.404 5.296 15.9 17.329 20.737 9.2 3.77 10.65 4.858 10.65 8.22 0 4.663-4.067 6.805-13.092 6.747-6.779-.05-12.962-.871-20.262-2.896l-3.23 17.154c6.488 1.504 15.588 2 23.65 2.188 24.026 0 35.117-7.867 35.117-24.867 0-10.217-4.625-16.233-16.033-20.713-9.538-3.808-10.658-4.637-10.658-8.083 0-4.05 3.779-6.1 11.15-6.1 4.462 0 10.579.413 16.379 1.108l3.258-17.241c-5.912-.825-14.883-1.484-20.075-1.484-25.45 0-34.258 11.459-34.183 25.23m-88.242 50.92h-18.662l.445-7.82c-5.691 6.17-13.27 9.041-23.558 9.041-12.175 0-20.517-8.325-20.517-20.296 0-18.195 14.5-28.691 39.43-28.691 2.562 0 5.82.191 9.166.562.692-2.433.88-3.479.88-4.808 0-4.98-3.921-6.813-14.413-6.813-10.342.042-17.321 1.571-23.796 3.313l3.187-16.7c11.196-2.846 18.53-3.942 26.825-3.942 19.305 0 29.5 7.567 29.5 21.796.167 3.796-1.158 11.413-1.82 14.746-.759 4.854-6.109 32.975-6.667 39.612zm-16.38-33.191c-2.366-.242-3.395-.313-5.012-.313-12.729 0-19.183 3.788-19.183 11.267 0 4.692 3.15 7.633 8.058 7.633 9.146 0 15.75-7.65 16.138-18.587zm194.11 32.012c-6.126 1.68-10.897 2.409-16.06 2.409-11.432 0-17.674-5.842-17.674-16.25-.358-2.859 2.433-16.059 3.067-19.738.633-3.692 10.537-57.492 10.537-57.492h22.213l-3.363 17.8h11.392l-3.096 18.171h-11.442s-6.279 31.53-6.279 33.934c0 3.825 2.317 5.487 7.633 5.487 2.546 0 4.509-.237 6.03-.692l-2.959 16.371m99.246-74.975c-16.28 0-29 6.7-36.387 17.892l6.412-16.596c-11.817-4.337-19.433 1.85-26.325 10.65 0 0-1.154 1.463-2.3 2.8v-13.05h-20.858c-2.825 23.03-7.821 46.38-11.73 69.446l-.941 5.02h22.437c2.125-11.708 3.875-21.212 5.617-28.787 4.767-20.787 12.788-27.141 24.83-24.333-2.78 5.98-4.305 12.892-4.305 20.554 0 18.58 10.092 33.788 35.15 33.788 25.288 0 43.596-13.509 43.596-44.309 0-18.579-12.2-33.075-35.196-33.075zm-6.53 59.317c-7.924.125-12.728-6.525-12.728-16.47 0-11.793 7.012-25.113 18.275-25.113 9.087 0 12.2 7.204 12.2 14.879 0 16.779-6.875 26.704-17.746 26.704zm-343.19 16.846h-22.343l13.28-69.954-30.571 69.954h-20.367l-3.725-69.55-13.32 69.55h-20.272l17.267-90.996h34.913l2.912 50.725 22.117-50.725h37.72l-17.612 90.996" fill="#000"/><path d="M613.15 274.385a5.8 5.8 0 0 1 5.796-5.795c3.204 0 5.796 2.6 5.796 5.795a5.796 5.796 0 1 1-11.592 0zm5.796 4.413a4.414 4.414 0 0 0 4.408-4.413 4.406 4.406 0 0 0-4.408-4.404 4.406 4.406 0 0 0-4.408 4.404 4.414 4.414 0 0 0 4.408 4.413zm-.783-1.867h-1.188v-5.083h2.15c.45 0 .908 0 1.304.25.409.28.646.767.646 1.27 0 .58-.337 1.117-.883 1.317l.933 2.246h-1.317l-.77-2.008h-.875zm0-2.887h.658c.242 0 .504.016.725-.096a.702.702 0 0 0 .296-.588.635.635 0 0 0-.284-.512c-.212-.13-.541-.096-.762-.096h-.633zm-240.109 4.354c-7.666 2.033-15.087 3.03-22.925 3.012-25.017-.025-38.046-11.42-38.046-33.208 0-25.45 16.58-44.18 39.096-44.18 18.421 0 30.175 10.497 30.175 26.943 0 5.466-.8 10.77-2.741 18.3h-44.488c-1.583 10.629 6.18 15.308 19.408 15.308 7.925 0 15.088-1.425 23.03-4.617zm-11.962-44.15c0-1.604 2.47-13.033-10.4-13.28-7.109 0-12.204 4.73-14.271 13.28h24.67zm27.037-4.996c0 9.408 5.288 15.9 17.325 20.746 9.204 3.767 10.65 4.858 10.65 8.212 0 4.667-4.066 6.809-13.087 6.75-6.784-.045-12.967-.87-20.263-2.895l-3.237 17.145c6.491 1.517 15.596 2.013 23.654 2.2 24.025 0 35.12-7.87 35.12-24.87 0-10.217-4.628-16.238-16.041-20.713-9.537-3.808-10.654-4.637-10.654-8.083 0-4.05 3.783-6.1 11.146-6.1 4.47 0 10.583.416 16.387 1.112l3.25-17.246c-5.912-.825-14.879-1.483-20.066-1.483-25.459 0-34.263 11.454-34.184 25.225m-88.242 50.93h-18.666l.45-7.822c-5.696 6.159-13.275 9.034-23.558 9.034-12.176 0-20.521-8.325-20.521-20.288 0-18.204 14.495-28.696 39.429-28.696 2.562 0 5.816.192 9.17.563.692-2.433.876-3.475.876-4.808 0-4.984-3.917-6.813-14.409-6.813-10.341.042-17.32 1.575-23.796 3.313l3.184-16.696c11.2-2.85 18.529-3.946 26.829-3.946 19.304 0 29.496 7.567 29.496 21.792.167 3.8-1.159 11.412-1.817 14.754-.762 4.85-6.112 32.97-6.666 39.612zM288.5 246.984c-2.358-.245-3.392-.312-5.012-.312-12.721 0-19.18 3.787-19.18 11.267 0 4.695 3.154 7.633 8.055 7.633 9.154 0 15.758-7.654 16.137-18.588zm194.108 32.017c-6.12 1.675-10.895 2.408-16.054 2.408-11.433 0-17.67-5.845-17.67-16.254-.363-2.854 2.433-16.058 3.062-19.737.633-3.692 10.537-57.492 10.537-57.492h22.209l-3.354 17.8h11.391l-3.096 18.17h-11.441s-6.284 31.53-6.284 33.934c0 3.825 2.321 5.48 7.634 5.48 2.541 0 4.508-.23 6.029-.692zm110.471-42.367c0 16.775-6.879 26.709-17.754 26.709-7.92.112-12.725-6.525-12.725-16.475 0-11.792 7.008-25.113 18.27-25.113 9.093 0 12.21 7.213 12.21 14.88zm23.98.467c0-18.58-12.209-33.08-35.196-33.08-26.45 0-43.55 17.626-43.55 43.597 0 18.579 10.083 33.791 35.15 33.791 25.287 0 43.595-13.512 43.595-44.308zM502.395 205.72c-2.821 23.029-7.817 46.375-11.721 69.45l-.946 5.02h22.434c8.087-44.558 10.8-57.254 27.741-52.783l8.15-21.087c-11.816-4.338-19.425 1.854-26.308 10.658.62-3.962 1.792-7.783 1.508-11.258zm-270.259 74.47H209.8l13.275-69.958L192.5 280.19h-20.363l-3.725-69.555-13.32 69.555H134.82l17.262-91h34.921l1.846 56.333 24.575-56.333h36.325z" fill="#fff"/></g></svg>
assets/img/cards/mastercard.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="471" width="750" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#f4f4f4" height="471" rx="40" width="750"/><path d="M618.579 422.143c-1.213.03-2.213.432-2.998 1.207-.785.776-1.192 1.746-1.22 2.911.028 1.157.435 2.125 1.22 2.904.785.78 1.785 1.184 2.998 1.215 1.185-.03 2.171-.436 2.96-1.215.787-.78 1.196-1.747 1.226-2.904-.03-1.165-.437-2.135-1.223-2.91-.786-.776-1.774-1.179-2.963-1.208zm0 7.329c-.925-.023-1.687-.336-2.287-.94-.6-.602-.91-1.36-.932-2.27.021-.916.332-1.672.932-2.27.6-.599 1.362-.909 2.287-.93.904.021 1.655.331 2.25.93.596.598.905 1.354.927 2.27-.022.91-.33 1.668-.926 2.27-.596.604-1.347.917-2.251.94zm.242-5.139h-1.766v3.826h.817v-1.433h.374l1.16 1.433h.978l-1.25-1.443c.39-.05.69-.176.901-.38.21-.204.317-.465.32-.781-.004-.378-.137-.675-.4-.891-.264-.216-.642-.326-1.134-.33zm-.01.717c.219 0 .39.043.515.127a.434.434 0 0 1 .19.378.446.446 0 0 1-.19.386c-.124.086-.296.129-.515.129h-.939v-1.02zm-458.605 2.703h-8.755V386.87h8.584v4.982s7.539-6.089 12.017-6.013c8.706.148 13.905 7.559 13.905 7.559s4.217-7.559 13.733-7.559c14.073 0 16.137 12.884 16.137 12.884v28.857h-8.412v-25.422s.03-7.73-9.098-7.73c-9.44 0-10.3 7.73-10.3 7.73v25.423h-8.755v-25.595s-.841-8.073-8.756-8.073c-10.278 0-10.471 8.245-10.471 8.245zm266.254-41.92c-4.478-.075-12.016 6.013-12.016 6.013v-4.971h-8.593v40.874h8.76l-.167-25.593s.193-8.228 10.472-8.228c1.909 0 3.391.463 4.565 1.175v-.033l2.853-7.96c-1.722-.725-3.68-1.239-5.874-1.276zm123.33 0c-4.477-.075-12.015 6.013-12.015 6.013v-4.971h-8.593v40.874h8.76l-.167-25.593s.193-8.228 10.472-8.228c1.909 0 3.391.463 4.565 1.175v-.033l2.853-7.96c-1.722-.725-3.68-1.239-5.874-1.276zm-305.653-.167c-13.103 0-20.037 11.784-20.072 21.629-.036 10.091 7.894 21.73 20.44 21.73 7.32 0 13.334-5.407 13.334-5.407l-.016 4.164h8.618V386.86h-8.648v5.155s-5.647-6.348-13.656-6.348zm1.678 8.33c7.04 0 12.754 6.126 12.754 13.668 0 7.543-5.715 13.636-12.754 13.636-7.04 0-12.721-6.093-12.721-13.636 0-7.542 5.681-13.669 12.72-13.669zm249.646-8.33c-13.103 0-20.037 11.784-20.072 21.629-.036 10.091 7.894 21.73 20.44 21.73 7.32 0 13.334-5.407 13.334-5.407l-.016 4.164h8.618V386.86h-8.648v5.155s-5.647-6.348-13.656-6.348zm1.678 8.33c7.04 0 12.754 6.126 12.754 13.668 0 7.543-5.715 13.636-12.754 13.636-7.04 0-12.721-6.093-12.721-13.636 0-7.542 5.681-13.669 12.72-13.669zm81.066-8.33c-13.102 0-20.036 11.784-20.071 21.629-.036 10.091 7.893 21.73 20.44 21.73 7.32 0 13.334-5.407 13.334-5.407l-.016 4.164h8.618v-57.078h-8.648v21.31s-5.648-6.348-13.657-6.348zm1.678 8.33c7.04 0 12.755 6.126 12.755 13.668 0 7.543-5.715 13.636-12.755 13.636s-12.72-6.093-12.72-13.636c0-7.542 5.68-13.669 12.72-13.669zm-287.148 35.13c-8.926 0-17.167-5.497-17.167-5.497l3.777-5.84s7.797 3.607 13.39 3.607c3.634 0 9.712-1.174 9.785-4.81.078-3.842-10.214-4.981-10.214-4.981s-15.364-.21-15.364-12.883c0-7.97 7.673-13.055 17.51-13.055 5.684 0 16.308 4.981 16.308 4.981l-4.291 6.7s-8.204-3.28-12.532-3.436c-3.655-.132-8.069 1.62-8.069 4.81 0 8.668 25.58-.676 25.58 16.834 0 11.487-10.418 13.57-18.713 13.57zm32.93-54.108v11.892h-7.619v8.597h7.62v20.555s-.675 13.904 14.264 13.904c4.13 0 12.218-3.056 12.218-3.056l-3.457-8.934s-3.217 2.745-6.848 2.653c-6.904-.174-6.713-4.6-6.713-4.6v-20.524h14.233v-8.595h-14.232v-11.891h-9.465zm51.858 11.15c-14.05 0-21.07 11.58-21.012 21.63.06 10.335 6.392 21.965 21.85 21.965 6.617 0 15.91-5.81 15.91-5.81L390.277 417s-6.341 4.5-11.915 4.5c-11.16 0-11.882-10.915-11.882-10.915h29.872s2.229-24.416-18.83-24.416zm-1.276 8.028c.331-.02.687 0 1.04 0 10.514 0 10.44 9.94 10.44 9.94H366.48s-.503-9.356 9.767-9.94zm90.132 22.699l4.006 8.017s-6.349 4.13-13.474 4.13c-14.751 0-22.943-11.11-22.943-21.621 0-16.52 13.036-21.378 21.85-21.378 8.001 0 14.931 4.616 14.931 4.616l-4.491 8.016s-2.723-4.25-10.682-4.25c-7.946 0-12.14 6.854-12.14 13.36 0 7.291 4.881 13.483 12.261 13.483 5.79 0 10.682-4.373 10.682-4.373z" fill="#000"/><path d="M624.508 278.631v-5.52h-1.44l-1.658 3.796-1.657-3.796h-1.44v5.52h1.017v-4.164l1.553 3.59h1.055l1.553-3.6v4.174zm-9.123 0v-4.578h1.845v-.933h-4.698v.933h1.845v4.578zm9.412-82.071c0 85.425-69.077 154.676-154.288 154.676-85.21 0-154.288-69.25-154.288-154.676S385.298 41.883 470.51 41.883c85.21 0 154.288 69.251 154.288 154.677z" fill="#f79f1a"/><path d="M434.46 196.56c0 85.425-69.078 154.676-154.288 154.676-85.212 0-154.288-69.25-154.288-154.676S194.96 41.883 280.172 41.883c85.21 0 154.287 69.251 154.287 154.677z" fill="#ea001b"/><path d="M375.34 74.797c-35.999 28.317-59.107 72.318-59.107 121.748s23.108 93.466 59.108 121.782c35.999-28.316 59.107-72.352 59.107-121.782s-23.108-93.431-59.107-121.748z" fill="#ff5f01"/></g></svg>
assets/img/cards/visa.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg height="471" width="750" xmlns="http://www.w3.org/2000/svg"><g fill="none" fill-rule="evenodd"><rect fill="#0e4595" height="471" rx="40" width="750"/><path d="M278.197 334.228l33.361-195.763h53.36l-33.385 195.763zm246.11-191.54c-10.572-3.966-27.136-8.222-47.822-8.222-52.725 0-89.865 26.55-90.18 64.603-.298 28.13 26.513 43.822 46.753 53.186 20.77 9.594 27.752 15.714 27.654 24.283-.132 13.121-16.587 19.116-31.923 19.116-21.357 0-32.703-2.966-50.226-10.276l-6.876-3.111-7.49 43.824c12.464 5.464 35.51 10.198 59.438 10.443 56.09 0 92.501-26.246 92.916-66.882.2-22.268-14.016-39.216-44.8-53.188-18.65-9.055-30.072-15.099-29.951-24.268 0-8.137 9.667-16.839 30.556-16.839 17.45-.27 30.089 3.535 39.937 7.5l4.781 2.26 7.234-42.43m137.307-4.222h-41.231c-12.774 0-22.332 3.487-27.942 16.234l-79.245 179.404h56.032s9.161-24.123 11.233-29.418c6.124 0 60.554.084 68.337.084 1.596 6.853 6.491 29.334 6.491 29.334h49.513zm-65.418 126.407c4.413-11.279 21.26-54.723 21.26-54.723-.316.522 4.38-11.334 7.075-18.684l3.606 16.879s10.217 46.728 12.352 56.528zM232.904 138.466l-52.24 133.496-5.567-27.13c-9.725-31.273-40.025-65.155-73.898-82.118l47.766 171.203 56.456-.065 84.004-195.386z" fill="#fff"/><path d="M131.92 138.465H45.879l-.681 4.073c66.938 16.204 111.231 55.363 129.618 102.414l-18.71-89.96c-3.23-12.395-12.597-16.094-24.186-16.526" fill="#f2ae14"/></g></svg>
assets/img/chrome.svg ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="1 1 176 176">
3
+ <defs>
4
+ <circle id="a" cy="96" cx="96" r="88"/>
5
+ </defs>
6
+ <clipPath id="b">
7
+ <use width="100%" overflow="visible" xlink:href="#a" height="100%"/>
8
+ </clipPath>
9
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
10
+ <path d="m21.97 8v108h39.39l34.64-60h88v-48z" fill="#db4437"/>
11
+ <linearGradient id="c" y2="44.354" gradientUnits="userSpaceOnUse" y1="75.021" x2="81.837" x1="29.337">
12
+ <stop stop-color="#A52714" stop-opacity=".6" offset="0"/>
13
+ <stop stop-color="#A52714" stop-opacity="0" offset=".66"/>
14
+ </linearGradient>
15
+ <path d="m21.97 8v108h39.39l34.64-60h88v-48z" fill="url(#c)"/>
16
+ </g>
17
+ <path clip-path="url(#b)" fill-opacity=".15" d="m62.31 115.65l-39.83-68.31-0.58 1 39.54 67.8z" transform="translate(-7 -7)" fill="#3e2723"/>
18
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
19
+ <path d="m8 184h83.77l38.88-38.88v-29.12h-69.29l-53.36-91.52z" fill="#0f9d58"/>
20
+ <linearGradient id="d" y2="130.33" gradientUnits="userSpaceOnUse" y1="164.5" x2="52.538" x1="110.87">
21
+ <stop stop-color="#055524" stop-opacity=".4" offset="0"/>
22
+ <stop stop-color="#055524" stop-opacity="0" offset=".33"/>
23
+ </linearGradient>
24
+ <path d="m8 184h83.77l38.88-38.88v-29.12h-69.29l-53.36-91.52z" fill="url(#d)"/>
25
+ </g>
26
+ <path clip-path="url(#b)" fill-opacity=".15" d="m129.84 117.33l-0.83-0.48-38.39 67.15h1.15l38.1-66.64z" transform="translate(-7 -7)" fill="#263238"/>
27
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
28
+ <defs>
29
+ <path id="e" d="m8 184h83.77l38.88-38.88v-29.12h-69.29l-53.36-91.52z"/>
30
+ </defs>
31
+ <clipPath id="f">
32
+ <use width="100%" overflow="visible" xlink:href="#e" height="100%"/>
33
+ </clipPath>
34
+ <g clip-path="url(#f)">
35
+ <path d="m96 56l34.65 60-38.88 68h92.23v-128z" fill="#ffcd40"/>
36
+ <linearGradient id="g" y2="114.13" gradientUnits="userSpaceOnUse" y1="49.804" x2="136.55" x1="121.86">
37
+ <stop stop-color="#EA6100" stop-opacity=".3" offset="0"/>
38
+ <stop stop-color="#EA6100" stop-opacity="0" offset=".66"/>
39
+ </linearGradient>
40
+ <path d="m96 56l34.65 60-38.88 68h92.23v-128z" fill="url(#g)"/>
41
+ </g>
42
+ </g>
43
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
44
+ <path d="m96 56l34.65 60-38.88 68h92.23v-128z" fill="#ffcd40"/>
45
+ <path d="m96 56l34.65 60-38.88 68h92.23v-128z" fill="url(#g)"/>
46
+ </g>
47
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
48
+ <defs>
49
+ <path id="i" d="m96 56l34.65 60-38.88 68h92.23v-128z"/>
50
+ </defs>
51
+ <clipPath id="j">
52
+ <use width="100%" overflow="visible" xlink:href="#i" height="100%"/>
53
+ </clipPath>
54
+ <g clip-path="url(#j)">
55
+ <path d="m21.97 8v108h39.39l34.64-60h88v-48z" fill="#db4437"/>
56
+ <path d="m21.97 8v108h39.39l34.64-60h88v-48z" fill="url(#c)"/>
57
+ </g>
58
+ </g>
59
+ <radialGradient id="l" gradientUnits="userSpaceOnUse" cy="55.948" cx="668.18" gradientTransform="translate(-576)" r="84.078">
60
+ <stop stop-color="#3E2723" stop-opacity=".2" offset="0"/>
61
+ <stop stop-color="#3E2723" stop-opacity="0" offset="1"/>
62
+ </radialGradient>
63
+ <path clip-path="url(#b)" d="m96 56v20.95l78.4-20.95z" transform="translate(-7 -7)" fill="url(#l)"/>
64
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
65
+ <defs>
66
+ <path id="m" d="m21.97 8v40.34l39.39 67.66 34.64-60h88v-48z"/>
67
+ </defs>
68
+ <clipPath id="n">
69
+ <use width="100%" overflow="visible" xlink:href="#m" height="100%"/>
70
+ </clipPath>
71
+ <g clip-path="url(#n)">
72
+ <path d="m8 184h83.77l38.88-38.88v-29.12h-69.29l-53.36-91.52z" fill="#0f9d58"/>
73
+ <path d="m8 184h83.77l38.88-38.88v-29.12h-69.29l-53.36-91.52z" fill="url(#d)"/>
74
+ </g>
75
+ </g>
76
+ <radialGradient id="p" gradientUnits="userSpaceOnUse" cy="48.52" cx="597.88" gradientTransform="translate(-576)" r="78.044">
77
+ <stop stop-color="#3E2723" stop-opacity=".2" offset="0"/>
78
+ <stop stop-color="#3E2723" stop-opacity="0" offset="1"/>
79
+ </radialGradient>
80
+ <path clip-path="url(#b)" d="m21.97 48.45l57.25 57.24-17.86 10.31z" transform="translate(-7 -7)" fill="url(#p)"/>
81
+ <radialGradient id="q" gradientUnits="userSpaceOnUse" cy="96.138" cx="671.84" gradientTransform="translate(-576)" r="87.87">
82
+ <stop stop-color="#263238" stop-opacity=".2" offset="0"/>
83
+ <stop stop-color="#263238" stop-opacity="0" offset="1"/>
84
+ </radialGradient>
85
+ <path clip-path="url(#b)" d="m91.83 183.89l20.96-78.2 17.86 10.31z" transform="translate(-7 -7)" fill="url(#q)"/>
86
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
87
+ <circle cy="96" cx="96" r="40" fill="#f1f1f1"/>
88
+ <circle cy="96" cx="96" r="32" fill="#4285f4"/>
89
+ </g>
90
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
91
+ <path fill-opacity=".2" d="m96 55c-22.09 0-40 17.91-40 40v1c0-22.09 17.91-40 40-40h88v-1h-88z" fill="#3e2723"/>
92
+ <path fill-opacity=".1" d="m130.6 116c-6.92 11.94-19.81 20-34.6 20-14.8 0-27.69-8.06-34.61-20h-0.04l-53.35-91.52v1l53.36 91.52h0.04c6.92 11.94 19.81 20 34.61 20 14.79 0 27.68-8.05 34.6-20h0.05v-1h-0.06z" fill="#fff"/>
93
+ <path opacity=".1" d="m97 56c-0.17 0-0.33 0.02-0.5 0.03 21.86 0.27 39.5 18.05 39.5 39.97s-17.64 39.7-39.5 39.97c0.17 0 0.33 0.03 0.5 0.03 22.09 0 40-17.91 40-40s-17.91-40-40-40z" fill="#3e2723"/>
94
+ <path fill-opacity=".2" d="m131 117.33c3.4-5.88 5.37-12.68 5.37-19.96 0-4.22-0.66-8.28-1.87-12.09 0.95 3.42 1.5 7.01 1.5 10.73 0 7.28-1.97 14.08-5.37 19.96l0.02 0.04-38.88 68h1.16l38.09-66.64-0.02-0.04z" fill="#fff"/>
95
+ </g>
96
+ <g transform="translate(-7 -7)" clip-path="url(#b)">
97
+ <path fill-opacity=".2" d="m96 9c48.43 0 87.72 39.13 87.99 87.5 0-0.17 0.01-0.33 0.01-0.5 0-48.6-39.4-88-88-88s-88 39.4-88 88c0 0.17 0.01 0.33 0.01 0.5 0.27-48.37 39.56-87.5 87.99-87.5z" fill="#fff"/>
98
+ <path fill-opacity=".15" d="m96 183c48.43 0 87.72-39.13 87.99-87.5 0 0.17 0.01 0.33 0.01 0.5 0 48.6-39.4 88-88 88s-88-39.4-88-88c0-0.17 0.01-0.33 0.01-0.5 0.27 48.37 39.56 87.5 87.99 87.5z" fill="#3e2723"/>
99
+ </g>
100
+ <radialGradient id="r" gradientUnits="userSpaceOnUse" cy="32.014" cx="34.286" gradientTransform="translate(-7 -7)" r="176.75">
101
+ <stop stop-color="#fff" stop-opacity=".1" offset="0"/>
102
+ <stop stop-color="#fff" stop-opacity="0" offset="1"/>
103
+ </radialGradient>
104
+ <circle cy="89" cx="89" r="88" fill="url(#r)"/>
105
+ </svg>
assets/img/edge.svg ADDED
@@ -0,0 +1 @@
 
1
+ <?xml version="1.0" encoding="UTF-8"?><svg version="1.1" viewBox="0 0 60 64" xmlns="http://www.w3.org/2000/svg"><path d="m18.87 38c0 1.54 0.23 2.94 0.7 4.2 0.5 1.24 1.15 2.35 1.98 3.32s1.8 1.8 2.94 2.5c1.1 0.7 2.3 1.28 3.58 1.73 1.27 0.46 2.6 0.8 3.95 1.02 1.37 0.22 2.7 0.33 4.05 0.33 1.7 0 3.28-0.13 4.78-0.4 1.5-0.28 2.96-0.65 4.4-1.12s2.83-1.03 4.22-1.67c1.4-0.64 2.82-1.34 4.28-2.12v13.56c-1.63 0.8-3.23 1.47-4.83 2.05-1.6 0.56-3.2 1.05-4.83 1.44-1.63 0.4-3.28 0.7-4.97 0.88s-3.42 0.28-5.22 0.28c-2.4 0-4.72-0.28-6.95-0.83s-4.32-1.34-6.28-2.38-3.75-2.3-5.38-3.78c-1.64-1.48-3.03-3.15-4.2-5s-2.07-3.88-2.72-6.06c-0.63-2.18-0.95-4.5-0.95-6.96 0-2.63 0.36-5.13 1.08-7.52 0.73-2.4 1.76-4.58 3.12-6.58 1.35-2 3-3.78 4.95-5.33s4.14-2.82 6.58-3.8c-1.33 1.33-2.37 2.9-3.1 4.73-0.75 1.82-1.22 3.65-1.43 5.48h22.78c0-2.3-0.23-4.3-0.7-6.02s-1.22-3.15-2.27-4.28c-1.04-1.14-2.38-2-4.03-2.56-1.65-0.57-3.64-0.86-5.97-0.86-2.75 0-5.5 0.4-8.25 1.23-2.75 0.8-5.36 1.95-7.84 3.4-2.48 1.47-4.76 3.2-6.84 5.18-2.08 2-3.83 4.15-5.25 6.48 0.3-2.7 0.9-5.3 1.73-7.77s1.93-4.77 3.25-6.9c1.32-2.1 2.87-4.02 4.64-5.74s3.73-3.2 5.9-4.4 4.47-2.17 6.97-2.82c2.5-0.57 5.16-0.91 7.96-0.91 1.64 0 3.27 0.15 4.9 0.44 1.63 0.3 3.22 0.7 4.77 1.22 3.08 1.06 5.83 2.54 8.25 4.42 2.42 1.9 4.45 4.06 6.1 6.53s2.9 5.2 3.76 8.17 1.3 6.06 1.3 9.27v7.95h-40.91z" fill="#0078D7"/></svg>
assets/img/eps.svg ADDED
@@ -0,0 +1,86 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 15.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="300px"
5
+ height="200px" viewBox="0 0 300 200" enable-background="new 0 0 300 200" xml:space="preserve">
6
+ <g id="Ebene_1">
7
+ </g>
8
+ <g id="E">
9
+ </g>
10
+ <g id="EPS-Logo">
11
+ </g>
12
+ <g id="EPS-Logo_1_">
13
+ </g>
14
+ <g id="E_1_">
15
+ <path fill="#71706F" d="M226.672,106.451L226.672,106.451H205.16c-2.392,0-4.338-1.906-4.338-4.292
16
+ c0-2.387,1.946-4.488,4.338-4.488h32.75V81.516h-32.75c-11.43,0-20.73,9.318-20.73,20.721c0,11.401,9.301,20.72,20.73,20.72h21.22
17
+ c2.393,0,4.34,1.898,4.34,4.284c0,2.388-1.947,4.145-4.34,4.145h-45.502c-3.862,7.375-7.619,13.697-15.244,16.857h61.038l0,0
18
+ c11.238-0.162,20.432-9.672,20.432-20.974C247.104,115.969,237.91,106.613,226.672,106.451z"/>
19
+ <g>
20
+ <g>
21
+ <path fill="none" stroke="#706F6F" stroke-width="4.5655" stroke-miterlimit="10" d="M119.351,184.972"/>
22
+ </g>
23
+ </g>
24
+ <path fill="#71706F" d="M144.21,81.516c-18.232,0-33.082,14.938-33.082,33.293c0,0.217,0,0.702,0,0.702v68.553h16.506v-35.821
25
+ h16.541c18.232,0,33.029-15.137,33.029-33.493C177.205,96.396,162.442,81.516,144.21,81.516z M144.21,131.386h-16.575V114.75
26
+ c0-9.295,7.4-16.857,16.575-16.857c9.175,0,16.639,7.563,16.639,16.857C160.85,124.047,153.386,131.386,144.21,131.386z"/>
27
+ <g>
28
+ <g>
29
+ <path fill="#C8036F" d="M58.872,148.243c-15.607,0-28.729-11.121-32.279-25.649c0,0-1.026-4.805-1.026-7.968
30
+ s0.972-8.017,0.972-8.017c3.576-14.493,16.681-25.285,32.262-25.285c18.326,0,33.363,14.897,33.363,33.223v8.06H43.477
31
+ c2.875,5.618,8.689,8.779,15.396,8.779h43.769l0.06-47.523c0-7.085-5.797-12.882-12.882-12.882H27.784
32
+ c-7.085,0-12.883,5.622-12.883,12.707v62.035c0,7.085,5.797,13.058,12.883,13.058h62.034c6.359,0,11.663-4.565,12.688-10.536
33
+ H58.872z"/>
34
+ <path fill="#C8036F" d="M58.801,97.094c-6.679,0-12.489,4.09-15.375,9.357h30.752C71.291,101.184,65.481,97.094,58.801,97.094z"
35
+ />
36
+ </g>
37
+ <path fill="#C8036F" d="M86.896,50.807c0-15.141-12.583-27.414-28.104-27.414c-15.264,0-27.679,11.873-28.086,26.666
38
+ c-0.007,0.063-0.001,0.123-0.001,0.188v8.239c0,0.985,0.802,1.959,1.813,1.959h10.339c1.01,0,1.896-0.974,1.896-1.959v-7.678l0,0
39
+ c0-7.561,6.297-13.711,14.048-13.711c7.75,0,14.048,6.15,14.048,13.711v7.678c0,0.985,0.819,1.959,1.83,1.959h10.34
40
+ c1.01,0,1.878-0.974,1.878-1.959V50.807L86.896,50.807z"/>
41
+ </g>
42
+ <g>
43
+ <path fill="#71706F" d="M162.729,169.666l-1.494,8.464c-0.747,4.277-3.55,6.236-7.349,6.236c-3.219,0-5.709-2.098-4.983-6.23
44
+ l1.495-8.47h2.306l-1.496,8.464c-0.456,2.637,0.728,4.14,2.969,4.14c2.305,0,4.276-1.371,4.755-4.134l1.494-8.47H162.729z
45
+ M153.678,167.017c0,0.705,0.54,1.038,1.121,1.038c0.727,0,1.517-0.52,1.517-1.495c0-0.685-0.458-1.037-1.06-1.037
46
+ C154.509,165.522,153.678,165.999,153.678,167.017z M158.661,166.996c0,0.726,0.56,1.059,1.162,1.059
47
+ c0.644,0,1.494-0.52,1.494-1.474c0-0.686-0.498-1.059-1.059-1.059C159.512,165.522,158.661,165.999,158.661,166.996z"/>
48
+ <path fill="#71706F" d="M168.299,169.666l-1.037,5.848c0.893-1.203,2.677-1.84,3.923-1.84c2.574,0,4.359,1.509,4.359,4.311
49
+ c0,3.966-2.762,6.35-6.29,6.35c-1.37,0-2.533-0.509-3.238-1.795l-0.395,1.525h-2.015l2.554-14.398H168.299z M166.68,179.534
50
+ c-0.082,1.704,1.017,2.804,2.615,2.804c2.014,0,3.965-1.558,4.09-3.924c0.083-1.724-1.037-2.74-2.594-2.74
51
+ C168.797,175.674,166.804,177.272,166.68,179.534z"/>
52
+ <path fill="#71706F" d="M179.742,179.85c-0.083,1.406,1.017,2.553,2.887,2.553c1.037,0,2.406-0.405,3.154-1.111l1.163,1.344
53
+ c-1.267,1.162-3.135,1.74-4.712,1.74c-2.948,0-4.672-1.766-4.672-4.465c0-3.592,2.823-6.269,6.436-6.269
54
+ c3.302,0,5.17,1.994,4.049,6.208H179.742z M186.302,178.096c0.166-1.757-0.87-2.471-2.594-2.471c-1.557,0-2.99,0.714-3.612,2.471
55
+ H186.302z"/>
56
+ <path fill="#71706F" d="M193.76,173.881l-0.104,1.354c0.997-1.31,2.2-1.577,3.301-1.577c0.997,0,1.89,0.354,2.367,0.873
57
+ l-1.288,1.868c-0.455-0.413-0.913-0.621-1.701-0.621c-1.475,0-2.928,0.884-3.26,2.774l-0.976,5.513h-2.139l1.806-10.184H193.76z"
58
+ />
59
+ <path fill="#71706F" d="M209.623,173.881l1.079,8.054l3.903-8.054h2.387l-5.354,10.184h-2.513l-1.018-6.719l-1.64,3.339
60
+ l-1.785,3.38h-2.491l-1.807-10.184h2.408l1.06,8.054l3.923-8.054H209.623z"/>
61
+ <path fill="#71706F" d="M219.739,179.85c-0.083,1.406,1.018,2.553,2.886,2.553c1.038,0,2.408-0.405,3.154-1.111l1.163,1.344
62
+ c-1.266,1.162-3.135,1.74-4.712,1.74c-2.948,0-4.671-1.766-4.671-4.465c0-3.592,2.823-6.269,6.436-6.269
63
+ c3.301,0,5.17,1.994,4.049,6.208H219.739z M226.3,178.096c0.165-1.757-0.872-2.471-2.596-2.471c-1.557,0-2.989,0.714-3.612,2.471
64
+ H226.3z"/>
65
+ <path fill="#71706F" d="M233.901,173.881l-1.806,10.184h-2.138l1.806-10.184H233.901z M232.013,171.106
66
+ c0,0.726,0.54,1.101,1.121,1.101c0.831,0,1.599-0.541,1.599-1.558c0-0.686-0.52-1.08-1.08-1.08
67
+ C232.886,169.569,232.013,170.068,232.013,171.106z"/>
68
+ <path fill="#71706F" d="M243.391,176.399c-0.664-0.747-1.515-0.955-2.532-0.955c-1.412,0-2.408,0.478-2.408,1.371
69
+ c0,0.747,0.81,1.059,2.014,1.162c1.868,0.166,4.256,0.789,3.758,3.426c-0.354,1.91-2.263,3.031-4.921,3.031
70
+ c-1.66,0-3.259-0.373-4.339-1.89l1.391-1.515c0.769,1.058,2.118,1.495,3.322,1.515c1.017,0,2.222-0.374,2.409-1.328
71
+ c0.187-0.913-0.623-1.267-2.119-1.412c-1.744-0.166-3.652-0.809-3.652-2.739c0-2.555,2.76-3.447,4.837-3.447
72
+ c1.577,0,2.739,0.353,3.694,1.371L243.391,176.399z"/>
73
+ <path fill="#71706F" d="M250.141,173.881l-0.975,5.484c-0.313,1.744,0.477,2.95,2.262,2.95c1.682,0,3.114-1.394,3.404-3.097
74
+ l0.935-5.338h2.139l-1.806,10.184h-1.931l0.145-1.476c-1.204,1.142-2.388,1.681-3.819,1.681c-2.513,0-4.007-1.801-3.468-4.895
75
+ l0.976-5.494H250.141z"/>
76
+ <path fill="#71706F" d="M267.294,184.064l0.976-5.451c0.311-1.765-0.29-2.934-2.242-2.934c-1.702,0-3.136,1.369-3.426,3.051
77
+ l-0.935,5.334h-2.138l1.807-10.184h1.951l-0.146,1.487c1.185-1.1,2.408-1.642,3.737-1.642c2.491,0,4.111,1.732,3.551,4.868
78
+ l-0.976,5.47H267.294z"/>
79
+ <path fill="#71706F" d="M274.541,185.47c-0.145,1.405,0.934,1.974,2.741,1.974c1.578,0,3.281-0.882,3.676-3.124l0.311-1.748
80
+ c-0.936,1.308-2.637,1.824-3.902,1.824c-2.617,0-4.443-1.558-4.443-4.383c0-4.025,2.989-6.353,6.373-6.353
81
+ c1.433,0,2.72,0.68,3.177,1.843l0.353-1.622h2.076l-1.786,10.487c-0.663,3.883-3.55,5.087-6.186,5.087
82
+ c-3.156,0-4.899-1.526-4.465-3.985H274.541z M275.144,179.599c0,1.742,1.143,2.802,2.783,2.802c4.421,0,5.604-6.789,1.182-6.789
83
+ C277.011,175.611,275.144,177.168,275.144,179.599z"/>
84
+ </g>
85
+ </g>
86
+ </svg>
assets/img/giropay.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="svg2226" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 885.8 380.9" width="2500" height="1075"><style>.st0{fill:#000268}.st1{fill:#fff}.st2{fill:#ff0007}</style><g id="layer1"><path id="_92653320" class="st0" d="M0 68.3C0 30.6 30.8 0 68.7 0h748.5c37.9 0 68.7 30.6 68.7 68.3v244.2c0 37.7-30.7 68.3-68.7 68.3H68.7C30.8 380.9 0 350.3 0 312.6V68.3z"/><path id="_92186184" class="st1" d="M28.2 70.7v239.6c0 23.6 19.2 42.7 42.9 42.7h392.1V28H71.1c-23.7 0-42.9 19.1-42.9 42.7zm536.4 118.6c0 15.3-7.5 25.7-20 25.7-11 0-20.2-10.5-20.2-24.5 0-14.3 8.1-25 20.2-25 12.8.1 20 11.1 20 23.8zm-73.4 87.5h33.1v-52h.4c6.3 11.4 18.8 15.6 30.3 15.6 28.5 0 43.7-23.5 43.7-51.8 0-23.2-14.5-48.3-41-48.3-15.1 0-29 6.1-35.7 19.5h-.4v-17.3h-30.5v134.3zm152.7-69c0-9.2 8.8-12.7 20-12.7 5 0 9.7.3 14 .5 0 11.2-7.9 22.6-20.4 22.6-7.7.1-13.6-3.7-13.6-10.4zm66.8 30.4c-1.5-7.5-1.8-15.1-1.8-22.6v-35.7c0-29.2-21.1-39.7-45.6-39.7-14.1 0-26.5 2-38.2 6.8l.6 22.4c9.2-5.2 19.8-7.2 30.5-7.2 11.9 0 21.7 3.5 21.9 16.6-4.2-.7-10.1-1.3-15.4-1.3-17.6 0-49.4 3.5-49.4 32.7 0 20.8 16.9 30.1 35.8 30.1 13.6 0 22.8-5.3 30.3-17.3h.4c0 5 .5 9.9.7 15.1h30.2zm14.8 38.6c6.8 1.5 13.6 2.2 20.6 2.2 30.3 0 37.5-23.4 46.9-47.4l35.1-89.1H795L775.3 205h-.3l-20.6-62.5h-35.6l38.8 98c-2.4 8.5-8.6 13.2-16.7 13.2-4.6 0-8.6-.6-13.1-2l-2.3 25.1z"/><path id="_47303032" class="st2" d="M109 189.5c0-13.1 6.4-23.9 18.8-23.9 14.9 0 21.1 11.9 21.1 22.6 0 14.7-9.4 24.6-21.1 24.6-10 0-18.8-8.4-18.8-23.3zm71.9-47.1h-30v17.3h-.3c-7-11.8-18.4-19.5-32.5-19.5-29.8 0-43.2 21.3-43.2 49.8 0 28.3 16.4 48.2 42.6 48.2 13.3 0 24.3-5.2 32.2-16.4h.4v5.2c0 18.7-10.3 27.7-29.4 27.7-13.8 0-22.3-2.9-32.4-7.9l-1.7 26.1c7.7 2.8 20.8 6.1 36.6 6.1 38.6 0 57.7-12.7 57.7-52v-84.6zm55.9-39.9h-33.1v24.3h33.1v-24.3zm-33.1 135.7h33.1v-95.8h-33.1v95.8zm125.2-96.9c-3.3-.5-7.4-1.1-11.2-1.1-14.3 0-22.6 7.7-28.3 19.9h-.4v-17.6h-30.1v95.8H292v-40.4c0-18.8 8.7-30 24.1-30 3.9 0 7.5 0 11.2 1.1l1.6-27.7zm57 75.9c-15.3 0-21.5-12.7-21.5-26.8 0-14.3 6.2-27 21.5-27s21.5 12.7 21.5 27c0 14.1-6.3 26.8-21.5 26.8zm0 23.2c31.6 0 55.7-18.4 55.7-50 0-31.8-24.1-50.2-55.7-50.2s-55.7 18.4-55.7 50.2c0 31.6 24 50 55.7 50z"/></g></svg>
assets/img/googlepay_outline.svg ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg width="425px" height="272px" viewBox="0 0 425 272" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
3
+ <!-- Generator: Sketch 52.1 (67048) - http://www.bohemiancoding.com/sketch -->
4
+ <title>GooglePay_mark_800_gray</title>
5
+ <desc>Created with Sketch.</desc>
6
+ <g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
7
+ <g id="GooglePay_mark_800_gray">
8
+ <g id="border">
9
+ <path d="M386.731012,0.0897642745 L38.039747,0.0897642745 C36.587241,0.0897642745 35.1321687,0.0897642745 33.6822289,0.0974583552 C32.4581205,0.107717129 31.2365783,0.120540597 30.0124699,0.153881613 C27.3461205,0.225693033 24.6566747,0.38213934 22.0236867,0.856607648 C19.3496386,1.33620534 16.8603614,2.12100157 14.4326747,3.35718387 C12.0434819,4.57028392 9.85959036,6.15782923 7.96312048,8.05057307 C6.06921687,9.94588161 4.4806988,12.1258711 3.26685542,14.5161655 C2.02991566,16.9423656 1.24463855,19.4301184 0.767313253,22.1050938 C0.289987952,24.739034 0.133445783,27.4242682 0.0615903614,30.0864201 C0.0282289157,31.3097789 0.0128313253,32.5305731 0.00513253012,33.7513672 C-0.00256626506,35.2029838 1.08420217e-19,36.6546003 1.08420217e-19,38.1087816 L1.08420217e-19,233.841064 C1.08420217e-19,235.295246 -0.00256626506,236.744298 0.00513253012,238.198479 C0.0128313253,239.419273 0.0282289157,240.642632 0.0615903614,241.863426 C0.133445783,244.523013 0.289987952,247.210812 0.767313253,249.842188 C1.24463855,252.517163 2.02991566,255.004916 3.26685542,257.43368 C4.4806988,259.82141 6.06921687,262.003964 7.96312048,263.896708 C9.85959036,265.792017 12.0434819,267.379562 14.4326747,268.590097 C16.8603614,269.828844 19.3496386,270.613641 22.0236867,271.095803 C24.6566747,271.565142 27.3461205,271.724153 30.0124699,271.795964 C31.2365783,271.824176 32.4581205,271.842129 33.6822289,271.847258 C35.1321687,271.857517 36.587241,271.857517 38.039747,271.857517 L386.731012,271.857517 C388.180952,271.857517 389.636024,271.857517 391.085964,271.847258 C392.307506,271.842129 393.529048,271.824176 394.758289,271.795964 C397.419506,271.724153 400.108952,271.565142 402.747072,271.095803 C405.418554,270.613641 407.907831,269.828844 410.338084,268.590097 C412.727277,267.379562 414.906036,265.792017 416.805072,263.896708 C418.69641,262.003964 420.284928,259.82141 421.501337,257.43368 C422.740843,255.004916 423.52612,252.517163 424.00088,249.842188 C424.478205,247.210812 424.632181,244.523013 424.704036,241.863426 C424.737398,240.642632 424.752795,239.419273 424.760494,238.198479 C424.770759,236.744298 424.770759,235.295246 424.770759,233.841064 L424.770759,38.1087816 C424.770759,36.6546003 424.770759,35.2029838 424.760494,33.7513672 C424.752795,32.5305731 424.737398,31.3097789 424.704036,30.0864201 C424.632181,27.4242682 424.478205,24.739034 424.00088,22.1050938 C423.52612,19.4301184 422.740843,16.9423656 421.501337,14.5161655 C420.284928,12.1258711 418.69641,9.94588161 416.805072,8.05057307 C414.906036,6.15782923 412.727277,4.57028392 410.338084,3.35718387 C407.907831,2.12100157 405.418554,1.33620534 402.747072,0.856607648 C400.108952,0.38213934 397.419506,0.225693033 394.758289,0.153881613 C393.529048,0.120540597 392.307506,0.107717129 391.085964,0.0974583552 C389.636024,0.0897642745 388.180952,0.0897642745 386.731012,0.0897642745" id="Fill-1" fill="#3C4043"></path>
10
+ <path d="M386.731012,9.14826192 L391.021807,9.155956 C392.181759,9.16365008 393.344277,9.17647355 394.511928,9.20981456 C396.54441,9.26367313 398.923337,9.37395495 401.14059,9.77148245 C403.065289,10.1177161 404.682036,10.646043 406.23206,11.4334039 C407.76412,12.210506 409.165301,13.2312541 410.38941,14.4520482 C411.618651,15.6831011 412.640024,17.0859885 413.427867,18.6324987 C414.213145,20.1713148 414.736663,21.776813 415.083108,23.7157213 C415.478313,25.9085343 415.588663,28.2911346 415.642554,30.3351954 C415.675916,31.4867428 415.691313,32.6408549 415.696446,33.8231786 C415.706711,35.2517129 415.706711,36.6776826 415.706711,38.1087816 L415.706711,233.841064 C415.706711,235.272163 415.706711,236.698133 415.696446,238.154879 C415.691313,239.308991 415.675916,240.463103 415.642554,241.61978 C415.588663,243.658711 415.478313,246.041312 415.077976,248.257207 C414.736663,250.170468 414.213145,251.775966 413.422735,253.322477 C412.637458,254.866422 411.618651,256.266745 410.394542,257.490104 C409.162735,258.721157 407.766687,259.736775 406.216663,260.521572 C404.676904,261.306368 403.065289,261.834695 401.158554,262.175799 C398.895108,262.578456 396.418663,262.691302 394.552988,262.740031 C393.380205,262.768243 392.212554,262.783631 391.014108,262.788761 C389.589831,262.799019 388.157855,262.799019 386.731012,262.799019 L38.039747,262.799019 C38.0217831,262.799019 38.0038193,262.799019 37.9832892,262.799019 C36.5744096,262.799019 35.1603976,262.799019 33.7258554,262.788761 C32.5556386,262.783631 31.387988,262.768243 30.2588313,262.742596 C28.3495301,262.691302 25.8705181,262.578456 23.6276024,262.178364 C21.7029036,261.834695 20.0912892,261.306368 18.531,260.511313 C16.9963735,259.734211 15.6003253,258.718592 14.3685181,257.484974 C13.1469759,256.266745 12.1307349,254.868987 11.3454578,253.322477 C10.5576145,251.778531 10.0315301,250.167904 9.68508434,248.23156 C9.28731325,246.018229 9.17696386,243.648453 9.12050602,241.61978 C9.08971084,240.460539 9.07687952,239.298732 9.06918072,238.147185 L9.06404819,234.741272 L9.06404819,37.2111388 L9.06918072,33.8129199 C9.07687952,32.6511137 9.08971084,31.4918722 9.12050602,30.3326307 C9.17696386,28.3013934 9.28731325,25.9290519 9.69021687,23.6977685 C10.0315301,21.7819424 10.5576145,20.1687501 11.3480241,18.6171105 C12.1281687,17.0834238 13.1469759,15.6831011 14.3736506,14.4571776 C15.597759,13.2312541 17.001506,12.2156354 18.5438313,11.4308392 C20.0861566,10.6434783 21.7029036,10.1177161 23.6276024,9.77148245 C25.8448554,9.37395495 28.2237831,9.26367313 30.2613976,9.20981456 C31.4213494,9.17647355 32.5838675,9.16365008 33.7361205,9.155956 L38.039747,9.14826192 L386.731012,9.14826192" id="wihit-fill" fill="#FFFFFE"></path>
11
+ </g>
12
+ <g id="GPay-logo" transform="translate(48.759036, 76.981132)">
13
+ <g id="Pay" transform="translate(143.569904, 7.624798)" fill="#3C4043">
14
+ <path d="M12.1771332,57.6434717 L12.1771332,96.3774447 L0.0751674892,96.3774447 L0.0751674892,0.762479784 L32.1716854,0.762479784 C39.9139368,0.609983827 47.4306857,3.58365499 52.9179124,9.07350943 C63.8923658,19.4432345 64.5688732,36.9040216 54.2709272,48.1124744 C53.8199223,48.5699623 53.3689173,49.0274501 52.9179124,49.484938 C47.2803507,54.8985445 40.3649417,57.6434717 32.1716854,57.6434717 L12.1771332,57.6434717 Z M12.1771332,12.5046685 L12.1771332,45.901283 L32.4723553,45.901283 C36.9824047,46.053779 41.342119,44.2238275 44.4239861,40.9451644 C50.7380552,34.3115903 50.5877202,23.6368733 44.0481487,17.2320431 C40.9662816,14.182124 36.8320697,12.5046685 32.4723553,12.5046685 L12.1771332,12.5046685 Z" id="Shape" fill-rule="nonzero"></path>
15
+ <path d="M89.5244796,28.8217358 C98.4694108,28.8217358 105.535155,31.2616712 110.721712,36.0652938 C115.908268,40.8689164 118.463963,47.5787385 118.463963,56.0422642 L118.463963,96.3774447 L106.88817,96.3774447 L106.88817,87.3039353 L106.361997,87.3039353 C101.325775,94.7762372 94.7110364,98.5123881 86.3674451,98.5123881 C79.3017011,98.5123881 73.2883019,96.3774447 68.5527501,92.107558 C63.8923658,88.1426631 61.2615037,82.2715687 61.4118387,76.0954825 C61.4118387,69.3094124 63.9675333,63.9720539 69.0037551,59.9309111 C74.0399768,55.8897682 80.8050509,53.9073208 89.2238097,53.9073208 C96.4398886,53.9073208 102.302953,55.2797844 106.963337,57.8722156 L106.963337,55.0510404 C106.963337,50.8574016 105.159317,46.8925067 102.002283,44.1475795 C98.7700808,41.2501563 94.6358689,39.6489488 90.351322,39.6489488 C83.586248,39.6489488 78.2493562,42.546372 74.3406468,48.3412183 L63.6668633,41.5551482 C69.3795925,33.0916226 78.0238538,28.8217358 89.5244796,28.8217358 Z M73.8896419,76.3242264 C73.8896419,79.5266415 75.3929916,82.5003127 77.8735188,84.3302642 C80.5795484,86.4652075 83.8869179,87.6089272 87.2694549,87.5326792 C92.3808442,87.5326792 97.266731,85.4739838 100.87477,81.8140809 C104.858647,78.0016819 106.88817,73.5030512 106.88817,68.3181887 C103.129795,65.2682695 97.8680709,63.74331 91.1029969,63.819558 C86.2171101,63.819558 82.0828982,65.0395256 78.7755287,67.4032129 C75.5433266,69.7669003 73.8896419,72.7405714 73.8896419,76.3242264 Z" id="Shape" fill-rule="nonzero"></path>
16
+ <polygon id="Path" points="184.912023 30.9566792 144.471914 125.122933 131.994111 125.122933 147.027609 92.1838059 120.493485 30.9566792 133.647796 30.9566792 152.815506 77.925434 153.041008 77.925434 171.757713 30.9566792"></polygon>
17
+ </g>
18
+ <g id="Super-G">
19
+ <path d="M106.813002,56.8809919 C106.813002,53.144841 106.512332,49.40869 105.910992,45.7487871 L54.8722671,45.7487871 L54.8722671,66.8694771 L84.1124204,66.8694771 C82.9097406,73.6555472 79.0010311,79.7553854 73.2883019,83.5677844 L73.2883019,97.2924205 L90.7271594,97.2924205 C100.949938,87.7614232 106.813002,73.6555472 106.813002,56.8809919 Z" id="Path" fill="#4285F4"></path>
20
+ <path d="M54.8722671,110.559569 C69.45476,110.559569 81.7822282,105.679698 90.7271594,97.2924205 L73.2883019,83.5677844 C68.4024152,86.9226954 62.1635136,88.8288949 54.8722671,88.8288949 C40.7407791,88.8288949 28.7891484,79.1454016 24.5046015,66.1832453 L6.53957156,66.1832453 L6.53957156,80.3653693 C15.7100052,98.893628 34.42671,110.559569 54.8722671,110.559569 Z" id="Path" fill="#34A853"></path>
21
+ <path d="M24.5046015,66.1832453 C22.2495768,59.3971752 22.2495768,52.0011213 24.5046015,45.1388032 L24.5046015,31.0329272 L6.53957156,31.0329272 C-1.20267983,46.5112668 -1.20267983,64.8107817 6.53957156,80.2891213 L24.5046015,66.1832453 Z" id="Path" fill="#FBBC04"></path>
22
+ <path d="M54.8722671,22.4931536 C62.6145185,22.3406577 70.0560999,25.3143288 75.6184941,30.7279353 L91.1029969,15.0208518 C81.2560558,5.71859838 68.3272477,0.609983827 54.8722671,0.762479784 C34.42671,0.762479784 15.7100052,12.5046685 6.53957156,31.0329272 L24.5046015,45.2150512 C28.7891484,32.1766469 40.7407791,22.4931536 54.8722671,22.4931536 Z" id="Path" fill="#EA4335"></path>
23
+ </g>
24
+ </g>
25
+ </g>
26
+ </g>
27
+ </svg>
assets/img/googlepay_standard.svg ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
3
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="60" height="24" id="svgcontent"><rect id="backgroundrect" width="100%" height="100%" x="0" y="0" fill="none" stroke="none"></rect>
4
+ <title>GooglePay_AcceptanceMark_RGB_60x24pt</title>
5
+
6
+
7
+
8
+
9
+
10
+
11
+
12
+ <g class="currentLayer" style="pointer-events:all"><title>Layer 1</title><path d="M28.58971460372696,11.760222498323467 v7 H26.34971460372696 V1.4202224983234668 h5.92 a5.39,5.39 0 0 1 3.84,1.51 A5,5 0 0 1 36.35971460372696,10.000222498323467 l-0.25,0.26 a5.35,5.35 0 0 1 -3.84,1.48 zm0,-8.2 V9.620222498323468 H32.31971460372696 a2.93,2.93 0 0 0 2.21,-0.9 A3,3 0 0 0 32.31971460372696,3.5602224983234674 z" fill="#5f6368" id="svg_1" class=""></path><path d="M42.84971460372696,6.5202224983234665 a5.5600000000000005,5.5600000000000005 0 0 1 3.91,1.32 a4.71,4.71 0 0 1 1.4300000000000002,3.63 v7.32 H46.04971460372696 V17.140222498323467 H45.91971460372696 a4.28,4.28 0 0 1 -3.6900000000000004,2 A4.83,4.83 0 0 1 38.97971460372696,18.000222498323467 a3.74,3.74 0 0 1 -1.32,-2.92 a3.52,3.52 0 0 1 1.3900000000000001,-2.93 a5.87,5.87 0 0 1 3.73,-1.09 a6.65,6.65 0 0 1 3.27,0.7200000000000002 v-0.51 a2.5,2.5 0 0 0 -0.92,-2 a3.17,3.17 0 0 0 -2.16,-0.81 a3.4,3.4 0 0 0 -2.95,1.57 l-2,-1.23 A5.45,5.45 0 0 1 42.84971460372696,6.5202224983234665 zM39.91971460372696,15.150222498323467 a1.82,1.82 0 0 0 0.7400000000000002,1.46 a2.74,2.74 0 0 0 1.7400000000000002,0.5800000000000002 a3.58,3.58 0 0 0 2.51,-1 a3.26,3.26 0 0 0 1.11,-2.45 a4.54,4.54 0 0 0 -2.91,-0.8300000000000002 a3.74,3.74 0 0 0 -2.27,0.6600000000000003 A2,2 0 0 0 39.91971460372696,15.150222498323467 z" fill="#5f6368" id="svg_2" class=""></path><path d="M60.43971460372697,6.900222498323468 L52.98971460372696,24.000222498323467 H50.67971460372696 l2.77,-6 L48.54971460372696,6.910222498323467 h2.43 l3.54,8.54 h0 l3.44,-8.54 z" fill="#5f6368" id="svg_3" class=""></path><path d="M19.569714603726958,10.240222498323467 a12.54,12.54 0 0 0 -0.17,-2 H9.97971460372696 v3.84 h5.39 a4.61,4.61 0 0 1 -2,3 v2.49 h3.22 A9.75,9.75 0 0 0 19.569714603726958,10.240222498323467 z" fill="#4285f4" id="svg_4" class=""></path><path d="M9.97971460372696,20.000222498323467 a9.54,9.54 0 0 0 6.62,-2.41 l-3.22,-2.49 a6,6 0 0 1 -3.4,0.9500000000000002 a6,6 0 0 1 -5.6,-4.12 H1.069714603726959 V14.500222498323467 A10,10 0 0 0 9.97971460372696,20.000222498323467 z" fill="#34a853" id="svg_5" class=""></path><path d="M4.379714603726959,11.920222498323467 a6,6 0 0 1 0,-3.8200000000000003 V5.530222498323467 H1.069714603726959 a10,10 0 0 0 0,9 z" fill="#fbbc04" id="svg_6" class=""></path><path d="M9.97971460372696,4.000222498323467 a5.44,5.44 0 0 1 3.83,1.5 h0 l2.85,-2.85 A9.58,9.58 0 0 0 9.97971460372696,0.0002224983234668799 a10,10 0 0 0 -8.91,5.5 L4.379714603726959,8.100222498323467 A6,6 0 0 1 9.97971460372696,4.000222498323467 z" fill="#ea4335" id="svg_7" class=""></path></g></svg>
assets/img/ideal.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg xmlns="http://www.w3.org/2000/svg" x="0px" y="0px" width="65px" height="56px" viewBox="11 10 68 59"><path d="M11.463 11.472h33.741c22.901 0 31.679 12.506 31.679 28.282 0 18.917-12.258 28.409-31.679 28.409H11.463V11.472zm3.271 3.271v50.151h30.47c18.396 0 28.405-8.572 28.405-25.14 0-17.027-10.85-25.012-28.405-25.012h-30.47z"/><path d="M18.822 43.442h9.754v17.36h-9.754z"/><circle cx="23.698" cy="34.695" r="6.062"/><path d="M49.031 37.531v2.811h-6.95v-11.28h6.728v2.81h-3.918v1.306h3.705v2.811h-3.705v1.543l4.14-.001zm1.216 2.813l3.401-11.286h3.998l3.4 11.286h-2.925l-.638-2.183h-3.676l-.639 2.183h-2.921zm4.384-4.991h2.034l-.933-3.188h-.17l-.931 3.188zm7.828-6.294h2.812v8.473h4.162c-1.142-15.374-13.234-18.696-24.228-18.696H33.488v10.229h1.734c3.162 0 5.125 2.144 5.125 5.594 0 3.56-1.916 5.685-5.125 5.685h-1.734V60.81h11.718c17.866 0 24.088-8.298 24.308-20.468h-7.055V29.059zm-28.973 2.816v5.657h1.736c1.203 0 2.315-.348 2.315-2.874 0-2.467-1.237-2.783-2.315-2.783h-1.736z" fill="#d50072"/></svg>
assets/img/klarna.svg ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 19.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 452.9 101.1" style="enable-background:new 0 0 452.9 101.1;" xml:space="preserve">
5
+ <path d="M79.7,0H57.4c0,18.3-8.4,35-23,46l-8.8,6.6l34.2,46.6h28.1L56.4,56.3C71.3,41.5,79.7,21.5,79.7,0z"/>
6
+ <rect width="22.8" height="99.2"/>
7
+ <rect x="94.5" width="21.5" height="99.2"/>
8
+ <path d="M304.6,28.7c-8.2,0-16,2.5-21.2,9.6v-7.7H263v68.6h20.7v-36c0-10.4,7-15.5,15.4-15.5c9,0,14.2,5.4,14.2,15.4v36.2h20.5V55.6
9
+ C333.8,39.6,321.1,28.7,304.6,28.7z"/>
10
+ <path d="M181,30.6V35c-5.8-4-12.8-6.3-20.4-6.3c-20,0-36.2,16.2-36.2,36.2s16.2,36.2,36.2,36.2c7.6,0,14.6-2.3,20.4-6.3v4.4h20.5
11
+ V30.6H181z M162.3,82.5c-10.3,0-18.6-7.9-18.6-17.6s8.3-17.6,18.6-17.6c10.3,0,18.6,7.9,18.6,17.6S172.6,82.5,162.3,82.5z"/>
12
+ <path d="M233.3,39.5v-8.9h-21v68.6h21.1v-32c0-10.8,11.7-16.6,19.8-16.6c0.1,0,0.2,0,0.2,0v-20C245.1,30.6,237.4,34.2,233.3,39.5z"
13
+ />
14
+ <path d="M397.6,30.6V35c-5.8-4-12.8-6.3-20.4-6.3c-20,0-36.2,16.2-36.2,36.2s16.2,36.2,36.2,36.2c7.6,0,14.6-2.3,20.4-6.3v4.4h20.5
15
+ V30.6H397.6z M378.9,82.5c-10.3,0-18.6-7.9-18.6-17.6s8.3-17.6,18.6-17.6c10.3,0,18.6,7.9,18.6,17.6
16
+ C397.6,74.6,389.2,82.5,378.9,82.5z"/>
17
+ <g>
18
+ <path d="M434,32.6c0-1-0.7-1.6-1.8-1.6h-1.9v5.2h0.9v-1.9h1l0.8,1.9h1l-0.9-2.1C433.7,33.8,434,33.3,434,32.6z M432.2,33.4h-1v-1.6
19
+ h1c0.6,0,0.9,0.3,0.9,0.8S432.9,33.4,432.2,33.4z"/>
20
+ <path d="M431.9,28.8c-2.7,0-4.9,2.2-4.9,4.9c0.1,2.7,2.2,4.9,4.9,4.9s4.9-2.2,4.9-4.9C436.8,31,434.6,28.8,431.9,28.8z M431.9,37.7
21
+ c-2.2,0-3.9-1.8-3.9-4c0-2.2,1.8-4,3.9-4c2.2,0,3.9,1.8,3.9,4C435.8,35.9,434,37.7,431.9,37.7z"/>
22
+ </g>
23
+ <path d="M440,74.9c-7.1,0-12.9,5.8-12.9,12.9c0,7.1,5.8,12.9,12.9,12.9c7.1,0,12.9-5.8,12.9-12.9C452.9,80.6,447.1,74.9,440,74.9z"
24
+ />
25
+ </svg>
assets/img/logo.svg ADDED
@@ -0,0 +1,122 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="220" height="100" viewBox="120 160 140 84" version="1.1">
3
+ <defs>
4
+ <g>
5
+ <symbol overflow="visible" id="glyph0-0">
6
+ <path style="stroke:none;" d=""/>
7
+ </symbol>
8
+ <symbol overflow="visible" id="glyph0-1">
9
+ <path style="stroke:none;" d="M 14.828125 -29.78125 C 16.003906 -29.78125 17.109375 -29.542969 18.140625 -29.078125 C 19.179688 -28.617188 20.085938 -27.988281 20.859375 -27.1875 C 21.628906 -26.394531 22.238281 -25.457031 22.6875 -24.375 C 23.132813 -23.300781 23.359375 -22.148438 23.359375 -20.921875 C 23.359375 -19.679688 23.132813 -18.519531 22.6875 -17.4375 C 22.238281 -16.363281 21.628906 -15.417969 20.859375 -14.609375 C 20.085938 -13.796875 19.179688 -13.160156 18.140625 -12.703125 C 17.109375 -12.242188 16.003906 -12.015625 14.828125 -12.015625 L 8.3125 -12.015625 L 8.3125 0 L 1.96875 0 L 1.96875 -29.78125 Z M 13.984375 -17.8125 C 14.792969 -17.8125 15.503906 -18.109375 16.109375 -18.703125 C 16.710938 -19.304688 17.015625 -20.046875 17.015625 -20.921875 C 17.015625 -21.753906 16.710938 -22.472656 16.109375 -23.078125 C 15.503906 -23.679688 14.792969 -23.984375 13.984375 -23.984375 L 8.3125 -23.984375 L 8.3125 -17.8125 Z M 13.984375 -17.8125 "/>
10
+ </symbol>
11
+ <symbol overflow="visible" id="glyph0-2">
12
+ <path style="stroke:none;" d="M 23.6875 -20.828125 L 23.6875 0 L 18.6875 0 L 18.109375 -2.21875 C 17.296875 -1.132813 16.320313 -0.410156 15.1875 -0.046875 C 14.050781 0.316406 12.867188 0.5 11.640625 0.5 C 10.148438 0.5 8.777344 0.210938 7.53125 -0.359375 C 6.289063 -0.929688 5.207031 -1.710938 4.28125 -2.703125 C 3.351563 -3.699219 2.628906 -4.863281 2.109375 -6.1875 C 1.597656 -7.519531 1.34375 -8.941406 1.34375 -10.453125 C 1.34375 -11.960938 1.597656 -13.382813 2.109375 -14.71875 C 2.628906 -16.050781 3.351563 -17.210938 4.28125 -18.203125 C 5.207031 -19.199219 6.289063 -19.988281 7.53125 -20.5625 C 8.777344 -21.132813 10.148438 -21.421875 11.640625 -21.421875 C 12.980469 -21.421875 14.210938 -21.207031 15.328125 -20.78125 C 16.449219 -20.363281 17.378906 -19.695313 18.109375 -18.78125 L 18.6875 -20.828125 Z M 17.890625 -10.375 C 17.890625 -11.464844 17.742188 -12.382813 17.453125 -13.125 C 17.160156 -13.863281 16.769531 -14.460938 16.28125 -14.921875 C 15.789063 -15.386719 15.210938 -15.726563 14.546875 -15.9375 C 13.890625 -16.144531 13.183594 -16.25 12.4375 -16.25 C 11.675781 -16.25 10.964844 -16.089844 10.3125 -15.78125 C 9.65625 -15.476563 9.070313 -15.066406 8.5625 -14.546875 C 8.0625 -14.035156 7.667969 -13.417969 7.390625 -12.703125 C 7.109375 -11.992188 6.96875 -11.242188 6.96875 -10.453125 C 6.96875 -9.640625 7.109375 -8.882813 7.390625 -8.1875 C 7.667969 -7.488281 8.0625 -6.878906 8.5625 -6.359375 C 9.070313 -5.847656 9.65625 -5.433594 10.3125 -5.125 C 10.964844 -4.8125 11.675781 -4.65625 12.4375 -4.65625 C 13.945313 -4.65625 15.222656 -5.125 16.265625 -6.0625 C 17.316406 -6.996094 17.859375 -8.4375 17.890625 -10.375 Z M 17.890625 -10.375 "/>
13
+ </symbol>
14
+ <symbol overflow="visible" id="glyph0-3">
15
+ <path style="stroke:none;" d="M 17.96875 -20.828125 L 24.3125 -20.828125 L 11.171875 8.3125 L 4.828125 8.3125 L 10 -3.15625 L 1.171875 -20.828125 L 7.640625 -20.828125 L 13.0625 -9.953125 Z M 17.96875 -20.828125 "/>
16
+ </symbol>
17
+ <symbol overflow="visible" id="glyph0-4">
18
+ <path style="stroke:none;" d="M 25.078125 -20.828125 C 25.824219 -20.828125 26.632813 -20.699219 27.5 -20.453125 C 28.371094 -20.203125 29.179688 -19.753906 29.921875 -19.109375 C 30.660156 -18.460938 31.269531 -17.574219 31.75 -16.453125 C 32.226563 -15.335938 32.46875 -13.914063 32.46875 -12.1875 L 32.46875 0 L 26.671875 0 L 26.671875 -11.125 C 26.671875 -11.964844 26.574219 -12.679688 26.390625 -13.265625 C 26.210938 -13.855469 25.964844 -14.335938 25.65625 -14.703125 C 25.351563 -15.066406 24.996094 -15.320313 24.59375 -15.46875 C 24.1875 -15.621094 23.773438 -15.703125 23.359375 -15.703125 C 22.960938 -15.703125 22.566406 -15.628906 22.171875 -15.484375 C 21.785156 -15.347656 21.433594 -15.113281 21.125 -14.78125 C 20.8125 -14.445313 20.566406 -13.980469 20.390625 -13.390625 C 20.210938 -12.804688 20.125 -12.066406 20.125 -11.171875 L 20.125 0 L 14.328125 0 L 14.328125 -11.125 C 14.328125 -12.832031 14.027344 -14.019531 13.4375 -14.6875 C 12.851563 -15.363281 11.996094 -15.703125 10.875 -15.703125 C 10.0625 -15.703125 9.332031 -15.320313 8.6875 -14.5625 C 8.050781 -13.8125 7.734375 -12.636719 7.734375 -11.046875 L 7.734375 0 L 1.9375 0 L 1.9375 -20.828125 L 6.890625 -20.828125 L 7.734375 -18.90625 C 8.367188 -19.519531 9.113281 -19.992188 9.96875 -20.328125 C 10.820313 -20.660156 11.738281 -20.828125 12.71875 -20.828125 C 13.226563 -20.828125 13.757813 -20.773438 14.3125 -20.671875 C 14.871094 -20.578125 15.421875 -20.402344 15.953125 -20.15625 C 16.492188 -19.90625 17.007813 -19.574219 17.5 -19.171875 C 17.988281 -18.765625 18.425781 -18.253906 18.8125 -17.640625 C 19.144531 -18.167969 19.550781 -18.640625 20.03125 -19.046875 C 20.507813 -19.449219 21.023438 -19.785156 21.578125 -20.046875 C 22.136719 -20.316406 22.722656 -20.515625 23.328125 -20.640625 C 23.929688 -20.761719 24.515625 -20.828125 25.078125 -20.828125 Z M 25.078125 -20.828125 "/>
19
+ </symbol>
20
+ <symbol overflow="visible" id="glyph0-5">
21
+ <path style="stroke:none;" d="M 12.1875 -21.421875 C 13.746094 -21.421875 15.171875 -21.101563 16.453125 -20.46875 C 17.742188 -19.84375 18.851563 -19.019531 19.78125 -18 C 20.707031 -16.976563 21.421875 -15.800781 21.921875 -14.46875 C 22.429688 -13.132813 22.6875 -11.769531 22.6875 -10.375 C 22.6875 -9.53125 22.570313 -8.632813 22.34375 -7.6875 L 7.46875 -7.6875 C 8.027344 -6.738281 8.828125 -5.929688 9.859375 -5.265625 C 10.898438 -4.609375 12.023438 -4.28125 13.234375 -4.28125 C 14.429688 -4.28125 15.484375 -4.378906 16.390625 -4.578125 C 17.304688 -4.773438 18.171875 -5.023438 18.984375 -5.328125 L 20.921875 -1.765625 C 19.878906 -1.035156 18.691406 -0.472656 17.359375 -0.078125 C 16.035156 0.304688 14.617188 0.5 13.109375 0.5 C 11.453125 0.5 9.910156 0.210938 8.484375 -0.359375 C 7.054688 -0.929688 5.808594 -1.707031 4.75 -2.6875 C 3.6875 -3.664063 2.839844 -4.828125 2.21875 -6.171875 C 1.601563 -7.511719 1.296875 -8.941406 1.296875 -10.453125 C 1.296875 -11.941406 1.578125 -13.347656 2.140625 -14.671875 C 2.699219 -16.003906 3.476563 -17.164063 4.46875 -18.15625 C 5.464844 -19.152344 6.625 -19.945313 7.9375 -20.53125 C 9.246094 -21.121094 10.664063 -21.421875 12.1875 -21.421875 Z M 16.921875 -12.1875 C 16.585938 -13.382813 15.980469 -14.359375 15.109375 -15.109375 C 14.242188 -15.867188 13.269531 -16.25 12.1875 -16.25 C 11.0625 -16.25 10.039063 -15.867188 9.125 -15.109375 C 8.21875 -14.359375 7.597656 -13.382813 7.265625 -12.1875 Z M 16.921875 -12.1875 "/>
22
+ </symbol>
23
+ <symbol overflow="visible" id="glyph0-6">
24
+ <path style="stroke:none;" d="M 12.71875 -20.828125 C 13.507813 -20.828125 14.378906 -20.710938 15.328125 -20.484375 C 16.285156 -20.265625 17.179688 -19.847656 18.015625 -19.234375 C 18.855469 -18.617188 19.566406 -17.761719 20.140625 -16.671875 C 20.710938 -15.578125 21 -14.164063 21 -12.4375 L 21 0 L 15.15625 0 L 15.15625 -12.21875 C 15.15625 -12.863281 15.050781 -13.410156 14.84375 -13.859375 C 14.632813 -14.304688 14.351563 -14.660156 14 -14.921875 C 13.65625 -15.191406 13.257813 -15.390625 12.8125 -15.515625 C 12.363281 -15.636719 11.914063 -15.703125 11.46875 -15.703125 C 11.101563 -15.703125 10.699219 -15.636719 10.265625 -15.515625 C 9.835938 -15.390625 9.429688 -15.183594 9.046875 -14.90625 C 8.671875 -14.625 8.355469 -14.257813 8.109375 -13.8125 C 7.859375 -13.363281 7.734375 -12.832031 7.734375 -12.21875 L 7.734375 0 L 1.9375 0 L 1.9375 -20.828125 L 6.890625 -20.828125 L 7.734375 -19.234375 C 8.398438 -19.710938 9.148438 -20.097656 9.984375 -20.390625 C 10.824219 -20.679688 11.738281 -20.828125 12.71875 -20.828125 Z M 12.71875 -20.828125 "/>
25
+ </symbol>
26
+ <symbol overflow="visible" id="glyph0-7">
27
+ <path style="stroke:none;" d="M 9.578125 -7.46875 C 9.578125 -6.488281 9.875 -5.730469 10.46875 -5.203125 C 11.070313 -4.671875 11.867188 -4.40625 12.859375 -4.40625 C 13.636719 -4.40625 14.421875 -4.5625 15.203125 -4.875 L 15.203125 0 C 14.503906 0.226563 13.757813 0.414063 12.96875 0.5625 C 12.1875 0.714844 11.402344 0.796875 10.625 0.796875 C 9.726563 0.796875 8.871094 0.679688 8.0625 0.453125 C 7.25 0.234375 6.519531 -0.144531 5.875 -0.6875 C 5.226563 -1.238281 4.714844 -1.96875 4.34375 -2.875 C 3.96875 -3.777344 3.78125 -4.910156 3.78125 -6.265625 L 3.78125 -15.671875 L 0.796875 -15.671875 L 0.796875 -19.578125 L 3.78125 -20.828125 L 3.78125 -25.5 L 9.578125 -25.5 L 9.578125 -20.828125 L 15.203125 -20.828125 L 15.203125 -15.671875 L 9.578125 -15.671875 Z M 9.578125 -7.46875 "/>
28
+ </symbol>
29
+ <symbol overflow="visible" id="glyph1-0">
30
+ <path style="stroke:none;" d="M 8.078125 -13.714844 C 7.457031 -13.796875 6.976563 -13.796875 6.277344 -13.796875 L 2 -13.796875 L 2 0 L 3.71875 0 L 3.71875 -5.636719 L 6.277344 -5.636719 C 6.976563 -5.636719 7.457031 -5.636719 8.078125 -5.71875 C 10.078125 -5.976563 11.65625 -7.378906 11.65625 -9.71875 C 11.65625 -12.058594 10.277344 -13.4375 8.078125 -13.714844 Z M 7.976563 -7.179688 C 7.597656 -7.097656 7.058594 -7.078125 6.4375 -7.078125 L 3.71875 -7.078125 L 3.71875 -12.355469 L 6.4375 -12.355469 C 7.058594 -12.355469 7.597656 -12.335938 7.976563 -12.257813 C 8.957031 -12.035156 9.816406 -11.316406 9.816406 -9.71875 C 9.816406 -8.117188 8.957031 -7.398438 7.976563 -7.179688 Z M 7.976563 -7.179688 "/>
31
+ </symbol>
32
+ <symbol overflow="visible" id="glyph1-1">
33
+ <path style="stroke:none;" d="M 11.175781 -1.398438 L 3.71875 -1.398438 L 3.71875 -13.796875 L 2 -13.796875 L 2 0 L 11.175781 0 Z M 11.175781 -1.398438 "/>
34
+ </symbol>
35
+ <symbol overflow="visible" id="glyph1-2">
36
+ <path style="stroke:none;" d="M 12.238281 -13.796875 L 10.515625 -13.796875 L 10.515625 -5.257813 C 10.515625 -4.820313 10.515625 -4.398438 10.476563 -4.039063 C 10.316406 -2.300781 9.175781 -1.078125 7.058594 -1.078125 C 4.9375 -1.078125 3.800781 -2.300781 3.640625 -4.039063 C 3.597656 -4.398438 3.597656 -4.820313 3.597656 -5.257813 L 3.597656 -13.796875 L 1.878906 -13.796875 L 1.878906 -5.097656 C 1.878906 -4.660156 1.878906 -4.257813 1.917969 -3.859375 C 2.121094 -1.558594 3.679688 0.28125 7.058594 0.28125 C 10.4375 0.28125 11.996094 -1.558594 12.195313 -3.859375 C 12.238281 -4.257813 12.238281 -4.660156 12.238281 -5.097656 Z M 12.238281 -13.796875 "/>
37
+ </symbol>
38
+ <symbol overflow="visible" id="glyph1-3">
39
+ <path style="stroke:none;" d="M 7.976563 -6.660156 L 7.976563 -5.257813 L 11.195313 -5.257813 C 11.195313 -2.800781 9.539063 -1.078125 7.296875 -1.078125 C 4.578125 -1.078125 2.859375 -3.519531 2.859375 -6.917969 C 2.859375 -10.257813 4.597656 -12.71875 7.417969 -12.71875 C 9.71875 -12.71875 10.9375 -11.378906 11.335938 -9.398438 L 11.378906 -9.199219 L 13.097656 -9.199219 L 13.078125 -9.398438 C 12.796875 -12.097656 10.957031 -14.078125 7.457031 -14.078125 C 3.539063 -14.078125 0.941406 -11.039063 0.941406 -6.839844 C 0.941406 -2.800781 3.179688 0.28125 7.199219 0.28125 C 8.777344 0.28125 9.996094 -0.238281 10.777344 -1.121094 L 11.398438 -2.398438 L 11.398438 0 L 12.917969 0 L 12.917969 -6.660156 Z M 7.976563 -6.660156 "/>
40
+ </symbol>
41
+ <symbol overflow="visible" id="glyph1-4">
42
+ <path style="stroke:none;" d="M 3.71875 0 L 3.71875 -13.796875 L 2 -13.796875 L 2 0 Z M 3.71875 0 "/>
43
+ </symbol>
44
+ <symbol overflow="visible" id="glyph1-5">
45
+ <path style="stroke:none;" d="M 12.796875 0 L 12.757813 -13.796875 L 11.078125 -13.796875 L 11.078125 -6.898438 C 11.078125 -5.277344 11.097656 -3.300781 11.136719 -1.679688 L 4.640625 -13.796875 L 2 -13.796875 L 2 0 L 3.71875 0 L 3.71875 -6.898438 C 3.71875 -8.519531 3.699219 -10.496094 3.660156 -12.117188 L 10.15625 0 Z M 12.796875 0 "/>
46
+ </symbol>
47
+ <symbol overflow="visible" id="glyph1-6">
48
+ <path style="stroke:none;" d="M 6.277344 -14.078125 C 3.738281 -14.078125 1.679688 -12.578125 1.679688 -10.199219 C 1.679688 -7.917969 3.378906 -6.9375 5.820313 -6.378906 C 8.238281 -5.820313 9.199219 -5.058594 9.199219 -3.378906 C 9.199219 -1.941406 7.917969 -1.078125 6.339844 -1.078125 C 4.539063 -1.078125 3.277344 -2.097656 2.878906 -3.917969 L 1.039063 -3.917969 C 1.339844 -1.257813 3.257813 0.28125 6.296875 0.28125 C 8.957031 0.28125 11.039063 -1.28125 11.039063 -3.699219 C 11.039063 -6.039063 9.519531 -7.277344 6.476563 -7.976563 C 4.378906 -8.457031 3.519531 -9.097656 3.519531 -10.597656 C 3.519531 -12.035156 4.679688 -12.71875 6.136719 -12.71875 C 7.878906 -12.71875 8.898438 -11.71875 9.058594 -9.976563 L 10.898438 -9.976563 C 10.636719 -12.335938 9.136719 -14.078125 6.277344 -14.078125 Z M 6.277344 -14.078125 "/>
49
+ </symbol>
50
+ </g>
51
+ <filter id="alpha" filterUnits="objectBoundingBox" x="0%" y="0%" width="100%" height="100%">
52
+ <feColorMatrix type="matrix" in="SourceGraphic" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/>
53
+ </filter>
54
+ <mask id="mask0">
55
+ <g filter="url(#alpha)">
56
+ <rect x="0" y="0" width="375" height="374.999989" style="fill:rgb(0%,0%,0%);fill-opacity:0.619608;stroke:none;"/>
57
+ </g>
58
+ </mask>
59
+ <clipPath id="clip2">
60
+ <path d="M 0.535156 18 L 46.285156 18 L 46.285156 40 L 0.535156 40 Z M 0.535156 18 "/>
61
+ </clipPath>
62
+ <clipPath id="clip3">
63
+ <path d="M 0.535156 7 L 46.285156 7 L 46.285156 16 L 0.535156 16 Z M 0.535156 7 "/>
64
+ </clipPath>
65
+ <clipPath id="clip1">
66
+ <rect width="47" height="40"/>
67
+ </clipPath>
68
+ <g id="surface12" clip-path="url(#clip1)">
69
+ <g clip-path="url(#clip2)" clip-rule="nonzero">
70
+ <path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.199097%,44.299316%,100%);fill-opacity:1;" d="M 0.535156 18.351563 L 0.535156 31.695313 C 0.535156 35.898438 3.957031 39.703125 8.160156 39.703125 L 38.660156 39.703125 C 42.863281 39.703125 46.285156 35.898438 46.285156 31.695313 L 46.285156 18.351563 Z M 6.632813 24.453125 L 14.257813 24.453125 L 14.257813 25.976563 L 6.632813 25.976563 Z M 21.882813 30.550781 L 6.632813 30.550781 L 6.632813 27.503906 L 21.882813 27.503906 Z M 21.882813 30.550781 "/>
71
+ </g>
72
+ <g clip-path="url(#clip3)" clip-rule="nonzero">
73
+ <path style=" stroke:none;fill-rule:nonzero;fill:rgb(32.199097%,44.299316%,100%);fill-opacity:1;" d="M 38.660156 7.675781 L 8.160156 7.675781 C 3.957031 7.675781 0.535156 10.726563 0.535156 15.300781 L 46.285156 15.300781 C 46.285156 10.726563 42.863281 7.675781 38.660156 7.675781 Z M 38.660156 7.675781 "/>
74
+ </g>
75
+ </g>
76
+ </defs>
77
+ <g id="surface1" style="fill: none;">
78
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
79
+ <use xlink:href="#glyph0-1" x="101.317627" y="191.696365"/>
80
+ </g>
81
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
82
+ <use xlink:href="#glyph0-2" x="123.913626" y="191.696365"/>
83
+ </g>
84
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
85
+ <use xlink:href="#glyph0-3" x="148.189629" y="191.696365"/>
86
+ </g>
87
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
88
+ <use xlink:href="#glyph0-4" x="171.751623" y="191.696365"/>
89
+ </g>
90
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
91
+ <use xlink:href="#glyph0-5" x="204.763623" y="191.696365"/>
92
+ </g>
93
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
94
+ <use xlink:href="#glyph0-6" x="228.493622" y="191.696365"/>
95
+ </g>
96
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
97
+ <use xlink:href="#glyph0-7" x="249.95562" y="191.696365"/>
98
+ </g>
99
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
100
+ <use xlink:href="#glyph1-0" x="101.317627" y="231.0585"/>
101
+ </g>
102
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
103
+ <use xlink:href="#glyph1-1" x="118.672916" y="231.0585"/>
104
+ </g>
105
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
106
+ <use xlink:href="#glyph1-2" x="135.568381" y="231.0585"/>
107
+ </g>
108
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
109
+ <use xlink:href="#glyph1-3" x="154.603002" y="231.0585"/>
110
+ </g>
111
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
112
+ <use xlink:href="#glyph1-4" x="174.197404" y="231.0585"/>
113
+ </g>
114
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
115
+ <use xlink:href="#glyph1-5" x="184.875325" y="231.0585"/>
116
+ </g>
117
+ <g style="fill:rgb(39.99939%,39.99939%,39.99939%);fill-opacity:1;">
118
+ <use xlink:href="#glyph1-6" x="204.629659" y="231.0585"/>
119
+ </g>
120
+ <use xlink:href="#surface12" transform="matrix(1,0,0,1,225,197)" mask="url(#mask0)"/>
121
+ </g>
122
+ </svg>
assets/img/multibanco.svg ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ version="1.1"
11
+ width="240.94501"
12
+ height="240.94501"
13
+ id="svg2"
14
+ xml:space="preserve"><metadata
15
+ id="metadata8"><rdf:RDF><cc:Work
16
+ rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
17
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
18
+ id="defs6"><clipPath
19
+ id="clipPath16"><path
20
+ d="m 0,192.756 192.756,0 L 192.756,0 0,0 0,192.756 z"
21
+ id="path18" /></clipPath></defs><g
22
+ transform="matrix(1.25,0,0,-1.25,0,240.945)"
23
+ id="g10"><g
24
+ id="g12"><g
25
+ clip-path="url(#clipPath16)"
26
+ id="g14"><g
27
+ transform="translate(95.7476,51.8721)"
28
+ id="g20"><path
29
+ d="m 0,0 50.442,0 c 11.518,0 11.633,12.242 10.46,18.286 -0.641,4.062 -7.544,4.028 -8.304,0 l 0,-4.716 c 0,-2.154 -1.764,-3.918 -3.919,-3.918 l -48.679,0 -3.893,0 -44.137,0 c -2.155,0 -3.918,1.764 -3.918,3.918 l 0,4.716 c -0.76,4.028 -7.663,4.062 -8.304,0 C -61.424,12.242 -61.311,0 -49.792,0 L -3.893,0 0,0 z m -35.662,117.256 73.875,0 3.903,0 c 5.465,0 9.935,-4.731 9.935,-10.514 l 0,-5.025 c 0,-7.104 -9.624,-7.077 -9.624,-0.048 l 0,2.745 c 0,1.746 -1.428,3.174 -3.175,3.174 l -77.937,0 c -1.746,0 -3.174,-1.428 -3.174,-3.174 l 0,-2.689 c 0,-7.065 -9.172,-7.015 -9.172,-0.153 l 0,5.17 c 0,5.783 4.471,10.514 9.935,10.514 l 5.434,0 z"
30
+ id="path22"
31
+ style="fill:#2a6bae;fill-opacity:1;fill-rule:evenodd;stroke:none" /></g><g
32
+ transform="translate(145.8359,111.3682)"
33
+ id="g24"><path
34
+ d="m 0,0 c 5.387,-2.534 9.106,-7.765 9.106,-13.771 0,-8.468 -7.393,-15.396 -16.431,-15.396 l -25.329,0 c -2.369,0 -4.308,1.816 -4.308,4.036 l 0,48.191 c 0,2.324 1.904,4.227 4.232,4.227 l 21.097,0 c 8.881,0 16.147,-7.259 16.147,-16.13 C 4.514,6.838 2.791,2.903 0,0 m -18.905,3.925 8.042,0 0,0.089 c 3.662,0.562 6.49,3.746 6.49,7.559 l 0,0 c 0,4.206 -3.442,7.648 -7.648,7.648 l -16.199,0 0,-39.99 20.542,0 c 4.344,0 7.898,3.554 7.898,7.898 0,4.344 -3.554,7.898 -7.898,7.898 l -3.185,0 0,0.019 -8.042,0 c -2.442,0 -4.44,1.997 -4.44,4.439 0,2.442 1.998,4.44 4.44,4.44"
35
+ id="path26"
36
+ style="fill:#424041;fill-opacity:1;fill-rule:evenodd;stroke:none" /></g><g
37
+ transform="translate(63.2998,37.0771)"
38
+ id="g28"><path
39
+ d="M 0,0 C 0,0.75 0.608,1.358 1.358,1.358 2.108,1.358 2.717,0.75 2.717,0 l 0,-7.346 0,-0.002 -0.006,0 c 0,-1.679 -0.687,-3.205 -1.792,-4.31 -1.101,-1.101 -2.624,-1.784 -4.302,-1.785 l 0,-0.006 -0.003,0 -0.002,0 0,0.006 c -1.679,0 -3.205,0.686 -4.31,1.792 -1.101,1.101 -1.784,2.624 -1.785,4.301 l -0.006,0 0,0.004 0,7.346 c 0,0.75 0.609,1.358 1.359,1.358 0.75,0 1.358,-0.608 1.358,-1.358 l 0,-7.346 0,-0.004 -0.005,0 c 0,-0.927 0.383,-1.774 1,-2.391 0.614,-0.613 1.46,-0.996 2.389,-0.996 l 0,0.005 0.002,0 0.003,0 0,-0.005 c 0.928,0 1.776,0.383 2.392,1 0.614,0.614 0.996,1.46 0.996,2.389 L 0,-7.348 0,-7.346 0,0 z"
40
+ id="path30"
41
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
42
+ transform="translate(76.1362,26.3447)"
43
+ id="g32"><path
44
+ d="M 0,0 C 0.75,0 1.358,-0.608 1.358,-1.358 1.358,-2.108 0.75,-2.717 0,-2.717 l -3.75,0 -10e-4,0 0,0.006 c -1.406,0 -2.683,0.575 -3.608,1.499 -0.92,0.922 -1.492,2.195 -1.493,3.6 l -0.005,0 0,0.004 0,8.34 c 0,0.75 0.608,1.359 1.358,1.359 0.75,0 1.358,-0.609 1.358,-1.359 l 0,-8.34 0,-0.004 -0.005,0 c 0,-0.654 0.271,-1.252 0.708,-1.689 0.434,-0.433 1.031,-0.704 1.687,-0.704 L -3.751,0 -3.75,0 0,0 z"
45
+ id="path34"
46
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
47
+ transform="translate(104.8496,87.0146)"
48
+ id="g36"><path
49
+ d="m 0,0 c 0.297,-2.791 -1.726,-5.295 -4.517,-5.591 -2.791,-0.297 -5.295,1.725 -5.591,4.517 l -4.165,38.324 -14.752,-37.473 -0.015,-0.035 -0.001,-0.004 0,-0.001 -0.041,-0.099 -0.033,-0.078 -0.008,-0.019 -0.035,-0.078 -0.022,-0.047 -0.035,-0.073 -0.017,-0.034 -0.039,-0.077 -0.014,-0.027 c -0.272,-0.513 -0.622,-0.964 -1.031,-1.343 l -0.015,-0.013 -0.076,-0.069 c -0.266,-0.236 -0.56,-0.444 -0.879,-0.623 l -0.022,-0.012 -0.096,-0.052 -0.004,-0.002 -0.089,-0.046 -0.041,-0.021 -0.057,-0.027 -0.061,-0.028 -0.053,-0.025 -0.063,-0.027 -0.055,-0.023 -0.052,-0.022 -0.047,-0.018 -0.027,-0.011 -0.043,-0.016 -0.067,-0.025 -0.039,-0.013 c -0.492,-0.172 -0.993,-0.264 -1.49,-0.282 l -0.06,-0.002 -0.072,-10e-4 -0.052,0 -0.053,0 -0.07,10e-4 -0.064,0.002 c -0.555,0.02 -1.117,0.133 -1.664,0.347 l -0.068,0.027 -0.017,0.008 -0.068,0.027 -0.066,0.029 -0.053,0.025 -0.057,0.026 -0.061,0.029 -0.035,0.018 -0.093,0.047 -0.009,0.006 -0.079,0.043 -0.045,0.024 c -0.279,0.157 -0.538,0.338 -0.777,0.539 l -0.019,0.017 c -0.057,0.049 -0.113,0.097 -0.168,0.148 l -0.003,0.004 c -0.043,0.04 -0.086,0.081 -0.127,0.122 -0.041,0.042 -0.083,0.084 -0.123,0.127 l -0.003,0.004 c -0.051,0.055 -0.1,0.11 -0.149,0.168 l -0.017,0.019 c -0.201,0.239 -0.381,0.498 -0.538,0.777 l -0.025,0.044 -0.044,0.08 -0.004,0.01 -0.048,0.091 -0.017,0.036 -0.029,0.06 -0.027,0.058 -0.024,0.053 -0.029,0.066 -0.029,0.067 -0.006,0.017 -0.028,0.068 -14.768,37.512 -4.165,-38.324 c -0.297,-2.792 -2.8,-4.814 -5.591,-4.517 -2.792,0.296 -4.814,2.8 -4.517,5.591 l 4.91,45.183 0.002,0.012 0.002,0.019 -0.002,0.001 c 0.059,0.526 0.17,1.05 0.33,1.564 0.155,0.499 0.362,0.991 0.618,1.471 1.254,2.355 3.561,4.007 6.314,4.388 l 0.01,0.002 c 0.092,0.012 0.185,0.022 0.277,0.03 0.431,0.045 0.86,0.058 1.282,0.038 l 0.02,-10e-4 0,10e-4 c 0.549,-0.026 1.063,-0.095 1.537,-0.205 2.626,-0.613 4.857,-2.44 5.907,-5.107 l 12.57,-31.927 12.569,31.927 c 1.05,2.667 3.281,4.494 5.907,5.107 0.473,0.11 0.987,0.179 1.537,0.205 l 0,-10e-4 0.02,10e-4 c 0.423,0.02 0.853,0.007 1.285,-0.038 0.091,-0.008 0.182,-0.018 0.274,-0.03 l 0.01,-0.002 c 2.753,-0.381 5.061,-2.033 6.315,-4.388 0.255,-0.48 0.463,-0.972 0.617,-1.471 0.16,-0.514 0.271,-1.037 0.33,-1.564 L -4.914,45.214 -4.912,45.195 -4.91,45.183 0,0 z"
50
+ id="path38"
51
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
52
+ transform="translate(53.3071,25.1455)"
53
+ id="g40"><path
54
+ d="m 0,0 c 0.088,-0.744 -0.445,-1.419 -1.188,-1.507 -0.745,-0.087 -1.42,0.444 -1.508,1.189 L -3.86,9.463 -8.01,-0.16 c -0.296,-0.689 -1.094,-1.007 -1.782,-0.711 -0.333,0.142 -0.579,0.403 -0.711,0.711 l 0,0 -4.15,9.623 -1.165,-9.781 c -0.088,-0.745 -0.763,-1.276 -1.507,-1.189 -0.744,0.088 -1.276,0.763 -1.188,1.507 l 1.351,11.357 c 0.088,0.742 0.54,1.351 1.187,1.685 0.085,0.045 0.174,0.084 0.264,0.118 0.035,0.014 0.069,0.026 0.105,0.037 0.115,0.036 0.249,0.066 0.4,0.086 l 0,-10e-4 0.011,10e-4 0.012,0.002 c 0.709,0.09 1.408,-0.139 1.897,-0.599 0.098,-0.093 0.191,-0.2 0.277,-0.319 0.058,-0.082 0.112,-0.167 0.158,-0.255 0.029,-0.049 0.054,-0.098 0.076,-0.151 l 3.518,-8.157 3.518,8.157 c 0.291,0.673 0.889,1.133 1.589,1.287 0.134,0.029 0.268,0.049 0.399,0.055 0.101,0.005 0.201,0.005 0.296,-0.001 l 0.009,-10e-4 0,0 c 0.033,-0.002 0.066,-0.005 0.1,-0.009 l 0.011,-0.002 -10e-4,-0.004 0.006,-10e-4 c 0.726,-0.092 1.344,-0.5 1.691,-1.085 l -10e-4,0 c 0.073,-0.122 0.132,-0.252 0.18,-0.387 0.029,-0.085 0.055,-0.173 0.074,-0.266 0.014,-0.058 0.025,-0.117 0.032,-0.178 L -1.352,11.357 0,0 z"
55
+ id="path42"
56
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
57
+ transform="translate(82.0703,24.9863)"
58
+ id="g44"><path
59
+ d="m 0,0 c 0,-0.75 -0.608,-1.358 -1.358,-1.358 -0.75,0 -1.358,0.608 -1.358,1.358 l 0,10.732 -3.865,0 c -0.75,0 -1.358,0.609 -1.358,1.359 0,0.75 0.608,1.358 1.358,1.358 l 5.223,0 5.223,0 c 0.75,0 1.358,-0.608 1.358,-1.358 0,-0.75 -0.608,-1.359 -1.358,-1.359 L 0,10.732 0,0 z"
60
+ id="path46"
61
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
62
+ transform="translate(90.5425,24.9863)"
63
+ id="g48"><path
64
+ d="m 0,0 c 0,-0.75 -0.608,-1.358 -1.358,-1.358 -0.75,0 -1.358,0.608 -1.358,1.358 l 0,12.091 c 0,0.75 0.608,1.358 1.358,1.358 0.75,0 1.358,-0.608 1.358,-1.358 L 0,0 z"
65
+ id="path50"
66
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
67
+ transform="translate(118.4063,25.1514)"
68
+ id="g52"><path
69
+ d="m 0,0 c 0.091,-0.744 -0.439,-1.422 -1.184,-1.513 -0.744,-0.091 -1.42,0.44 -1.511,1.184 l -0.478,3.836 -4.707,0 c -0.75,0 -1.358,0.608 -1.358,1.358 0,0.75 0.608,1.359 1.358,1.359 l 4.369,0 -0.124,0.996 -0.002,0.011 c -0.004,0.032 -0.007,0.064 -0.008,0.095 -0.035,0.228 -0.086,0.46 -0.157,0.694 -0.079,0.262 -0.173,0.503 -0.279,0.716 -0.539,1.077 -1.514,1.831 -2.747,1.831 l -0.013,0 0,0.005 c -0.235,0 -0.465,-0.029 -0.683,-0.082 -0.205,-0.049 -0.408,-0.126 -0.607,-0.227 -1.042,-0.531 -1.74,-1.691 -1.89,-3.027 l -0.85,-7.549 c -0.082,-0.745 -0.753,-1.282 -1.497,-1.2 -0.743,0.082 -1.28,0.753 -1.198,1.497 l 0.849,7.549 c 0.251,2.229 1.488,4.2 3.356,5.15 0.367,0.186 0.768,0.336 1.2,0.439 0.418,0.102 0.859,0.155 1.32,0.156 l 0,0.006 0.013,0 c 2.355,0 4.184,-1.376 5.166,-3.338 0.189,-0.378 0.344,-0.763 0.46,-1.152 0.104,-0.347 0.183,-0.717 0.238,-1.106 0.01,-0.042 0.018,-0.084 0.023,-0.127 L -0.939,7.55 0,0 z"
70
+ id="path54"
71
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
72
+ transform="translate(122.5645,24.9863)"
73
+ id="g56"><path
74
+ d="m 0,0 c 0,-0.75 -0.608,-1.358 -1.358,-1.358 -0.75,0 -1.359,0.608 -1.359,1.358 l 0,11.231 0,0.005 c 0,0.078 0.006,0.156 0.019,0.23 0.018,0.153 0.055,0.3 0.107,0.44 l 0.002,0.004 -0.002,10e-4 c 0.028,0.075 0.067,0.156 0.112,0.243 l 0.003,0.004 -0.003,0.001 c 0.227,0.412 0.596,0.732 1.061,0.892 0.062,0.02 0.124,0.038 0.187,0.05 0.048,0.011 0.096,0.021 0.144,0.028 l 0.011,0.002 0,0.004 c 0.091,0.013 0.2,0.019 0.325,0.016 l 0.01,0 0.024,0 0.001,0 c 0.557,-0.022 1.077,-0.28 1.436,-0.737 l 7.229,-9.219 0,8.896 c 0,0.75 0.609,1.358 1.359,1.358 0.75,0 1.358,-0.608 1.358,-1.358 l 0,-11.182 C 10.666,0.318 10.4,-0.216 9.957,-0.578 9.873,-0.646 9.78,-0.71 9.68,-0.766 9.626,-0.796 9.569,-0.823 9.511,-0.849 L 9.496,-0.855 9.493,-0.856 C 9.457,-0.873 9.42,-0.889 9.381,-0.902 l -0.004,-0.002 0,0.002 -0.001,0 -10e-4,0.001 -0.009,-0.003 C 8.873,-1.074 8.355,-1.038 7.91,-0.822 7.851,-0.797 7.793,-0.767 7.735,-0.731 7.643,-0.675 7.552,-0.606 7.466,-0.53 7.412,-0.482 7.354,-0.422 7.293,-0.349 L 7.248,-0.297 7.245,-0.294 7.246,-0.293 7.229,-0.272 0,8.945 0,0 z"
75
+ id="path58"
76
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
77
+ transform="translate(143.7793,26.3447)"
78
+ id="g60"><path
79
+ d="M 0,0 C 0.75,0 1.358,-0.608 1.358,-1.358 1.358,-2.108 0.75,-2.717 0,-2.717 l -4.002,0 -0.002,0 0,0.006 c -1.475,0 -2.815,0.604 -3.785,1.574 -0.966,0.966 -1.566,2.304 -1.568,3.778 l -0.005,0 0,0.003 0,4.086 0,0.002 0.005,0 c 10e-4,1.475 0.603,2.816 1.574,3.786 0.967,0.965 2.304,1.566 3.777,1.567 l 0,0.006 0.004,0 4.002,0 c 0.75,0 1.358,-0.609 1.358,-1.359 C 1.358,9.982 0.75,9.374 0,9.374 l -4.002,0 -0.004,0 0,0.005 c -0.723,0 -1.385,-0.3 -1.867,-0.782 -0.48,-0.48 -0.777,-1.14 -0.777,-1.865 l 0.004,0 0,-0.002 0,-4.086 0,-0.003 -0.004,0 c 0,-0.724 0.299,-1.386 0.782,-1.868 0.479,-0.479 1.139,-0.778 1.864,-0.778 L -4.004,0 -4.002,0 0,0 z"
80
+ id="path62"
81
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
82
+ transform="translate(151.6387,35.7236)"
83
+ id="g64"><path
84
+ d="m 0,0 0,-0.005 -0.002,0 -0.003,0 0,0.005 c -1.001,0 -1.912,-0.394 -2.57,-1.026 -0.647,-0.621 -1.048,-1.471 -1.049,-2.399 l 0.006,0 0,-0.002 0,-2.53 0,-0.003 -0.006,0 c 10e-4,-0.927 0.402,-1.775 1.047,-2.396 0.66,-0.633 1.571,-1.028 2.574,-1.028 l 0,0.005 0.001,0 0.004,0 0,-0.005 c 1.002,0 1.912,0.394 2.571,1.028 0.646,0.62 1.048,1.469 1.048,2.398 l -0.005,0 0,0.001 0,2.53 0,0.003 0.005,0 C 3.62,-2.496 3.219,-1.647 2.574,-1.027 1.914,-0.394 1.003,0 0,0 M -0.002,2.712 0,2.712 0,2.706 c 1.732,0 3.309,-0.683 4.452,-1.78 1.156,-1.112 1.874,-2.651 1.875,-4.35 l 0.005,0 0,-0.003 0,-2.53 0,-0.001 -0.005,0 c -0.001,-1.7 -0.719,-3.24 -1.876,-4.352 -1.142,-1.097 -2.718,-1.779 -4.449,-1.78 l 0,-0.006 -0.004,0 -0.001,0 0,0.006 c -1.732,0 -3.309,0.683 -4.452,1.781 -1.155,1.111 -1.874,2.65 -1.875,4.349 l -0.005,0 0,0.003 0,2.53 0,0.002 0.005,0 c 0.001,1.699 0.72,3.24 1.877,4.351 1.142,1.097 2.718,1.779 4.448,1.78 l 0,0.006 0.003,0 z"
85
+ id="path66"
86
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g><g
87
+ transform="translate(94.3989,35.7188)"
88
+ id="g68"><path
89
+ d="m 0,0 0,-4.602 0,-4.772 5.247,0 0.003,0 0,-0.005 c 0.466,0 0.893,0.194 1.206,0.507 0.31,0.309 0.502,0.736 0.502,1.203 l -0.004,0 0,0.002 0,0.004 0.004,0 c 0,0.438 -0.172,0.844 -0.454,1.15 l -0.052,0.05 c -0.313,0.314 -0.74,0.508 -1.203,0.508 l 0,-0.005 -0.002,0 -1.307,0 -0.004,0 -0.496,0 c -0.749,0 -1.358,0.61 -1.358,1.358 0,0.748 0.609,1.359 1.358,1.359 l 0.496,0 0.004,0 0.118,0 c 0.393,0.03 0.752,0.207 1.023,0.476 l 0.002,-0.002 0.002,0.002 c 0.294,0.295 0.478,0.7 0.478,1.144 l -0.005,0 0,10e-4 0,0.001 0,0.003 0.005,0 c 0,0.442 -0.185,0.848 -0.482,1.145 -0.294,0.294 -0.7,0.478 -1.143,0.478 L 3.938,0 3.936,0 0,0 z m -2.716,-4.602 0,5.901 0,0.001 c 0,0.192 0.04,0.375 0.111,0.54 0.073,0.177 0.181,0.336 0.315,0.467 l 0.017,0.015 -10e-4,10e-4 c 0.23,0.22 0.536,0.367 0.892,0.388 0.027,0.002 0.054,0.004 0.08,0.003 l 0,0.003 0.004,0 5.234,0 0.002,0 0,-0.006 c 1.194,0 2.279,-0.488 3.063,-1.273 0.782,-0.782 1.267,-1.863 1.268,-3.056 l 0.006,0 0,-0.003 0,-0.001 0,-10e-4 -0.006,0 c 0,-0.846 -0.246,-1.636 -0.667,-2.304 0.279,-0.177 0.538,-0.383 0.771,-0.615 0.029,-0.029 0.056,-0.06 0.083,-0.091 0.747,-0.789 1.208,-1.857 1.209,-3.03 l 0.005,0 0,-0.004 0,-0.002 -0.005,0 c 0,-1.217 -0.498,-2.323 -1.299,-3.124 -0.796,-0.796 -1.899,-1.291 -3.116,-1.292 l 0,-0.006 -0.003,0 -6.605,0 c -0.75,0 -1.358,0.609 -1.358,1.359 l 0,6.13 z"
90
+ id="path70"
91
+ style="fill:#424041;fill-opacity:1;fill-rule:nonzero;stroke:none" /></g></g></g></g></svg>
assets/img/p24.svg ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
4
+ <svg version="1.1" id="Warstwa_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
5
+ viewBox="0 0 1920 672" enable-background="new 0 0 1920 672" xml:space="preserve">
6
+ <g>
7
+ <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#D13239" points="409.6,384.9 566,384.7 560.3,420.3 429.5,545.2
8
+ 539.3,545 532.9,583.4 371.2,583.5 378,543.8 503.4,423.7 403.3,423.7 409.6,384.9 "/>
9
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#D13239" d="M238.5,324c-3.4-3.6-8.3-6.4-13.7-8.6c-5.7-2.2-12-3.8-18.2-4.9
10
+ c-7.8-1.4-15.4-2-20.8-2.2c-5-0.2-8.2-0.2-8.2-0.2l-68.4,0l-50.9,0L12.7,583.5l42.6,0l16.8-102l82.6,0.4c0,0,32.2,1.3,55-10.8
11
+ c22.8-12.1,28.9-39.6,28.9-39.6s2.5-10.2,4.6-22.6c2.3-13.7,4.6-30.1,5.8-38.8c0.5-3.8,0.8-6.2,0.8-6.2s0.6-2.8,0.6-7.2
12
+ c0.1-6.1-0.8-15.3-5.6-24.1C243.1,329.5,241.1,326.7,238.5,324z M205.7,372.6c0,0.5-3.8,22.6-8.8,48.8c-1.9,10-9.6,15.4-18.4,17.3
13
+ c-14.6,3.1-30.3,2.5-30.3,2.5l-69-0.2l15.2-91.5l62.5,0.2c0,0,4.2-0.1,10.1,0c6.7,0.1,15.6,0.4,22.9,1.4c6.3,0.8,11.3,2.1,12.9,4.1
14
+ c2.1,2.6,2.9,6,3.2,9C206.4,368.6,205.7,372.3,205.7,372.6z"/>
15
+ <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#D13239" points="778.1,308.1 819.1,308.1 773.2,583.5 732.1,583.4
16
+ 778.1,308.1 "/>
17
+ <polygon fill-rule="evenodd" clip-rule="evenodd" fill="#D13239" points="996.9,384.9 1036.2,384.8 1050.1,524.6 1110.6,384.6
18
+ 1159.1,384.7 1173.4,525.1 1233.8,384.8 1274.6,384.8 1188,583.3 1139.6,583.3 1125.6,444.3 1064.5,583.3 1016.9,583.5
19
+ 996.9,384.9 "/>
20
+ <g>
21
+ <path fill="#D13239" d="M702.4,386.5c-11.5-3.7-31.4-4.5-48.3-4.3c-16.3,0.2-23.8,1-29.9,2.3c0,0-29,4.2-45.5,24.6
22
+ c-16.5,20.4-21.4,65-21.4,65s-9.8,49.3-6.9,65.8c2.9,16.4,8,31.7,26.6,38.8c18.6,7.2,34.4,6.8,34.4,6.8s33.2,2.6,58.2-3.3
23
+ c25-5.9,38.2-23.5,38.2-23.5s5.9-7.6,10.1-16.6c4.2-9,5.5-15.3,5.7-16.1l2.6-10.7l-42.5,0.1c0,0-2.3,28.1-25.3,30.7
24
+ c-22.9,2.6-35.2,1.6-39.7,1.4c-4.4-0.2-29,0.9-27-19.7c0-0.3,0-0.7,0.1-1.3c1.1-23.4,3.7-29.5,3.7-29.5l133.5-0.4l5.7-33
25
+ C741.3,426.2,736.6,397.7,702.4,386.5z M693.5,458.9l-91.5-0.1l3.6-14.5c0,0,3.2-11.4,9.5-16.2c6.4-4.8,14.5-5.7,22.1-6.4
26
+ c7.6-0.7,27.9-2.2,44.4,1.2c5.5,1.1,10.7,4.2,12.1,8.8C696.9,442.5,693.5,458.9,693.5,458.9z"/>
27
+ <path fill="#D13239" d="M592,526.9c0,0.3-0.1,0.6-0.1,0.9C591.8,529.4,592,526.8,592,526.9z"/>
28
+ </g>
29
+ <g>
30
+ <path fill="#D13239" d="M843.8,527c0,0.3-0.1,0.6-0.1,0.9C843.7,529.5,843.8,526.9,843.8,527z"/>
31
+ <path fill="#D13239" d="M954.3,386.6c-11.5-3.7-31.4-4.5-48.3-4.3c-16.3,0.2-23.8,1-29.9,2.3c0,0-29,4.2-45.5,24.6
32
+ c-16.5,20.4-21.4,65-21.4,65s-9.8,49.3-6.9,65.8c2.9,16.4,8,31.7,26.6,38.8c18.6,7.2,34.4,6.8,34.4,6.8s33.2,2.6,58.2-3.3
33
+ c25-5.9,38.2-23.5,38.2-23.5s5.9-7.6,10.1-16.6c4.2-9,5.5-15.3,5.7-16.1l2.6-10.7l-42.5,0.1c0,0-2.3,28.1-25.3,30.7
34
+ c-22.9,2.6-35.2,1.6-39.7,1.5c-4.4-0.2-29,0.8-27-19.7c0-0.3,0-0.7,0.1-1.3c1.1-23.4,3.7-29.5,3.7-29.5l133.5-0.4l5.7-33
35
+ C993.2,426.3,988.5,397.7,954.3,386.6z M945,458.9l-91.5-0.1l3.6-14.5c0,0,3.2-11.4,9.5-16.2c6.3-4.8,14.5-5.7,22.1-6.4
36
+ c7.6-0.7,27.9-2.2,44.4,1.2c5.5,1.1,10.7,4.2,12.1,8.8C948.4,442.4,945,458.9,945,458.9z"/>
37
+ </g>
38
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#D13239" d="M1321.8,384.9l26.3,145.2l74.3-145.3l41.8,0.4l-107.1,207.5
39
+ c0,0-19.4,37.6-31.4,47.1c-12,9.5-19.4,13.8-29.2,14.8c-9.8,1-13.8,1.7-23.2,0l-10-1.8l6.2-37.1c0,0,16.6,3.1,26.4-0.8
40
+ c9.9-3.9,17.8-20.7,17.8-20.7l5-8.4l-38.7-201L1321.8,384.9L1321.8,384.9z"/>
41
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M1479.4,404.6l43.1,0.1l2.6-16.7c0,0,4.6-30.2,14.9-36
42
+ c3.3-1.9,8.6-3.6,14.7-4.7c11.3-2,25.6-2.2,37.3-1.8c17.9,0.6,24.7,0.8,42.9,2.9c18.2,2.1,13.6,19.7,13.6,19.7l-3.6,26.3
43
+ c0,0-1.6,11.8-5.8,19.1c-3.7,6.5-13.9,10.9-19.8,12.8c-14.2,4.6-62.8,17-62.8,17l-38.2,11c0,0-23.5,6.8-36.6,21.3
44
+ c-13.2,14.6-18.4,31.1-20.2,39.7c-1.8,8.6-11.9,68.1-11.9,68.1l206.2,0.1l6.9-41.2l-163.1,0.2l2.9-16.8c0,0,1.9-17.3,8.9-23
45
+ c2.2-1.8,3.3-4.2,16.3-8.8c7.8-2.8,34.4-9.9,34.4-9.9l61.5-16.8c0,0,33.6-8.6,46.8-27c13.2-18.3,18.3-53.4,18.3-53.4
46
+ s3.6-34.1,0.8-44.8c-2.7-10.7-12.8-23.5-25.1-29c-12.3-5.5-25.1-8.7-62.2-8.2c-37.1,0.5-55.5,2.2-74.3,9.2
47
+ c-18.8,6.9-29.7,19.5-36.6,37.3C1483.8,368.2,1479.4,404.6,1479.4,404.6L1479.4,404.6z"/>
48
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M1867.6,481.2l28.9-173.2l-51.2,0l-159.4,171.2l-7.2,43.4l139.4,0
49
+ l-10.2,60.8l42.8,0.1l10.1-60.9l39.5,0.1l7.1-41.5L1867.6,481.2z M1825,481.3l-90.1-0.1l109.7-116.9L1825,481.3z"/>
50
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M328.9,330.8h131.3c0,0,29.4-23.8,50.3-39.1
51
+ c20.9-15.3,58.9-39.4,58.9-39.4l-74.2-34.7c0,0-62.7,38.8-89.3,57.1C380.1,291.6,328.9,330.8,328.9,330.8L328.9,330.8z"/>
52
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M611.1,227.8l-60.9-41c0,0,55.1-31.3,128.4-60.5
53
+ c73.2-29.2,112.3-41.4,112.3-41.4l12.4,58.1c0,0-70.5,23.6-110.9,42.7C650.6,203.5,611.1,227.8,611.1,227.8L611.1,227.8z"/>
54
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M848.3,130.3l-10.6-59.5c0,0,75.2-20,144-32.8
55
+ c68.9-12.8,160.2-18.9,160.2-18.9l-30.2,91.9c0,0-80.3-11-155.7-0.7C897.3,117.3,848.3,130.3,848.3,130.3L848.3,130.3z"/>
56
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M1159.5,118.8l50.8-102.1c0,0,111.3-2.2,207.3,12.7
57
+ c96,14.8,183.8,37.6,181.9,38.6l-243.4,127.3c0,0-56.9-36-127.5-58.1C1188.6,125.4,1159.5,118.8,1159.5,118.8L1159.5,118.8z"/>
58
+ <path fill-rule="evenodd" clip-rule="evenodd" fill="#B3B2B1" d="M1399.7,223l53.5,40.6h439.7c0,0-0.9-14.2-12.6-34.4
59
+ c-7.3-12.6-20.6-26-34.5-39.9c-5.1-5-25.3-20.8-40.5-30.7c-38.8-25.2-60.5-34.9-100.8-53.2L1399.7,223L1399.7,223z"/>
60
+ <path fill="#D13239" d="M357.4,384.7c-16.5,0-32.1,6.5-45.4,13.8l2.3-13.8h-43.7l-35,197.7h43.8l19.4-109.5
61
+ c4-22.2,20.6-49.7,53-49.7l22.6-0.1l6.8-38.4H357.4z"/>
62
+ </g>
63
+ </svg>
assets/img/sepa.svg ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="utf-8"?>
2
+ <!-- Generator: Adobe Illustrator 22.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
3
+ <svg version="1.1" id="svg10908" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
4
+ viewBox="0 0 750 205" style="enable-background:new 0 0 750 205;" xml:space="preserve">
5
+ <style type="text/css">
6
+ .st0{fill:#10298E;}
7
+ .st1{fill:#FFBE00;}
8
+ </style>
9
+ <title>sepa</title>
10
+ <path id="path5689" class="st0" d="M166.6,65.4h-51.3c0-8.4-1-14.1-3-17c-3-4.3-11.4-6.4-25.2-6.4c-13.4,0-22.3,1.2-26.6,3.7
11
+ S54,53.6,54,61.8c0,7.5,1.9,12.4,5.7,14.7c3.4,1.8,7.1,2.8,10.9,2.9L81,80.2c22.2,1.5,36,2.5,41.6,3.1c17.5,1.8,30.3,6.4,38.1,14
12
+ c6.2,5.9,9.9,13.6,11.1,23.1c0.7,6.4,1.1,12.9,1,19.3c0,16.5-1.6,28.6-4.7,36.2c-5.7,14.1-18.5,22.9-38.5,26.6
13
+ c-8.3,1.6-21.1,2.4-38.3,2.4c-28.7,0-48.8-1.7-60.1-5.1c-13.9-4.2-23-12.8-27.5-25.6C1.2,167.1,0,155.2,0,138.5h51.3v4.3
14
+ c0,8.9,2.6,14.6,7.7,17.2c4,1.9,8.4,2.8,12.8,2.8h18.9c9.6,0,15.8-0.5,18.4-1.5c4.7-1.9,7.8-4.9,9.3-9c0.9-3.2,1.3-6.5,1.2-9.9
15
+ c0-9-3.3-14.5-9.9-16.5c-2.5-0.8-13.9-1.9-34.3-3.2c-16.4-1.2-27.8-2.3-34.2-3.4c-16.8-3.1-28-9.6-33.6-19.4
16
+ C2.7,91.5,0.2,78.9,0.2,62c0-12.8,1.3-23.1,4-30.9s6.9-13.6,12.8-17.6c8.6-6.2,19.7-9.8,33.2-10.9c11.2-1,23.7-1.5,37.3-1.5
17
+ c21.5,0,36.9,1.2,46,3.7c22.3,6,33.5,22.8,33.5,50.4C167.1,57.5,166.9,60.9,166.6,65.4"/>
18
+ <path id="path5693" class="st0" d="M392.3,205V0h102.8c14.1,0,24.8,1.1,32.2,3.5c16.9,5.3,28.2,16.1,34,32.5
19
+ c3,8.6,4.5,21.5,4.5,38.8c0,20.8-1.7,35.7-5,44.8c-6.6,18-20.1,28.3-40.6,31c-2.4,0.4-12.7,0.8-30.8,1.1l-9.2,0.3h-32.8v53H392.3z
20
+ M447.5,104.5h34.4c10.9-0.4,17.5-1.2,19.9-2.5c3.2-1.8,5.5-5.4,6.5-10.8c0.8-5.3,1.2-10.6,1-16c0-8.7-0.7-15.1-2.1-19.3
21
+ c-2-5.9-6.8-9.5-14.2-10.8c-1.5-0.2-5.1-0.3-10.7-0.3h-34.8V104.5z"/>
22
+ <path id="path5697" class="st0" d="M683.6,169.5h-73.8l-9.9,35.5h-57.1L604.5,0h83.2L750,205h-55.9L683.6,169.5z M672.6,129.6
23
+ l-25.8-88.9l-25.1,88.9H672.6z"/>
24
+ <path id="path5701" class="st1" d="M316.2,28.8c21.9,0,42.6,9.9,56.4,26.9l11.9-25.5C365,11.9,339.3,1.7,312.6,1.8
25
+ c-43.5,0-80.6,26.2-95.9,63.4h-23.2l-13.7,29.3h29.8c-0.2,2.7-0.4,5.4-0.4,8.2c0,3.3,0.2,6.7,0.5,10h-15l-13.7,29.4h36.3
26
+ c15.7,36.2,52.4,61.7,95.2,61.7c20.7,0,40.9-6,58.1-17.5v-36c-26.4,30.2-72.2,33.2-102.4,6.8c-5-4.4-9.4-9.4-13-15h76l13.7-29.4
27
+ H244.2c-0.5-3.6-0.8-7.2-0.8-10.8c0-2.5,0.1-4.9,0.4-7.4h109.8l13.7-29.3h-114C266.2,42.7,290.2,28.9,316.2,28.8"/>
28
+ <path id="path5705" class="st0" d="M316.2,29.7c21.6,0,42.1,9.8,55.7,26.6l0.9,1.1l0.6-1.3l11.9-25.5l0.3-0.6l-0.5-0.4
29
+ c-36-33.7-90.5-38.2-131.5-10.7c-16.8,11.3-30,27.3-37.7,46l0.8-0.6H193l-0.2,0.5l-13.7,29.4l-0.6,1.3h31.2l-0.9-1
30
+ c-0.2,3-0.4,5.8-0.4,8.3c0,3.4,0.2,6.7,0.5,10.1l0.9-1h-15.5l-0.2,0.5l-13.7,29.4l-0.6,1.2h37.7l-0.8-0.5c16.4,37.8,54,62.2,96,62.2
31
+ c20.9,0.1,41.3-6.1,58.6-17.6l0.4-0.3V148l-1.5,1.8c-26.1,29.8-71.4,32.8-101.2,6.7c-4.9-4.3-9.2-9.3-12.8-14.8l-0.7,1.4h76.6
32
+ l0.2-0.5l13.7-29.4l0.6-1.2H244.2l0.9,0.8c-0.5-3.5-0.8-7.1-0.8-10.7c0-2.4,0.1-4.9,0.4-7.3l-0.9,0.8h110.4l0.2-0.5L368,65.6
33
+ l0.6-1.3H253.2l0.8,1.3C266.8,43.5,290.5,29.8,316.2,29.7 M253.2,66.1h114l-0.8-1.2l-13.7,29.4l0.8-0.5H242.9l-0.1,0.8
34
+ c-0.2,2.5-0.4,5-0.4,7.5c0,3.7,0.3,7.4,0.8,11l0.1,0.8H345l-0.8-1.3l-13.7,29.4l0.8-0.5h-77.7l0.9,1.4c22.2,34,67.7,43.6,101.7,21.4
35
+ c5.6-3.7,10.7-8.1,15.2-13.2l-1.5-0.6v36l0.4-0.7C353.2,197,333.1,203,312.6,203c-41.2,0-78.3-24-94.4-61.1l-0.2-0.5h-36.9l0.8,1.3
36
+ l13.7-29.4l-0.8,0.5h16l-0.1-1c-0.3-3.3-0.5-6.7-0.5-9.9c0-2.5,0.1-5.2,0.4-8.2l0.1-1h-30.8l0.8,1.2l13.7-29.3l-0.8,0.5h23.8
37
+ l0.2-0.5c7.6-18.4,20.5-34.1,37.1-45.2c40.3-27,93.9-22.6,129.2,10.5l-0.2-1l-11.9,25.5l1.5-0.2c-25.6-31.5-71.8-36.4-103.4-10.8
38
+ c-7,5.7-12.9,12.6-17.4,20.4l-0.8,1.3L253.2,66.1z"/>
39
+ </svg>
assets/img/sofort.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="svg4722" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 232.5" preserveAspectRatio="xMidYMid meet"><defs><style>.cls-1{fill:#ee7f00;}.cls-2{fill:#383a41;}</style></defs><title>sofort</title><g id="layer1"><path id="path66" class="cls-1" d="M248,0a69,69,0,0,0-29.55,6.76c-13.34,6.32-25.44,16.86-35.32,30.84A133.77,133.77,0,0,0,167,69c-8.11,22.22-8,40.24.27,52.12,4.71,6.71,14.48,14.73,34.35,14.75h.08c36.2,0,63.23-23.73,80.34-70.53,4.52-12.38,10.49-35.49-.41-51.08C275,4.8,263.73,0,248,0ZM466.48,0a69,69,0,0,0-29.54,6.76c-13.35,6.32-25.44,16.86-35.32,30.84A133.39,133.39,0,0,0,385.4,69c-8.12,22.22-8,40.24.28,52.12,4.69,6.71,14.46,14.73,34.35,14.75h.06c36.21,0,63.24-23.73,80.34-70.53C505,52.93,510.92,29.82,500,14.23,493.43,4.8,482.17,0,466.48,0ZM131.78,1.88c-11.92,0-23.49,0-33.86,5.26S78.4,22.93,71.35,44a42.11,42.11,0,0,0-2.44,11.82,17.78,17.78,0,0,0,1.77,8.79A25.67,25.67,0,0,0,78.05,73a36.25,36.25,0,0,0,11.22,5.67l5,1.42c2.63.76,5.71,1.66,7.66,2.25a15.94,15.94,0,0,1,3.53,1.49,7.18,7.18,0,0,1,2.81,2.84,6.24,6.24,0,0,1,.67,2.72,9,9,0,0,1-.52,3.16,8.61,8.61,0,0,1-5.24,5.83c-2.78,1.13-6.88,1.49-13.11,1.53H12.29L0,133.65H83.23c7.83,0,22.15,0,35.91-5.85s27-17.52,32.54-40.9c2.1-8.79,1.45-16-2-21.57S140,55.63,130.9,53l-4.43-1.28-6.54-1.88a8.73,8.73,0,0,1-5.18-3.73,7.31,7.31,0,0,1-.77-5.91A8.6,8.6,0,0,1,118.29,35a17.48,17.48,0,0,1,8.42-1.88h48.38c.34-.49.65-1,1-1.52A107,107,0,0,1,207.34,1.88Zm217.45,0c-21.52,0-37.55,10.89-45.12,31.28L267.54,133.65H307.6L326.4,82l35.41,0,10.07-27.67-35.29,0,5.68-16a8.47,8.47,0,0,1,8.16-5.16l41.75,0c.35-.5.66-1,1-1.53C402,19.14,414.53,9,426.24,1.88ZM535.11,2l-48,131.78h40.75l17.44-46.38c.85,1.91,11.14,46.38,11.14,46.38h42.85s-7.79-32.68-13.52-45.88a73.16,73.16,0,0,0-5.07-10.38c12.1-4.49,29.64-14.15,36.91-33.71,4.46-12,4.2-21.75-.76-28.88C610.86,6.23,598.63,2,579.47,2ZM618.7,2a32.59,32.59,0,0,1,6.65,7c4.74,6.83,6.56,15,5.47,24.26h24.27L618.52,133.76h36.54l36.6-100.51h47L750,2ZM562,29.16h6.73c12.3,0,16.88,3.61,12.72,14.83-3.91,10.54-10.94,17-24.3,17h-7L562,29.16Zm-323.53.65h0c12.51,0,15.38,7.28,4.39,37.35h0c-11.3,30.91-19.49,38.69-31.83,38.69h0c-12,0-16.24-7.62-5-38.38,8.4-23,19.28-37.66,32.44-37.66Zm218.44,0h0c12.51,0,15.39,7.28,4.39,37.35-11.29,30.91-19.49,38.69-31.82,38.69h0c-12,0-16.22-7.62-5-38.38,8.39-23,19.27-37.66,32.43-37.66Z"/><path id="path98" class="cls-2" d="M39.62,147.61A9.86,9.86,0,0,0,33.86,149a10.36,10.36,0,0,0-3.23,5c-.83,2.3-1,3.89-.38,4.8s2.16,1.36,4.76,1.36,4.53-.46,5.8-1.42A10.36,10.36,0,0,0,44,153.78c.85-2.33,1-3.93.42-4.83S42.25,147.61,39.62,147.61Zm22.1,0c-2.6,0-4.53.47-5.79,1.39a10.42,10.42,0,0,0-3.21,5c-.83,2.3-1,3.89-.4,4.8s2.14,1.36,4.74,1.36,4.52-.46,5.82-1.42a10.46,10.46,0,0,0,3.22-4.95c.84-2.33,1-3.93.39-4.83S64.31,147.61,61.72,147.61Zm412.47,17.15a35.45,35.45,0,0,0-8.95,1.15,30.25,30.25,0,0,0-8.25,3.52,29.08,29.08,0,0,0-6.86,5.91,26.88,26.88,0,0,0-4.75,8.27,18.26,18.26,0,0,0-1.34,7,11.76,11.76,0,0,0,1.3,5.08,11.92,11.92,0,0,0,3.09,3.69,28,28,0,0,0,4.1,2.75c1.46.81,2.88,1.59,4.27,2.31a19,19,0,0,1,3.57,2.33,6.87,6.87,0,0,1,2.13,2.82,5.27,5.27,0,0,1-.17,3.82,12.17,12.17,0,0,1-2,3.49,12,12,0,0,1-3,2.63,14.53,14.53,0,0,1-3.86,1.64,17.21,17.21,0,0,1-4.56.59,19.57,19.57,0,0,1-6.19-.84,20.25,20.25,0,0,1-6.79-3.69,2.93,2.93,0,0,0-1.71-.83,1.9,1.9,0,0,0-1,.28,3.06,3.06,0,0,0-.95.93,10.1,10.1,0,0,0-.95,1.72c-.33.7-.69,1.59-1.06,2.62a18.72,18.72,0,0,0-1,3.57,2.79,2.79,0,0,0,.25,1.9,6.21,6.21,0,0,0,1.6,1.52,14.75,14.75,0,0,0,3.11,1.64,27.14,27.14,0,0,0,4.64,1.34,30.58,30.58,0,0,0,6.1.55,38,38,0,0,0,9.88-1.31,34.33,34.33,0,0,0,9.11-3.92,31.82,31.82,0,0,0,7.58-6.5,29,29,0,0,0,5.21-9.05,17.51,17.51,0,0,0,1.28-6.84,11.58,11.58,0,0,0-1.35-5.06,12,12,0,0,0-3.16-3.7,32.08,32.08,0,0,0-4.15-2.75c-1.46-.81-2.9-1.57-4.32-2.3a20.51,20.51,0,0,1-3.67-2.33,6.71,6.71,0,0,1-2.17-2.82,5.39,5.39,0,0,1,.19-3.78,10.66,10.66,0,0,1,1.55-2.78,9.63,9.63,0,0,1,2.43-2.24,12.4,12.4,0,0,1,3.23-1.47,14.39,14.39,0,0,1,4-.53,15.5,15.5,0,0,1,4.86.68,18.05,18.05,0,0,1,3.53,1.52,22.62,22.62,0,0,1,2.42,1.54,2.91,2.91,0,0,0,1.52.71,1.64,1.64,0,0,0,1-.31,3.18,3.18,0,0,0,.87-1,13.4,13.4,0,0,0,.85-1.67c.29-.66.63-1.49,1-2.47s.57-1.62.74-2.2a10.11,10.11,0,0,0,.37-1.47,3.8,3.8,0,0,0,0-.93,2.1,2.1,0,0,0-.37-.86,5,5,0,0,0-1.61-1.27,17.4,17.4,0,0,0-3.1-1.37,25.7,25.7,0,0,0-4-.95,28,28,0,0,0-4.52-.35Zm210,0a46.76,46.76,0,0,0-14.89,2.38A47.4,47.4,0,0,0,656,174a51.92,51.92,0,0,0-10.83,10.87,56.71,56.71,0,0,0-7.68,14.44,40.36,40.36,0,0,0-2.78,13.92,19,19,0,0,0,2.76,10.42,17.19,17.19,0,0,0,8.13,6.52,34.19,34.19,0,0,0,13.21,2.25c1.79,0,3.59-.08,5.42-.25s3.68-.42,5.54-.76,3.68-.74,5.47-1.21,3.31-.92,4.57-1.36a6.47,6.47,0,0,0,2.83-1.8,8.82,8.82,0,0,0,1.49-2.66l9.48-26a5.92,5.92,0,0,0,.39-1.8,2.58,2.58,0,0,0-.24-1.34,1.81,1.81,0,0,0-.81-.83,2.8,2.8,0,0,0-1.34-.29H669.53a1.71,1.71,0,0,0-.91.29,3.78,3.78,0,0,0-.92.86,9.1,9.1,0,0,0-.94,1.54,22.49,22.49,0,0,0-1,2.37,10.82,10.82,0,0,0-.91,3.87c.07.76.4,1.14,1,1.14h12.39l-5.53,15.17a23.09,23.09,0,0,1-4.59,1.52,22.28,22.28,0,0,1-4.58.5,18.87,18.87,0,0,1-7.79-1.46,10.26,10.26,0,0,1-4.86-4.36,13.85,13.85,0,0,1-1.57-7.14,30.73,30.73,0,0,1,2.1-9.89,39,39,0,0,1,4.87-9.33,34.87,34.87,0,0,1,6.82-7.23,30.4,30.4,0,0,1,8.27-4.65,28.48,28.48,0,0,1,16.68-.73,29.39,29.39,0,0,1,5.07,2,21.07,21.07,0,0,1,3.17,2,3.37,3.37,0,0,0,1.8.91,1.77,1.77,0,0,0,.87-.25,3.52,3.52,0,0,0,.88-.89,11.68,11.68,0,0,0,1-1.7,23,23,0,0,0,1-2.52,19.26,19.26,0,0,0,1.08-3.82,3,3,0,0,0-.25-2,6.4,6.4,0,0,0-1.79-1.68,16.4,16.4,0,0,0-3.68-1.79,33.79,33.79,0,0,0-5.57-1.41A43.22,43.22,0,0,0,684.15,164.8Zm-413.32.81c-1.72,0-3.07,0-4.07.13a5,5,0,0,0-2.32.68,2.8,2.8,0,0,0-1.15,1.6,15.72,15.72,0,0,0-.54,2.86L256.84,228a5.55,5.55,0,0,0,0,2A1.72,1.72,0,0,0,258,231a8.54,8.54,0,0,0,2.57.51c1.14.08,2.68.12,4.63.12s3.36,0,4.52-.12a11.46,11.46,0,0,0,2.88-.54,4.7,4.7,0,0,0,1.85-1.13,9.46,9.46,0,0,0,1.4-1.9l25-41.46h.1L296.28,228a4.85,4.85,0,0,0,0,2,1.66,1.66,0,0,0,1.06,1.11,8.47,8.47,0,0,0,2.57.51c1.13.08,2.66.12,4.58.12,1.71,0,3.15,0,4.29-.12a13.3,13.3,0,0,0,2.91-.51,5.3,5.3,0,0,0,2-1.11,9,9,0,0,0,1.55-2L351,171a27.78,27.78,0,0,0,1.61-3,1.79,1.79,0,0,0,.11-1.65,2,2,0,0,0-1.54-.68,32.92,32.92,0,0,0-3.41-.13c-1.59,0-2.84,0-3.75.13a8.33,8.33,0,0,0-2.19.46,3.08,3.08,0,0,0-1.28.9,11.55,11.55,0,0,0-.92,1.39l-29.66,50h-.09l5.77-49.76a5,5,0,0,0,0-1.62,1.37,1.37,0,0,0-.8-.93,6.11,6.11,0,0,0-2.06-.43c-1-.07-2.22-.1-3.84-.1s-2.75,0-3.68.13a9.47,9.47,0,0,0-2.32.46,3.56,3.56,0,0,0-1.45.93,9.14,9.14,0,0,0-1.1,1.56l-30,49.76h-.05l6.76-50.11a4.45,4.45,0,0,0,.13-1.49,1,1,0,0,0-.66-.8,5.74,5.74,0,0,0-2-.36c-.91-.05-2.15-.08-3.74-.08Zm157.78,0a29.46,29.46,0,0,0-3.25.15,14.63,14.63,0,0,0-2.19.41,3.69,3.69,0,0,0-1.35.66,2.22,2.22,0,0,0-.67.91l-22.48,61.78a1.15,1.15,0,0,0,0,.91,1.31,1.31,0,0,0,.84.65,8,8,0,0,0,1.9.41,27.12,27.12,0,0,0,3.16.15,30,30,0,0,0,3.29-.15,11.4,11.4,0,0,0,2.16-.41,3.49,3.49,0,0,0,1.34-.65,2.17,2.17,0,0,0,.65-.91l22.49-61.78a1.15,1.15,0,0,0,0-.91,1.43,1.43,0,0,0-.85-.66,8.87,8.87,0,0,0-1.87-.41,27,27,0,0,0-3.18-.15Zm-404.48,0a29.89,29.89,0,0,0-3.3.16,14.52,14.52,0,0,0-2.19.4,3.37,3.37,0,0,0-1.33.66,2.33,2.33,0,0,0-.64.91L2.2,207.53A31,31,0,0,0,0,218.47a13.51,13.51,0,0,0,2.35,7.81A13.24,13.24,0,0,0,8.94,231a31.46,31.46,0,0,0,10.51,1.54,42.32,42.32,0,0,0,12.25-1.72,35.1,35.1,0,0,0,18.45-13A42.6,42.6,0,0,0,55.84,207l14.28-39.23a1.2,1.2,0,0,0,0-.91,1.27,1.27,0,0,0-.82-.66,8.73,8.73,0,0,0-1.85-.4,25.29,25.29,0,0,0-3.11-.16,29.9,29.9,0,0,0-3.26.16,14.05,14.05,0,0,0-2.19.4,3.36,3.36,0,0,0-1.3.66,2.23,2.23,0,0,0-.64.91L42.64,207.12a26.21,26.21,0,0,1-3.17,6.15,20.61,20.61,0,0,1-4.32,4.54,18.07,18.07,0,0,1-5.22,2.81,18.28,18.28,0,0,1-5.95,1,13.26,13.26,0,0,1-5.25-.93,6.93,6.93,0,0,1-3.28-2.81,8.69,8.69,0,0,1-1-4.73,21.87,21.87,0,0,1,1.5-6.75L30,167.74a1.19,1.19,0,0,0,0-.91,1.4,1.4,0,0,0-.85-.66,9.11,9.11,0,0,0-1.87-.4,26.25,26.25,0,0,0-3.13-.16Zm490.51,0a29.69,29.69,0,0,0-3.29.16,12.37,12.37,0,0,0-2.19.4,3.49,3.49,0,0,0-1.34.66,2.31,2.31,0,0,0-.63.91l-14.48,39.78a30.81,30.81,0,0,0-2.18,10.95,13.43,13.43,0,0,0,2.33,7.81,13.27,13.27,0,0,0,6.6,4.68A31.4,31.4,0,0,0,510,232.5a42.44,42.44,0,0,0,12.26-1.71,35.11,35.11,0,0,0,18.44-13A42.46,42.46,0,0,0,546.35,207l14.29-39.23a1.11,1.11,0,0,0-.8-1.57,7.75,7.75,0,0,0-1.85-.4,25.52,25.52,0,0,0-3.11-.16,29.9,29.9,0,0,0-3.26.16,12.16,12.16,0,0,0-2.2.4,3.43,3.43,0,0,0-1.3.66,2.31,2.31,0,0,0-.63.91l-14.33,39.38a26.6,26.6,0,0,1-3.17,6.15,21.07,21.07,0,0,1-4.32,4.54,17.6,17.6,0,0,1-5.22,2.81,18.43,18.43,0,0,1-6,1,13.23,13.23,0,0,1-5.24-.94,6.88,6.88,0,0,1-3.28-2.81,8.49,8.49,0,0,1-1-4.73,21.82,21.82,0,0,1,1.49-6.75l14.06-38.62a1.15,1.15,0,0,0,0-.91,1.41,1.41,0,0,0-.84-.66,8,8,0,0,0-1.88-.4,26.13,26.13,0,0,0-3.13-.16Zm113.69.1c-1.22,0-2.23,0-3,.13a8.46,8.46,0,0,0-2,.43A4,4,0,0,0,622,167a2.23,2.23,0,0,0-.64.91l-11.18,30.69q-1.26,3.49-2.58,7.33t-2.46,7.38h0c-.12-1.35-.24-2.7-.4-4s-.31-2.72-.47-4.12-.36-2.8-.58-4.2-.43-2.82-.64-4.28l-4-23.91a18.82,18.82,0,0,0-.67-3.31,5.24,5.24,0,0,0-1.18-2.09,4.33,4.33,0,0,0-2-1.1,12,12,0,0,0-3.11-.32h-7.13a7,7,0,0,0-3.85,1.18,6.86,6.86,0,0,0-2.68,3.57L557,229.47a1.47,1.47,0,0,0-.09.91,1.17,1.17,0,0,0,.66.68,5.79,5.79,0,0,0,1.67.44,24.23,24.23,0,0,0,2.87.15,28.27,28.27,0,0,0,3-.15,9.89,9.89,0,0,0,2-.44,3.37,3.37,0,0,0,1.21-.68,2.41,2.41,0,0,0,.6-.91l12.47-34.23c.93-2.56,1.8-5.05,2.61-7.45s1.59-4.83,2.34-7.26h.1c0,2,.18,4,.39,6.15s.45,4.06.73,5.88l5.15,30.59a35.12,35.12,0,0,0,.77,4.12,7.21,7.21,0,0,0,1.18,2.52,3.88,3.88,0,0,0,1.91,1.3,10.1,10.1,0,0,0,2.94.35h5.65a7.53,7.53,0,0,0,2-.28,6.58,6.58,0,0,0,1.95-.88,8,8,0,0,0,1.63-1.51,7.15,7.15,0,0,0,1.16-2.08l21.4-58.8a1.4,1.4,0,0,0,.08-.91,1.24,1.24,0,0,0-.63-.71,4.28,4.28,0,0,0-1.64-.43,26.73,26.73,0,0,0-2.82-.13Zm-472,.21a5.69,5.69,0,0,0-3.18,1,6.29,6.29,0,0,0-2.3,3.21l-20.76,57c-.53,1.49-.54,2.56,0,3.21a2.92,2.92,0,0,0,2.44,1h32.86a2,2,0,0,0,.95-.28,3.45,3.45,0,0,0,.94-.88,9,9,0,0,0,1-1.6,23.7,23.7,0,0,0,1-2.45,22.93,22.93,0,0,0,.77-2.45,6.17,6.17,0,0,0,.2-1.6,1.34,1.34,0,0,0-.31-.88,1,1,0,0,0-.73-.27H145.57l6.71-18.46h19.77a2,2,0,0,0,.93-.25,3.21,3.21,0,0,0,.93-.84,7.67,7.67,0,0,0,.94-1.54,22.89,22.89,0,0,0,1-2.42,20.08,20.08,0,0,0,.75-2.41,5.17,5.17,0,0,0,.19-1.56,1.24,1.24,0,0,0-.32-.86,1,1,0,0,0-.73-.28H156l5.8-16h23.36a1.7,1.7,0,0,0,.92-.28,3.73,3.73,0,0,0,.93-.88,9.92,9.92,0,0,0,.95-1.6,23.11,23.11,0,0,0,1-2.4,21.7,21.7,0,0,0,.79-2.5,6.34,6.34,0,0,0,.21-1.62,1.26,1.26,0,0,0-.29-.88,1,1,0,0,0-.71-.25Zm54.86,0a5.6,5.6,0,0,0-3.16,1,6.24,6.24,0,0,0-2.31,3.21l-21.62,59.41a1.25,1.25,0,0,0,0,.91,1.3,1.3,0,0,0,.83.66,8.3,8.3,0,0,0,1.9.4,26.38,26.38,0,0,0,3.15.16,29.69,29.69,0,0,0,3.29-.16,12.68,12.68,0,0,0,2.17-.4,3.75,3.75,0,0,0,1.33-.66,2.19,2.19,0,0,0,.66-.91l9.07-24.93h4.15a8.19,8.19,0,0,1,3.5.66,5,5,0,0,1,2.15,1.95,9.18,9.18,0,0,1,1.07,3.21,43.23,43.23,0,0,1,.48,4.4l.55,14.61a2.92,2.92,0,0,0,.12,1,1.29,1.29,0,0,0,.78.71,6,6,0,0,0,1.85.38c.83.07,1.94.11,3.36.11,1.69,0,3,0,4-.11a11.32,11.32,0,0,0,2.35-.35,2.61,2.61,0,0,0,1.2-.63,2.86,2.86,0,0,0,.54-.94,5.71,5.71,0,0,0,.25-1.39,27.52,27.52,0,0,0,0-2.81L232,212.53a33.94,33.94,0,0,0-.45-4.17,15.36,15.36,0,0,0-1-3.29,8.18,8.18,0,0,0-1.53-2.44,8.51,8.51,0,0,0-2.13-1.72,32.17,32.17,0,0,0,6.33-2.53,27.42,27.42,0,0,0,5.34-3.7,25.25,25.25,0,0,0,4.21-4.82,27.78,27.78,0,0,0,3-6,19.5,19.5,0,0,0,1.35-6.91,10,10,0,0,0-1.47-5.2,10.1,10.1,0,0,0-4.07-3.56,20.27,20.27,0,0,0-6.4-1.93c-.87-.1-1.85-.18-2.94-.25s-2.49-.1-4.21-.1Zm159.74,0a5.66,5.66,0,0,0-3.17,1,6.29,6.29,0,0,0-2.3,3.21l-20.76,57c-.54,1.49-.55,2.56,0,3.21a3,3,0,0,0,2.46,1h32.86a1.92,1.92,0,0,0,.94-.28,3.31,3.31,0,0,0,.94-.88,7.93,7.93,0,0,0,1-1.6,21.51,21.51,0,0,0,1-2.45h0a22.93,22.93,0,0,0,.77-2.45,5.7,5.7,0,0,0,.19-1.6,1.24,1.24,0,0,0-.31-.88,1,1,0,0,0-.73-.27H360.17l6.72-18.46h19.76a1.91,1.91,0,0,0,.93-.25,3.11,3.11,0,0,0,.94-.84,8.16,8.16,0,0,0,.94-1.54,22.89,22.89,0,0,0,1-2.42,21.76,21.76,0,0,0,.74-2.41,5.24,5.24,0,0,0,.2-1.56,1.28,1.28,0,0,0-.32-.86,1,1,0,0,0-.73-.28H370.59l5.81-16h23.35a1.76,1.76,0,0,0,.93-.28,3.71,3.71,0,0,0,.92-.88,8.13,8.13,0,0,0,.95-1.6,22.78,22.78,0,0,0,1-2.4,23.07,23.07,0,0,0,.77-2.5,5.92,5.92,0,0,0,.21-1.62,1.26,1.26,0,0,0-.28-.88,1,1,0,0,0-.72-.25Zm-277.34,0a5.71,5.71,0,0,0-3.17,1,6.3,6.3,0,0,0-2.31,3.21l-20.76,57c-.53,1.49-.55,2.55,0,3.21a2.93,2.93,0,0,0,2.45,1h17.4a52.21,52.21,0,0,0,7.32-.48,41.43,41.43,0,0,0,6.59-1.49,36.68,36.68,0,0,0,6.12-2.58,29.57,29.57,0,0,0,5.41-3.73,29.15,29.15,0,0,0,4.47-5,27,27,0,0,0,3.27-6.32,17.19,17.19,0,0,0,1.18-6,10.54,10.54,0,0,0-1.06-4.67,8.53,8.53,0,0,0-2.91-3.26A12.18,12.18,0,0,0,113,196a22.78,22.78,0,0,0,4.65-2.13,22.21,22.21,0,0,0,4-3,23.12,23.12,0,0,0,3.15-3.81,22.6,22.6,0,0,0,2.24-4.48,16.28,16.28,0,0,0,1.17-7.38,8.34,8.34,0,0,0-2.49-5.18,13.12,13.12,0,0,0-5.92-3.06,38.87,38.87,0,0,0-9.81-1Zm5.48,10h6.72a15.49,15.49,0,0,1,4.72.55A5.25,5.25,0,0,1,113,178a4.13,4.13,0,0,1,.87,2.6,10.06,10.06,0,0,1-.67,3.54,13.78,13.78,0,0,1-1.79,3.36,12.76,12.76,0,0,1-2.71,2.78,12.29,12.29,0,0,1-3.53,1.87,15.12,15.12,0,0,1-4.86.69H92.84Zm117.78.2h6a30.89,30.89,0,0,1,3.52.16,14.76,14.76,0,0,1,2.14.39c2,.62,3.23,1.65,3.67,3.14a8.83,8.83,0,0,1-.52,5.46,14.17,14.17,0,0,1-2.11,3.84,13.29,13.29,0,0,1-3.2,3A15.21,15.21,0,0,1,222,194a18.54,18.54,0,0,1-5.2.68h-6.77ZM89.3,202.58h7.89a19.65,19.65,0,0,1,5.68.65,6.62,6.62,0,0,1,3.07,1.87,5,5,0,0,1,1.11,3,10.13,10.13,0,0,1-.71,4.07,13,13,0,0,1-2.19,3.87,13.62,13.62,0,0,1-3.21,2.82A14.23,14.23,0,0,1,97,220.6a18.29,18.29,0,0,1-4.87.57H82.54Z"/></g></svg>
assets/img/stripe_logo.svg ADDED
@@ -0,0 +1,121 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?xml version="1.0" encoding="UTF-8" standalone="no"?>
2
+ <!-- Created with Inkscape (http://www.inkscape.org/) -->
3
+
4
+ <svg
5
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
6
+ xmlns:cc="http://creativecommons.org/ns#"
7
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
8
+ xmlns:svg="http://www.w3.org/2000/svg"
9
+ xmlns="http://www.w3.org/2000/svg"
10
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
11
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
12
+ width="362"
13
+ height="151.8"
14
+ viewBox="0 0 95.779166 40.163749"
15
+ version="1.1"
16
+ id="svg5512"
17
+ inkscape:version="0.92.0 r15299"
18
+ sodipodi:docname="stripe.svg">
19
+ <defs
20
+ id="defs5506" />
21
+ <sodipodi:namedview
22
+ id="base"
23
+ pagecolor="#ffffff"
24
+ bordercolor="#666666"
25
+ borderopacity="1.0"
26
+ inkscape:pageopacity="0.0"
27
+ inkscape:pageshadow="2"
28
+ inkscape:zoom="2.2277778"
29
+ inkscape:cx="180"
30
+ inkscape:cy="74.899999"
31
+ inkscape:document-units="mm"
32
+ inkscape:current-layer="layer1"
33
+ showgrid="false"
34
+ fit-margin-top="0"
35
+ fit-margin-left="0"
36
+ fit-margin-right="0"
37
+ fit-margin-bottom="0"
38
+ units="px"
39
+ inkscape:window-width="1280"
40
+ inkscape:window-height="744"
41
+ inkscape:window-x="-4"
42
+ inkscape:window-y="-4"
43
+ inkscape:window-maximized="1" />
44
+ <metadata
45
+ id="metadata5509">
46
+ <rdf:RDF>
47
+ <cc:Work
48
+ rdf:about="">
49
+ <dc:format>image/svg+xml</dc:format>
50
+ <dc:type
51
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
52
+ <dc:title></dc:title>
53
+ </cc:Work>
54
+ </rdf:RDF>
55
+ </metadata>
56
+ <g
57
+ inkscape:label="Layer 1"
58
+ inkscape:groupmode="layer"
59
+ id="layer1"
60
+ transform="translate(24.946428,-325.0345)">
61
+ <g
62
+ id="Stripe"
63
+ transform="matrix(0.26458333,0,0,0.26458333,-38.969344,315.77409)">
64
+ <path
65
+ id="path5516"
66
+ d="m 414,113.4 c 0,-25.6 -12.4,-45.8 -36.1,-45.8 -23.8,0 -38.2,20.2 -38.2,45.6 0,30.1 17,45.3 41.4,45.3 11.9,0 20.9,-2.7 27.7,-6.5 v -20 c -6.8,3.4 -14.6,5.5 -24.5,5.5 -9.7,0 -18.3,-3.4 -19.4,-15.2 h 48.9 c 0,-1.3 0.2,-6.5 0.2,-8.9 z m -49.4,-9.5 c 0,-11.3 6.9,-16 13.2,-16 6.1,0 12.6,4.7 12.6,16 z"
67
+ class="st0"
68
+ inkscape:connector-curvature="0"
69
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
70
+
71
+ <path
72
+ id="path5518"
73
+ d="m 301.1,67.6 c -9.8,0 -16.1,4.6 -19.6,7.8 l -1.3,-6.2 h -22 v 116.6 l 25,-5.3 0.1,-28.3 c 3.6,2.6 8.9,6.3 17.7,6.3 17.9,0 34.2,-14.4 34.2,-46.1 -0.1,-29 -16.6,-44.8 -34.1,-44.8 z m -6,68.9 c -5.9,0 -9.4,-2.1 -11.8,-4.7 l -0.1,-37.1 c 2.6,-2.9 6.2,-4.9 11.9,-4.9 9.1,0 15.4,10.2 15.4,23.3 0,13.4 -6.2,23.4 -15.4,23.4 z"
74
+ class="st0"
75
+ inkscape:connector-curvature="0"
76
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
77
+
78
+ <polygon
79
+ id="polygon5520"
80
+ points="248.9,56.3 248.9,36 223.8,41.3 223.8,61.7 "
81
+ class="st0"
82
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
83
+
84
+ <rect
85
+ id="rect5522"
86
+ height="87.5"
87
+ width="25.1"
88
+ class="st0"
89
+ y="69.300003"
90
+ x="223.8"
91
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
92
+
93
+ <path
94
+ id="path5524"
95
+ d="m 196.9,76.7 -1.6,-7.4 h -21.6 v 87.5 h 25 V 97.5 c 5.9,-7.7 15.9,-6.3 19,-5.2 v -23 c -3.2,-1.2 -14.9,-3.4 -20.8,7.4 z"
96
+ class="st0"
97
+ inkscape:connector-curvature="0"
98
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
99
+
100
+ <path
101
+ id="path5526"
102
+ d="m 146.9,47.6 -24.4,5.2 -0.1,80.1 c 0,14.8 11.1,25.7 25.9,25.7 8.2,0 14.2,-1.5 17.5,-3.3 V 135 c -3.2,1.3 -19,5.9 -19,-8.9 V 90.6 h 19 V 69.3 h -19 z"
103
+ class="st0"
104
+ inkscape:connector-curvature="0"
105
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
106
+
107
+ <path
108
+ id="path5528"
109
+ d="m 79.3,94.7 c 0,-3.9 3.2,-5.4 8.5,-5.4 7.6,0 17.2,2.3 24.8,6.4 V 72.2 C 104.3,68.9 96.1,67.6 87.8,67.6 67.5,67.6 54,78.2 54,95.9 c 0,27.6 38,23.2 38,35.1 0,4.6 -4,6.1 -9.6,6.1 -8.3,0 -18.9,-3.4 -27.3,-8 v 23.8 c 9.3,4 18.7,5.7 27.3,5.7 20.8,0 35.1,-10.3 35.1,-28.2 -0.1,-29.8 -38.2,-24.5 -38.2,-35.7 z"
110
+ class="st0"
111
+ inkscape:connector-curvature="0"
112
+ style="clip-rule:evenodd;fill:#6772e5;fill-rule:evenodd" />
113
+
114
+ </g>
115
+ </g>
116
+ <style
117
+ id="style5514"
118
+ type="text/css">
119
+ .st0{fill-rule:evenodd;clip-rule:evenodd;fill:#6772E5;}
120
+ </style>
121
+ </svg>
assets/img/wechat.svg ADDED
@@ -0,0 +1 @@
 
1
+ <svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 750 212.01" preserveAspectRatio="xMidYMid meet"><defs><style>.cls-1{fill:#2e3233;}.cls-2{fill:#9de60b;}</style></defs><title>wechat</title><path class="cls-1" d="M492.35,67.19c16.29-3.93,36.11-.27,46.75,13.64,4.53,5.45,6.45,12.4,8.14,19.16-7.16.11-14.35.11-21.5.11-3.12-15.41-24.28-21.57-35.51-11-7.91,8.61-9.34,21.4-7.7,32.57,1.75,8.56,5.2,18.52,14,22.07,12.6,4.7,27.48-3.69,29.17-17.26,7.29,0,14.61,0,21.93.14-1.52,13.05-7.82,26.64-20.59,32-19.83,8.61-48.21,6-59.69-14.48,1.82-8.36,3.86-17.07,2-25.62C468.3,112.17,465,106.6,463,100.6c0-16.32,14-30.19,29.39-33.41Z"/><path class="cls-2" d="M274.09,69.57c7.84-.06,15.68-.06,23.52-.09,4.66,20.57,7.25,41.62,12.93,62,5.7-16.87,8.34-34.57,13.19-51.68,1.43-5.19,5.5-10.66,11.45-10.28,6.46-.77,10.84,5.21,12.16,10.84C352,97.15,355,114.39,360.18,131.1c5.94-20.16,9.19-40.95,13.53-61.5,7.66-.09,15.3-.09,23,0-6.41,25.79-13.66,51.36-20.23,77.11-1.62,6.41-4.43,13.73-11.3,16.1-7.77,1.77-14.82-4.41-16.7-11.62-4.84-15.45-8.35-31.32-13.12-46.82-3.84,15.41-7.77,30.78-12,46.07-1.59,6.84-7.59,13.87-15.3,12.51-7.43-.85-11.09-8.23-12.72-14.69-7-26.23-14.19-52.44-21.21-78.67Z"/><path class="cls-1" d="M552.42,69.55l21.09,0c0,7.72-.11,15.45.5,23.13,11.3.8,23.69-2.41,34.1,3.32,9,4.82,14.16,15,14.09,25.05.14,14-.05,28,0,42q-10.26.06-20.48.08c-.14-13.43.16-26.86-.06-40.29.27-4.55-3-9.3-7.64-9.82-6.82-.87-13.71-.41-20.55-.28,0,16.78,0,33.57,0,50.37q-10.54,0-21.07,0c0-31.16,0-62.3,0-93.46Zm161.6,0h20c0,7,0,14,0,21,5.34,0,10.68,0,16,0,0,5.18,0,10.39,0,15.57H733.77c.41,11.86-.89,23.86.68,35.68,3.59,4.43,9.93,3.8,15,5.23-.06,5.3-.09,10.59-.09,15.91-11.47.25-27.16,1.75-33-10.73-5.08-14.7-1.28-30.79-2.41-46-5.14,0-10.28-.07-15.41-.14,0-5.14,0-10.28,0-15.39,5.19-.06,10.37-.11,15.57-.13Q714,80,714,69.53Z"/><path class="cls-2" d="M462.37,131.69c.37-13.43-2.62-28.59-14.5-36.64-15.55-9.88-40.43-8.54-50.91,8.16-8.76,14.73-9.23,35.59,2.63,48.85C411,164.9,431.1,165.58,446,159.15c8.21-3.34,12.73-11.32,15.82-19.14q-9.81-.31-19.64-.09c-5.79,6.88-16,9.66-24.13,5.34-5.16-2.5-6.21-8.54-7.82-13.41,17.38-.27,34.77,0,52.16-.16Zm-52.69-14c2.34-7.16,8.25-13.41,16.46-12.12,8.09-1.31,13.59,5.21,15.86,12.14q-16.15.48-32.32,0Z"/><path class="cls-1" d="M695,114c-.4-12.44-11.38-22.25-23.36-23.53s-25.3-1.22-35.1,6.64c-5.2,3.77-6.86,10.25-8.2,16.18,6.11.17,12.23.19,18.36.14,3.48-10.41,17.1-11.73,25.28-6.36,3.09,2.59,2.82,7,3.7,10.56-12.81.51-26.91-2-38.29,5.41-10.84,6.37-12.82,22-6.53,32.17,4.41,6.61,13,7.84,20.37,7.82,14.64.06,29.27,0,43.91,0C695,146.65,695.45,130.3,695,114Zm-47,29.93c-1-3.59,1.08-6.87,2.27-10.07,8.13-1.84,16.5-2.09,24.84-1.91,0,5.71,0,11.39,0,17.1-9-.58-20.15,2.29-27.14-5.12Z"/><path class="cls-2" d="M145,13.23C118.42-1.72,85.33-4,56.75,6.35,38,13.11,21,25.67,10.48,42.78,1,58.21-2.61,77.45,2,95.1c4.6,19.6,18.18,36,34.72,47-3.11,9-6.18,18.09-9.07,27.2,10.46-5.43,20.79-11.09,31.21-16.62a115.88,115.88,0,0,0,39,5.53,67,67,0,0,1-2.69-31.44c2.5-14.59,10.39-27.94,21.29-37.83,18.36-17.2,44.39-24.46,69.16-22.71C181,43.51,165,24.31,145,13.23ZM73.8,54.42C72,63.31,60,67.6,53.06,61.64,45,56,47.25,41.82,56.74,39,66,35.39,76.59,44.83,73.8,54.42Zm64.49-2.58c.08,10.24-13.56,16.62-21.23,9.67-8-5.7-5.7-19.56,3.64-22.44,8.35-3.28,18.24,3.76,17.59,12.77Z"/><path class="cls-1" d="M250.61,114c-6.48-14.68-18.71-26.31-32.91-33.5a90.58,90.58,0,0,0-81.21.29c-17.37,8.93-31.86,24.9-36,44.33-3.4,14.3-.34,29.7,7.23,42.18C119,186,139.44,198,160.67,201.79c15.37,3.13,31.26,1.29,46.18-3,8.94,3.49,17,9.11,25.63,13.27q-3.33-11.26-7.17-22.36c9.71-6.94,18.56-15.55,23.89-26.38a57.19,57.19,0,0,0,1.41-49.3Zm-87.21,5.61c-2.2,6.93-12.32,9-17.18,3.73-5.38-4.88-3.29-15.1,3.76-17.27,7.84-3.3,16.85,5.71,13.42,13.54Zm51,1c-2.68,6.25-12,7.69-16.65,2.85-2.24-2-2.79-5.06-3.68-7.76,1.19-4.87,4.44-9.93,10-10.15C211.73,104.43,218.44,113.71,214.45,120.54Z"/></svg>
assets/js/admin/admin-settings.js ADDED
@@ -0,0 +1,123 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ jQuery(function($) {
2
+
3
+ function Settings() {
4
+ this.params = wc_stripe_setting_params;
5
+ this.prefix = '#' + $('#wc_stripe_prefix').val();
6
+ this.init();
7
+ }
8
+
9
+ /**
10
+ * [init description]
11
+ * @return {[type]} [description]
12
+ */
13
+ Settings.prototype.init = function() {
14
+ $('[name^="woocommerce_stripe"]').on('change', this.display_children.bind(this));
15
+
16
+ $('select.stripe-accepted-cards').on('select2:select', this.reorder_multiselect);
17
+
18
+ $('.api-register-domain').on('click', this.register_domain.bind(this));
19
+
20
+ this.display_children();
21
+ }
22
+
23
+ /**
24
+ * [display_children description]
25
+ * @param {[type]} e [description]
26
+ * @return {[type]} [description]
27
+ */
28
+ Settings.prototype.display_children = function(e) {
29
+ $('[data-show-if]').each(function(i, el) {
30
+ var $this = $(el);
31
+ var values = $this.data('show-if');
32
+ var hidden = [];
33
+ $.each(values, function(k, v) {
34
+ $key = $(this.prefix + k);
35
+ if (hidden.indexOf($this.attr('id')) == -1) {
36
+ if ($key.is(':checkbox')) {
37
+ if ($key.is(':checked') == v) {
38
+ $this.closest('tr').show();
39
+ } else {
40
+ $this.closest('tr').hide();
41
+ hidden.push($this.attr('id'));
42
+ }
43
+ } else {
44
+ if ($key.val() == v) {
45
+ $this.closest('tr').show();
46
+ } else {
47
+ $this.closest('tr').hide();
48
+ hidden.push($this.attr('id'));
49
+ }
50
+ }
51
+ } else {
52
+ $this.closest('tr').hide();
53
+ hidden.push($this.attr('id'));
54
+ }
55
+ }.bind(this));
56
+ }.bind(this));
57
+ }
58
+
59
+ /**
60
+ * [reorder_multiselect description]
61
+ * @param {[type]} e [description]
62
+ * @return {[type]} [description]
63
+ */
64
+ Settings.prototype.reorder_multiselect = function(e) {
65
+ var element = e.params.data.element;
66
+ var $element = $(element);
67
+ $element.detach();
68
+ $(this).append($element);
69
+ $(this).trigger('change');
70
+ }
71
+
72
+ /**
73
+ * [register_domain description]
74
+ * @return {[type]} [description]
75
+ */
76
+ Settings.prototype.register_domain = function(e) {
77
+ e.preventDefault();
78
+ this.block();
79
+ $.ajax({
80
+ url: this.params.routes.apple_domain,
81
+ dataType: 'json',
82
+ method: 'POST',
83
+ data: { _wpnonce: this.params.rest_nonce }
84
+ }).done(function(response) {
85
+ this.unblock();
86
+ if (response.code) {
87
+ window.alert(response.message);
88
+ } else {
89
+ window.alert(response.message);
90
+ }
91
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
92
+ this.unblock();
93
+ window.alert(errorThrown);
94
+ }.bind(this))
95
+ }
96
+
97
+ /**
98
+ * [block description]
99
+ * @param {[type]} $el [description]
100
+ * @return {[type]} [description]
101
+ */
102
+ Settings.prototype.block = function() {
103
+ $('.wc-stripe-settings-container').block({
104
+ message: null,
105
+ overlayCSS: {
106
+ background: '#fff',
107
+ opacity: 0.6
108
+ }
109
+ });
110
+ }
111
+
112
+ /**
113
+ * [unblock description]
114
+ * @param {[type]} $el [description]
115
+ * @return {[type]} [description]
116
+ */
117
+ Settings.prototype.unblock = function() {
118
+ $('.wc-stripe-settings-container').unblock();
119
+ }
120
+
121
+ new Settings();
122
+
123
+ });
assets/js/admin/googlepay.js ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function Settings() {
7
+ $(document.body).on('change', '.gpay-button-option', this.update_button.bind(this));
8
+ this.init();
9
+ }
10
+
11
+ Settings.prototype.init = function() {
12
+ this.create_payments_client();
13
+ this.update_button();
14
+ }
15
+
16
+ Settings.prototype.create_payments_client = function() {
17
+ this.paymentsClient = new google.payments.api.PaymentsClient({ environment: "TEST" });
18
+ }
19
+
20
+ /**
21
+ * @return {[type]}
22
+ */
23
+ Settings.prototype.update_button = function() {
24
+ if (this.$button) {
25
+ this.$button.remove();
26
+ }
27
+ this.$button = $(this.paymentsClient.createButton({
28
+ onClick: function() {},
29
+ buttonColor: $('.button-color').val(),
30
+ buttonType: $('.button-style').val()
31
+ }));
32
+ $('#gpay-button').append(this.$button);
33
+ }
34
+
35
+ new Settings();
36
+
37
+ }(jQuery))
assets/js/admin/help-widget.js ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ window.zESettings = {
2
+ webWidget: {
3
+ color: {
4
+ theme: '#6772e5'
5
+ },
6
+ position: { horizontal: 'right', vertical: 'bottom' },
7
+ zIndex: 9999999999,
8
+ launcher: {
9
+ label: {
10
+ 'en-US': 'Help'
11
+ }
12
+ },
13
+ contactForm: {
14
+ title: {
15
+ 'en-US': 'Contact Payment Plugins',
16
+ },
17
+ fields: [{id: '360024242873', prefill: {'*': 'Stripe'}}]
18
+ },
19
+ helpCenter: {
20
+ suppress: true
21
+ }
22
+ }
23
+ }
24
+
25
+
26
+ window.zEmbed||function(e,t){var n,o,d,i,s,a=[],r=document.createElement("iframe");window.zEmbed=function(){a.push(arguments)},window.zE=window.zE||window.zEmbed,r.src="javascript:false",r.title="",r.role="presentation",(r.frameElement||r).style.cssText="display: none",d=document.getElementsByTagName("script"),d=d[d.length-1],d.parentNode.insertBefore(r,d),i=r.contentWindow,s=i.document;try{o=s}catch(e){n=document.domain,r.src='javascript:var d=document.open();d.domain="'+n+'";void(0);',o=s}o.open()._l=function(){var o=this.createElement("script");n&&(this.domain=n),o.id="js-iframe-async",o.src=e,this.t=+new Date,this.zendeskHost=t,this.zEQueue=a,this.body.appendChild(o)},o.write('<body onload="document._l();">'),o.close()}("https://assets.zendesk.com/embeddable_framework/main.js","paymentplugins.zendesk.com");
assets/js/admin/meta-boxes-order.js ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+ /**
3
+ * @constructor
4
+ */
5
+ function MetaBox() {
6
+ this.params = wc_stripe_order_metabox_params;
7
+ this.initialize();
8
+ }
9
+
10
+ MetaBox.prototype.initialize = function() {
11
+ $(document.body).on('click', '.do-transaction-view',
12
+ this.render_charge_view.bind(this)).on('click',
13
+ '.do-api-capture', this.do_api_capture.bind(this)).on('click',
14
+ '.do-api-cancel', this.do_api_cancel.bind(this)).on('click', '.wc-stripe-pay-order', this.open_pay_order_modal.bind(this));
15
+ }
16
+
17
+ /**
18
+ * Fetch the charge view data and render the modal.
19
+ */
20
+ MetaBox.prototype.render_charge_view = function(e) {
21
+ e.preventDefault();
22
+ var $icon = $(e.target);
23
+ $icon.addClass('disabled');
24
+ if (!$icon.data('charge')) {
25
+ $.when($.ajax({
26
+ method: 'GET',
27
+ dataType: 'json',
28
+ url: this.params.routes.charge_view,
29
+ data: {
30
+ order_id: $icon.data('order'),
31
+ _wpnonce: this.params._wpnonce
32
+ }
33
+ })).done(function(response) {
34
+ if (!response.code) {
35
+ $icon.data('charge', response.data);
36
+ $icon.removeClass('disabled');
37
+ $icon.WCBackboneModal({
38
+ template: 'wc-stripe-view-transaction',
39
+ variable: response.data
40
+ });
41
+ } else {
42
+ window.alert(response.message);
43
+ }
44
+ }.bind(this)).fail(function(jqXHR, textStatus, errorThrown) {
45
+ $icon.removeClass('disabled');
46
+ window.alert(errorThrown);
47
+ }.bind(this))
48
+ } else {
49
+ $icon.WCBackboneModal({
50
+ template: 'wc-stripe-view-transaction',
51
+ variable: $icon.data('charge')
52
+ });
53
+ }
54
+ }
55
+
56
+ /**
57
+ *
58
+ */
59
+ MetaBox.prototype.do_api_capture = function(e) {
60
+ e.preventDefault();
61
+ var $modal = $('.wc-transaction-data');
62
+ this.block($modal);
63
+ $.when($.ajax({
64
+ method: 'POST',
65
+ dataType: 'json',
66
+ url: this.params.routes.capture,
67
+ data: {
68
+ _wpnonce: this.params._wpnonce,
69
+ order_id: $('#post_ID').val(),
70
+ amount: $('[name="capture_amount"]').val()
71
+ },
72
+ }).done(function(response) {
73
+ if (!response.code) {
74
+ window.location.reload();
75
+ } else {
76
+ this.unblock($modal);
77
+ window.alert(response.message);
78
+ }
79
+ }.bind(this))).fail(function(jqXHR, textStatus, errorThrown) {
80
+ this.unblock($modal);
81
+ window.alert(errorThrown);
82
+ }.bind(this));
83
+ }
84
+
85
+ /**
86
+ *
87
+ */
88
+ MetaBox.prototype.do_api_cancel = function(e) {
89
+ e.preventDefault();
90
+ var $modal = $('.wc-transaction-data');
91
+ this.block($modal);
92
+ $.when($.ajax({
93
+ method: 'POST',
94
+ dataType: 'json',
95
+ url: this.params.routes.void,
96
+ data: {
97
+ _wpnonce: this.params._wpnonce,
98
+ order_id: $('#post_ID').val()
99
+ },
100
+ }).done(function(response) {
101
+ if (!response.code) {
102
+ window.location.reload();
103
+ } else {
104
+ this.unblock($modal);
105
+ window.alert(response.message);
106
+ }
107
+ }.bind(this))).fail(function(jqXHR, textStatus, errorThrown) {
108
+ this.unblock($modal);
109
+ window.alert(errorThrown);
110
+ }.bind(this));
111
+ }
112
+
113
+ MetaBox.prototype.open_pay_order_modal = function(e) {
114
+ e.preventDefault();
115
+ $(e.target).WCStripePayOrderBackboneModal({
116
+ template: 'wc-stripe-modal-pay-order',
117
+ params: {
118
+ payment_methods: wc_stripe_order_pay_params.payment_methods,
119
+ order_id: $('#post_ID').val()
120
+ }
121
+ })
122
+ }
123
+
124
+ /**
125
+ *
126
+ */
127
+ MetaBox.prototype.block = function($el) {
128
+ $el.block({
129
+ message: null,
130
+ overlayCSS: {
131
+ background: '#fff',
132
+ opacity: 0.6
133
+ }
134
+ });
135
+ }
136
+
137
+ /**
138
+ *
139
+ */
140
+ MetaBox.prototype.unblock = function($el) {
141
+ $el.unblock();
142
+ }
143
+
144
+ new MetaBox();
145
+ }(jQuery))
assets/js/admin/modals.js ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ $.fn.WCStripePayOrderBackboneModal = function(options) {
4
+ return this.each(function() {
5
+ new $.WCStripePayOrderBackboneModal($(this), options);
6
+ })
7
+ }
8
+
9
+ $.WCStripePayOrderBackboneModal = function(element, options) {
10
+ var settings = $.extend({}, $.WCBackboneModal.defaultOptions, options);
11
+
12
+ if (settings.template) {
13
+ new $.WCStripePayOrderBackboneModal.View({
14
+ target: settings.template,
15
+ string: settings.params
16
+ });
17
+ }
18
+ }
19
+
20
+ $.WCStripePayOrderBackboneModal.View = $.WCBackboneModal.View.extend({
21
+ events: _.extend($.WCBackboneModal.View.prototype.events, {
22
+ 'click #pay-order': 'pay_order',
23
+ 'change [name="payment_type"]': 'payment_type'
24
+ }),
25
+ render: function() {
26
+ $.WCBackboneModal.View.prototype.render.apply(this, arguments);
27
+ this.$el.find('.wc-select2').select2();
28
+ this.init_card_element();
29
+ this.payment_type();
30
+ },
31
+ init_card_element: function() {
32
+ this.stripe = Stripe(wc_stripe_order_pay_params.api_key);
33
+ var elements = this.stripe.elements();
34
+ this.card = elements.create('card', {
35
+ style: {
36
+ 'base': {
37
+ 'color': '#32325d',
38
+ 'fontFamily': '"Helvetica Neue", Helvetica, sans-serif',
39
+ 'fontSmoothing': 'antialiased',
40
+ 'fontSize': '18px',
41
+ '::placeholder': {
42
+ 'color': '#aab7c4'
43
+ }
44
+
45
+ }
46
+ }
47
+ });
48
+ this.card.mount('#card-element');
49
+ },
50
+ pay_order: function(e) {
51
+ e.preventDefault();
52
+ if (!this.use_token()) {
53
+ this.stripe.createPaymentMethod('card', this.card, {
54
+ billing_details: {
55
+ name: $('#_billing_first_name').val() + ' ' + $('#_billing_last_name').val(),
56
+ email: $('#_billing_email').val(),
57
+ phone: $('#_billing_phone').val(),
58
+ address: {
59
+ city: $('#_billing_city').val(),
60
+ country: $('#_billing_country').val(),
61
+ line1: $('#_billing_address_1').val(),
62
+ line2: $('#_billing_address_2').val(),
63
+ state: $('#_billing_state').val()
64
+ }
65
+ }
66
+ }).then(function(result) {
67
+ $('[name="payment_nonce"]').val(result.paymentMethod.id);
68
+ this.api_pay_order();
69
+ }.bind(this));
70
+ } else {
71
+ this.api_pay_order()
72
+ }
73
+ },
74
+ api_pay_order: function() {
75
+ this.block();
76
+ $.ajax({
77
+ url: wc_stripe_order_metabox_params.routes.pay,
78
+ dataType: 'json',
79
+ method: 'POST',
80
+ data: $('#wc-stripe-pay-order-form').serialize(),
81
+ beforeSend: function(xhr) {
82
+ xhr.setRequestHeader('X-WP-Nonce', wc_stripe_order_metabox_params._wpnonce);
83
+ }
84
+ }).done(function(response) {
85
+ if (response.code) {
86
+ this.unblock();
87
+ this.add_messages(response.message);
88
+ } else {
89
+ window.location.href = window.location.href;
90
+ }
91
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
92
+ this.add_messages(errorThrown);
93
+ this.unblock();
94
+ }.bind(this))
95
+ },
96
+ payment_type: function(e) {
97
+ var val = this.$el.find('[name="payment_type"]:checked').val();
98
+ var show_if = '.show_if_' + val,
99
+ hide_if = '.hide_if_' + val;
100
+ this.$el.find(show_if).show();
101
+ this.$el.find(hide_if).hide();
102
+ },
103
+ block: function() {
104
+ this.$el.find('.wc-backbone-modal-content').block({
105
+ message: null,
106
+ overlayCSS: {
107
+ background: '#fff',
108
+ opacity: 0.6
109
+ }
110
+ });
111
+ },
112
+ unblock: function() {
113
+ this.$el.find('.wc-backbone-modal-content').unblock();
114
+ },
115
+ add_messages: function(messages) {
116
+ this.$el.find('.woocommerce-error').remove();
117
+ this.$el.find('form').prepend(messages);
118
+ },
119
+ use_token: function() {
120
+ return this.$el.find('[name="payment_type"]:checked').val() === 'token';
121
+ },
122
+ set_nonce: function(value) {
123
+ this.$el.find('[name="payment_nonce"]').val(value);
124
+ }
125
+ });
126
+ }(jQuery));
assets/js/frontend/applepay-cart.js ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function ApplePay() {
7
+ wc_stripe.BaseGateway.call(this, wc_stripe_applepay_cart_params);
8
+ wc_stripe.CartGateway.call(this);
9
+ this.canMakePayment().then(function() {
10
+ $(this.container).addClass('active');
11
+ }.bind(this));
12
+
13
+ }
14
+
15
+ /**
16
+ * [prototype description]
17
+ * @type {[type]}
18
+ */
19
+ ApplePay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CartGateway.prototype, wc_stripe.ApplePay.prototype);
20
+
21
+ /**
22
+ * @return {[type]}
23
+ */
24
+ ApplePay.prototype.append_button = function() {
25
+ $('#wc-stripe-applepay-container').append(this.$button);
26
+ }
27
+
28
+ /**
29
+ * @return {[type]}
30
+ */
31
+ ApplePay.prototype.updated_html = function() {
32
+ if (this.can_pay) {
33
+ this.create_button();
34
+ $(this.container).show().addClass('active');
35
+ }
36
+ }
37
+
38
+ new ApplePay();
39
+
40
+ }(jQuery, window.wc_stripe))
assets/js/frontend/applepay-checkout.js ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function ApplePay() {
7
+ wc_stripe.BaseGateway.call(this, wc_stripe_applepay_checkout_params);
8
+ wc_stripe.CheckoutGateway.call(this);
9
+ }
10
+
11
+ /**
12
+ * [prototype description]
13
+ * @type {[type]}
14
+ */
15
+ ApplePay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CheckoutGateway.prototype, wc_stripe.ApplePay.prototype);
16
+
17
+ ApplePay.prototype.canMakePayment = function() {
18
+ wc_stripe.ApplePay.prototype.canMakePayment.apply(this, arguments).then(function() {
19
+ if (this.banner_enabled()) {
20
+ var $button = $(this.params.button);
21
+ $button.addClass('banner-checkout');
22
+ $(this.banner_container).append($button);
23
+ }
24
+ }.bind(this))
25
+ }
26
+
27
+ /**
28
+ * @return {[type]}
29
+ */
30
+ ApplePay.prototype.append_button = function() {
31
+ $('#place_order').parent().append(this.$button);
32
+ this.trigger_payment_method_selected();
33
+ }
34
+
35
+ ApplePay.prototype.updated_checkout = function() {
36
+ if (this.can_pay) {
37
+ this.create_button();
38
+ $(this.container).show();
39
+ }
40
+ }
41
+
42
+ /**
43
+ * [Wrapper for main start function]
44
+ * @param {[@event]} e [description]
45
+ */
46
+ ApplePay.prototype.start = function(e) {
47
+ if ($(e.target).is('.banner-checkout')) {
48
+ this.set_payment_method(this.gateway_id);
49
+ this.set_use_new_option(true);
50
+ }
51
+ wc_stripe.ApplePay.prototype.start.apply(this, arguments);
52
+ }
53
+
54
+ new ApplePay();
55
+
56
+ }(jQuery, window.wc_stripe))
assets/js/frontend/applepay-product.js ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ function ApplePay() {
4
+ wc_stripe.BaseGateway.call(this, wc_stripe_applepay_product_params);
5
+ wc_stripe.ProductGateway.call(this);
6
+ }
7
+
8
+ /**
9
+ * [prototype description]
10
+ * @type {[type]}
11
+ */
12
+ ApplePay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.ProductGateway.prototype, wc_stripe.ApplePay.prototype);
13
+
14
+ /**
15
+ * @return {[type]}
16
+ */
17
+ ApplePay.prototype.canMakePayment = function() {
18
+ wc_stripe.ApplePay.prototype.canMakePayment.call(this).then(function() {
19
+ $('[name="quantity"]').val(0);
20
+ // Apple Pay is enable, so add to cart each time the user updates quantity.
21
+ $(document.body).on('change', '[name="quantity"]', this.add_to_cart.bind(this));
22
+ }.bind(this))
23
+ }
24
+
25
+ /**
26
+ * @param {[type]}
27
+ * @return {[type]}
28
+ */
29
+ ApplePay.prototype.start = function(e) {
30
+ if (this.get_quantity() == 0) {
31
+ e.preventDefault();
32
+ this.submit_error(this.params.messages.invalid_amount);
33
+ } else {
34
+ wc_stripe.ApplePay.prototype.start.apply(this, arguments);
35
+ }
36
+ }
37
+
38
+ /**
39
+ * @return {[type]}
40
+ */
41
+ ApplePay.prototype.append_button = function() {
42
+ $('#wc-stripe-applepay-container').append(this.$button);
43
+ }
44
+
45
+ new ApplePay();
46
+
47
+ }(jQuery, wc_stripe))
assets/js/frontend/credit-card.js ADDED
@@ -0,0 +1,296 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * Credit card class.
5
+ *
6
+ * @constructor
7
+ */
8
+ function CC() {
9
+ wc_stripe.BaseGateway.call(this, wc_stripe_credit_card_params);
10
+ wc_stripe.CheckoutGateway.call(this);
11
+ window.addEventListener('hashchange', this.hashChange.bind(this));
12
+ }
13
+
14
+ const elementClasses = {
15
+ focus: 'focused',
16
+ empty: 'empty',
17
+ invalid: 'invalid'
18
+ }
19
+
20
+ CC.prototype = $.extend({}, wc_stripe.BaseGateway.prototype,
21
+ wc_stripe.CheckoutGateway.prototype);
22
+
23
+ /**
24
+ *
25
+ */
26
+ CC.prototype.initialize = function() {
27
+ $(document.body).on('click', '#place_order', this.place_order.bind(this));
28
+ this.setup_card();
29
+ this.create_card_element();
30
+
31
+ if (this.is_add_payment_method_page() || this.get_total_price_cents() == 0) {
32
+ this.create_setup_intent().then(function(response) {
33
+ if (response.code) {
34
+ this.submit_error(response.message);
35
+ } else {
36
+ this.client_secret = response.intent.client_secret;
37
+ }
38
+ }.bind(this))
39
+ }
40
+ }
41
+
42
+ /**
43
+ *
44
+ */
45
+ CC.prototype.setup_card = function() {
46
+ if (this.is_custom_form()) {
47
+ // create individual card sections
48
+ this.cardNumber = this.elements.create('cardNumber', {
49
+ style: this.params.style,
50
+ classes: elementClasses
51
+ });
52
+ this.cardNumber.on('change', this.card_number_change.bind(this));
53
+ this.cardExpiry = this.elements.create('cardExpiry', {
54
+ style: this.params.style,
55
+ classes: elementClasses
56
+ });
57
+ this.cardCvc = this.elements.create('cardCvc', {
58
+ style: this.params.style,
59
+ classes: elementClasses
60
+ });
61
+ $(document.body).on('change', '#billing_postcode', function(e) {
62
+ var val = $('#billing_postcode').val();
63
+ $('#stripe-postal-code').val(val).trigger('keyup');
64
+ }.bind(this));
65
+ } else {
66
+ this.card = this.elements.create('card', {
67
+ value: {
68
+ postalCode: $('#billing_postcode').val()
69
+ },
70
+ style: this.params.style,
71
+ iconStyle: 'default'
72
+ });
73
+ }
74
+ // setup a timeout so CC element is always rendered.
75
+ setInterval(this.create_card_element.bind(this), 2000);
76
+ }
77
+
78
+ /**
79
+ *
80
+ */
81
+ CC.prototype.create_card_element = function() {
82
+ if (this.is_custom_form()) {
83
+ if ($('#wc-stripe-cc-custom-form').length && $('#wc-stripe-cc-custom-form').find('iframe').length == 0) {
84
+ if ($('#stripe-card-number').length) {
85
+ this.cardNumber.mount('#stripe-card-number');
86
+ $('#stripe-card-number').prepend(this.params.html.card_brand);
87
+ }
88
+ if ($('#stripe-exp').length) {
89
+ this.cardExpiry.mount('#stripe-exp');
90
+ }
91
+ if ($('#stripe-cvv').length) {
92
+ this.cardCvc.mount('#stripe-cvv');
93
+ }
94
+ if ($('#stripe-postal-code').length) {
95
+ $('#stripe-postal-code, .postalCode').on('focus', function(e) {
96
+ $('#stripe-postal-code').addClass('focused');
97
+ }.bind(this));
98
+ $('#stripe-postal-code, .postalCode').on('blur', function(e) {
99
+ $('#stripe-postal-code').removeClass('focused').trigger('keyup');
100
+ }.bind(this));
101
+ $('#stripe-postal-code').on('keyup', function(e) {
102
+ if ($('#stripe-postal-code').val() == 0) {
103
+ $('#stripe-postal-code').addClass('empty');
104
+ } else {
105
+ $('#stripe-postal-code').removeClass('empty');
106
+ }
107
+ }.bind(this))
108
+ $('#stripe-postal-code').trigger('keyup');
109
+ }
110
+ }
111
+ } else {
112
+ if ($('#wc-stripe-card-element').length) {
113
+ if ($('#wc-stripe-card-element').find('iframe').length == 0) {
114
+ this.card.mount('#wc-stripe-card-element');
115
+ this.card.update({
116
+ value: {
117
+ postalCode: $('#billing_postcode').val()
118
+ }
119
+ });
120
+ }
121
+ }
122
+ }
123
+ }
124
+
125
+ /**
126
+ *
127
+ */
128
+ CC.prototype.hashChange = function(e) {
129
+ if (this.is_gateway_selected()) {
130
+ var matches = e.newURL.match(/payment-intent=(.+):(\d+)/);
131
+ if (matches[1]) {
132
+ this.stripe.handleCardAction(matches[1]).then(function(result) {
133
+ if (result.error) {
134
+ this.payment_token_received = false;
135
+ this.submit_error(result.error.message);
136
+ return;
137
+ }
138
+ var $form = $(this.token_selector).closest('form');
139
+ $form.unblock().removeClass('processing');
140
+ $form.submit();
141
+ }.bind(this)).catch(function(error) {
142
+ this.submit_error(error.message);
143
+ }.bind(this))
144
+ return false;
145
+ }
146
+ return true;
147
+ }
148
+ return true;
149
+ }
150
+
151
+ /**
152
+ *
153
+ */
154
+ CC.prototype.place_order = function(e) {
155
+ if (this.is_gateway_selected()) {
156
+ if (this.is_add_payment_method_page() || (this.get_total_price_cents() == 0 && !this.is_saved_method_selected())) {
157
+ e.preventDefault();
158
+ this.stripe.handleCardSetup(this.client_secret, this.is_custom_form() ? this.cardNumber : this.card).then(function(result) {
159
+ if (result.error) {
160
+ this.submit_error(result.error.message);
161
+ return;
162
+ }
163
+ this.on_setup_intent_received(result.setupIntent.payment_method);
164
+ }.bind(this))
165
+ } else {
166
+ if (!this.payment_token_received &&
167
+ !this.is_saved_method_selected()) {
168
+ e.preventDefault();
169
+ this.stripe.createPaymentMethod(
170
+ 'card',
171
+ this.is_custom_form() ? this.cardNumber : this.card, {
172
+ billing_details: {
173
+ name: $('#billing_first_name').val() + ' ' + $('#billing_last_name').val(),
174
+ email: $('#billing_email').val(),
175
+ phone: $('#billing_phone').val(),
176
+ address: {
177
+ city: $('#billing_city').val(),
178
+ country: $('#billing_country').val(),
179
+ line1: $('#billing_address_1').val(),
180
+ line2: $('#billing_address_2').val(),
181
+ postal_code: this.get_postal_code(),
182
+ state: $('#billing_state').val()
183
+ }
184
+ }
185
+ }).then(function(result) {
186
+ if (result.error) {
187
+ this.submit_error(result.error.message);
188
+ return;
189
+ }
190
+ this.on_token_received(result.paymentMethod);
191
+ }.bind(this))
192
+ }
193
+ }
194
+ }
195
+ }
196
+
197
+ /**
198
+ *
199
+ */
200
+ CC.prototype.create_setup_intent = function() {
201
+ return new Promise(function(resolve, reject) {
202
+ // call intent api
203
+ $.when($.ajax({
204
+ method: 'GET',
205
+ dataType: 'json',
206
+ url: this.params.routes.setup_intent,
207
+ beforeSend: function(xhr) {
208
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce);
209
+ }.bind(this)
210
+ })).done(function(response) {
211
+ if (response.code) {
212
+ reject(response);
213
+ } else {
214
+ resolve(response);
215
+ }
216
+ }).fail(function(xhr, textStatus, errorThrown) {
217
+ this.submit_error(errorThrown);
218
+ }.bind(this));
219
+ }.bind(this))
220
+ }
221
+
222
+ /**
223
+ *
224
+ */
225
+ CC.prototype.on_token_received = function(paymentMethod) {
226
+ this.payment_token_received = true;
227
+ $(this.token_selector).val(paymentMethod.id);
228
+ $(this.token_selector).closest('form').submit();
229
+ }
230
+
231
+ /**
232
+ *
233
+ */
234
+ CC.prototype.on_setup_intent_received = function(payment_method) {
235
+ this.payment_token_received = true;
236
+ $(this.token_selector).val(payment_method);
237
+ $(this.token_selector).closest('form').submit();
238
+ }
239
+
240
+ /**
241
+ *
242
+ */
243
+ CC.prototype.updated_checkout = function() {
244
+ this.create_card_element();
245
+ }
246
+
247
+ CC.prototype.show_payment_button = function() {
248
+ wc_stripe.CheckoutGateway.prototype.show_place_order.apply(this, arguments);
249
+ }
250
+
251
+ /**
252
+ * [Leave empty so that the place order button is not hidden]
253
+ * @return {[type]} [description]
254
+ */
255
+ CC.prototype.hide_place_order = function() {
256
+
257
+ }
258
+
259
+ /**
260
+ * Returns true if a custom form is being used.
261
+ * @return {Boolean} [description]
262
+ */
263
+ CC.prototype.is_custom_form = function() {
264
+ return this.params.custom_form === "1";
265
+ }
266
+
267
+ CC.prototype.get_element_options = function() {
268
+ return this.params.elementOptions;
269
+ }
270
+
271
+ /**
272
+ * [get_postal_code description]
273
+ * @return {[type]} [description]
274
+ */
275
+ CC.prototype.get_postal_code = function() {
276
+ if (this.is_custom_form()) {
277
+ if ($('#stripe-postal-code').length > 0) {
278
+ return $('#stripe-postal-code').val();
279
+ }
280
+ return $('#billing_postcode').val();
281
+ }
282
+ return null;
283
+ }
284
+
285
+ CC.prototype.card_number_change = function(data) {
286
+ if (data.brand === "unkown") {
287
+ $('#wc-stripe-card').removeClass('active');
288
+ } else {
289
+ $('#wc-stripe-card').addClass('active');
290
+ }
291
+ $('#wc-stripe-card').attr('src', this.params.cards[data.brand]);
292
+ }
293
+
294
+ new CC();
295
+
296
+ }(jQuery, window.wc_stripe))
assets/js/frontend/form-handler.js ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function Handler() {
7
+ this.init();
8
+ }
9
+
10
+ /**
11
+ * Initialize functionality.
12
+ * @return {[type]}
13
+ */
14
+ Handler.prototype.init = function() {
15
+
16
+ // event emitted from WC checkout.js
17
+ $(document.body).on('payment_method_selected', this.payment_method_selected.bind(this));
18
+ $(document.body).on('change', '[name="payment_method"]', this.payment_method_selected.bind(this));
19
+ $(document.body).on('updated_checkout', this.updated_checkout.bind(this));
20
+ $(document.body).on('change', '.wc-stripe-payment-type', this.payment_type_change.bind(this));
21
+
22
+ this.saved_payment_methods();
23
+ }
24
+
25
+
26
+
27
+ /**
28
+ * @return {[type]}
29
+ */
30
+ Handler.prototype.payment_method_selected = function() {
31
+ var gateway = this.get_payment_method();
32
+ $(document.body).triggerHandler('wc_stripe_payment_method_selected', gateway);
33
+ }
34
+
35
+ /**
36
+ * @return {[type]}
37
+ */
38
+ Handler.prototype.updated_checkout = function() {
39
+ this.saved_payment_methods();
40
+
41
+ if ($(document.body).hasClass('woocommerce-checkout')) {
42
+ if ($('.payment_methods').width() < 475) {
43
+ $('.payment_methods').addClass('stripe-small');
44
+ }
45
+ }
46
+ }
47
+
48
+ /**
49
+ * @return {[type]}
50
+ */
51
+ Handler.prototype.payment_type_change = function() {
52
+ var gateway = this.get_payment_method();
53
+ $input = $('[name="' + gateway + '_payment_type_key"]:checked');
54
+ if ($input.length === 0 || $input.val() === "new") {
55
+ $('.wc-' + gateway + '-saved-methods-container').slideUp(400, function() {
56
+ $('.wc-' + gateway + '-new-method-container').slideDown(400);
57
+ });
58
+ $(document.body).triggerHandler('wc_stripe_new_method_' + gateway);
59
+ } else {
60
+ $('.wc-' + gateway + '-new-method-container').slideUp(400, function() {
61
+ $('.wc-' + gateway + '-saved-methods-container').slideDown(400);
62
+ });
63
+ $(document.body).triggerHandler('wc_stripe_saved_method_' + gateway);
64
+ }
65
+ }
66
+
67
+ /**
68
+ * @return {[type]}
69
+ */
70
+ Handler.prototype.saved_payment_methods = function() {
71
+ if ($().select2) {
72
+ if ($('select.wc-stripe-saved-methods').length && !$('select.wc-stripe-saved-methods').hasClass('select2-hidden-accessible')) {
73
+ $('select.wc-stripe-saved-methods').select2({
74
+ width: "100%",
75
+ templateResult: this.output_template,
76
+ templateSelection: this.output_template,
77
+ }).trigger('change');
78
+ }
79
+ }
80
+ }
81
+
82
+ /**
83
+ * @return {[type]}
84
+ */
85
+ Handler.prototype.get_payment_method = function() {
86
+ return $('[name="payment_method"]:checked').val();
87
+ }
88
+
89
+ /**
90
+ * @param {[type]}
91
+ * @return {[type]}
92
+ */
93
+ Handler.prototype.get_payment_type = function(gateway) {
94
+ return $('[name="' + gateway + '"]:checked').val();
95
+ }
96
+
97
+ /**
98
+ * @param {[type]}
99
+ * @param {[type]}
100
+ * @return {[type]}
101
+ */
102
+ Handler.prototype.output_template = function(data, container) {
103
+ var classes = $(data.element).attr('class');
104
+ $.each($(data.element).parent().find('option'), function() {
105
+ $(container).removeClass($(this).attr('class'));
106
+ })
107
+ $(container).addClass('wc-stripe-select2-container ' + classes);
108
+ $(document.body).triggerHandler('wc_stripe_payment_method_template', [data, container]);
109
+ return data.text;
110
+ }
111
+
112
+ new Handler();
113
+
114
+ }(jQuery))
assets/js/frontend/googlepay-cart.js ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function GPay() {
7
+ wc_stripe.BaseGateway.call(this, wc_stripe_googlepay_cart_params);
8
+ wc_stripe.CartGateway.call(this);
9
+ }
10
+
11
+ /**
12
+ * [prototype description]
13
+ * @type {[type]}
14
+ */
15
+ GPay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CartGateway.prototype, wc_stripe.GooglePay.prototype);
16
+
17
+ /**
18
+ * @return {[type]}
19
+ */
20
+ GPay.prototype.initialize = function() {
21
+ this.createPaymentsClient();
22
+ this.isReadyToPay().then(function() {
23
+ $(this.container).show().addClass('active');
24
+ }.bind(this))
25
+ }
26
+
27
+ /**
28
+ * @return {[type]}
29
+ */
30
+ GPay.prototype.create_button = function() {
31
+ wc_stripe.GooglePay.prototype.create_button.apply(this, arguments);
32
+ $('#wc-stripe-googlepay-container').append(this.$button);
33
+ }
34
+
35
+ /**
36
+ * @return {[type]}
37
+ */
38
+ GPay.prototype.updated_html = function() {
39
+ if (this.can_pay) {
40
+ this.create_button();
41
+ $(this.container).show().addClass('active');
42
+ }
43
+ }
44
+
45
+ /**
46
+ * @param {[type]}
47
+ * @return {[null]}
48
+ */
49
+ GPay.prototype.payment_data_updated = function(response, event) {
50
+ if (event.callbackTrigger === "SHIPPING_ADDRESS") {
51
+ $(document.body).trigger('wc_update_cart');
52
+ }
53
+ }
54
+
55
+ new GPay();
56
+
57
+ }(jQuery, window.wc_stripe))
assets/js/frontend/googlepay-checkout.js ADDED
@@ -0,0 +1,68 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * @construct
5
+ */
6
+ function GPay() {
7
+ this.can_pay = false;
8
+ wc_stripe.BaseGateway.call(this, wc_stripe_googlepay_checkout_params);
9
+ wc_stripe.CheckoutGateway.call(this);
10
+ }
11
+
12
+ /**
13
+ * [prototype description]
14
+ * @type {[type]}
15
+ */
16
+ GPay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CheckoutGateway.prototype, wc_stripe.GooglePay.prototype);
17
+
18
+ /**
19
+ * @return {[type]}
20
+ */
21
+ GPay.prototype.initialize = function() {
22
+ // create payments client
23
+ this.createPaymentsClient();
24
+ this.isReadyToPay().then(function() {
25
+ $(this.container).show();
26
+ if (this.banner_enabled()) {
27
+ var $button = $(this.paymentsClient.createButton({
28
+ onClick: this.banner_checkout.bind(this),
29
+ buttonColor: this.params.button_color,
30
+ buttonType: this.params.button_style
31
+ }));
32
+ $(this.banner_container).append($button);
33
+ }
34
+ }.bind(this))
35
+ }
36
+
37
+ /**
38
+ * @return {[type]}
39
+ */
40
+ GPay.prototype.create_button = function() {
41
+ wc_stripe.GooglePay.prototype.create_button.apply(this, arguments);
42
+ $("#place_order").parent().append(this.$button);
43
+ this.trigger_payment_method_selected();
44
+ }
45
+
46
+ /**
47
+ * @return {[type]}
48
+ */
49
+ GPay.prototype.updated_checkout = function() {
50
+ if (this.can_pay) {
51
+ $(this.container).show();
52
+ this.create_button();
53
+ }
54
+ }
55
+
56
+ /**
57
+ * [banner_checkout description]
58
+ * @return {[type]} [description]
59
+ */
60
+ GPay.prototype.banner_checkout = function() {
61
+ this.set_payment_method(this.gateway_id);
62
+ this.set_use_new_option(true);
63
+ wc_stripe.GooglePay.prototype.start.apply(this, arguments);
64
+ }
65
+
66
+ new GPay();
67
+
68
+ }(jQuery, window.wc_stripe))
assets/js/frontend/googlepay-product.js ADDED
@@ -0,0 +1,64 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ /**
4
+ * @constructor
5
+ */
6
+ function GPay() {
7
+ wc_stripe.BaseGateway.call(this, wc_stripe_googlepay_product_params);
8
+ wc_stripe.ProductGateway.call(this);
9
+ }
10
+
11
+ /**
12
+ * [prototype description]
13
+ * @type {[type]}
14
+ */
15
+ GPay.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.ProductGateway.prototype, wc_stripe.GooglePay.prototype);
16
+
17
+ /**
18
+ * @return {[type]}
19
+ */
20
+ GPay.prototype.initialize = function() {
21
+ this.createPaymentsClient();
22
+ this.isReadyToPay().then(function() {
23
+ $(this.container).show();
24
+ }.bind(this))
25
+ }
26
+
27
+ /**
28
+ * @return {[type]}
29
+ */
30
+ GPay.prototype.create_button = function() {
31
+ wc_stripe.GooglePay.prototype.create_button.apply(this, arguments);
32
+ $('#wc-stripe-googlepay-container').append(this.$button);
33
+
34
+ // check for variations
35
+ if (this.is_variable_product()) {
36
+ this.disable_payment_button();
37
+ }
38
+ }
39
+
40
+ /**
41
+ * @return {[type]}
42
+ */
43
+ GPay.prototype.get_button = function() {
44
+ return $(this.$button).find('.gpay-button');
45
+ }
46
+
47
+ /**
48
+ * @return {[type]}
49
+ */
50
+ GPay.prototype.start = function() {
51
+ if (this.get_quantity() > 0) {
52
+ this.add_to_cart().then(function(data) {
53
+ // update the line items
54
+ this.set_googlepay_display_items(data.googlepay.displayItems);
55
+ wc_stripe.GooglePay.prototype.start.apply(this, arguments);
56
+ }.bind(this))
57
+ } else {
58
+ this.submit_error(this.params.messages.invalid_amount);
59
+ }
60
+ }
61
+
62
+ new GPay();
63
+
64
+ }(jQuery, wc_stripe))
assets/js/frontend/local-payment.js ADDED
@@ -0,0 +1,139 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ var stripe = Stripe(wc_stripe_local_payment_params.api_key);
4
+
5
+ /**
6
+ * [LocalPayment description]
7
+ */
8
+ function LocalPayment(params) {
9
+ wc_stripe.BaseGateway.call(this, params);
10
+ wc_stripe.CheckoutGateway.call(this);
11
+
12
+ $(document.body).on('click', '#place_order', this.place_order.bind(this));
13
+ }
14
+
15
+ LocalPayment.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CheckoutGateway.prototype);
16
+
17
+
18
+ LocalPayment.prototype.initialize = function() {
19
+ this.mount_button();
20
+ }
21
+
22
+ /**
23
+ * [createSource description]
24
+ * @return {[type]} [description]
25
+ */
26
+ LocalPayment.prototype.createSource = function() {
27
+ return new Promise(function(resolve, reject) {
28
+ this.stripe.createSource(this.element, this.getSourceArgs()).then(function(result) {
29
+ if (result.error) {
30
+ this.submit_error(result.error.message);
31
+ } else {
32
+ this.payment_token_received = true;
33
+ $(this.token_selector).val(result.source.id);
34
+ $(this.container).closest('form').submit();
35
+ }
36
+ resolve();
37
+ }.bind(this)).catch(function(e) {
38
+ this.submit_error(e.message);
39
+ }.bind(this))
40
+ }.bind(this));
41
+ }
42
+
43
+ LocalPayment.prototype.place_order = function(e) {
44
+ if (this.is_gateway_selected()) {
45
+ if (!this.payment_token_received) {
46
+ e.preventDefault();
47
+ this.createSource();
48
+ }
49
+ }
50
+ }
51
+
52
+ LocalPayment.prototype.updated_checkout = function() {
53
+ if (this.payment_token_received) {
54
+ this.show_place_order();
55
+ }
56
+ }
57
+
58
+ LocalPayment.prototype.show_payment_button = function() {
59
+ this.show_place_order();
60
+ }
61
+
62
+ /**
63
+ * [Leave empty so that the place order button is not hidden]
64
+ * @return {[type]} [description]
65
+ */
66
+ LocalPayment.prototype.hide_place_order = function() {
67
+
68
+ }
69
+
70
+ LocalPayment.prototype.show_place_order = function() {
71
+ wc_stripe.CheckoutGateway.prototype.show_place_order.apply(this, arguments);
72
+ if (this.payment_token_received) {
73
+ $('#place_order').text($('#place_order').data('value'));
74
+ }
75
+ }
76
+
77
+ LocalPayment.prototype.getSourceArgs = function() {
78
+ return {
79
+ type: this.params.local_payment_type,
80
+ amount: this.get_total_price_cents(),
81
+ currency: this.get_currency(),
82
+ owner: {
83
+ name: this.get_customer_name('#billing')
84
+ },
85
+ redirect: {
86
+ return_url: this.params.return_url
87
+ }
88
+ }
89
+ }
90
+
91
+ LocalPayment.prototype.updated_checkout = function() {
92
+ this.mount_button()
93
+ }
94
+
95
+ LocalPayment.prototype.mount_button = function() {
96
+ var id = '#wc_stripe_local_payment_' + this.gateway_id;
97
+ if ($(id).length) {
98
+ $(id).empty();
99
+ if (!this.element) {
100
+ this.element = this.elements.create(this.elementType, this.params.element_params);
101
+ }
102
+ this.element.mount(id);
103
+ }
104
+
105
+ }
106
+
107
+ /*********** iDEAL ***********/
108
+ function IDEAL(params) {
109
+ this.elementType = 'idealBank';
110
+ LocalPayment.call(this, params);
111
+ }
112
+
113
+ /******* Sepa *******/
114
+ function Sepa() {
115
+ this.elementType = 'iban';
116
+ LocalPayment.call(this, params);
117
+ }
118
+
119
+ IDEAL.prototype = $.extend({}, LocalPayment.prototype, IDEAL.prototype);
120
+
121
+ Sepa.prototype = $.extend({}, LocalPayment.prototype, Sepa.prototype);
122
+
123
+ /**
124
+ * Local payment types that require JS integration
125
+ * @type {Object}
126
+ */
127
+ const types = {
128
+ 'ideal': IDEAL,
129
+ 'sepa_debit': Sepa
130
+ }
131
+
132
+ for (var i in wc_stripe_local_payment_params.gateways) {
133
+ var params = wc_stripe_local_payment_params.gateways[i];
134
+ if (types[params.local_payment_type]) {
135
+ new types[params.local_payment_type](params);
136
+ }
137
+ }
138
+
139
+ }(jQuery, window.wc_stripe))
assets/js/frontend/notices.js ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($) {
2
+
3
+ /**
4
+ * [Notice description]
5
+ */
6
+ function Notice() {
7
+ this.params = wc_stripe_notices_params;
8
+ this.container = this.params.container;
9
+ this.notices = this.params.notices;
10
+ this.display_notices();
11
+ }
12
+
13
+ /**
14
+ * [display_notice description]
15
+ * @return {[type]} [description]
16
+ */
17
+ Notice.prototype.display_notices = function() {
18
+ for (var i = 0; i < this.notices.length; i++) {
19
+ $(this.container).prepend(this.notices[i]);
20
+ }
21
+ }
22
+
23
+ new Notice();
24
+
25
+ }(jQuery))
assets/js/frontend/payment-request.js ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function($, wc_stripe) {
2
+
3
+ // Product page functionality
4
+ if ($(document.body).is('.single-product')) {
5
+ /**
6
+ * [PaymentRequest description]
7
+ */
8
+ function PaymentRequest() {
9
+ wc_stripe.BaseGateway.call(this, wc_stripe_payment_request_params);
10
+ wc_stripe.ProductGateway.call(this);
11
+ }
12
+
13
+ PaymentRequest.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.ProductGateway.prototype, wc_stripe.PaymentRequest.prototype);
14
+
15
+ /**
16
+ * [canMakePayment description]
17
+ * @return {[type]} [description]
18
+ */
19
+ PaymentRequest.prototype.canMakePayment = function() {
20
+ wc_stripe.PaymentRequest.prototype.canMakePayment.apply(this, arguments).then(function(result) {
21
+ $('[name="quantity"]').val(0);
22
+ $(document.body).on('change', '[name="quantity"]', this.add_to_cart.bind(this));
23
+ }.bind(this))
24
+ }
25
+
26
+ PaymentRequest.prototype.create_button = function() {
27
+ wc_stripe.PaymentRequest.prototype.create_button.apply(this, arguments);
28
+ this.$button = $('#wc-stripe-payment-request-container');
29
+ }
30
+
31
+ PaymentRequest.prototype.button_click = function(e) {
32
+ if (this.$button.is('.disabled')) {
33
+ e.preventDefault();
34
+ }
35
+ }
36
+
37
+ /**
38
+ * [add_to_cart description]
39
+ */
40
+ PaymentRequest.prototype.add_to_cart = function() {
41
+ if (this.$button.is('.disabled') && this.can_pay) {
42
+ $('[name="quantity"]').val(0);
43
+ this.submit_error(this.params.messages.choose_product);
44
+ return;
45
+ }
46
+ this.adding_to_cart = true;
47
+ wc_stripe.ProductGateway.prototype.add_to_cart.apply(this, arguments).then(function() {
48
+ this.paymentRequest.update(this.get_payment_request_update({
49
+ total: {
50
+ pending: false
51
+ }
52
+ }));
53
+ this.adding_to_cart = false;
54
+ }.bind(this))
55
+ }
56
+
57
+ PaymentRequest.prototype.found_variation = function() {
58
+ wc_stripe.ProductGateway.prototype.found_variation.apply(this, arguments);
59
+ if (this.can_pay) {
60
+ $('[name="quantity"]').val(0);
61
+ }
62
+
63
+ }
64
+
65
+ PaymentRequest.prototype.reset_variation_data = function() {
66
+ wc_stripe.ProductGateway.prototype.reset_variation_data.apply(this, arguments);
67
+ if (this.can_pay) {
68
+ $('[name="quantity"]').val(0);
69
+ }
70
+ }
71
+
72
+ /**
73
+ * [block description]
74
+ * @return {[type]} [description]
75
+ */
76
+ PaymentRequest.prototype.block = function() {
77
+ $.blockUI({
78
+ message: this.adding_to_cart ? this.params.messages.add_to_cart : null,
79
+ overlayCSS: {
80
+ background: '#fff',
81
+ opacity: 0.6
82
+ }
83
+ });
84
+ }
85
+
86
+ }
87
+
88
+ // Cart page functionality
89
+ if ($(document.body).is('.woocommerce-cart')) {
90
+ /**
91
+ * [PaymentRequest description]
92
+ */
93
+ function PaymentRequest() {
94
+ wc_stripe.BaseGateway.call(this, wc_stripe_payment_request_params);
95
+ wc_stripe.CartGateway.call(this);
96
+ }
97
+
98
+ PaymentRequest.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CartGateway.prototype, wc_stripe.PaymentRequest.prototype);
99
+
100
+ PaymentRequest.prototype.canMakePayment = function() {
101
+ wc_stripe.PaymentRequest.prototype.canMakePayment.apply(this, arguments).then(function() {
102
+ $(this.container).addClass('active');
103
+ }.bind(this))
104
+ }
105
+
106
+ /**
107
+ * New paymentRequest is needed since cart might have changed.
108
+ * @return {[type]} [description]
109
+ */
110
+ PaymentRequest.prototype.init_payment_request = function() {
111
+ this.paymentRequestButton.destroy();
112
+ }
113
+
114
+ /**
115
+ * [updated_html description]
116
+ * @return {[type]} [description]
117
+ */
118
+ PaymentRequest.prototype.updated_html = function() {
119
+ if (this.can_pay) {
120
+ this.paymentRequestButton.destroy();
121
+ this.initialize();
122
+ }
123
+ }
124
+
125
+ PaymentRequest.prototype.button_click = function(e) {
126
+ this.paymentRequest.update(this.get_payment_request_update({
127
+ total: {
128
+ pending: false
129
+ }
130
+ }));
131
+ }
132
+ }
133
+
134
+ // Checkout page functionality
135
+ if ($(document.body).is('.woocommerce-checkout')) {
136
+ /**
137
+ * [PaymentRequest description]
138
+ */
139
+ function PaymentRequest() {
140
+ wc_stripe.BaseGateway.call(this, wc_stripe_payment_request_params);
141
+ wc_stripe.CheckoutGateway.call(this);
142
+ }
143
+
144
+ PaymentRequest.prototype = $.extend({}, wc_stripe.BaseGateway.prototype, wc_stripe.CheckoutGateway.prototype, wc_stripe.PaymentRequest.prototype);
145
+
146
+ /**
147
+ * [canMakePayment description]
148
+ * @return {[type]} [description]
149
+ */
150
+ PaymentRequest.prototype.canMakePayment = function() {
151
+ wc_stripe.PaymentRequest.prototype.canMakePayment.apply(this, arguments).then(function(result) {
152
+ if (this.banner_enabled()) {
153
+ $(this.banner_container).show().append('<div id="wc-stripe-payment-request-banner"></div>');
154
+ var elements = this.stripe.elements();
155
+ var button = elements.create("paymentRequestButton", {
156
+ paymentRequest: this.paymentRequest,
157
+ style: {
158
+ paymentRequestButton: {
159
+ type: this.params.button.type,
160
+ theme: this.params.button.theme,
161
+ height: this.params.button.height
162
+ }
163
+ }
164
+ });
165
+ button.on('click', this.banner_checkout.bind(this));
166
+ button.mount("#wc-stripe-payment-request-banner");
167
+ }
168
+ }.bind(this))
169
+ }
170
+
171
+ /**
172
+ * [create_button description]
173
+ * @return {[type]} [description]
174
+ */
175
+ PaymentRequest.prototype.create_button = function() {
176
+ var $parent = $('#place_order').parent();
177
+ if (this.$button) {
178
+ this.$button.remove();
179
+ }
180
+ this.$button = $('<div id="wc-stripe-payment-request-container"></div>');
181
+ $parent.append(this.$button);
182
+ wc_stripe.PaymentRequest.prototype.create_button.call(this);
183
+ this.trigger_payment_method_selected();
184
+ }
185
+
186
+ /**
187
+ * [updated_checkout description]
188
+ * @return {[type]} [description]
189
+ */
190
+ PaymentRequest.prototype.updated_checkout = function() {
191
+ if (this.can_pay) {
192
+ $(this.container).show();
193
+ this.create_button();
194
+ }
195
+ }
196
+
197
+ /**
198
+ * [button_click description]
199
+ * @param {[type]} e [description]
200
+ * @return {[type]} [description]
201
+ */
202
+ PaymentRequest.prototype.banner_checkout = function(e) {
203
+ this.set_payment_method(this.gateway_id);
204
+ this.set_use_new_option(true);
205
+ }
206
+ }
207
+
208
+ new PaymentRequest();
209
+
210
+ }(jQuery, window.wc_stripe))
assets/js/frontend/wc-stripe.js ADDED
@@ -0,0 +1,1530 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ (function(window, $) {
2
+ window.wc_stripe = {};
3
+
4
+ /**
5
+ * [Initiate Stripe]
6
+ * @type {[type]}
7
+ */
8
+ var stripe = Stripe(wc_stripe_params.api_key);
9
+
10
+ /**
11
+ * @consructor
12
+ */
13
+ wc_stripe.BaseGateway = function(params) {
14
+ this.params = params;
15
+ this.gateway_id = this.params.gateway_id;
16
+ this.token_selector = this.params.token_selector;
17
+ this.saved_method_selector = this.params.saved_method_selector;
18
+ this.payment_intent_selector = this.params.payment_intent_selector;
19
+ this.payment_token_received = false;
20
+ this.stripe = stripe;
21
+ this.elements = stripe.elements($.extend({}, { locale: 'auto' }, this.get_element_options()));
22
+ this.initialize();
23
+ }
24
+
25
+ /**
26
+ * [get_element_options description]
27
+ * @return {[type]} [description]
28
+ */
29
+ wc_stripe.BaseGateway.prototype.get_element_options = function() {
30
+ return {};
31
+ }
32
+
33
+ wc_stripe.BaseGateway.prototype.initialize = function() {};
34
+
35
+ /**
36
+ * @return {[type]}
37
+ */
38
+ wc_stripe.BaseGateway.prototype.create_button = function() {}
39
+
40
+ /**
41
+ * @returns {Boolean}
42
+ */
43
+ wc_stripe.BaseGateway.prototype.is_gateway_selected = function() {
44
+ return $('[name="payment_method"]:checked').val() === this.gateway_id;
45
+ }
46
+
47
+ /**
48
+ * @returns {Boolean}
49
+ */
50
+ wc_stripe.BaseGateway.prototype.is_saved_method_selected = function() {
51
+ return this.is_gateway_selected() &&
52
+ $(
53
+ '[name="' + this.gateway_id +
54
+ '_payment_type_key"]:checked').val() === 'saved';
55
+ }
56
+
57
+ /**
58
+ * @return {Boolean}
59
+ */
60
+ wc_stripe.BaseGateway.prototype.has_checkout_error = function() {
61
+ return $('#wc_stripe_checkout_error').length > 0 && this.is_gateway_selected();
62
+ }
63
+
64
+ /**
65
+ * @param {[type]}
66
+ * @return {[type]}
67
+ */
68
+ wc_stripe.BaseGateway.prototype.submit_error = function(message) {
69
+ if (message.indexOf('</ul>') == -1) {
70
+ message = '<div class="woocommerce-error">' + message + '</div>';
71
+ }
72
+ this.submit_message(message);
73
+ }
74
+
75
+ wc_stripe.BaseGateway.prototype.submit_error_code = function(code) {
76
+
77
+ }
78
+
79
+ /**
80
+ * @param {[type]}
81
+ * @return {[type]}
82
+ */
83
+ wc_stripe.BaseGateway.prototype.submit_message = function(message) {
84
+ $('.woocommerce-error, .woocommerce-message, .woocommerce-info')
85
+ .remove();
86
+ var $container = $(this.message_container);
87
+ if ($container.closest('form').length) {
88
+ $container = $container.closest('form');
89
+ }
90
+ $container.prepend(message);
91
+ $container.removeClass('processing').unblock();
92
+ $container.find('.input-text, select, input:checkbox').blur();
93
+ $('html, body').animate({
94
+ scrollTop: ($container.offset().top - 100)
95
+ }, 1000);
96
+ }
97
+
98
+ /**
99
+ * Return true if the source should be saved.
100
+ *
101
+ * @returns {Boolean}
102
+ */
103
+ wc_stripe.BaseGateway.prototype.should_save_method = function() {
104
+ return $('#' + this.gateway_id + '_save_source_key').is(':checked');
105
+ }
106
+
107
+ wc_stripe.BaseGateway.prototype.is_add_payment_method_page = function() {
108
+ return $(document.body).hasClass('woocommerce-add-payment-method');
109
+ }
110
+
111
+ wc_stripe.BaseGateway.prototype.get_selected_payment_method = function() {
112
+ return $(this.saved_method_selector).val();
113
+ }
114
+
115
+ wc_stripe.BaseGateway.prototype.needs_shipping = function() {
116
+ return this.params.needs_shipping === "1";
117
+ }
118
+
119
+ wc_stripe.BaseGateway.prototype.get_currency = function() {
120
+ return $('#wc_stripe_currency').val();
121
+ }
122
+
123
+ wc_stripe.BaseGateway.prototype.get_country = function() {
124
+ return $('#wc_stripe_country').val();
125
+ }
126
+
127
+ /**
128
+ * [get_customer_name description]
129
+ * @return {[type]} [description]
130
+ */
131
+ wc_stripe.BaseGateway.prototype.get_customer_name = function(prefix) {
132
+ return $(prefix + '_first_name').val() + ' ' + $(prefix + '_last_name').val();
133
+ }
134
+
135
+ /**
136
+ * [get_customer_email description]
137
+ * @return {[type]} [description]
138
+ */
139
+ wc_stripe.BaseGateway.prototype.get_customer_email = function() {
140
+ return $('#billing_email').val();
141
+ }
142
+
143
+ /**
144
+ * Returns a string representation of an address.
145
+ * @param {[type]}
146
+ * @return {[type]}
147
+ */
148
+ wc_stripe.BaseGateway.prototype.get_address_field_hash = function(prefix) {
149
+ var params = ['_first_name', '_last_name', '_address_1', '_address_2', '_postcode', '_city', '_state', '_country', ];
150
+ var hash = "";
151
+ for (var i = 0; i < params.length; i++) {
152
+ hash += $(prefix + params[i]).val() + '_';
153
+ }
154
+ return hash;
155
+ }
156
+
157
+ /**
158
+ * @return {[type]}
159
+ */
160
+ wc_stripe.BaseGateway.prototype.block = function() {
161
+ $.blockUI({
162
+ message: null,
163
+ overlayCSS: {
164
+ background: '#fff',
165
+ opacity: 0.6
166
+ }
167
+ });
168
+ }
169
+
170
+ /**
171
+ * @return {[type]}
172
+ */
173
+ wc_stripe.BaseGateway.prototype.unblock = function() {
174
+ $.unblockUI();
175
+ }
176
+
177
+ /**
178
+ * @return {[type]}
179
+ */
180
+ wc_stripe.BaseGateway.prototype.get_form = function() {
181
+ return $(this.token_selector).closest('form');
182
+ }
183
+
184
+ /**
185
+ * @return {[type]}
186
+ */
187
+ wc_stripe.BaseGateway.prototype.get_total_price = function() {
188
+ return $('#wc_stripe_order_total').data('amount');
189
+ }
190
+
191
+ wc_stripe.BaseGateway.prototype.get_total_price_cents = function() {
192
+ return $('#wc_stripe_order_total_cents').data('amount');
193
+ }
194
+
195
+ /**
196
+ * @return {[type]}
197
+ */
198
+ wc_stripe.BaseGateway.prototype.set_total_price = function(total) {
199
+ $('#wc_stripe_order_total').data('amount', total);
200
+ }
201
+
202
+ /**
203
+ * @return {[type]}
204
+ */
205
+ wc_stripe.BaseGateway.prototype.set_total_price_cents = function(total) {
206
+ $('#wc_stripe_order_total_cents').data('amount', total);
207
+ }
208
+
209
+ /**
210
+ * [set_payment_method description]
211
+ * @param {[type]} payment_method [description]
212
+ */
213
+ wc_stripe.BaseGateway.prototype.set_payment_method = function(payment_method) {
214
+ $('[name="payment_method"][value="' + payment_method + '"]').prop("checked", true).trigger('click');
215
+ }
216
+
217
+ /**
218
+ * [set_shipping_methods description]
219
+ */
220
+ wc_stripe.BaseGateway.prototype.set_selected_shipping_methods = function(shipping_methods) {
221
+ if (shipping_methods && $('[name^="shipping_method"]').length) {
222
+ for (var i in shipping_methods) {
223
+ var method = shipping_methods[i];
224
+ $('[name="shipping_method[' + i + ']"][value="' + method + '"]').prop("checked", true).trigger('change');
225
+ }
226
+ }
227
+ }
228
+
229
+ /**
230
+ * @param {[type]}
231
+ * @return {[type]}
232
+ */
233
+ wc_stripe.BaseGateway.prototype.on_token_received = function(paymentMethod) {
234
+ this.payment_token_received = true;
235
+ $(this.token_selector).val(paymentMethod.id);
236
+ this.process_checkout();
237
+ }
238
+
239
+ wc_stripe.BaseGateway.prototype.createPaymentRequest = function() {
240
+ this.paymentRequest = stripe.paymentRequest(this.get_payment_request_options());
241
+
242
+ // events
243
+ if (this.needs_shipping()) {
244
+ this.paymentRequest.on('shippingaddresschange', this.update_shipping_address.bind(this));
245
+ this.paymentRequest.on('shippingoptionchange', this.update_shipping_method.bind(this));
246
+ }
247
+ this.paymentRequest.on('paymentmethod', this.on_payment_method_received.bind(this));
248
+ }
249
+
250
+ /**
251
+ * @return {[Object]}
252
+ */
253
+ wc_stripe.BaseGateway.prototype.get_payment_request_options = function() {
254
+ var options = {
255
+ country: this.params.country_code,
256
+ currency: this.get_currency().toLowerCase(),
257
+ total: {
258
+ amount: this.get_total_price_cents(),
259
+ label: this.params.total_label,
260
+ pending: true
261
+ },
262
+ requestPayerName: true,
263
+ requestPayerEmail: true,
264
+ requestPayerPhone: true,
265
+ requestShipping: this.needs_shipping()
266
+ }
267
+ var displayItems = this.get_display_items(),
268
+ shippingOptions = this.get_shipping_options();
269
+ if (displayItems) {
270
+ options.displayItems = displayItems;
271
+ }
272
+ if (this.needs_shipping() && shippingOptions) {
273
+ options.shippingOptions = shippingOptions;
274
+ }
275
+ return options;
276
+ }
277
+
278
+ /**
279
+ * @return {[Object]}
280
+ */
281
+ wc_stripe.BaseGateway.prototype.get_payment_request_update = function(data) {
282
+ var options = {
283
+ currency: this.get_currency().toLowerCase(),
284
+ total: {
285
+ amount: parseInt(this.get_total_price_cents()),
286
+ label: this.params.total_label,
287
+ pending: true
288
+ }
289
+ }
290
+ var displayItems = this.get_display_items(),
291
+ shippingOptions = this.get_shipping_options();
292
+ if (displayItems) {
293
+ options.displayItems = displayItems;
294
+ }
295
+ if (this.needs_shipping() && shippingOptions) {
296
+ options.shippingOptions = shippingOptions;
297
+ }
298
+ if (data) {
299
+ options = $.extend(true, {}, options, data);
300
+ }
301
+ return options;
302
+ }
303
+
304
+ /**
305
+ * @return {[type]}
306
+ */
307
+ wc_stripe.BaseGateway.prototype.get_display_items = function() {
308
+ return $('#wc_stripe_display_items').data('items');
309
+ }
310
+
311
+ /**
312
+ * @return {[type]}
313
+ */
314
+ wc_stripe.BaseGateway.prototype.set_display_items = function(items) {
315
+ $('#wc_stripe_display_items').data('items', items);
316
+ }
317
+
318
+ /**
319
+ * Return an array of shipping options for display in the Google payment sheet
320
+ * @return {[type]}
321
+ */
322
+ wc_stripe.BaseGateway.prototype.get_shipping_options = function() {
323
+ return $('#wc_stripe_shipping_options').data('items');
324
+ }
325
+
326
+ /**
327
+ * Update the shipping options.
328
+ * @param {[type]}
329
+ */
330
+ wc_stripe.BaseGateway.prototype.set_shipping_options = function(items) {
331
+ $('#wc_stripe_shipping_options').data('items', items);
332
+ }
333
+
334
+ /**
335
+ * Maps an address from the Browser address format to WC format.
336
+ * @param {[type]}
337
+ * @return {[type]}
338
+ */
339
+ wc_stripe.BaseGateway.prototype.map_address = function(address) {
340
+ return {
341
+ city: address.city,
342
+ postcode: address.postalCode,
343
+ state: address.region,
344
+ country: address.country
345
+ }
346
+ }
347
+
348
+ /**
349
+ * @param {[type]}
350
+ * @return {[type]}
351
+ */
352
+ wc_stripe.BaseGateway.prototype.on_payment_method_received = function(paymentResponse) {
353
+ try {
354
+ this.payment_response = paymentResponse;
355
+ this.populate_checkout_fields(paymentResponse);
356
+ paymentResponse.complete("success");
357
+ this.on_token_received(paymentResponse.paymentMethod);
358
+ } catch (err) {
359
+ window.alert(err);
360
+ }
361
+ }
362
+
363
+ /**
364
+ * @return {[type]}
365
+ */
366
+ wc_stripe.BaseGateway.prototype.populate_checkout_fields = function(data) {
367
+ $(this.token_selector).val(data.paymentMethod.id);
368
+ this.populate_address_fields(data);
369
+ }
370
+
371
+ /**
372
+ * @param {[type]}
373
+ * @return {[type]}
374
+ */
375
+ wc_stripe.BaseGateway.prototype.populate_address_fields = function(data) {
376
+ var mappings = this.address_mappings();
377
+ if (data.payerName) {
378
+ mappings.payerName.set(data.payerName);
379
+ }
380
+ if (data.payerEmail) {
381
+ mappings.payerEmail.set(data.payerEmail);
382
+ }
383
+ if (data.payerPhone) {
384
+ mappings.payerPhone.set(data.payerPhone);
385
+ }
386
+ if (data.shippingAddress) {
387
+ var address = data.shippingAddress;
388
+ for (var k in address) {
389
+ if (mappings[k]) {
390
+ mappings[k].set.call(this, address[k], '#shipping');
391
+ }
392
+ }
393
+ }
394
+ if (data.paymentMethod.billing_details.address) {
395
+ var address = data.paymentMethod.billing_details.address;
396
+ for (var k in address) {
397
+ if (mappings[k]) {
398
+ mappings[k].set.call(this, address[k], '#billing');
399
+ }
400
+ }
401
+ }
402
+ this.maybe_set_ship_to_different();
403
+ $('[name="billing_country"]').trigger('change');
404
+ }
405
+
406
+ /**
407
+ * @return {[type]}
408
+ */
409
+ wc_stripe.BaseGateway.prototype.address_mappings = function() {
410
+ return {
411
+ payerName: {
412
+ set: function(v, prefix) {
413
+ var name = v.split(" ");
414
+ if (name.length > 0) {
415
+ $('#billing_first_name').val(name[0]);
416
+ }
417
+ if (name.length > 1) {
418
+ $('#billing_last_name').val(name[1]);
419
+ }
420
+ },
421
+ get: function(prefix) {
422
+ return $('#billing_first_name').val() + ' ' + $('#billing_last_name').val()
423
+ }
424
+ },
425
+ payerEmail: {
426
+ set: function(v) {
427
+ $('#billing_email').val(v);
428
+ },
429
+ get: function() {
430
+ return $('#billing_email').val();
431
+ }
432
+ },
433
+ payerPhone: {
434
+ set: function(v) {
435
+ $('#billing_phone').val(v);
436
+ },
437
+ get: function() {
438
+ return $('#billing_phone').val();
439
+ }
440
+ },
441
+ recipient: {
442
+ set: function(v, prefix) {
443
+ var name = v.split(" ");
444
+ if (name.length > 0) {
445
+ $(prefix + '_first_name').val(name[0]);
446
+ }
447
+ if (name.length > 1) {
448
+ $(prefix + '_last_name').val(name[1]);
449
+ }
450
+ },
451
+ get: function(prefix) {
452
+ return $(prefix + '_first_name').val() + ' ' + $(prefix + '_last_name').val()
453
+ }
454
+ },
455
+ country: {
456
+ set: function(v, prefix) {
457
+ $(prefix + '_country').val(v);
458
+ },
459
+ get: function(prefix) {
460
+ return $(prefix + '_country').val();
461
+ }
462
+ },
463
+ addressLine: {
464
+ set: function(v, prefix) {
465
+ if (v.length > 0) {
466
+ $(prefix + '_address_1').val(v[0]);
467
+ }
468
+ if (v.length > 1) {
469
+ $(prefix + '_address_2').val(v[1]);
470
+ }
471
+ },
472
+ get: function(prefix) {
473
+ return [
474
+ $(prefix + '_address_1').val(),
475
+ $(prefix + '_address_2').val(),
476
+ ]
477
+ }
478
+ },
479
+ line1: {
480
+ set: function(v, prefix) {
481
+ $(prefix + '_address_1').val(v);
482
+ },
483
+ get: function(prefix) {
484
+ return $(prefix + '_address_1').val();
485
+ }
486
+ },
487
+ line2: {
488
+ set: function(v, prefix) {
489
+ $(prefix + '_address_2').val(v);
490
+ },
491
+ get: function(prefix) {
492
+ return $(prefix + '_address_2').val();
493
+ }
494
+ },
495
+ region: {
496
+ set: function(v, prefix) {
497
+ $(prefix + '_state').val(v);
498
+ },
499
+ get: function(prefix) {
500
+ $(prefix + '_state').val();
501
+ }
502
+ },
503
+ state: {
504
+ set: function(v, prefix) {
505
+ $(prefix + '_state').val(v);
506
+ },
507
+ get: function(prefix) {
508
+ $(prefix + '_state').val();
509
+ }
510
+ },
511
+ city: {
512
+ set: function(v, prefix) {
513
+ $(prefix + '_city').val(v);
514
+ },
515
+ get: function(prefix) {
516
+ $(prefix + '_city').val();
517
+ }
518
+ },
519
+ postalCode: {
520
+ set: function(v, prefix) {
521
+ $(prefix + '_postcode').val(v);
522
+ },
523
+ get: function(prefix) {
524
+ $(prefix + '_postcode').val();
525
+ }
526
+ },
527
+ postal_code: {
528
+ set: function(v, prefix) {
529
+ $(prefix + '_postcode').val(v);
530
+ },
531
+ get: function(prefix) {
532
+ $(prefix + '_postcode').val();
533
+ }
534
+ }
535
+ }
536
+ }
537
+
538
+ /**
539
+ * @return {[type]}
540
+ */
541
+ wc_stripe.BaseGateway.prototype.process_checkout = function() {
542
+ return new Promise(function(resolve, reject) {
543
+ this.block();
544
+ $.ajax({
545
+ url: this.params.routes.checkout,
546
+ method: 'POST',
547
+ dataType: 'json',
548
+ data: this.serialize_form(this.get_form()),
549
+ beforeSend: function(xhr) {
550
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce);
551
+ }.bind(this)
552
+ }).done(function(result) {
553
+ if (result.reload) {
554
+ window.location.reload();
555
+ return;
556
+ }
557
+ if (result.result === 'success') {
558
+ window.location = result.redirect;
559
+ } else {
560
+ if (result.messages) {
561
+ this.submit_error(result.messages);
562
+ }
563
+ this.unblock();
564
+ }
565
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
566
+ this.unblock();
567
+ this.submit_error(errorThrown);
568
+ }.bind(this))
569
+ }.bind(this))
570
+ }
571
+
572
+ /**
573
+ * @return {[type]}
574
+ */
575
+ wc_stripe.BaseGateway.prototype.serialize_form = function($form) {
576
+ var formData = $form.find('input').filter(function(i, e) {
577
+ if ($(e).is('[name^="add-to-cart"]')) {
578
+ return false;
579
+ }
580
+ return true;
581
+ }.bind(this)).serializeArray(),
582
+ data = {};
583
+
584
+ for (var i in formData) {
585
+ var obj = formData[i];
586
+ data[obj.name] = obj.value;
587
+ }
588
+ data.payment_method = this.gateway_id;
589
+ return data;
590
+ }
591
+
592
+ /**
593
+ * @param {[type]}
594
+ * @return {[type]}
595
+ */
596
+ wc_stripe.BaseGateway.prototype.map_shipping_methods = function(shippingData) {
597
+ var methods = {};
598
+ if (shippingData !== "default") {
599
+ var matches = shippingData.match(/^(\d):(.+)$/);
600
+ if (matches.length > 1) {
601
+ methods[matches[1]] = matches[2];
602
+ }
603
+ }
604
+ return methods;
605
+ }
606
+
607
+ /**
608
+ * [maybe_set_ship_to_different description]
609
+ * @return {[type]} [description]
610
+ */
611
+ wc_stripe.BaseGateway.prototype.maybe_set_ship_to_different = function() {
612
+ // if shipping and billing address are different,
613
+ // set the ship to different address option.
614
+ if ($('[name="ship_to_different_address"]').length) {
615
+ $('[name="ship_to_different_address"]').prop('checked', this.get_address_field_hash("#billing") !== this.get_address_field_hash("#shipping")).trigger('change');
616
+ }
617
+ }
618
+
619
+ /**
620
+ * @return {[@event]}
621
+ */
622
+ wc_stripe.BaseGateway.prototype.update_shipping_address = function(ev) {
623
+ return new Promise(function(resolve, reject) {
624
+ $.ajax({
625
+ url: this.params.routes.shipping_address,
626
+ method: 'POST',
627
+ dataType: 'json',
628
+ data: { address: this.map_address(ev.shippingAddress), payment_method: this.gateway_id },
629
+ beforeSend: function(xhr) {
630
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce);
631
+ }.bind(this)
632
+ }).done(function(response) {
633
+ if (response.code) {
634
+ ev.updateWith(response.data.newData);
635
+ reject(response.data);
636
+ } else {
637
+ ev.updateWith(response.data.newData);
638
+ resolve(response.data);
639
+ }
640
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
641
+
642
+ }.bind(this))
643
+ }.bind(this))
644
+ }
645
+
646
+ /**
647
+ * @return {[@event]}
648
+ */
649
+ wc_stripe.BaseGateway.prototype.update_shipping_method = function(ev) {
650
+ return new Promise(function(resolve, reject) {
651
+ $.ajax({
652
+ url: this.params.routes.shipping_method,
653
+ method: 'POST',
654
+ dataType: 'json',
655
+ data: { shipping_methods: this.map_shipping_methods(ev.shippingOption.id), payment_method: this.gateway_id },
656
+ beforeSend: function(xhr) {
657
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce);
658
+ }.bind(this)
659
+ }).done(function(response) {
660
+ if (response.code) {
661
+ ev.updateWith(response.data.newData);
662
+ reject(response.data);
663
+ } else {
664
+ this.set_selected_shipping_methods(response.data.shipping_methods);
665
+ ev.updateWith(response.data.newData);
666
+ resolve(response.data);
667
+ }
668
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
669
+ this.submit_error(errorThrown);
670
+ }.bind(this))
671
+ }.bind(this))
672
+ }
673
+
674
+
675
+ /********** Checkout Gateway ********/
676
+
677
+ /**
678
+ * @constructor
679
+ */
680
+ wc_stripe.CheckoutGateway = function() {
681
+ this.container = this.message_container = 'li.payment_method_' + this.gateway_id;
682
+ this.banner_container = 'li.banner_payment_method_' + this.gateway_id;
683
+ $(document.body).on('updated_checkout', this.updated_checkout.bind(this));
684
+ $(document.body).on('checkout_error', this.checkout_error.bind(this));
685
+ $(this.token_selector).closest('form').on('checkout_place_order_' + this.gateway_id, this.checkout_place_order.bind(this));
686
+
687
+ // events for showing gateway payment buttons
688
+ $(document.body).on('wc_stripe_new_method_' + this.gateway_id, this.on_show_new_methods.bind(this));
689
+ $(document.body).on('wc_stripe_saved_method_' + this.gateway_id, this.on_show_saved_methods.bind(this));
690
+ $(document.body).on('wc_stripe_payment_method_selected', this.on_payment_method_selected.bind(this));
691
+
692
+ if (this.banner_enabled()) {
693
+ if ($('.woocommerce-billing-fields').length) {
694
+ $(this.banner_container).css('max-width', $('.woocommerce-billing-fields').outerWidth(true));
695
+ }
696
+ }
697
+ }
698
+
699
+ /**
700
+ * Called on the WC updated_checkout event
701
+ */
702
+ wc_stripe.CheckoutGateway.prototype.updated_checkout = function() {}
703
+
704
+ /**
705
+ * Called on the WC checkout_error event
706
+ */
707
+ wc_stripe.CheckoutGateway.prototype.checkout_error = function() {
708
+ if (this.has_checkout_error()) {
709
+ this.payment_token_received = false;
710
+ this.payment_response = null;
711
+ this.show_payment_button();
712
+ this.hide_place_order();
713
+ }
714
+ }
715
+
716
+ /**
717
+ *
718
+ */
719
+ wc_stripe.CheckoutGateway.prototype.is_valid_checkout = function() {
720
+ if ($('[name="terms"]').length) {
721
+ if (!$('[name="terms"]').is(':checked')) {
722
+ return false;
723
+ }
724
+ }
725
+ return true;
726
+ }
727
+
728
+ /**
729
+ * Returns the selected payment gateway's id.
730
+ *
731
+ * @returns {String}
732
+ */
733
+ wc_stripe.CheckoutGateway.prototype.get_payment_method = function() {
734
+ return $('[name="payment_method"]:checked').val();
735
+ }
736
+
737
+ wc_stripe.CheckoutGateway.prototype.set_use_new_option = function(bool) {
738
+ $('#' + this.gateway_id + '_use_new').prop("checked", bool).trigger('change');
739
+ }
740
+
741
+ /**
742
+ * Called on the WC checkout_place_order_{$gateway_id} event
743
+ */
744
+ wc_stripe.CheckoutGateway.prototype.checkout_place_order = function() {
745
+ if (!this.is_valid_checkout()) {
746
+ this.submit_error(this.params.messages.terms);
747
+ return false;
748
+ } else if (this.is_saved_method_selected()) {
749
+ return true;
750
+ }
751
+ return this.payment_token_received;
752
+ }
753
+
754
+ /**
755
+ * @param {[type]}
756
+ * @return {[type]}
757
+ */
758
+ wc_stripe.CheckoutGateway.prototype.on_token_received = function(paymentMethod) {
759
+ this.payment_token_received = true;
760
+ $(this.token_selector).val(paymentMethod.id);
761
+ this.hide_payment_button();
762
+ this.show_place_order();
763
+ }
764
+
765
+ /**
766
+ * @return {[type]}
767
+ */
768
+ wc_stripe.CheckoutGateway.prototype.block = function() {
769
+ $('form.checkout').block({
770
+ message: null,
771
+ overlayCSS: {
772
+ background: '#fff',
773
+ opacity: 0.6
774
+ }
775
+ });
776
+ }
777
+
778
+ /**
779
+ * @return {[type]}
780
+ */
781
+ wc_stripe.CheckoutGateway.prototype.unblock = function() {
782
+ $('form.checkout').unblock();
783
+ }
784
+
785
+ wc_stripe.CheckoutGateway.prototype.hide_place_order = function() {
786
+ $('#place_order').addClass('wc-stripe-hide');
787
+ }
788
+
789
+ /**
790
+ * @return {[type]}
791
+ */
792
+ wc_stripe.CheckoutGateway.prototype.show_place_order = function() {
793
+ $('#place_order').removeClass('wc-stripe-hide');
794
+ }
795
+
796
+ /**
797
+ * Method that should perform actions when the show new methods contain is made visible.
798
+ * @param {[@event]}
799
+ * @param {[String]}
800
+ * @return {[type]}
801
+ */
802
+ wc_stripe.CheckoutGateway.prototype.on_show_new_methods = function() {
803
+ if (this.payment_token_received) {
804
+ this.show_place_order();
805
+ this.hide_payment_button();
806
+ } else {
807
+ this.hide_place_order();
808
+ this.show_payment_button();
809
+ }
810
+ }
811
+
812
+ /**
813
+ * Method that performs actions when the saved methods contains is visible.
814
+ * @param {[type]}
815
+ * @param {[type]}
816
+ * @return {[type]}
817
+ */
818
+ wc_stripe.CheckoutGateway.prototype.on_show_saved_methods = function() {
819
+ this.hide_payment_button();
820
+ this.show_place_order();
821
+ }
822
+
823
+ /**
824
+ * @return {[type]}
825
+ */
826
+ wc_stripe.CheckoutGateway.prototype.show_payment_button = function() {
827
+ if (this.$button) {
828
+ this.$button.show();
829
+ }
830
+ }
831
+
832
+ /**
833
+ * @return {[type]}
834
+ */
835
+ wc_stripe.CheckoutGateway.prototype.hide_payment_button = function() {
836
+ if (this.$button) {
837
+ this.$button.hide();
838
+ }
839
+ }
840
+
841
+ /**
842
+ * Wrapper for on_payment_method_selected that is safe to call since it won't trigger
843
+ * any DOM events.
844
+ * @return {[type]}
845
+ */
846
+ wc_stripe.CheckoutGateway.prototype.trigger_payment_method_selected = function() {
847
+ this.on_payment_method_selected(null, $('[name="payment_method"]:checked').val());
848
+ }
849
+
850
+ /**
851
+ * @param {[type]}
852
+ * @param {[type]}
853
+ * @return {[type]}
854
+ */
855
+ wc_stripe.CheckoutGateway.prototype.on_payment_method_selected = function(e, payment_method) {
856
+ if (payment_method === this.gateway_id) {
857
+ if (this.payment_token_received || this.is_saved_method_selected()) {
858
+ this.hide_payment_button();
859
+ this.show_place_order();
860
+ } else {
861
+ this.show_payment_button();
862
+ this.hide_place_order();
863
+ }
864
+ } else {
865
+ this.hide_payment_button();
866
+ if (payment_method.indexOf('stripe_') < 0) {
867
+ this.show_place_order();
868
+ }
869
+ }
870
+ }
871
+
872
+ /**
873
+ * [Return true if the banner option has been enabled for the gateway.]
874
+ * @return {[type]} [description]
875
+ */
876
+ wc_stripe.CheckoutGateway.prototype.banner_enabled = function() {
877
+ return this.params.banner_enabled === "1";
878
+ }
879
+
880
+ /************** Product Gateway ***************/
881
+
882
+ wc_stripe.ProductGateway = function() {
883
+ this.container = 'li.payment_method_' + this.gateway_id;
884
+ this.message_container = 'div.product';
885
+
886
+ // events
887
+ $(document.body).on('wc_stripe_updated_rest_nonce', this.set_rest_nonce.bind(this));
888
+ $('form.cart').on('found_variation', this.found_variation.bind(this));
889
+ $('form.cart').on('reset_data', this.reset_variation_data.bind(this));
890
+
891
+ this.buttonWidth = $('div.quantity').outerWidth(true) + $('.single_add_to_cart_button').outerWidth();
892
+ $(this.container).css('max-width', this.buttonWidth + 'px');
893
+ }
894
+
895
+ /**
896
+ * @return {[@int]}
897
+ */
898
+ wc_stripe.ProductGateway.prototype.get_quantity = function() {
899
+ return parseInt($('[name="quantity"]').val());
900
+ }
901
+
902
+ /**
903
+ * @param {[type]}
904
+ * @param {[type]}
905
+ */
906
+ wc_stripe.ProductGateway.prototype.set_rest_nonce = function(e, nonce) {
907
+ this.params.rest_nonce = nonce;
908
+ }
909
+
910
+ /**
911
+ * @param {[type]}
912
+ * @param {[type]}
913
+ * @return {[type]}
914
+ */
915
+ wc_stripe.ProductGateway.prototype.found_variation = function(e, variation) {
916
+ var data = this.get_product_data();
917
+ data.price = variation.display_price;
918
+ data.needs_shipping = !variation.is_virtual;
919
+ this.set_product_data(data);
920
+ this.enable_payment_button();
921
+ }
922
+
923
+ /**
924
+ * @return {[type]}
925
+ */
926
+ wc_stripe.ProductGateway.prototype.reset_variation_data = function() {
927
+ this.disable_payment_button();
928
+ }
929
+
930
+ /**
931
+ * @return {[type]}
932
+ */
933
+ wc_stripe.ProductGateway.prototype.disable_payment_button = function() {
934
+ if (this.$button) {
935
+ this.get_button().prop('disabled', true).addClass('disabled');
936
+ }
937
+ }
938
+
939
+ /**
940
+ * @return {[type]}
941
+ */
942
+ wc_stripe.ProductGateway.prototype.enable_payment_button = function() {
943
+ if (this.$button) {
944
+ this.get_button().prop('disabled', false).removeClass('disabled');
945
+ }
946
+ }
947
+
948
+ /**
949
+ * @return {[type]}
950
+ */
951
+ wc_stripe.ProductGateway.prototype.get_button = function() {
952
+ return this.$button;
953
+ }
954
+
955
+ /**
956
+ * @return {Boolean}
957
+ */
958
+ wc_stripe.ProductGateway.prototype.is_variable_product = function() {
959
+ return $('[name="variation_id"]').length > 0;
960
+ }
961
+
962
+ /**
963
+ * @return {[type]}
964
+ */
965
+ wc_stripe.ProductGateway.prototype.needs_shipping = function() {
966
+ return this.get_product_data().needs_shipping;
967
+ }
968
+
969
+ /**
970
+ * @return {[type]}
971
+ */
972
+ wc_stripe.ProductGateway.prototype.get_product_data = function() {
973
+ return $('#wc_stripe_product_data').data('product');
974
+ }
975
+
976
+ /**
977
+ * @return {[type]}
978
+ */
979
+ wc_stripe.ProductGateway.prototype.set_product_data = function(data) {
980
+ $('#wc_stripe_product_data').data('product', data);
981
+ }
982
+
983
+ /**
984
+ * Add a product to the WC shopping cart
985
+ */
986
+ wc_stripe.ProductGateway.prototype.add_to_cart = function() {
987
+ return new Promise(function(resolve, reject) {
988
+ this.block();
989
+ $.ajax({
990
+ url: this.params.routes.add_to_cart,
991
+ method: 'POST',
992
+ dataType: 'json',
993
+ data: {
994
+ product_id: $('#product_id').val(),
995
+ variation_id: this.is_variable_product() ? $('[name="variation_id"]').val() : 0,
996
+ qty: $('[name="quantity"]').val(),
997
+ payment_method: this.gateway_id
998
+ },
999
+ beforeSend: function(xhr) {
1000
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce);
1001
+ }.bind(this)
1002
+ }).done(function(response, status, xhr) {
1003
+ this.unblock();
1004
+ $(document.body).triggerHandler('wc_stripe_updated_rest_nonce', xhr.getResponseHeader('X-WP-Nonce'));
1005
+ if (response.code) {
1006
+ this.submit_error(response.message);
1007
+ reject(response);
1008
+ } else {
1009
+ this.set_total_price(response.data.total);
1010
+ this.set_total_price_cents(response.data.totalCents);
1011
+ this.set_display_items(response.data.displayItems);
1012
+ resolve(response.data);
1013
+ }
1014
+ }.bind(this)).fail(function(xhr, textStatus, errorThrown) {
1015
+ this.unblock();
1016
+ this.submit_error(errorThrown);
1017
+ }.bind(this))
1018
+ }.bind(this))
1019
+ }
1020
+
1021
+ /************* Cart Gateway *************/
1022
+
1023
+ /**
1024
+ * @constructor
1025
+ */
1026
+ wc_stripe.CartGateway = function() {
1027
+ this.container = 'li.payment_method_' + this.gateway_id;
1028
+ this.message_container = 'div.woocommerce';
1029
+
1030
+ // cart events
1031
+ $(document.body).on('updated_wc_div', this.updated_html.bind(this));
1032
+ $(document.body).on('updated_cart_totals', this.updated_html.bind(this));
1033
+ }
1034
+
1035
+ wc_stripe.CartGateway.prototype.needs_shipping = function() {
1036
+ return $('#wc_stripe_needs_shipping').data('value') === 1;
1037
+ }
1038
+
1039
+ /**
1040
+ * @param {[type]}
1041
+ * @return {[type]}
1042
+ */
1043
+ wc_stripe.CartGateway.prototype.submit_error = function(message) {
1044
+ this.submit_message(message);
1045
+ }
1046
+
1047
+ /**
1048
+ * @param {[@event]}
1049
+ * @return {[null]}
1050
+ */
1051
+ wc_stripe.CartGateway.prototype.updated_html = function(e) {
1052
+
1053
+ }
1054
+
1055
+ /************* Google Pay Mixins **************/
1056
+
1057
+ wc_stripe.GooglePay = function() {}
1058
+
1059
+ const googlePayBaseRequest = {
1060
+ apiVersion: 2,
1061
+ apiVersionMinor: 0
1062
+ }
1063
+
1064
+ const allowedCardNetworks = ["AMEX", "DISCOVER", "INTERAC", "JCB", "MASTERCARD", "VISA"];
1065
+
1066
+ const allowedCardAuthMethods = ["PAN_ONLY"];
1067
+
1068
+ const baseCardPaymentMethod = {
1069
+ type: 'CARD',
1070
+ parameters: {
1071
+ allowedAuthMethods: allowedCardAuthMethods,
1072
+ allowedCardNetworks: allowedCardNetworks
1073
+ }
1074
+ }
1075
+
1076
+ /**
1077
+ * Retrun an object of address mappings.
1078
+ * @param {[type]}
1079
+ * @return {[type]}
1080
+ */
1081
+ wc_stripe.GooglePay.prototype.address_mappings = function(prefix) {
1082
+ return {
1083
+ name: {
1084
+ set: function(v, prefix) {
1085
+ var name = v.split(" ");
1086
+ $(prefix + '_first_name').val(name[0]);
1087
+ $(prefix + '_last_name').val(name[1]);
1088
+ },
1089
+ get: function(prefix) {
1090
+ return $(prefix + '_first_name').val() + $(prefix + '_last_name').val()
1091
+ }
1092
+ },
1093
+ postalCode: {
1094
+ set: function(v, prefix) {
1095
+ $(prefix + '_postcode').val(v);
1096
+ },
1097
+ get: function(prefix) {
1098
+ return $(prefix + '_postcode').val();
1099
+ }
1100
+ },
1101
+ countryCode: {
1102
+ set: function(v, prefix) {
1103
+ $(prefix + '_country').val(v);
1104
+ },
1105
+ get: function(prefix) {
1106
+ return $(prefix + '_country').val();
1107
+ }
1108
+ },
1109
+ phoneNumber: {
1110
+ set: function(v, prefix) {
1111
+ $('#billing_phone').val(v);
1112
+ },
1113
+ get: function() {
1114
+ return ('#billing_phone').val();
1115
+ }
1116
+ },
1117
+ address1: {
1118
+ set: function(v, prefix) {
1119
+ $(prefix + '_address_1').val(v);
1120
+ },
1121
+ get: function(prefix) {
1122
+ return $(prefix + '_address_1').val();
1123
+ }
1124
+ },
1125
+ address2: {
1126
+ set: function(v, prefix) {
1127
+ $(prefix + '_address_2').val(v);
1128
+ },
1129
+ get: function(prefix) {
1130
+ return $(prefix + '_address_2').val();
1131
+ }
1132
+ },
1133
+ locality: {
1134
+ set: function(v, prefix) {
1135
+ $(prefix + '_city').val(v);
1136
+ },
1137
+ get: function(prefix) {
1138
+ return $(prefix + '_city').val();
1139
+ }
1140
+ },
1141
+ administrativeArea: {
1142
+ set: function(v, prefix) {
1143
+ $(prefix + '_state').val(v);
1144
+ },
1145
+ get: function(prefix) {
1146
+ return $(prefix + '_state').val();
1147
+ }
1148
+ }
1149
+ }
1150
+ }
1151
+
1152
+ /**
1153
+ * Populate the WC checkout fields.
1154
+ * @param {[type]}
1155
+ * @return {[type]}
1156
+ */
1157
+ wc_stripe.GooglePay.prototype.populate_address_fields = function(paymentData) {
1158
+ var billingAddress = paymentData.paymentMethodData.info.billingAddress,
1159
+ addressMappings = this.address_mappings();
1160
+ for (var k in billingAddress) {
1161
+ if (addressMappings[k]) {
1162
+ addressMappings[k].set.call(this, billingAddress[k], "#billing");
1163
+ }
1164
+ }
1165
+ if (paymentData.shippingAddress) {
1166
+ for (var k in paymentData.shippingAddress) {
1167
+ if (addressMappings[k]) {
1168
+ addressMappings[k].set.call(this, paymentData.shippingAddress[k], "#shipping");
1169
+ }
1170
+ }
1171
+ }
1172
+ if (paymentData.email) {
1173
+ $('#billing_email').val(paymentData.email);
1174
+ }
1175
+ this.maybe_set_ship_to_different();
1176
+ $('[name="billing_country"]').trigger('change');
1177
+ }
1178
+
1179
+ /**
1180
+ * @param {[type]}
1181
+ * @return {[type]}
1182
+ */
1183
+ wc_stripe.GooglePay.prototype.map_address = function(address) {
1184
+ return {
1185
+ city: address.locality,
1186
+ postcode: address.postalCode,
1187
+ state: address.administrativeArea,
1188
+ country: address.countryCode
1189
+ }
1190
+ }
1191
+
1192
+ /**
1193
+ * @param {[type]}
1194
+ * @return {[type]}
1195
+ */
1196
+ wc_stripe.GooglePay.prototype.update_payment_data = function(data) {
1197
+ return new Promise(function(resolve, reject) {
1198
+ $.when($.ajax({
1199
+ url: this.params.routes.payment_data,
1200
+ dataType: 'json',
1201
+ method: 'POST',
1202
+ data: {
1203
+ shipping_address: this.map_address(data.shippingAddress),
1204
+ shipping_methods: this.map_shipping_methods(data.shippingOptionData.id),
1205
+ shipping_method_id: data.shippingOptionData.id
1206
+ },
1207
+ beforeSend: function(xhr) {
1208
+ xhr.setRequestHeader('X-WP-Nonce', this.params.rest_nonce)
1209
+ }.bind(this)
1210
+ })).done(function(response) {
1211
+ if (response.code) {
1212
+ reject(response.data.data);
1213
+ } else {
1214
+ resolve(response.data);
1215
+ }
1216
+ }.bind(this)).fail(function() {
1217
+ reject();
1218
+ }.bind(this))
1219
+ }.bind(this))
1220
+ }
1221
+
1222
+ /**
1223
+ * @param {[type]}
1224
+ * @return {[type]}
1225
+ */
1226
+ wc_stripe.GooglePay.prototype.on_payment_data_changed = function(address) {
1227
+ return new Promise(function(resolve, reject) {
1228
+ this.update_payment_data(address).then(function(response) {
1229
+ resolve(response.paymentRequestUpdate);
1230
+ this.set_selected_shipping_methods(response.shipping_methods);
1231
+ this.payment_data_updated(response, address);
1232
+ }.bind(this)).catch(function(data) {
1233
+ resolve(data);
1234
+ }.bind(this))
1235
+ }.bind(this))
1236
+ }
1237
+
1238
+ /**
1239
+ * Convenience method so that gateway can perform actions after the payment data
1240
+ * has been updated.
1241
+ * @param {[type]}
1242
+ * @return {[type]}
1243
+ */
1244
+ wc_stripe.GooglePay.prototype.payment_data_updated = function(response) {
1245
+
1246
+ }
1247
+
1248
+ /**
1249
+ * Return an array of line items for display in the Google payment sheet
1250
+ * @return {[type]}
1251
+ */
1252
+ wc_stripe.GooglePay.prototype.get_googlepay_display_items = function() {
1253
+ return $('#googlepay_display_items').data('items');
1254
+ }
1255
+
1256
+ /**
1257
+ * Set the display items in the DOM as a data attribute.
1258
+ * @param {[type]}
1259
+ */
1260
+ wc_stripe.GooglePay.prototype.set_googlepay_display_items = function(displayItems) {
1261
+ $('#googlepay_display_items').data('items', displayItems);
1262
+ }
1263
+
1264
+ /**
1265
+ * Return an array of shipping options for display in the Google payment sheet
1266
+ * @return {[type]}
1267
+ */
1268
+ wc_stripe.GooglePay.prototype.get_shipping_options = function() {
1269
+ return $('#googlepay_shipping_options').data('items');
1270
+ }
1271
+
1272
+ /**
1273
+ * @return {[type]}
1274
+ */
1275
+ wc_stripe.GooglePay.prototype.get_merchant_info = function() {
1276
+ return {
1277
+ merchantId: this.params.merchant_id,
1278
+ merchantName: this.params.merchant_name
1279
+ }
1280
+ }
1281
+
1282
+ /**
1283
+ * @return {[type]}
1284
+ */
1285
+ wc_stripe.GooglePay.prototype.get_payment_options = function() {
1286
+ var options = {
1287
+ environment: this.params.environment,
1288
+ merchantInfo: this.get_merchant_info()
1289
+ }
1290
+ if (this.needs_shipping() && (this.get_total_price_cents() > 0)) {
1291
+ options.paymentDataCallbacks = {
1292
+ onPaymentDataChanged: this.on_payment_data_changed.bind(this)
1293
+ }
1294
+ } else {
1295
+ options.paymentDataCallbacks = {
1296
+ onPaymentAuthorized: function(data) {
1297
+ return new Promise(function(resolve, reject) {
1298
+ resolve({ transactionState: "SUCCESS" })
1299
+ }.bind(this))
1300
+ }
1301
+ }
1302
+ }
1303
+ return options;
1304
+ }
1305
+
1306
+ /**
1307
+ * @return {[type]}
1308
+ */
1309
+ wc_stripe.GooglePay.prototype.build_payment_request = function() {
1310
+ var request = $.extend({}, googlePayBaseRequest, {
1311
+ emailRequired: true,
1312
+ merchantInfo: this.get_merchant_info(),
1313
+ allowedPaymentMethods: [$.extend({
1314
+ type: "CARD",
1315
+ tokenizationSpecification: {
1316
+ type: "PAYMENT_GATEWAY",
1317
+ parameters: {
1318
+ gateway: 'stripe',
1319
+ "stripe:version": "2018-10-31",
1320
+ "stripe:publishableKey": this.params.api_key
1321
+ }
1322
+ }
1323
+ }, baseCardPaymentMethod)],
1324
+ shippingAddressRequired: this.needs_shipping() && this.get_total_price_cents() > 0,
1325
+ shippingOptionRequired: this.needs_shipping() && this.get_total_price_cents() > 0,
1326
+ transactionInfo: {
1327
+ currencyCode: this.get_currency(),
1328
+ totalPriceStatus: "ESTIMATED",
1329
+ totalPrice: this.get_total_price().toString(),
1330
+ displayItems: this.get_googlepay_display_items(),
1331
+ totalPriceLabel: this.params.total_price_label
1332
+ }
1333
+ })
1334
+ request.allowedPaymentMethods[0].parameters['billingAddressRequired'] = true;
1335
+ request.allowedPaymentMethods[0].parameters['billingAddressParameters'] = {
1336
+ format: "FULL",
1337
+ phoneNumberRequired: $('#billing_phone').length > 0
1338
+ }
1339
+ if (this.needs_shipping() && (this.get_total_price_cents() > 0)) {
1340
+ request['shippingAddressParameters'] = {};
1341
+ request['shippingOptionParameters'] = {
1342
+ shippingOptions: this.get_shipping_options(),
1343
+ };
1344
+ request['callbackIntents'] = ["SHIPPING_ADDRESS", "SHIPPING_OPTION"];
1345
+ } else {
1346
+ request['callbackIntents'] = ["PAYMENT_AUTHORIZATION"];
1347
+ }
1348
+ return request;
1349
+ }
1350
+
1351
+ /**
1352
+ * @return {[type]}
1353
+ */
1354
+ wc_stripe.GooglePay.prototype.createPaymentsClient = function() {
1355
+ this.paymentsClient = new google.payments.api.PaymentsClient(this.get_payment_options());
1356
+ }
1357
+
1358
+ /**
1359
+ * @return {Promise}
1360
+ */
1361
+ wc_stripe.GooglePay.prototype.isReadyToPay = function() {
1362
+ return new Promise(function(resolve) {
1363
+ var isReadyToPayRequest = $.extend({}, googlePayBaseRequest);
1364
+ isReadyToPayRequest.allowedPaymentMethods = [baseCardPaymentMethod];
1365
+ this.paymentsClient.isReadyToPay(isReadyToPayRequest).then(function() {
1366
+ this.can_pay = true;
1367
+ this.create_button();
1368
+ resolve();
1369
+ }.bind(this)).catch(function(err) {
1370
+ this.submit_error(err);
1371
+ }.bind(this))
1372
+ }.bind(this))
1373
+ }
1374
+
1375
+ wc_stripe.GooglePay.prototype.create_button = function() {
1376
+ if (this.$button) {
1377
+ this.$button.remove();
1378
+ }
1379
+ this.$button = $(this.paymentsClient.createButton({
1380
+ onClick: this.start.bind(this),
1381
+ buttonColor: this.params.button_color,
1382
+ buttonType: this.params.button_style
1383
+ }));
1384
+ this.$button.addClass('gpay-button-container');
1385
+ }
1386
+
1387
+ /**
1388
+ * @return {[type]}
1389
+ */
1390
+ wc_stripe.GooglePay.prototype.start = function() {
1391
+ // always recreate the paymentClient to ensure latest data is used.
1392
+ this.createPaymentsClient();
1393
+ this.paymentsClient.loadPaymentData(this.build_payment_request()).then(function(paymentData) {
1394
+ var data = JSON.parse(paymentData.paymentMethodData.tokenizationData.token);
1395
+ this.populate_address_fields(paymentData);
1396
+ this.on_token_received(data);
1397
+ }.bind(this)).catch(function(err) {
1398
+ if (err.statusCode === "CANCELED") {
1399
+ return;
1400
+ }
1401
+ if (err.statusMessage && err.statusMessage.indexOf("paymentDataRequest.callbackIntent") > -1) {
1402
+ this.submit_error_code("DEVELOPER_ERROR_WHITELIST");
1403
+ } else {
1404
+ this.submit_error(err.statusMessage);
1405
+ }
1406
+ }.bind(this))
1407
+ }
1408
+
1409
+ /************* Apple Pay ************/
1410
+
1411
+ /**
1412
+ * @constructor
1413
+ */
1414
+ wc_stripe.ApplePay = function() {
1415
+
1416
+ }
1417
+
1418
+ /**
1419
+ * @return {[type]}
1420
+ */
1421
+ wc_stripe.ApplePay.prototype.initialize = function() {
1422
+ $(document.body).on('click', '.apple-pay-button', this.start.bind(this));
1423
+ this.createPaymentRequest();
1424
+ this.canMakePayment();
1425
+ }
1426
+
1427
+ wc_stripe.ApplePay.prototype.create_button = function() {
1428
+ if (this.$button) {
1429
+ this.$button.remove();
1430
+ }
1431
+ this.$button = $(this.params.button);
1432
+ this.append_button();
1433
+ }
1434
+
1435
+ /**
1436
+ * @return {[type]}
1437
+ */
1438
+ wc_stripe.ApplePay.prototype.canMakePayment = function() {
1439
+ return new Promise(function(resolve, reject) {
1440
+ this.paymentRequest.canMakePayment().then(function(result) {
1441
+ if (result && result.applePay) {
1442
+ this.can_pay = true;
1443
+ this.create_button();
1444
+ $(this.container).show();
1445
+ resolve(result);
1446
+ }
1447
+ }.bind(this))
1448
+ }.bind(this))
1449
+ }
1450
+
1451
+ /**
1452
+ * @return {[type]}
1453
+ */
1454
+ wc_stripe.ApplePay.prototype.start = function(e) {
1455
+ e.preventDefault();
1456
+ this.paymentRequest.update(this.get_payment_request_update({
1457
+ total: {
1458
+ pending: false
1459
+ }
1460
+ }));
1461
+ this.paymentRequest.show();
1462
+ }
1463
+
1464
+ /*********** PaymentRequest *********/
1465
+
1466
+ wc_stripe.PaymentRequest = function() {
1467
+
1468
+ }
1469
+
1470
+ /**
1471
+ * [initialize description]
1472
+ * @return {[type]} [description]
1473
+ */
1474
+ wc_stripe.PaymentRequest.prototype.initialize = function() {
1475
+ this.createPaymentRequest();
1476
+ this.canMakePayment();
1477
+ this.paymentRequestButton = this.createPaymentRequestButton();
1478
+ this.paymentRequestButton.on('click', this.button_click.bind(this));
1479
+ }
1480
+
1481
+ /**
1482
+ * [button_click description]
1483
+ * @param {[type]} event [description]
1484
+ * @return {[type]} [description]
1485
+ */
1486
+ wc_stripe.PaymentRequest.prototype.button_click = function(event) {}
1487
+
1488
+ /**
1489
+ * [createPaymentRequestButton description]
1490
+ * @return {[type]} [description]
1491
+ */
1492
+ wc_stripe.PaymentRequest.prototype.createPaymentRequestButton = function() {
1493
+ return this.elements.create("paymentRequestButton", {
1494
+ paymentRequest: this.paymentRequest,
1495
+ style: {
1496
+ paymentRequestButton: {
1497
+ type: this.params.button.type,
1498
+ theme: this.params.button.theme,
1499
+ height: this.params.button.height
1500
+ }
1501
+ }
1502
+ })
1503
+ }
1504
+
1505
+ /**
1506
+ * [canMakePayment description]
1507
+ * @return {[type]} [description]
1508
+ */
1509
+ wc_stripe.PaymentRequest.prototype.canMakePayment = function() {
1510
+ return new Promise(function(resolve, reject) {
1511
+ this.paymentRequest.canMakePayment().then(function(result) {
1512
+ if (result && !result.applePay) {
1513
+ this.can_pay = true;
1514
+ this.create_button();
1515
+ $(this.container).show();
1516
+ resolve(result);
1517
+ }
1518
+ }.bind(this))
1519
+ }.bind(this))
1520
+ }
1521
+
1522
+ /**
1523
+ * [create_button description]
1524
+ * @return {[type]} [description]
1525
+ */
1526
+ wc_stripe.PaymentRequest.prototype.create_button = function() {
1527
+ this.paymentRequestButton.mount('#wc-stripe-payment-request-container');
1528
+ }
1529
+
1530
+ }(window, jQuery))
assets/js/frontend/wc-stripe.min.js ADDED
@@ -0,0 +1 @@
 
1
+ !function(t,e){t.wc_stripe={};var i=Stripe(wc_stripe_params.api_key);wc_stripe.BaseGateway=function(t){this.params=t,this.gateway_id=this.params.gateway_id,this.token_selector=this.params.token_selector,this.saved_method_selector=this.params.saved_method_selector,this.payment_intent_selector=this.params.payment_intent_selector,this.payment_token_received=!1,this.stripe=i,this.elements=i.elements(e.extend({},{locale:"auto"},this.get_element_options())),this.initialize()},wc_stripe.BaseGateway.prototype.get_element_options=function(){return{}},wc_stripe.BaseGateway.prototype.initialize=function(){},wc_stripe.BaseGateway.prototype.create_button=function(){},wc_stripe.BaseGateway.prototype.is_gateway_selected=function(){return e('[name="payment_method"]:checked').val()===this.gateway_id},wc_stripe.BaseGateway.prototype.is_saved_method_selected=function(){return this.is_gateway_selected()&&"saved"===e('[name="'+this.gateway_id+'_payment_type_key"]:checked').val()},wc_stripe.BaseGateway.prototype.has_checkout_error=function(){return e("#wc_stripe_checkout_error").length>0&&this.is_gateway_selected()},wc_stripe.BaseGateway.prototype.submit_error=function(t){-1==t.indexOf("</ul>")&&(t='<div class="woocommerce-error">'+t+"</div>"),this.submit_message(t)},wc_stripe.BaseGateway.prototype.submit_error_code=function(t){},wc_stripe.BaseGateway.prototype.submit_message=function(t){e(".woocommerce-error, .woocommerce-message, .woocommerce-info").remove();var i=e(this.message_container);i.closest("form").length&&(i=i.closest("form")),i.prepend(t),i.removeClass("processing").unblock(),i.find(".input-text, select, input:checkbox").blur(),e("html, body").animate({scrollTop:i.offset().top-100},1e3)},wc_stripe.BaseGateway.prototype.should_save_method=function(){return e("#"+this.gateway_id+"_save_source_key").is(":checked")},wc_stripe.BaseGateway.prototype.is_add_payment_method_page=function(){return e(document.body).hasClass("woocommerce-add-payment-method")},wc_stripe.BaseGateway.prototype.get_selected_payment_method=function(){return e(this.saved_method_selector).val()},wc_stripe.BaseGateway.prototype.needs_shipping=function(){return"1"===this.params.needs_shipping},wc_stripe.BaseGateway.prototype.get_currency=function(){return e("#wc_stripe_currency").val()},wc_stripe.BaseGateway.prototype.get_country=function(){return e("#wc_stripe_country").val()},wc_stripe.BaseGateway.prototype.get_customer_name=function(t){return e(t+"_first_name").val()+" "+e(t+"_last_name").val()},wc_stripe.BaseGateway.prototype.get_customer_email=function(){return e("#billing_email").val()},wc_stripe.BaseGateway.prototype.get_address_field_hash=function(t){for(var i=["_first_name","_last_name","_address_1","_address_2","_postcode","_city","_state","_country"],a="",n=0;n<i.length;n++)a+=e(t+i[n]).val()+"_";return a},wc_stripe.BaseGateway.prototype.block=function(){e.blockUI({message:null,overlayCSS:{background:"#fff",opacity:.6}})},wc_stripe.BaseGateway.prototype.unblock=function(){e.unblockUI()},wc_stripe.BaseGateway.prototype.get_form=function(){return e(this.token_selector).closest("form")},wc_stripe.BaseGateway.prototype.get_total_price=function(){return e("#wc_stripe_order_total").data("amount")},wc_stripe.BaseGateway.prototype.get_total_price_cents=function(){return e("#wc_stripe_order_total_cents").data("amount")},wc_stripe.BaseGateway.prototype.set_total_price=function(t){e("#wc_stripe_order_total").data("amount",t)},wc_stripe.BaseGateway.prototype.set_total_price_cents=function(t){e("#wc_stripe_order_total_cents").data("amount",t)},wc_stripe.BaseGateway.prototype.set_payment_method=function(t){e('[name="payment_method"][value="'+t+'"]').prop("checked",!0).trigger("click")},wc_stripe.BaseGateway.prototype.set_selected_shipping_methods=function(t){if(t&&e('[name^="shipping_method"]').length)for(var i in t){var a=t[i];e('[name="shipping_method['+i+']"][value="'+a+'"]').prop("checked",!0).trigger("change")}},wc_stripe.BaseGateway.prototype.on_token_received=function(t){this.payment_token_received=!0,e(this.token_selector).val(t.id),this.process_checkout()},wc_stripe.BaseGateway.prototype.createPaymentRequest=function(){this.paymentRequest=i.paymentRequest(this.get_payment_request_options()),this.needs_shipping()&&(this.paymentRequest.on("shippingaddresschange",this.update_shipping_address.bind(this)),this.paymentRequest.on("shippingoptionchange",this.update_shipping_method.bind(this))),this.paymentRequest.on("paymentmethod",this.on_payment_method_received.bind(this))},wc_stripe.BaseGateway.prototype.get_payment_request_options=function(){var t={country:this.params.country_code,currency:this.get_currency().toLowerCase(),total:{amount:this.get_total_price_cents(),label:this.params.total_label,pending:!0},requestPayerName:!0,requestPayerEmail:!0,requestPayerPhone:!0,requestShipping:this.needs_shipping()},e=this.get_display_items(),i=this.get_shipping_options();return e&&(t.displayItems=e),this.needs_shipping()&&i&&(t.shippingOptions=i),t},wc_stripe.BaseGateway.prototype.get_payment_request_update=function(t){var i={currency:this.get_currency().toLowerCase(),total:{amount:parseInt(this.get_total_price_cents()),label:this.params.total_label,pending:!0}},a=this.get_display_items(),n=this.get_shipping_options();return a&&(i.displayItems=a),this.needs_shipping()&&n&&(i.shippingOptions=n),t&&(i=e.extend(!0,{},i,t)),i},wc_stripe.BaseGateway.prototype.get_display_items=function(){return e("#wc_stripe_display_items").data("items")},wc_stripe.BaseGateway.prototype.set_display_items=function(t){e("#wc_stripe_display_items").data("items",t)},wc_stripe.BaseGateway.prototype.get_shipping_options=function(){return e("#wc_stripe_shipping_options").data("items")},wc_stripe.BaseGateway.prototype.set_shipping_options=function(t){e("#wc_stripe_shipping_options").data("items",t)},wc_stripe.BaseGateway.prototype.map_address=function(t){return{city:t.city,postcode:t.postalCode,state:t.region,country:t.country}},wc_stripe.BaseGateway.prototype.on_payment_method_received=function(e){try{this.payment_response=e,this.populate_checkout_fields(e),e.complete("success"),this.on_token_received(e.paymentMethod)}catch(e){t.alert(e)}},wc_stripe.BaseGateway.prototype.populate_checkout_fields=function(t){e(this.token_selector).val(t.paymentMethod.id),this.populate_address_fields(t)},wc_stripe.BaseGateway.prototype.populate_address_fields=function(t){var i=this.address_mappings();if(t.payerName&&i.payerName.set(t.payerName),t.payerEmail&&i.payerEmail.set(t.payerEmail),t.payerPhone&&i.payerPhone.set(t.payerPhone),t.shippingAddress){var a=t.shippingAddress;for(var n in a)i[n]&&i[n].set.call(this,a[n],"#shipping")}if(t.paymentMethod.billing_details.address){a=t.paymentMethod.billing_details.address;for(var n in a)i[n]&&i[n].set.call(this,a[n],"#billing")}this.maybe_set_ship_to_different(),e('[name="billing_country"]').trigger("change")},wc_stripe.BaseGateway.prototype.address_mappings=function(){return{payerName:{set:function(t,i){var a=t.split(" ");a.length>0&&e("#billing_first_name").val(a[0]),a.length>1&&e("#billing_last_name").val(a[1])},get:function(t){return e("#billing_first_name").val()+" "+e("#billing_last_name").val()}},payerEmail:{set:function(t){e("#billing_email").val(t)},get:function(){return e("#billing_email").val()}},payerPhone:{set:function(t){e("#billing_phone").val(t)},get:function(){return e("#billing_phone").val()}},recipient:{set:function(t,i){var a=t.split(" ");a.length>0&&e(i+"_first_name").val(a[0]),a.length>1&&e(i+"_last_name").val(a[1])},get:function(t){return e(t+"_first_name").val()+" "+e(t+"_last_name").val()}},country:{set:function(t,i){e(i+"_country").val(t)},get:function(t){return e(t+"_country").val()}},addressLine:{set:function(t,i){t.length>0&&e(i+"_address_1").val(t[0]),t.length>1&&e(i+"_address_2").val(t[1])},get:function(t){return[e(t+"_address_1").val(),e(t+"_address_2").val()]}},line1:{set:function(t,i){e(i+"_address_1").val(t)},get:function(t){return e(t+"_address_1").val()}},line2:{set:function(t,i){e(i+"_address_2").val(t)},get:function(t){return e(t+"_address_2").val()}},region:{set:function(t,i){e(i+"_state").val(t)},get:function(t){e(t+"_state").val()}},state:{set:function(t,i){e(i+"_state").val(t)},get:function(t){e(t+"_state").val()}},city:{set:function(t,i){e(i+"_city").val(t)},get:function(t){e(t+"_city").val()}},postalCode:{set:function(t,i){e(i+"_postcode").val(t)},get:function(t){e(t+"_postcode").val()}},postal_code:{set:function(t,i){e(i+"_postcode").val(t)},get:function(t){e(t+"_postcode").val()}}}},wc_stripe.BaseGateway.prototype.process_checkout=function(){return new Promise(function(i,a){this.block(),e.ajax({url:this.params.routes.checkout,method:"POST",dataType:"json",data:this.serialize_form(this.get_form()),beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",this.params.rest_nonce)}.bind(this)}).done(function(e){e.reload?t.location.reload():"success"===e.result?t.location=e.redirect:(e.messages&&this.submit_error(e.messages),this.unblock())}.bind(this)).fail(function(t,e,i){this.unblock(),this.submit_error(i)}.bind(this))}.bind(this))},wc_stripe.BaseGateway.prototype.serialize_form=function(t){var i=t.find("input").filter(function(t,i){return!e(i).is('[name^="add-to-cart"]')}.bind(this)).serializeArray(),a={};for(var n in i){var s=i[n];a[s.name]=s.value}return a.payment_method=this.gateway_id,a},wc_stripe.BaseGateway.prototype.map_shipping_methods=function(t){var e={};if("default"!==t){var i=t.match(/^(\d):(.+)$/);i.length>1&&(e[i[1]]=i[2])}return e},wc_stripe.BaseGateway.prototype.maybe_set_ship_to_different=function(){e('[name="ship_to_different_address"]').length&&e('[name="ship_to_different_address"]').prop("checked",this.get_address_field_hash("#billing")!==this.get_address_field_hash("#shipping")).trigger("change")},wc_stripe.BaseGateway.prototype.update_shipping_address=function(t){return new Promise(function(i,a){e.ajax({url:this.params.routes.shipping_address,method:"POST",dataType:"json",data:{address:this.map_address(t.shippingAddress),payment_method:this.gateway_id},beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",this.params.rest_nonce)}.bind(this)}).done(function(e){e.code?(t.updateWith(e.data.newData),a(e.data)):(t.updateWith(e.data.newData),i(e.data))}.bind(this)).fail(function(t,e,i){}.bind(this))}.bind(this))},wc_stripe.BaseGateway.prototype.update_shipping_method=function(t){return new Promise(function(i,a){e.ajax({url:this.params.routes.shipping_method,method:"POST",dataType:"json",data:{shipping_methods:this.map_shipping_methods(t.shippingOption.id),payment_method:this.gateway_id},beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",this.params.rest_nonce)}.bind(this)}).done(function(e){e.code?(t.updateWith(e.data.newData),a(e.data)):(this.set_selected_shipping_methods(e.data.shipping_methods),t.updateWith(e.data.newData),i(e.data))}.bind(this)).fail(function(t,e,i){this.submit_error(i)}.bind(this))}.bind(this))},wc_stripe.CheckoutGateway=function(){this.container=this.message_container="li.payment_method_"+this.gateway_id,this.banner_container="li.banner_payment_method_"+this.gateway_id,e(document.body).on("updated_checkout",this.updated_checkout.bind(this)),e(document.body).on("checkout_error",this.checkout_error.bind(this)),e(this.token_selector).closest("form").on("checkout_place_order_"+this.gateway_id,this.checkout_place_order.bind(this)),e(document.body).on("wc_stripe_new_method_"+this.gateway_id,this.on_show_new_methods.bind(this)),e(document.body).on("wc_stripe_saved_method_"+this.gateway_id,this.on_show_saved_methods.bind(this)),e(document.body).on("wc_stripe_payment_method_selected",this.on_payment_method_selected.bind(this)),this.banner_enabled()&&e(".woocommerce-billing-fields").length&&e(this.banner_container).css("max-width",e(".woocommerce-billing-fields").outerWidth(!0))},wc_stripe.CheckoutGateway.prototype.updated_checkout=function(){},wc_stripe.CheckoutGateway.prototype.checkout_error=function(){this.has_checkout_error()&&(this.payment_token_received=!1,this.payment_response=null,this.show_payment_button(),this.hide_place_order())},wc_stripe.CheckoutGateway.prototype.is_valid_checkout=function(){return!(e('[name="terms"]').length&&!e('[name="terms"]').is(":checked"))},wc_stripe.CheckoutGateway.prototype.get_payment_method=function(){return e('[name="payment_method"]:checked').val()},wc_stripe.CheckoutGateway.prototype.set_use_new_option=function(t){e("#"+this.gateway_id+"_use_new").prop("checked",t).trigger("change")},wc_stripe.CheckoutGateway.prototype.checkout_place_order=function(){return this.is_valid_checkout()?!!this.is_saved_method_selected()||this.payment_token_received:(this.submit_error(this.params.messages.terms),!1)},wc_stripe.CheckoutGateway.prototype.on_token_received=function(t){this.payment_token_received=!0,e(this.token_selector).val(t.id),this.hide_payment_button(),this.show_place_order()},wc_stripe.CheckoutGateway.prototype.block=function(){e("form.checkout").block({message:null,overlayCSS:{background:"#fff",opacity:.6}})},wc_stripe.CheckoutGateway.prototype.unblock=function(){e("form.checkout").unblock()},wc_stripe.CheckoutGateway.prototype.hide_place_order=function(){e("#place_order").addClass("wc-stripe-hide")},wc_stripe.CheckoutGateway.prototype.show_place_order=function(){e("#place_order").removeClass("wc-stripe-hide")},wc_stripe.CheckoutGateway.prototype.on_show_new_methods=function(){this.payment_token_received?(this.show_place_order(),this.hide_payment_button()):(this.hide_place_order(),this.show_payment_button())},wc_stripe.CheckoutGateway.prototype.on_show_saved_methods=function(){this.hide_payment_button(),this.show_place_order()},wc_stripe.CheckoutGateway.prototype.show_payment_button=function(){this.$button&&this.$button.show()},wc_stripe.CheckoutGateway.prototype.hide_payment_button=function(){this.$button&&this.$button.hide()},wc_stripe.CheckoutGateway.prototype.trigger_payment_method_selected=function(){this.on_payment_method_selected(null,e('[name="payment_method"]:checked').val())},wc_stripe.CheckoutGateway.prototype.on_payment_method_selected=function(t,e){e===this.gateway_id?this.payment_token_received||this.is_saved_method_selected()?(this.hide_payment_button(),this.show_place_order()):(this.show_payment_button(),this.hide_place_order()):(this.hide_payment_button(),e.indexOf("stripe_")<0&&this.show_place_order())},wc_stripe.CheckoutGateway.prototype.banner_enabled=function(){return"1"===this.params.banner_enabled},wc_stripe.ProductGateway=function(){this.container="li.payment_method_"+this.gateway_id,this.message_container="div.product",e(document.body).on("wc_stripe_updated_rest_nonce",this.set_rest_nonce.bind(this)),e("form.cart").on("found_variation",this.found_variation.bind(this)),e("form.cart").on("reset_data",this.reset_variation_data.bind(this)),this.buttonWidth=e("div.quantity").outerWidth(!0)+e(".single_add_to_cart_button").outerWidth(),e(this.container).css("max-width",this.buttonWidth+"px")},wc_stripe.ProductGateway.prototype.get_quantity=function(){return parseInt(e('[name="quantity"]').val())},wc_stripe.ProductGateway.prototype.set_rest_nonce=function(t,e){this.params.rest_nonce=e},wc_stripe.ProductGateway.prototype.found_variation=function(t,e){var i=this.get_product_data();i.price=e.display_price,i.needs_shipping=!e.is_virtual,this.set_product_data(i),this.enable_payment_button()},wc_stripe.ProductGateway.prototype.reset_variation_data=function(){this.disable_payment_button()},wc_stripe.ProductGateway.prototype.disable_payment_button=function(){this.$button&&this.get_button().prop("disabled",!0).addClass("disabled")},wc_stripe.ProductGateway.prototype.enable_payment_button=function(){this.$button&&this.get_button().prop("disabled",!1).removeClass("disabled")},wc_stripe.ProductGateway.prototype.get_button=function(){return this.$button},wc_stripe.ProductGateway.prototype.is_variable_product=function(){return e('[name="variation_id"]').length>0},wc_stripe.ProductGateway.prototype.needs_shipping=function(){return this.get_product_data().needs_shipping},wc_stripe.ProductGateway.prototype.get_product_data=function(){return e("#wc_stripe_product_data").data("product")},wc_stripe.ProductGateway.prototype.set_product_data=function(t){e("#wc_stripe_product_data").data("product",t)},wc_stripe.ProductGateway.prototype.add_to_cart=function(){return new Promise(function(t,i){this.block(),e.ajax({url:this.params.routes.add_to_cart,method:"POST",dataType:"json",data:{product_id:e("#product_id").val(),variation_id:this.is_variable_product()?e('[name="variation_id"]').val():0,qty:e('[name="quantity"]').val(),payment_method:this.gateway_id},beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",this.params.rest_nonce)}.bind(this)}).done(function(a,n,s){this.unblock(),e(document.body).triggerHandler("wc_stripe_updated_rest_nonce",s.getResponseHeader("X-WP-Nonce")),a.code?(this.submit_error(a.message),i(a)):(this.set_total_price(a.data.total),this.set_total_price_cents(a.data.totalCents),this.set_display_items(a.data.displayItems),t(a.data))}.bind(this)).fail(function(t,e,i){this.unblock(),this.submit_error(i)}.bind(this))}.bind(this))},wc_stripe.CartGateway=function(){this.container="li.payment_method_"+this.gateway_id,this.message_container="div.woocommerce",e(document.body).on("updated_wc_div",this.updated_html.bind(this)),e(document.body).on("updated_cart_totals",this.updated_html.bind(this))},wc_stripe.CartGateway.prototype.needs_shipping=function(){return 1===e("#wc_stripe_needs_shipping").data("value")},wc_stripe.CartGateway.prototype.submit_error=function(t){this.submit_message(t)},wc_stripe.CartGateway.prototype.updated_html=function(t){},wc_stripe.GooglePay=function(){};const a={apiVersion:2,apiVersionMinor:0},n={type:"CARD",parameters:{allowedAuthMethods:["PAN_ONLY"],allowedCardNetworks:["AMEX","DISCOVER","INTERAC","JCB","MASTERCARD","VISA"]}};wc_stripe.GooglePay.prototype.address_mappings=function(t){return{name:{set:function(t,i){var a=t.split(" ");e(i+"_first_name").val(a[0]),e(i+"_last_name").val(a[1])},get:function(t){return e(t+"_first_name").val()+e(t+"_last_name").val()}},postalCode:{set:function(t,i){e(i+"_postcode").val(t)},get:function(t){return e(t+"_postcode").val()}},countryCode:{set:function(t,i){e(i+"_country").val(t)},get:function(t){return e(t+"_country").val()}},phoneNumber:{set:function(t,i){e("#billing_phone").val(t)},get:function(){return"#billing_phone".val()}},address1:{set:function(t,i){e(i+"_address_1").val(t)},get:function(t){return e(t+"_address_1").val()}},address2:{set:function(t,i){e(i+"_address_2").val(t)},get:function(t){return e(t+"_address_2").val()}},locality:{set:function(t,i){e(i+"_city").val(t)},get:function(t){return e(t+"_city").val()}},administrativeArea:{set:function(t,i){e(i+"_state").val(t)},get:function(t){return e(t+"_state").val()}}}},wc_stripe.GooglePay.prototype.populate_address_fields=function(t){var i=t.paymentMethodData.info.billingAddress,a=this.address_mappings();for(var n in i)a[n]&&a[n].set.call(this,i[n],"#billing");if(t.shippingAddress)for(var n in t.shippingAddress)a[n]&&a[n].set.call(this,t.shippingAddress[n],"#shipping");t.email&&e("#billing_email").val(t.email),this.maybe_set_ship_to_different(),e('[name="billing_country"]').trigger("change")},wc_stripe.GooglePay.prototype.map_address=function(t){return{city:t.locality,postcode:t.postalCode,state:t.administrativeArea,country:t.countryCode}},wc_stripe.GooglePay.prototype.update_payment_data=function(t){return new Promise(function(i,a){e.when(e.ajax({url:this.params.routes.payment_data,dataType:"json",method:"POST",data:{shipping_address:this.map_address(t.shippingAddress),shipping_methods:this.map_shipping_methods(t.shippingOptionData.id),shipping_method_id:t.shippingOptionData.id},beforeSend:function(t){t.setRequestHeader("X-WP-Nonce",this.params.rest_nonce)}.bind(this)})).done(function(t){t.code?a(t.data.data):i(t.data)}.bind(this)).fail(function(){a()}.bind(this))}.bind(this))},wc_stripe.GooglePay.prototype.on_payment_data_changed=function(t){return new Promise(function(e,i){this.update_payment_data(t).then(function(i){e(i.paymentRequestUpdate),this.set_selected_shipping_methods(i.shipping_methods),this.payment_data_updated(i,t)}.bind(this)).catch(function(t){e(t)}.bind(this))}.bind(this))},wc_stripe.GooglePay.prototype.payment_data_updated=function(t){},wc_stripe.GooglePay.prototype.get_googlepay_display_items=function(){return e("#googlepay_display_items").data("items")},wc_stripe.GooglePay.prototype.set_googlepay_display_items=function(t){e("#googlepay_display_items").data("items",t)},wc_stripe.GooglePay.prototype.get_shipping_options=function(){return e("#googlepay_shipping_options").data("items")},wc_stripe.GooglePay.prototype.get_merchant_info=function(){return{merchantId:this.params.merchant_id,merchantName:this.params.merchant_name}},wc_stripe.GooglePay.prototype.get_payment_options=function(){var t={environment:this.params.environment,merchantInfo:this.get_merchant_info()};return this.needs_shipping()&&this.get_total_price_cents()>0?t.paymentDataCallbacks={onPaymentDataChanged:this.on_payment_data_changed.bind(this)}:t.paymentDataCallbacks={onPaymentAuthorized:function(t){return new Promise(function(t,e){t({transactionState:"SUCCESS"})}.bind(this))}},t},wc_stripe.GooglePay.prototype.build_payment_request=function(){var t=e.extend({},a,{emailRequired:!0,merchantInfo:this.get_merchant_info(),allowedPaymentMethods:[e.extend({type:"CARD",tokenizationSpecification:{type:"PAYMENT_GATEWAY",parameters:{gateway:"stripe","stripe:version":"2018-10-31","stripe:publishableKey":this.params.api_key}}},n)],shippingAddressRequired:this.needs_shipping()&&this.get_total_price_cents()>0,shippingOptionRequired:this.needs_shipping()&&this.get_total_price_cents()>0,transactionInfo:{currencyCode:this.get_currency(),totalPriceStatus:"ESTIMATED",totalPrice:this.get_total_price().toString(),displayItems:this.get_googlepay_display_items(),totalPriceLabel:this.params.total_price_label}});return t.allowedPaymentMethods[0].parameters.billingAddressRequired=!0,t.allowedPaymentMethods[0].parameters.billingAddressParameters={format:"FULL",phoneNumberRequired:e("#billing_phone").length>0},this.needs_shipping()&&this.get_total_price_cents()>0?(t.shippingAddressParameters={},t.shippingOptionParameters={shippingOptions:this.get_shipping_options()},t.callbackIntents=["SHIPPING_ADDRESS","SHIPPING_OPTION"]):t.callbackIntents=["PAYMENT_AUTHORIZATION"],t},wc_stripe.GooglePay.prototype.createPaymentsClient=function(){this.paymentsClient=new google.payments.api.PaymentsClient(this.get_payment_options())},wc_stripe.GooglePay.prototype.isReadyToPay=function(){return new Promise(function(t){var i=e.extend({},a);i.allowedPaymentMethods=[n],this.paymentsClient.isReadyToPay(i).then(function(){this.can_pay=!0,this.create_button(),t()}.bind(this)).catch(function(t){this.submit_error(t)}.bind(this))}.bind(this))},wc_stripe.GooglePay.prototype.create_button=function(){this.$button&&this.$button.remove(),this.$button=e(this.paymentsClient.createButton({onClick:this.start.bind(this),buttonColor:this.params.button_color,buttonType:this.params.button_style})),this.$button.addClass("gpay-button-container")},wc_stripe.GooglePay.prototype.start=function(){this.createPaymentsClient(),this.paymentsClient.loadPaymentData(this.build_payment_request()).then(function(t){var e=JSON.parse(t.paymentMethodData.tokenizationData.token);this.populate_address_fields(t),this.on_token_received(e)}.bind(this)).catch(function(t){"CANCELED"!==t.statusCode&&(t.statusMessage&&t.statusMessage.indexOf("paymentDataRequest.callbackIntent")>-1?this.submit_error_code("DEVELOPER_ERROR_WHITELIST"):this.submit_error(t.statusMessage))}.bind(this))},wc_stripe.ApplePay=function(){},wc_stripe.ApplePay.prototype.initialize=function(){e(document.body).on("click",".apple-pay-button",this.start.bind(this)),this.createPaymentRequest(),this.canMakePayment()},wc_stripe.ApplePay.prototype.create_button=function(){this.$button&&this.$button.remove(),this.$button=e(this.params.button),this.append_button()},wc_stripe.ApplePay.prototype.canMakePayment=function(){return new Promise(function(t,i){this.paymentRequest.canMakePayment().then(function(i){i&&i.applePay&&(this.can_pay=!0,this.create_button(),e(this.container).show(),t(i))}.bind(this))}.bind(this))},wc_stripe.ApplePay.prototype.start=function(t){t.preventDefault(),this.paymentRequest.update(this.get_payment_request_update({total:{pending:!1}})),this.paymentRequest.show()},wc_stripe.PaymentRequest=function(){},wc_stripe.PaymentRequest.prototype.initialize=function(){this.createPaymentRequest(),this.canMakePayment(),this.paymentRequestButton=this.createPaymentRequestButton(),this.paymentRequestButton.on("click",this.button_click.bind(this))},wc_stripe.PaymentRequest.prototype.button_click=function(t){},wc_stripe.PaymentRequest.prototype.createPaymentRequestButton=function(){return this.elements.create("paymentRequestButton",{paymentRequest:this.paymentRequest,style:{paymentRequestButton:{type:this.params.button.type,theme:this.params.button.theme,height:this.params.button.height}}})},wc_stripe.PaymentRequest.prototype.canMakePayment=function(){return new Promise(function(t,i){this.paymentRequest.canMakePayment().then(function(i){i&&!i.applePay&&(this.can_pay=!0,this.create_button(),e(this.container).show(),t(i))}.bind(this))}.bind(this))},wc_stripe.PaymentRequest.prototype.create_button=function(){this.paymentRequestButton.mount("#wc-stripe-payment-request-container")}}(window,jQuery);
i18n/languages/woo-stripe.pot ADDED
@@ -0,0 +1,1466 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
2
+ msgid ""
3
+ msgstr ""
4
+ "Project-Id-Version: woo-stripe\n"
5
+ "POT-Creation-Date: 2019-08-23 12:35-0700\n"
6
+ "PO-Revision-Date: 2019-08-16 14:27-0700\n"
7
+ "Last-Translator: \n"
8
+ "Language-Team: \n"
9
+ "Language: en\n"
10
+ "MIME-Version: 1.0\n"
11
+ "Content-Type: text/plain; charset=UTF-8\n"
12
+ "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 2.1.1\n"
14
+ "X-Poedit-Basepath: ../..\n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "X-Poedit-KeywordsList: __;_e;_x\n"
17
+ "X-Poedit-SearchPath-0: includes\n"
18
+ "X-Poedit-SearchPath-1: templates\n"
19
+ "X-Poedit-SearchPath-2: stripe-payments.php\n"
20
+
21
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:60
22
+ #, php-format
23
+ msgid "Error processing payment. Reason: %s"
24
+ msgstr ""
25
+
26
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:61
27
+ #, php-format
28
+ msgid "Error processing payment. Reason: %s. Code: %s"
29
+ msgstr ""
30
+
31
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:72
32
+ #, php-format
33
+ msgid "Order charge successful in Stripe. Charge: %s. Payment Method: %s"
34
+ msgstr ""
35
+
36
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:116
37
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:188
38
+ #, php-format
39
+ msgid "Order amount captured in Stripe. Amount: %s"
40
+ msgstr ""
41
+
42
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:120
43
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:192
44
+ #, php-format
45
+ msgid "Error capturing charge in Stripe. Reason: %s"
46
+ msgstr ""
47
+
48
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:132
49
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:202
50
+ #, php-format
51
+ msgid "Error voiding charge. Reason: %s"
52
+ msgstr ""
53
+
54
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:134
55
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:204
56
+ msgid "Charge voided in Stripe."
57
+ msgstr ""
58
+
59
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:159
60
+ #, php-format
61
+ msgid ""
62
+ "Recurring payment for subscription failed. Reason: %s. Payment method: %s"
63
+ msgstr ""
64
+
65
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:163
66
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:235
67
+ #, php-format
68
+ msgid "Recurring payment captured in Stripe. Payment method: %s"
69
+ msgstr ""
70
+
71
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:165
72
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:237
73
+ #, php-format
74
+ msgid "Recurring payment authorized in Stripe. Payment method: %s"
75
+ msgstr ""
76
+
77
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-charge.php:177
78
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:269
79
+ #, php-format
80
+ msgid "Error deleting Stripe card. Token Id: %s"
81
+ msgstr ""
82
+
83
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php:76
84
+ #, php-format
85
+ msgid "Error creating payment source. Reason: %s"
86
+ msgstr ""
87
+
88
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php:174
89
+ #, php-format
90
+ msgid "Order %s"
91
+ msgstr ""
92
+
93
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php:211
94
+ #, php-format
95
+ msgid "Gateway will appear when store currency is <strong>%s</strong>."
96
+ msgstr ""
97
+
98
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php:214
99
+ #, php-format
100
+ msgid "& billing country is <strong>%s</strong>"
101
+ msgstr ""
102
+
103
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:82
104
+ #, php-format
105
+ msgid "Order %s successful in Stripe. Charge: %s. Payment Method: %s"
106
+ msgstr ""
107
+
108
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:82
109
+ msgid "charge"
110
+ msgstr ""
111
+
112
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:82
113
+ msgid "authorization"
114
+ msgstr ""
115
+
116
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:110
117
+ msgid "A new payment method is required."
118
+ msgstr ""
119
+
120
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:224
121
+ #, php-format
122
+ msgid "Recurring payment for order failed. Reason: %s"
123
+ msgstr ""
124
+
125
+ #: includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php:241
126
+ #, php-format
127
+ msgid "Customer must manually complete payment for payment method %s"
128
+ msgstr ""
129
+
130
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:289
131
+ msgid ""
132
+ "Please read and accept the terms and conditions to proceed with your order."
133
+ msgstr ""
134
+
135
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:302
136
+ #: includes/controllers/class-wc-stripe-controller-cart.php:99
137
+ #: includes/controllers/class-wc-stripe-controller-cart.php:139
138
+ #: includes/controllers/class-wc-stripe-controller-googlepay.php:116
139
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:70
140
+ msgid "Total"
141
+ msgstr ""
142
+
143
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:360
144
+ #, php-format
145
+ msgid "Error saving your payment method. Reason: %s"
146
+ msgstr ""
147
+
148
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:371
149
+ #, php-format
150
+ msgid "Error saving payment method. Reason: %s"
151
+ msgstr ""
152
+
153
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:383
154
+ msgid "Transaction Id cannot be empty."
155
+ msgstr ""
156
+
157
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:390
158
+ #, php-format
159
+ msgid "Order refunded in Stripe. Amount: %s"
160
+ msgstr ""
161
+
162
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:575
163
+ #: includes/admin/meta-boxes/views/html-order-pay.php:42
164
+ msgid "New Card"
165
+ msgstr ""
166
+
167
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:579
168
+ #: includes/admin/meta-boxes/views/html-order-pay.php:30
169
+ msgid "Saved Cards"
170
+ msgstr ""
171
+
172
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:777
173
+ #, php-format
174
+ msgid "Attemp to save payment method failed. Reason: %s"
175
+ msgstr ""
176
+
177
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:797
178
+ msgid ""
179
+ "We were not able to save your payment method. To prevent billing issues with "
180
+ "your subscription, please add a payment method to the subscription."
181
+ msgstr ""
182
+
183
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:799
184
+ #, php-format
185
+ msgid "We were not able to save your payment method. Reason: %s"
186
+ msgstr ""
187
+
188
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:831
189
+ msgid "Payment Method Token"
190
+ msgstr ""
191
+
192
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:857
193
+ #, php-format
194
+ msgid "Error saving payment method for subscription. Reason: %s"
195
+ msgstr ""
196
+
197
+ #: includes/abstract/abstract-wc-payment-gateway-stripe.php:906
198
+ #, php-format
199
+ msgid "Order %s from %s"
200
+ msgstr ""
201
+
202
+ #: includes/abstract/abstract-wc-stripe-rest-controller.php:56
203
+ msgid "You do not have permissions to access this resource."
204
+ msgstr ""
205
+
206
+ #: includes/admin/class-wc-stripe-admin-menus.php:23
207
+ msgid "Stripe Gateway"
208
+ msgstr ""
209
+
210
+ #: includes/admin/class-wc-stripe-admin-menus.php:27
211
+ msgid "Settings"
212
+ msgstr ""
213
+
214
+ #: includes/admin/class-wc-stripe-admin-menus.php:28
215
+ msgid "Logs"
216
+ msgstr ""
217
+
218
+ #: includes/admin/class-wc-stripe-admin-menus.php:34
219
+ #: includes/admin/views/html-settings-nav.php:17
220
+ #: includes/class-wc-stripe-install.php:21
221
+ msgid "Documentation"
222
+ msgstr ""
223
+
224
+ #: includes/admin/class-wc-stripe-admin-settings.php:73
225
+ msgid "Local Gateways"
226
+ msgstr ""
227
+
228
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:9
229
+ #: includes/admin/views/html-user-profile.php:34
230
+ #: includes/admin/views/html-user-profile.php:68
231
+ msgid "Actions"
232
+ msgstr ""
233
+
234
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:13
235
+ msgid "capture amount"
236
+ msgstr ""
237
+
238
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:14
239
+ #: includes/admin/meta-boxes/views/html-order-pay.php:23
240
+ #: includes/gateways/settings/applepay-settings.php:41
241
+ #: includes/gateways/settings/cc-settings.php:41
242
+ #: includes/gateways/settings/googlepay-settings.php:49
243
+ #: includes/gateways/settings/payment-request-settings.php:42
244
+ msgid "Capture"
245
+ msgstr ""
246
+
247
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:15
248
+ msgid "Void"
249
+ msgstr ""
250
+
251
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:22
252
+ msgid "Charge Data"
253
+ msgstr ""
254
+
255
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:24
256
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:29
257
+ msgid "Mode"
258
+ msgstr ""
259
+
260
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:25
261
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:33
262
+ msgid "Live"
263
+ msgstr ""
264
+
265
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:25
266
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:32
267
+ msgid "Test"
268
+ msgstr ""
269
+
270
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:28
271
+ msgid "Status"
272
+ msgstr ""
273
+
274
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:33
275
+ msgid "Payment Intent"
276
+ msgstr ""
277
+
278
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:39
279
+ msgid "Customer"
280
+ msgstr ""
281
+
282
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:45
283
+ #: includes/admin/views/html-user-profile.php:32
284
+ #: includes/admin/views/html-user-profile.php:66
285
+ msgid "Payment Method"
286
+ msgstr ""
287
+
288
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:47
289
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:44
290
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:46
291
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:42
292
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:45
293
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:45
294
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:44
295
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:46
296
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:49
297
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:46
298
+ #: includes/gateways/settings/applepay-settings.php:16
299
+ #: includes/gateways/settings/cc-settings.php:16
300
+ #: includes/gateways/settings/googlepay-settings.php:24
301
+ #: includes/gateways/settings/payment-request-settings.php:17
302
+ msgid "Title"
303
+ msgstr ""
304
+
305
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:51
306
+ #: includes/gateways/settings/payment-request-settings.php:87
307
+ msgid "Type"
308
+ msgstr ""
309
+
310
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:56
311
+ msgid "Exp"
312
+ msgstr ""
313
+
314
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:60
315
+ msgid "Fingerprint"
316
+ msgstr ""
317
+
318
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:64
319
+ msgid "CVC check"
320
+ msgstr ""
321
+
322
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:68
323
+ msgid "Postal check"
324
+ msgstr ""
325
+
326
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:72
327
+ msgid "Street check"
328
+ msgstr ""
329
+
330
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:78
331
+ msgid "Riska Data"
332
+ msgstr ""
333
+
334
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:80
335
+ msgid "Score"
336
+ msgstr ""
337
+
338
+ #: includes/admin/meta-boxes/views/html-charge-data-subview.php:84
339
+ msgid "Level"
340
+ msgstr ""
341
+
342
+ #: includes/admin/meta-boxes/views/html-order-actions.php:1
343
+ msgid "Charge Status"
344
+ msgstr ""
345
+
346
+ #: includes/admin/meta-boxes/views/html-order-actions.php:5
347
+ msgid "Authorization Expires"
348
+ msgstr ""
349
+
350
+ #: includes/admin/meta-boxes/views/html-order-actions.php:12
351
+ msgid "There are no actions available at this time."
352
+ msgstr ""
353
+
354
+ #: includes/admin/meta-boxes/views/html-order-charge-data.php:2
355
+ msgid "Transaction Data / Actions"
356
+ msgstr ""
357
+
358
+ #: includes/admin/meta-boxes/views/html-order-pay.php:2
359
+ msgid "Pay for Order"
360
+ msgstr ""
361
+
362
+ #: includes/admin/meta-boxes/views/html-order-pay.php:3
363
+ msgid ""
364
+ "Admins can process customer orders over the phone using this functionality."
365
+ msgstr ""
366
+
367
+ #: includes/admin/meta-boxes/views/html-order-pay.php:21
368
+ #: includes/gateways/settings/applepay-settings.php:37
369
+ #: includes/gateways/settings/cc-settings.php:37
370
+ #: includes/gateways/settings/googlepay-settings.php:45
371
+ #: includes/gateways/settings/payment-request-settings.php:38
372
+ msgid "Charge Type"
373
+ msgstr ""
374
+
375
+ #: includes/admin/meta-boxes/views/html-order-pay.php:24
376
+ #: includes/gateways/settings/applepay-settings.php:42
377
+ #: includes/gateways/settings/cc-settings.php:42
378
+ #: includes/gateways/settings/googlepay-settings.php:50
379
+ #: includes/gateways/settings/payment-request-settings.php:43
380
+ msgid "Authorize"
381
+ msgstr ""
382
+
383
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:6
384
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:26
385
+ msgid "API Settings"
386
+ msgstr ""
387
+
388
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:36
389
+ msgid ""
390
+ "The mode determines if you are processing test transaction or live "
391
+ "transactions on your site. Test mode allows you to simulate payments so you "
392
+ "can test your integration."
393
+ msgstr ""
394
+
395
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:39
396
+ msgid "Test Publishable Key"
397
+ msgstr ""
398
+
399
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:42
400
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:64
401
+ msgid "Your publishable key is used to initialize Stripe assets."
402
+ msgstr ""
403
+
404
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:50
405
+ msgid "Test Secret Key"
406
+ msgstr ""
407
+
408
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:53
409
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:75
410
+ msgid "Your secret key is used to authenticate requests to Stripe."
411
+ msgstr ""
412
+
413
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:61
414
+ msgid "Live Publishable Key"
415
+ msgstr ""
416
+
417
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:72
418
+ msgid "Live Secret Key"
419
+ msgstr ""
420
+
421
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:84
422
+ msgid "Webhook url"
423
+ msgstr ""
424
+
425
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:87
426
+ #, php-format
427
+ msgid ""
428
+ "<strong>Important:</strong> the webhook url is called by Stripe when events "
429
+ "occur in your account, like a source becomes chargeable. You must add this "
430
+ "webhook to your Stripe Dashboard if you are using any of the local gateways. "
431
+ "%sWebhook guide%s"
432
+ msgstr ""
433
+
434
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:91
435
+ msgid "Webhook Secret"
436
+ msgstr ""
437
+
438
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:92
439
+ msgid ""
440
+ "The webhook secret is used to authenticate webhooks sent from Stripe. It "
441
+ "ensures no 3rd party can send you events, pretending to be Stripe."
442
+ msgstr ""
443
+
444
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:95
445
+ msgid "Debug Log"
446
+ msgstr ""
447
+
448
+ #: includes/admin/settings/class-wc-stripe-api-settings.php:99
449
+ msgid ""
450
+ "When enabled, the plugin logs important errors and info that can help you "
451
+ "troubleshoot potential issues."
452
+ msgstr ""
453
+
454
+ #: includes/admin/views/html-user-profile.php:7
455
+ msgid "Stripe Customer ID's"
456
+ msgstr ""
457
+
458
+ #: includes/admin/views/html-user-profile.php:8
459
+ msgid ""
460
+ "If you change a customer ID, the customer's payment methods will be imported "
461
+ "from your Stripe account."
462
+ msgstr ""
463
+
464
+ #: includes/admin/views/html-user-profile.php:9
465
+ msgid ""
466
+ "If you remove a customer ID, the customer's payment methods will be removed "
467
+ "from the WC payment methods table."
468
+ msgstr ""
469
+
470
+ #: includes/admin/views/html-user-profile.php:13
471
+ msgid "Live ID"
472
+ msgstr ""
473
+
474
+ #: includes/admin/views/html-user-profile.php:19
475
+ msgid "Test ID"
476
+ msgstr ""
477
+
478
+ #: includes/admin/views/html-user-profile.php:26
479
+ msgid "Stripe Live Payment Methods"
480
+ msgstr ""
481
+
482
+ #: includes/admin/views/html-user-profile.php:31
483
+ #: includes/admin/views/html-user-profile.php:65
484
+ msgid "Payment Gateway"
485
+ msgstr ""
486
+
487
+ #: includes/admin/views/html-user-profile.php:33
488
+ #: includes/admin/views/html-user-profile.php:67
489
+ msgid "Token"
490
+ msgstr ""
491
+
492
+ #: includes/admin/views/html-user-profile.php:47
493
+ #: includes/admin/views/html-user-profile.php:81
494
+ msgid "Action"
495
+ msgstr ""
496
+
497
+ #: includes/admin/views/html-user-profile.php:50
498
+ #: includes/admin/views/html-user-profile.php:84
499
+ msgid "No Action"
500
+ msgstr ""
501
+
502
+ #: includes/admin/views/html-user-profile.php:51
503
+ #: includes/admin/views/html-user-profile.php:85
504
+ msgid "Delete"
505
+ msgstr ""
506
+
507
+ #: includes/admin/views/html-user-profile.php:58
508
+ msgid "No live payment methods saved"
509
+ msgstr ""
510
+
511
+ #: includes/admin/views/html-user-profile.php:60
512
+ msgid "Stripe Test Payment Methods"
513
+ msgstr ""
514
+
515
+ #: includes/admin/views/html-user-profile.php:92
516
+ msgid "No test payment methods saved"
517
+ msgstr ""
518
+
519
+ #: includes/admin/views/html-user-profile.php:94
520
+ #, php-format
521
+ msgid ""
522
+ "%snote:%s payment methods will be deleted in Stripe if you use the delete "
523
+ "action."
524
+ msgstr ""
525
+
526
+ #: includes/class-wc-stripe-customer-manager.php:30
527
+ #: includes/class-wc-stripe-customer-manager.php:40
528
+ #, php-format
529
+ msgid "Error saving customer. Reason: %s"
530
+ msgstr ""
531
+
532
+ #: includes/class-wc-stripe-frontend-notices.php:35
533
+ msgid ""
534
+ "Your payment is being processed and your order status will be updated once "
535
+ "the funds are received."
536
+ msgstr ""
537
+
538
+ #: includes/class-wc-stripe-gateway.php:173
539
+ #, php-format
540
+ msgid "Error capturing charge. Reason: %s"
541
+ msgstr ""
542
+
543
+ #: includes/class-wc-stripe-redirect-handler.php:40
544
+ #, php-format
545
+ msgid "Error retrieving payment source. Reason: %s"
546
+ msgstr ""
547
+
548
+ #: includes/class-wc-stripe-redirect-handler.php:44
549
+ msgid "Payment authorization failed. Please select another payment method."
550
+ msgstr ""
551
+
552
+ #: includes/class-wc-stripe-redirect-handler.php:51
553
+ msgid ""
554
+ "Status updated to on hold. Charge will be created when source.chargeable "
555
+ "webhook received."
556
+ msgstr ""
557
+
558
+ #: includes/class-wc-stripe-rest-api.php:42
559
+ #, php-format
560
+ msgid "%1$s is an invalid controller name."
561
+ msgstr ""
562
+
563
+ #: includes/controllers/class-wc-stripe-controller-cart.php:69
564
+ msgid "Quantity must be greater than zero."
565
+ msgstr ""
566
+
567
+ #: includes/controllers/class-wc-stripe-controller-checkout.php:118
568
+ #, php-format
569
+ msgid ""
570
+ "Some required fields were missing. Please click %shere%s to complete your "
571
+ "payment."
572
+ msgstr ""
573
+
574
+ #: includes/controllers/class-wc-stripe-controller-gateway-settings.php:54
575
+ msgid ""
576
+ "You cannot register your domain until you have configured your Live API keys."
577
+ msgstr ""
578
+
579
+ #: includes/controllers/class-wc-stripe-controller-gateway-settings.php:61
580
+ #, php-format
581
+ msgid ""
582
+ "Domain %s registered successfully. You can confirm in your Stripe Dashboard "
583
+ "at https://dashboard.stripe.com/account/apple_pay."
584
+ msgstr ""
585
+
586
+ #: includes/controllers/class-wc-stripe-controller-googlepay.php:83
587
+ msgid "Your shipping address is not serviceable."
588
+ msgstr ""
589
+
590
+ #: includes/controllers/class-wc-stripe-controller-order-actions.php:115
591
+ msgid "Invalid amount entered."
592
+ msgstr ""
593
+
594
+ #: includes/controllers/class-wc-stripe-controller-order-actions.php:166
595
+ #: includes/controllers/class-wc-stripe-controller-order-actions.php:169
596
+ msgid "Order total must be greater than zero."
597
+ msgstr ""
598
+
599
+ #: includes/controllers/class-wc-stripe-controller-order-actions.php:174
600
+ #, php-format
601
+ msgid ""
602
+ "This order has already been processed. Transaction ID: %s. Payment method: %s"
603
+ msgstr ""
604
+
605
+ #: includes/controllers/class-wc-stripe-controller-order-actions.php:183
606
+ msgid "Order customer Id and payment method customer Id do not match."
607
+ msgstr ""
608
+
609
+ #: includes/controllers/class-wc-stripe-controller-payment-intent.php:40
610
+ #, php-format
611
+ msgid "Error creating payment intent. Reason: %s"
612
+ msgstr ""
613
+
614
+ #: includes/controllers/class-wc-stripe-controller-webhook.php:41
615
+ #: includes/controllers/class-wc-stripe-controller-webhook.php:42
616
+ msgid "Invalid signaute received. Verify that your webhook secret is correct."
617
+ msgstr ""
618
+
619
+ #: includes/gateways/class-wc-payment-gateway-stripe-applepay.php:14
620
+ #: includes/gateways/settings/applepay-settings.php:17
621
+ msgid "Apple Pay"
622
+ msgstr ""
623
+
624
+ #: includes/gateways/class-wc-payment-gateway-stripe-applepay.php:17
625
+ msgid "Stripe Apple Pay"
626
+ msgstr ""
627
+
628
+ #: includes/gateways/class-wc-payment-gateway-stripe-applepay.php:18
629
+ msgid "Apple Pay gateway that integrates with your Stripe account."
630
+ msgstr ""
631
+
632
+ #: includes/gateways/class-wc-payment-gateway-stripe-applepay.php:57
633
+ msgid "Please update you product quantity before using Apple Pay."
634
+ msgstr ""
635
+
636
+ #: includes/gateways/class-wc-payment-gateway-stripe-cc.php:12
637
+ #: includes/gateways/settings/cc-settings.php:17
638
+ msgid "Credit Cards"
639
+ msgstr ""
640
+
641
+ #: includes/gateways/class-wc-payment-gateway-stripe-cc.php:15
642
+ msgid "Stripe Credit Cards"
643
+ msgstr ""
644
+
645
+ #: includes/gateways/class-wc-payment-gateway-stripe-cc.php:16
646
+ msgid "Credit card gateway that integrates with your Stripe account."
647
+ msgstr ""
648
+
649
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:17
650
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:20
651
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:23
652
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:45
653
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:21
654
+ msgid "EPS"
655
+ msgstr ""
656
+
657
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:21
658
+ msgid "EPS gateway that integrates with your Stripe account."
659
+ msgstr ""
660
+
661
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:33
662
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:35
663
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:31
664
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:34
665
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:34
666
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:33
667
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:35
668
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:38
669
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:35
670
+ #: includes/gateways/settings/applepay-settings.php:7
671
+ #: includes/gateways/settings/cc-settings.php:4
672
+ #: includes/gateways/settings/googlepay-settings.php:10
673
+ #: includes/gateways/settings/payment-request-settings.php:8
674
+ msgid "Enabled"
675
+ msgstr ""
676
+
677
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:37
678
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:37
679
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:39
680
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:39
681
+ msgid "If enabled, your site can accept P24 payments through Stripe."
682
+ msgstr ""
683
+
684
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:41
685
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:43
686
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:39
687
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:42
688
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:42
689
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:41
690
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:43
691
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:46
692
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:43
693
+ #: includes/gateways/settings/applepay-settings.php:13
694
+ #: includes/gateways/settings/cc-settings.php:13
695
+ #: includes/gateways/settings/googlepay-settings.php:16
696
+ #: includes/gateways/settings/payment-request-settings.php:14
697
+ msgid "General Settings"
698
+ msgstr ""
699
+
700
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:47
701
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:47
702
+ msgid "Title of the p24 gateway"
703
+ msgstr ""
704
+
705
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:50
706
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:52
707
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:48
708
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:51
709
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:51
710
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:50
711
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:52
712
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:55
713
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:52
714
+ #: includes/gateways/settings/applepay-settings.php:22
715
+ #: includes/gateways/settings/cc-settings.php:22
716
+ #: includes/gateways/settings/googlepay-settings.php:30
717
+ #: includes/gateways/settings/payment-request-settings.php:23
718
+ msgid "Description"
719
+ msgstr ""
720
+
721
+ #: includes/gateways/class-wc-payment-gateway-stripe-eps.php:52
722
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:54
723
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:50
724
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:53
725
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:53
726
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:52
727
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:54
728
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:57
729
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:54
730
+ #: includes/gateways/settings/applepay-settings.php:24
731
+ #: includes/gateways/settings/cc-settings.php:24
732
+ #: includes/gateways/settings/googlepay-settings.php:32
733
+ #: includes/gateways/settings/payment-request-settings.php:25
734
+ msgid "Leave blank if you don't want a description to show for the gateway."
735
+ msgstr ""
736
+
737
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:19
738
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:22
739
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:25
740
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:47
741
+ msgid "Giropay"
742
+ msgstr ""
743
+
744
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:23
745
+ msgid "Giropay gateway that integrates with your Stripe account."
746
+ msgstr ""
747
+
748
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:39
749
+ msgid "If enabled, your site can Giropay card payments through Stripe."
750
+ msgstr ""
751
+
752
+ #: includes/gateways/class-wc-payment-gateway-stripe-giropay.php:49
753
+ msgid "Title of the Giropay gateway"
754
+ msgstr ""
755
+
756
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:16
757
+ #: includes/gateways/settings/googlepay-settings.php:25
758
+ msgid "Google Pay"
759
+ msgstr ""
760
+
761
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:19
762
+ msgid "Stripe Google Pay"
763
+ msgstr ""
764
+
765
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:20
766
+ msgid "Google Pay gateway that integrates with your Stripe account."
767
+ msgstr ""
768
+
769
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:75
770
+ msgid "Please update you product quantity before using Google Pay."
771
+ msgstr ""
772
+
773
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:86
774
+ #: includes/wc-stripe-functions.php:358
775
+ msgid "Subscription"
776
+ msgstr ""
777
+
778
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:106
779
+ #: includes/wc-stripe-functions.php:344
780
+ msgid "Shipping"
781
+ msgstr ""
782
+
783
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:113
784
+ #: includes/wc-stripe-functions.php:351
785
+ msgid "Tax"
786
+ msgstr ""
787
+
788
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:144
789
+ #: includes/wc-stripe-functions.php:409
790
+ msgid "Waiting..."
791
+ msgstr ""
792
+
793
+ #: includes/gateways/class-wc-payment-gateway-stripe-googlepay.php:145
794
+ #: includes/wc-stripe-functions.php:410
795
+ msgid "loading shipping methods..."
796
+ msgstr ""
797
+
798
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:17
799
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:18
800
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:21
801
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:43
802
+ msgid "iDEAL"
803
+ msgstr ""
804
+
805
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:19
806
+ msgid "Ideal gateway that integrates with your Stripe account."
807
+ msgstr ""
808
+
809
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:35
810
+ #: includes/gateways/settings/cc-settings.php:7
811
+ msgid "If enabled, your site can accept credit card payments through Stripe."
812
+ msgstr ""
813
+
814
+ #: includes/gateways/class-wc-payment-gateway-stripe-ideal.php:45
815
+ msgid "Title of the iDEAL gateway"
816
+ msgstr ""
817
+
818
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:18
819
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:21
820
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:24
821
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:46
822
+ msgid "Klarna"
823
+ msgstr ""
824
+
825
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:22
826
+ msgid "Klarna gateway that integrates with your Stripe account."
827
+ msgstr ""
828
+
829
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:38
830
+ msgid "If enabled, your site can accept Klarna payments through Stripe."
831
+ msgstr ""
832
+
833
+ #: includes/gateways/class-wc-payment-gateway-stripe-klarna.php:48
834
+ msgid "Title of the Klarna gateway"
835
+ msgstr ""
836
+
837
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:18
838
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:24
839
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:46
840
+ msgid "Multibanco"
841
+ msgstr ""
842
+
843
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:22
844
+ msgid "Multibanco gateway that integrates with your Stripe account."
845
+ msgstr ""
846
+
847
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:38
848
+ msgid "If enabled, your site can accept Multibanco payments through Stripe."
849
+ msgstr ""
850
+
851
+ #: includes/gateways/class-wc-payment-gateway-stripe-multibanco.php:48
852
+ msgid "Title of the Multibanco gateway"
853
+ msgstr ""
854
+
855
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:17
856
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:20
857
+ msgid "Przelewy24"
858
+ msgstr ""
859
+
860
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:21
861
+ msgid "P24 gateway that integrates with your Stripe account."
862
+ msgstr ""
863
+
864
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:23
865
+ #: includes/gateways/class-wc-payment-gateway-stripe-p24.php:45
866
+ msgid "P24"
867
+ msgstr ""
868
+
869
+ #: includes/gateways/class-wc-payment-gateway-stripe-payment-request.php:16
870
+ msgid "PaymentRequest Gateway"
871
+ msgstr ""
872
+
873
+ #: includes/gateways/class-wc-payment-gateway-stripe-payment-request.php:19
874
+ msgid "Stripe Payment Request"
875
+ msgstr ""
876
+
877
+ #: includes/gateways/class-wc-payment-gateway-stripe-payment-request.php:20
878
+ msgid ""
879
+ "Gateway that renders based on the user's browser. Chrome payment methods, "
880
+ "Microsoft pay, etc."
881
+ msgstr ""
882
+
883
+ #: includes/gateways/class-wc-payment-gateway-stripe-payment-request.php:63
884
+ msgid "Adding to cart..."
885
+ msgstr ""
886
+
887
+ #: includes/gateways/class-wc-payment-gateway-stripe-payment-request.php:64
888
+ msgid "Please select a product option before updating quantity."
889
+ msgstr ""
890
+
891
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:19
892
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:25
893
+ msgid "SEPA"
894
+ msgstr ""
895
+
896
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:22
897
+ msgid "Sepa"
898
+ msgstr ""
899
+
900
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:23
901
+ msgid "Sepa gateway that integrates with your Stripe account."
902
+ msgstr ""
903
+
904
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:47
905
+ msgid "SEPA Direct Debit"
906
+ msgstr ""
907
+
908
+ #: includes/gateways/class-wc-payment-gateway-stripe-sepa.php:49
909
+ msgid "Title of the Sepa gateway"
910
+ msgstr ""
911
+
912
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:22
913
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:25
914
+ msgid "Sofort"
915
+ msgstr ""
916
+
917
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:26
918
+ msgid "Sofort gateway that integrates with your Stripe account."
919
+ msgstr ""
920
+
921
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:28
922
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:50
923
+ msgid "SOFORT"
924
+ msgstr ""
925
+
926
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:42
927
+ msgid "If enabled, your site can accept Sofort payments through Stripe."
928
+ msgstr ""
929
+
930
+ #: includes/gateways/class-wc-payment-gateway-stripe-sofort.php:52
931
+ msgid "Title of the Sofort gateway"
932
+ msgstr ""
933
+
934
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:19
935
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:22
936
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:25
937
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:47
938
+ msgid "WeChat"
939
+ msgstr ""
940
+
941
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:23
942
+ msgid "WeChat gateway that integrates with your Stripe account."
943
+ msgstr ""
944
+
945
+ #: includes/gateways/class-wc-payment-gateway-stripe-wechat.php:49
946
+ msgid "Title of the WeChat gateway"
947
+ msgstr ""
948
+
949
+ #: includes/gateways/settings/applepay-settings.php:4
950
+ msgid "Register Domain"
951
+ msgstr ""
952
+
953
+ #: includes/gateways/settings/applepay-settings.php:4
954
+ #, php-format
955
+ msgid ""
956
+ "This plugin attemps to add the domain association file to your server "
957
+ "automatically when you click the Register Domain button. If that fails due "
958
+ "to file permssions, you must add the <strong>%s.well-known/apple-developer-"
959
+ "merchantid-domain-association%s</strong> file to your domain and register "
960
+ "your domain within the Stripe Dashboard."
961
+ msgstr ""
962
+
963
+ #: includes/gateways/settings/applepay-settings.php:10
964
+ #: includes/gateways/settings/payment-request-settings.php:11
965
+ msgid "If enabled, your site can accept Apple Pay payments through Stripe."
966
+ msgstr ""
967
+
968
+ #: includes/gateways/settings/applepay-settings.php:19
969
+ #: includes/gateways/settings/cc-settings.php:19
970
+ #: includes/gateways/settings/googlepay-settings.php:27
971
+ #: includes/gateways/settings/payment-request-settings.php:20
972
+ msgid "Title of the credit card gateway"
973
+ msgstr ""
974
+
975
+ #: includes/gateways/settings/applepay-settings.php:28
976
+ #: includes/gateways/settings/cc-settings.php:28
977
+ #: includes/gateways/settings/googlepay-settings.php:36
978
+ #: includes/gateways/settings/payment-request-settings.php:29
979
+ msgid "Credit Card Display"
980
+ msgstr ""
981
+
982
+ #: includes/gateways/settings/applepay-settings.php:34
983
+ #: includes/gateways/settings/cc-settings.php:34
984
+ #: includes/gateways/settings/googlepay-settings.php:42
985
+ #: includes/gateways/settings/payment-request-settings.php:35
986
+ msgid ""
987
+ "This option allows you to customize how the credit card will display for "
988
+ "your customers on orders, subscriptions, etc."
989
+ msgstr ""
990
+
991
+ #: includes/gateways/settings/applepay-settings.php:44
992
+ #: includes/gateways/settings/cc-settings.php:44
993
+ #: includes/gateways/settings/payment-request-settings.php:45
994
+ msgid ""
995
+ "This option determines whether the customer's funds are captured immediately "
996
+ "or authorized and can be captured at a later date."
997
+ msgstr ""
998
+
999
+ #: includes/gateways/settings/applepay-settings.php:48
1000
+ #: includes/gateways/settings/googlepay-settings.php:56
1001
+ #: includes/gateways/settings/payment-request-settings.php:49
1002
+ msgid "Payment Sections"
1003
+ msgstr ""
1004
+
1005
+ #: includes/gateways/settings/applepay-settings.php:51
1006
+ #: includes/gateways/settings/googlepay-settings.php:59
1007
+ #: includes/gateways/settings/payment-request-settings.php:52
1008
+ msgid "Product Page"
1009
+ msgstr ""
1010
+
1011
+ #: includes/gateways/settings/applepay-settings.php:52
1012
+ #: includes/gateways/settings/googlepay-settings.php:60
1013
+ #: includes/gateways/settings/payment-request-settings.php:53
1014
+ msgid "Cart Page"
1015
+ msgstr ""
1016
+
1017
+ #: includes/gateways/settings/applepay-settings.php:53
1018
+ #: includes/gateways/settings/googlepay-settings.php:61
1019
+ #: includes/gateways/settings/payment-request-settings.php:54
1020
+ msgid "Top of Checkout"
1021
+ msgstr ""
1022
+
1023
+ #: includes/gateways/settings/applepay-settings.php:56
1024
+ #: includes/gateways/settings/payment-request-settings.php:57
1025
+ msgid ""
1026
+ "Increase your conversion rate by offering Apple Pay on your Product and Cart "
1027
+ "pages, or at the top of the checkout page."
1028
+ msgstr ""
1029
+
1030
+ #: includes/gateways/settings/applepay-settings.php:59
1031
+ #: includes/gateways/settings/cc-settings.php:47
1032
+ #: includes/gateways/settings/googlepay-settings.php:67
1033
+ #: includes/gateways/settings/payment-request-settings.php:74
1034
+ msgid "Order Status"
1035
+ msgstr ""
1036
+
1037
+ #: includes/gateways/settings/applepay-settings.php:63
1038
+ #: includes/gateways/settings/cc-settings.php:51
1039
+ #: includes/gateways/settings/googlepay-settings.php:71
1040
+ #: includes/gateways/settings/payment-request-settings.php:78
1041
+ msgid "Default"
1042
+ msgstr ""
1043
+
1044
+ #: includes/gateways/settings/applepay-settings.php:66
1045
+ #: includes/gateways/settings/cc-settings.php:54
1046
+ #: includes/gateways/settings/googlepay-settings.php:74
1047
+ #: includes/gateways/settings/payment-request-settings.php:81
1048
+ msgid ""
1049
+ "This is the status of the order once payment is complete. If <b>Default</b> "
1050
+ "is selected, then WooCommerce will set the order status automatically based "
1051
+ "on internal logic which states if a product is virtual and downloadable then "
1052
+ "status is set to complete. Products that require shipping are set to "
1053
+ "Processing. Default is the recommended setting as it allows standard "
1054
+ "WooCommerce code to process the order status."
1055
+ msgstr ""
1056
+
1057
+ #: includes/gateways/settings/applepay-settings.php:83
1058
+ #: includes/gateways/settings/payment-request-settings.php:84
1059
+ msgid "Button Settings"
1060
+ msgstr ""
1061
+
1062
+ #: includes/gateways/settings/applepay-settings.php:86
1063
+ #: includes/gateways/settings/googlepay-settings.php:140
1064
+ msgid "Button Design"
1065
+ msgstr ""
1066
+
1067
+ #: includes/gateways/settings/applepay-settings.php:90
1068
+ msgid "Black Button"
1069
+ msgstr ""
1070
+
1071
+ #: includes/gateways/settings/applepay-settings.php:91
1072
+ msgid "White With Black Line"
1073
+ msgstr ""
1074
+
1075
+ #: includes/gateways/settings/applepay-settings.php:92
1076
+ msgid "White Button"
1077
+ msgstr ""
1078
+
1079
+ #: includes/gateways/settings/applepay-settings.php:94
1080
+ msgid "This is the style for all Apple Pay buttons presented on your store."
1081
+ msgstr ""
1082
+
1083
+ #: includes/gateways/settings/applepay-settings.php:97
1084
+ msgid "Checkout button type"
1085
+ msgstr ""
1086
+
1087
+ #: includes/gateways/settings/applepay-settings.php:100
1088
+ #: includes/gateways/settings/applepay-settings.php:110
1089
+ #: includes/gateways/settings/applepay-settings.php:120
1090
+ msgid "Standard Button"
1091
+ msgstr ""
1092
+
1093
+ #: includes/gateways/settings/applepay-settings.php:101
1094
+ #: includes/gateways/settings/applepay-settings.php:111
1095
+ #: includes/gateways/settings/applepay-settings.php:121
1096
+ msgid "Buy with Apple Pay"
1097
+ msgstr ""
1098
+
1099
+ #: includes/gateways/settings/applepay-settings.php:107
1100
+ msgid "Cart button type"
1101
+ msgstr ""
1102
+
1103
+ #: includes/gateways/settings/applepay-settings.php:117
1104
+ msgid "Product button type"
1105
+ msgstr ""
1106
+
1107
+ #: includes/gateways/settings/cc-settings.php:10
1108
+ #, php-format
1109
+ msgid "%sTest cards%s"
1110
+ msgstr ""
1111
+
1112
+ #: includes/gateways/settings/cc-settings.php:58
1113
+ msgid "Allow Credit Card Save"
1114
+ msgstr ""
1115
+
1116
+ #: includes/gateways/settings/cc-settings.php:60
1117
+ msgid ""
1118
+ "If enabled, a checkbox will be available on the checkout page allowing your "
1119
+ "customer's to save their credit card. The payment methods are stored "
1120
+ "securely in Stripe's vault and never touch your server. Note: if the cart "
1121
+ "contains a subscription, there will be no checkbox because the payment "
1122
+ "method will be saved automatically. There will also be no checkbox for guest "
1123
+ "checkout as a user must be logged in to save a payment method."
1124
+ msgstr ""
1125
+
1126
+ #: includes/gateways/settings/cc-settings.php:63
1127
+ msgid "Accepted Payment Methods"
1128
+ msgstr ""
1129
+
1130
+ #: includes/gateways/settings/cc-settings.php:69
1131
+ msgid "Visa"
1132
+ msgstr ""
1133
+
1134
+ #: includes/gateways/settings/cc-settings.php:70
1135
+ msgid "Amex"
1136
+ msgstr ""
1137
+
1138
+ #: includes/gateways/settings/cc-settings.php:71
1139
+ msgid "Discover"
1140
+ msgstr ""
1141
+
1142
+ #: includes/gateways/settings/cc-settings.php:72
1143
+ msgid "MasterCard"
1144
+ msgstr ""
1145
+
1146
+ #: includes/gateways/settings/cc-settings.php:73
1147
+ msgid "JCB"
1148
+ msgstr ""
1149
+
1150
+ #: includes/gateways/settings/cc-settings.php:74
1151
+ msgid "Maestro"
1152
+ msgstr ""
1153
+
1154
+ #: includes/gateways/settings/cc-settings.php:75
1155
+ msgid "Diners Club"
1156
+ msgstr ""
1157
+
1158
+ #: includes/gateways/settings/cc-settings.php:76
1159
+ msgid "Union Pay"
1160
+ msgstr ""
1161
+
1162
+ #: includes/gateways/settings/cc-settings.php:78
1163
+ msgid ""
1164
+ "The selected icons will show customers which credit card brands you accept."
1165
+ msgstr ""
1166
+
1167
+ #: includes/gateways/settings/cc-settings.php:81
1168
+ msgid "Credit Card Form"
1169
+ msgstr ""
1170
+
1171
+ #: includes/gateways/settings/cc-settings.php:84
1172
+ msgid "Card Form"
1173
+ msgstr ""
1174
+
1175
+ #: includes/gateways/settings/cc-settings.php:87
1176
+ msgid "Stripe form"
1177
+ msgstr ""
1178
+
1179
+ #: includes/gateways/settings/cc-settings.php:88
1180
+ msgid "Custom form"
1181
+ msgstr ""
1182
+
1183
+ #: includes/gateways/settings/cc-settings.php:90
1184
+ msgid ""
1185
+ "The Stripe form option displays a CC form rendered by Stripe. It works well "
1186
+ "with most themes. The custom card forms are offered if you want more options "
1187
+ "on the CC form design."
1188
+ msgstr ""
1189
+
1190
+ #: includes/gateways/settings/cc-settings.php:93
1191
+ msgid "Custom Form"
1192
+ msgstr ""
1193
+
1194
+ #: includes/gateways/settings/cc-settings.php:97
1195
+ msgid "The design of the credit card form."
1196
+ msgstr ""
1197
+
1198
+ #: includes/gateways/settings/cc-settings.php:106
1199
+ msgid "Postal Code"
1200
+ msgstr ""
1201
+
1202
+ #: includes/gateways/settings/cc-settings.php:108
1203
+ msgid ""
1204
+ "If enabled, the CC form will show the postal code on the checkout page. If "
1205
+ "disabled, the billing field's postal code will be used. The postal code will "
1206
+ "show on the Add Payment Method page for security reasons."
1207
+ msgstr ""
1208
+
1209
+ #: includes/gateways/settings/googlepay-settings.php:4
1210
+ msgid "Google Pay Request"
1211
+ msgstr ""
1212
+
1213
+ #: includes/gateways/settings/googlepay-settings.php:4
1214
+ msgid ""
1215
+ "When you submit your request for Google Pay, request to be whitelisted for "
1216
+ "callbackintents. This ensures that the order items are displayed on the "
1217
+ "Google Payment sheet."
1218
+ msgstr ""
1219
+
1220
+ #: includes/gateways/settings/googlepay-settings.php:4
1221
+ msgid ""
1222
+ "To have the Google API team approve your integration you can enable test "
1223
+ "mode and Google Pay. When test mode is enabled, Google Pay will work, "
1224
+ "allowing you to capture the necessary screenshots the Google API team needs "
1225
+ "to approve your Merchant ID request."
1226
+ msgstr ""
1227
+
1228
+ #: includes/gateways/settings/googlepay-settings.php:7
1229
+ #, php-format
1230
+ msgid ""
1231
+ "If you don't want to request a Google Merchant ID, you can use the %sPayment "
1232
+ "Request Gateway%s which has a Google Pay integration through Stripe via the "
1233
+ "Chrome browser."
1234
+ msgstr ""
1235
+
1236
+ #: includes/gateways/settings/googlepay-settings.php:13
1237
+ msgid "If enabled, your site can accept Google Pay payments through Stripe."
1238
+ msgstr ""
1239
+
1240
+ #: includes/gateways/settings/googlepay-settings.php:19
1241
+ msgid "Merchant ID"
1242
+ msgstr ""
1243
+
1244
+ #: includes/gateways/settings/googlepay-settings.php:21
1245
+ msgid ""
1246
+ "Your Google Merchant ID is given to you by the Google API team once you "
1247
+ "register for Google Pay. While testing in TEST mode you can leave this value "
1248
+ "blank and Google Pay will work."
1249
+ msgstr ""
1250
+
1251
+ #: includes/gateways/settings/googlepay-settings.php:52
1252
+ msgid ""
1253
+ "This option determines whether the customer's funds are capture immediately "
1254
+ "or authorized and can be captured at a later date."
1255
+ msgstr ""
1256
+
1257
+ #: includes/gateways/settings/googlepay-settings.php:64
1258
+ msgid ""
1259
+ "Increase your conversion rate by offering Google Pay on your Product and "
1260
+ "Cart pages, or at the top of the checkout page."
1261
+ msgstr ""
1262
+
1263
+ #: includes/gateways/settings/googlepay-settings.php:77
1264
+ msgid "Merchant Name"
1265
+ msgstr ""
1266
+
1267
+ #: includes/gateways/settings/googlepay-settings.php:79
1268
+ msgid ""
1269
+ "The name of your business as it appears on the Google Pay payment sheet."
1270
+ msgstr ""
1271
+
1272
+ #: includes/gateways/settings/googlepay-settings.php:83
1273
+ msgid "Icon"
1274
+ msgstr ""
1275
+
1276
+ #: includes/gateways/settings/googlepay-settings.php:86
1277
+ msgid "With Outline"
1278
+ msgstr ""
1279
+
1280
+ #: includes/gateways/settings/googlepay-settings.php:87
1281
+ msgid "Standard"
1282
+ msgstr ""
1283
+
1284
+ #: includes/gateways/settings/googlepay-settings.php:90
1285
+ msgid ""
1286
+ "This is the icon style that appears next to the gateway on the checkout page."
1287
+ msgstr ""
1288
+
1289
+ #: includes/gateways/settings/googlepay-settings.php:117
1290
+ msgid "Button Options"
1291
+ msgstr ""
1292
+
1293
+ #: includes/gateways/settings/googlepay-settings.php:120
1294
+ msgid "Button Color"
1295
+ msgstr ""
1296
+
1297
+ #: includes/gateways/settings/googlepay-settings.php:124
1298
+ msgid "Black"
1299
+ msgstr ""
1300
+
1301
+ #: includes/gateways/settings/googlepay-settings.php:125
1302
+ msgid "White"
1303
+ msgstr ""
1304
+
1305
+ #: includes/gateways/settings/googlepay-settings.php:127
1306
+ msgid "The button color of the GPay button."
1307
+ msgstr ""
1308
+
1309
+ #: includes/gateways/settings/googlepay-settings.php:130
1310
+ msgid "Button Style"
1311
+ msgstr ""
1312
+
1313
+ #: includes/gateways/settings/googlepay-settings.php:134
1314
+ msgid "Long"
1315
+ msgstr ""
1316
+
1317
+ #: includes/gateways/settings/googlepay-settings.php:135
1318
+ msgid "Short"
1319
+ msgstr ""
1320
+
1321
+ #: includes/gateways/settings/googlepay-settings.php:137
1322
+ msgid "The button style of the GPay button."
1323
+ msgstr ""
1324
+
1325
+ #: includes/gateways/settings/googlepay-settings.php:142
1326
+ msgid ""
1327
+ "If you can't see the Google Pay button, try switching to a Chrome browser."
1328
+ msgstr ""
1329
+
1330
+ #: includes/gateways/settings/payment-request-settings.php:4
1331
+ msgid ""
1332
+ "The PaymentRequest gateway uses your customer's browser to render payment "
1333
+ "options like Google Pay and Microsoft Pay. You can either use the Google Pay "
1334
+ "gateway for example, or this gateway.\n"
1335
+ "\t\t\t\t\t\tThe difference is this gateway uses Stripe's PaymentRequest "
1336
+ "Button rather than render a Google Pay specific button."
1337
+ msgstr ""
1338
+
1339
+ #: includes/gateways/settings/payment-request-settings.php:18
1340
+ msgid "Browser Payments"
1341
+ msgstr ""
1342
+
1343
+ #: includes/gateways/settings/payment-request-settings.php:89
1344
+ msgid "default"
1345
+ msgstr ""
1346
+
1347
+ #: includes/gateways/settings/payment-request-settings.php:91
1348
+ msgid "buy"
1349
+ msgstr ""
1350
+
1351
+ #: includes/gateways/settings/payment-request-settings.php:93
1352
+ msgid "This defines the type of button that will display."
1353
+ msgstr ""
1354
+
1355
+ #: includes/gateways/settings/payment-request-settings.php:96
1356
+ msgid "Theme"
1357
+ msgstr ""
1358
+
1359
+ #: includes/gateways/settings/payment-request-settings.php:98
1360
+ msgid "dark"
1361
+ msgstr ""
1362
+
1363
+ #: includes/gateways/settings/payment-request-settings.php:99
1364
+ msgid "light"
1365
+ msgstr ""
1366
+
1367
+ #: includes/gateways/settings/payment-request-settings.php:100
1368
+ msgid "light-outline"
1369
+ msgstr ""
1370
+
1371
+ #: includes/gateways/settings/payment-request-settings.php:102
1372
+ msgid "This defines the color scheme for the button."
1373
+ msgstr ""
1374
+
1375
+ #: includes/gateways/settings/payment-request-settings.php:105
1376
+ msgid "Height"
1377
+ msgstr ""
1378
+
1379
+ #: includes/gateways/settings/payment-request-settings.php:107
1380
+ msgid "The height of the button. Max height is 64"
1381
+ msgstr ""
1382
+
1383
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:90
1384
+ msgid "Type Ending In"
1385
+ msgstr ""
1386
+
1387
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:92
1388
+ msgid "{brand} ending in {last4}"
1389
+ msgstr ""
1390
+
1391
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:95
1392
+ msgid "Type Masked Number"
1393
+ msgstr ""
1394
+
1395
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:100
1396
+ msgid "Type Dash Masked Number"
1397
+ msgstr ""
1398
+
1399
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:105
1400
+ msgid "Type Last 4"
1401
+ msgstr ""
1402
+
1403
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:110
1404
+ msgid "Type Dash & Last 4"
1405
+ msgstr ""
1406
+
1407
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:115
1408
+ msgid "Last Four"
1409
+ msgstr ""
1410
+
1411
+ #: includes/tokens/class-wc-payment-token-stripe-cc.php:120
1412
+ msgid "Card Type"
1413
+ msgstr ""
1414
+
1415
+ #: includes/tokens/class-wc-payment-token-stripe-local-payment.php:28
1416
+ msgid "Gateway Title"
1417
+ msgstr ""
1418
+
1419
+ #: includes/wc-stripe-functions.php:252
1420
+ msgid "Please enter a valid postcode / ZIP."
1421
+ msgstr ""
1422
+
1423
+ #: includes/wc-stripe-functions.php:631
1424
+ msgid "Simple form"
1425
+ msgstr ""
1426
+
1427
+ #: includes/wc-stripe-functions.php:664
1428
+ msgid "Inline Form"
1429
+ msgstr ""
1430
+
1431
+ #: includes/wc-stripe-functions.php:700
1432
+ msgid "Rounded Form"
1433
+ msgstr ""
1434
+
1435
+ #: stripe-payments.php:16
1436
+ #, php-format
1437
+ msgid "Your PHP version is %s but Stripe requires version 5.4+."
1438
+ msgstr ""
1439
+
1440
+ #: templates/cart/payment-methods.php:20
1441
+ msgid "or"
1442
+ msgstr ""
1443
+
1444
+ #: templates/cc-forms/inline.php:10 templates/cc-forms/simple.php:12
1445
+ msgid "Card Number"
1446
+ msgstr ""
1447
+
1448
+ #: templates/cc-forms/inline.php:14
1449
+ msgid "Exp Date"
1450
+ msgstr ""
1451
+
1452
+ #: templates/cc-forms/inline.php:18 templates/cc-forms/simple.php:26
1453
+ msgid "CVC"
1454
+ msgstr ""
1455
+
1456
+ #: templates/cc-forms/inline.php:23 templates/cc-forms/simple.php:34
1457
+ msgid "ZIP"
1458
+ msgstr ""
1459
+
1460
+ #: templates/cc-forms/simple.php:20
1461
+ msgid "Expiration"
1462
+ msgstr ""
1463
+
1464
+ #: templates/checkout/credit-card.php:17
1465
+ msgid "Save Card"
1466
+ msgstr ""
includes/abstract/abstract-wc-payment-gateway-stripe-charge.php ADDED
@@ -0,0 +1,180 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * Gateways that use Charge API should extend this abstract class.
7
+ *
8
+ * @package Stripe/Abstract
9
+ * @since 3.0.0
10
+ * @author User
11
+ *
12
+ */
13
+ abstract class WC_Payment_Gateway_Stripe_Charge extends WC_Payment_Gateway_Stripe {
14
+
15
+ public function process_payment($order_id) {
16
+ $order = wc_get_order ( $order_id );
17
+
18
+ if ($this->is_change_payment_method_request ()) {
19
+ return [ 'result' => 'success',
20
+ 'redirect' => $order->get_view_order_url ()
21
+ ];
22
+ }
23
+
24
+ do_action ( 'wc_stripe_before_process_payment', $order, $this->id );
25
+
26
+ if (wc_notice_count ( 'error' ) > 0) {
27
+ return $this->order_error ();
28
+ }
29
+ $this->processing_payment = true;
30
+
31
+ // if order total is zero, then save meta but don't process payment.
32
+ if ($order->get_total () == 0) {
33
+ return $this->process_zero_total_order ( $order );
34
+ }
35
+
36
+ /**
37
+ * Try to save the payment token.
38
+ * A failure should not affect the order processing. Tokens have to be saved before a charge since they
39
+ * can only be used once. Save the token then it can be used.
40
+ */
41
+ if ($this->should_save_payment_method ( $order )) {
42
+ if (is_wp_error ( $this->save_payment_method ( $this->get_new_source_id (), $order ) )) {
43
+ $this->set_payment_save_error ( $order, $this->wp_error );
44
+ }
45
+ }
46
+
47
+ $args = $this->get_order_charge_args ( $order );
48
+
49
+ $customer_id = wc_stripe_get_customer_id ( $order->get_user_id () );
50
+
51
+ // only add customer ID if user is paying with a saved payment method
52
+ if ($customer_id && $this->use_saved_source ()) {
53
+ $args[ 'customer' ] = $customer_id;
54
+ }
55
+
56
+ $charge = $this->gateway->charge ( $args, wc_stripe_order_mode ( $order ) );
57
+
58
+ wc_stripe_log_info ( 'Stripe charge: ' . print_r ( $charge, true ) );
59
+ if (is_wp_error ( $charge )) {
60
+ wc_add_notice ( sprintf ( __ ( 'Error processing payment. Reason: %s', 'woo-stripe' ), $charge->get_error_message () ), 'error' );
61
+ $order->add_order_note ( sprintf ( __ ( 'Error processing payment. Reason: %s. Code: %s', 'woo-stripe' ), $charge->get_error_message (), $charge->get_error_code () ) );
62
+ return $this->order_error ();
63
+ }
64
+ if ($charge->captured) {
65
+ $order->payment_complete ( $charge->id );
66
+ } else {
67
+ $order_status = $this->get_option ( 'order_status' );
68
+ $order->update_status ( apply_filters ( 'wc_stripe_authorized_order_status', 'default' === $order_status ? 'processing' : $order_status, $order, $this ) );
69
+ }
70
+ $this->save_order_meta ( $order, $charge );
71
+
72
+ $order->add_order_note ( sprintf ( __ ( 'Order charge successful in Stripe. Charge: %s. Payment Method: %s', 'woo-stripe' ), $order->get_transaction_id (), $order->get_payment_method_title () ) );
73
+ WC ()->cart->empty_cart ();
74
+
75
+ return array( 'result' => 'success',
76
+ 'redirect' => $order->get_checkout_order_received_url ()
77
+ );
78
+ }
79
+
80
+ private function get_order_charge_args($order, $args = []) {
81
+ $args = array_merge ( [
82
+ 'metadata' => $this->get_order_meta_data ( $order ),
83
+ 'currency' => $order->get_currency (),
84
+ 'amount' => wc_stripe_add_number_precision ( $order->get_total () ),
85
+ 'shipping' => array(
86
+ 'address' => array(
87
+ 'city' => $order->get_shipping_city (),
88
+ 'country' => $order->get_shipping_country (),
89
+ 'line1' => $order->get_shipping_address_1 (),
90
+ 'line2' => $order->get_shipping_address_2 (),
91
+ 'postal_code' => $order->get_shipping_postcode (),
92
+ 'state' => $order->get_shipping_state ()
93
+ ),
94
+ 'name' => $this->get_name_from_order ( $order, 'shipping' )
95
+ ),
96
+ 'capture' => $this->get_option ( 'charge_type' ) === 'capture',
97
+ 'source' => $this->get_payment_source (),
98
+ 'receipt_email' => $order->get_billing_email ()
99
+ ], $args );
100
+ return apply_filters ( 'wc_stripe_charge_order_args', $args, $order, $this->id );
101
+ }
102
+
103
+ /**
104
+ *
105
+ * @param float $amount
106
+ * @param WC_Order $order
107
+ */
108
+ public function capture_charge($amount, $order) {
109
+ $amount_in_cents = wc_stripe_add_number_precision ( $amount );
110
+ $result = $this->gateway->capture ( $order->get_transaction_id (), array(
111
+ 'amount' => $amount_in_cents
112
+ ), wc_stripe_order_mode ( $order ) );
113
+ if (! is_wp_error ( $result )) {
114
+ $order->payment_complete ();
115
+ $this->save_order_meta ( $order, $result );
116
+ $order->add_order_note ( sprintf ( __ ( 'Order amount captured in Stripe. Amount: %s', 'woo-stripe' ), wc_price ( $amount, array(
117
+ 'currency' => $order->get_currency ()
118
+ ) ) ) );
119
+ } else {
120
+ $order->add_order_note ( sprintf ( __ ( 'Error capturing charge in Stripe. Reason: %s', 'woo-stripe' ), wc_price ( $amount, array(
121
+ 'currency' => $order->get_currency ()
122
+ ) ) ) );
123
+ }
124
+ return $result;
125
+ }
126
+
127
+ public function void_charge($order) {
128
+ $result = $this->gateway->refund ( array(
129
+ 'charge' => $order->get_transaction_id ()
130
+ ), wc_stripe_order_mode ( $order ) );
131
+ if (is_wp_error ( $result )) {
132
+ $order->add_order_note ( sprintf ( __ ( 'Error voiding charge. Reason: %s', 'woo-stripe' ), $result->get_error_message () ) );
133
+ } else {
134
+ $order->add_order_note ( __ ( 'Charge voided in Stripe.', 'woo-stripe' ) );
135
+ }
136
+ return $result;
137
+ }
138
+
139
+ public function create_payment_method($id, $customer_id) {
140
+ $result = $this->gateway->create_customer_source ( $customer_id, $id );
141
+
142
+ if (is_wp_error ( $result )) {
143
+ return $result;
144
+ }
145
+
146
+ return $this->get_payment_token ( $result->id, $result );
147
+ }
148
+
149
+ public function scheduled_subscription_payment($amount, $order) {
150
+ $args = $this->get_order_charge_args ( $order, [
151
+ 'customer' => $order->get_meta ( '_wc_stripe_customer', true ),
152
+ 'source' => $order->get_meta ( '_payment_method_token', true ),
153
+ 'amount' => wc_stripe_add_number_precision ( $amount )
154
+ ] );
155
+
156
+ $charge = $this->gateway->charge ( $args, wc_stripe_order_mode ( $order ) );
157
+
158
+ if (is_wp_error ( $charge )) {
159
+ $order->update_status ( 'failed', sprintf ( __ ( 'Recurring payment for subscription failed. Reason: %s. Payment method: %s', 'woo-stripe' ), $charge->get_error_message (), $order->get_payment_method_title () ) );
160
+ } else {
161
+ if ($charge->captured) {
162
+ $order->payment_complete ( $charge->id );
163
+ $order->add_order_note ( sprintf ( __ ( 'Recurring payment captured in Stripe. Payment method: %s', 'woo-stripe' ), $order->get_payment_method_title () ) );
164
+ } else {
165
+ $order->update_status ( apply_filters ( 'wc_stripe_authorized_renewal_order_status', 'processing', $order, $this ), sprintf ( __ ( 'Recurring payment authorized in Stripe. Payment method: %s', 'woo-stripe' ), $order->get_payment_method_title () ) );
166
+ }
167
+ $this->save_order_meta ( $order, $charge );
168
+ }
169
+ }
170
+
171
+ public function delete_payment_method($token_id, $token) {
172
+ $mode = $token->get_environment ();
173
+ try {
174
+ $customer_id = wc_stripe_get_customer_id ( $token->get_user_id (), $mode );
175
+ $this->gateway->delete_card ( $token->get_token (), $customer_id, $mode );
176
+ } catch ( \Stripe\Error\Base $e ) {
177
+ wc_stripe_log_error ( sprintf ( __ ( 'Error deleting Stripe card. Token Id: %s', 'woo-stripe' ), $token->get_token () ) );
178
+ }
179
+ }
180
+ }
includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php ADDED
@@ -0,0 +1,218 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe_Charge' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * Local payment method classes should extend this abstract class
7
+ *
8
+ * @package Stripe/Abstract
9
+ * @author User
10
+ *
11
+ */
12
+ abstract class WC_Payment_Gateway_Stripe_Local_Payment extends WC_Payment_Gateway_Stripe_Charge {
13
+
14
+ protected $tab_title = '';
15
+
16
+ /**
17
+ * Currencies this gateway accepts
18
+ *
19
+ * @var array
20
+ */
21
+ protected $currencies = [];
22
+
23
+ protected $local_payment_type = '';
24
+
25
+ public $countries = [];
26
+
27
+ public function __construct() {
28
+ $this->token_type = 'Stripe_Local';
29
+ $this->template_name = 'local-payment.php';
30
+ parent::__construct ();
31
+ $this->settings[ 'method_format' ] = 'gateway_title';
32
+ $this->settings[ 'charge_type' ] = 'capture';
33
+ $this->settings[ 'order_status' ] = 'default';
34
+ }
35
+
36
+ public function hooks() {
37
+ parent::hooks ();
38
+ add_filter ( 'wc_stripe_local_gateway_tabs', [
39
+ $this, 'local_gateway_tab'
40
+ ] );
41
+ remove_filter ( 'wc_stripe_settings_nav_tabs', array(
42
+ $this, 'admin_nav_tab'
43
+ ) );
44
+ add_filter ( 'wc_stripe_local_gateways_tab', array(
45
+ $this, 'admin_nav_tab'
46
+ ) );
47
+ add_action ( 'woocommerce_settings_checkout_stripe_local_gateways_' . $this->id, array(
48
+ $this, 'admin_options'
49
+ ) );
50
+ add_action ( 'wc_stripe_settings_before_options_stripe_local_gateways_' . $this->id, array(
51
+ $this, 'navigation_menu'
52
+ ) );
53
+ add_action ( 'woocommerce_update_options_checkout_stripe_local_gateways_' . $this->id, array(
54
+ $this, 'process_admin_options'
55
+ ) );
56
+ }
57
+
58
+ public function process_payment($order_id) {
59
+ if (! $this->processing_payment) {
60
+ $order = wc_get_order ( $order_id );
61
+
62
+ $source_id = $this->get_new_source_id ();
63
+ if (! empty ( $source_id )) {
64
+ // source was created client side.
65
+ $source = $this->gateway->fetch_payment_source ( $source_id );
66
+
67
+ // save the order ID to the session. Stripe doesn't allow the source object's
68
+ // redirect url to be updated so we can't pass order_id in url params.
69
+ WC ()->session->set ( 'wc_stripe_order_id', $order_id );
70
+ } else {
71
+ // create the source
72
+ $source = $this->gateway->create_source ( $this->get_source_args ( $order ) );
73
+ }
74
+
75
+ if (is_wp_error ( $source )) {
76
+ wc_add_notice ( sprintf ( __ ( 'Error creating payment source. Reason: %s', 'woo-stripe' ), $source->get_error_message () ), 'error' );
77
+ return $this->order_error ();
78
+ }
79
+
80
+ $order->update_meta_data ( '_stripe_source_id', $source->id );
81
+ $order->update_meta_data ( '_wc_stripe_mode', wc_stripe_mode () );
82
+
83
+ $order->save ();
84
+
85
+ return [ 'result' => 'success',
86
+ 'redirect' => $this->get_source_redirect_url ( $source )
87
+ ];
88
+ } else {
89
+ return parent::process_payment ( $order_id );
90
+ }
91
+ }
92
+
93
+ /**
94
+ *
95
+ * @param \Stripe\Source $source
96
+ */
97
+ protected function get_source_redirect_url($source) {
98
+ return $source->redirect->url;
99
+ }
100
+
101
+ public function output_settings_nav() {
102
+ parent::output_settings_nav ();
103
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-settings-local-payments-nav.php';
104
+ }
105
+
106
+ public function init_form_fields() {
107
+ $this->form_fields = apply_filters ( 'wc_stripe_form_fields_' . $this->id, $this->get_local_payment_settings () );
108
+ }
109
+
110
+ public function init_supports() {
111
+ $this->supports = [ 'tokenization', 'products',
112
+ 'refunds'
113
+ ];
114
+ }
115
+
116
+ /**
117
+ * Return an array of form fields for the gateway.
118
+ *
119
+ * @return array
120
+ */
121
+ public function get_local_payment_settings() {
122
+ return [];
123
+ }
124
+
125
+ public function enqueue_checkout_scripts($scripts) {
126
+ if (! wp_script_is ( $scripts->get_handle ( 'local-payment' ) )) {
127
+ $scripts->enqueue_script ( 'local-payment', $scripts->assets_url ( 'js/frontend/local-payment.js' ), [
128
+ $scripts->get_handle ( 'external' ),
129
+ $scripts->get_handle ( 'wc-stripe' )
130
+ ], wc_stripe ()->version (), true );
131
+ $scripts->localize_script ( 'local-payment', wc_stripe_get_local_payment_params () );
132
+ }
133
+ }
134
+
135
+ public function get_localized_params() {
136
+ return array_merge_recursive ( parent::get_localized_params (), [
137
+ 'local_payment_type' => $this->local_payment_type,
138
+ 'return_url' => add_query_arg ( [
139
+ '_payment_nonce' => wp_create_nonce ( 'local-payment' ),
140
+ 'wc-stripe-local-gateway' => $this->id
141
+ ], wc_get_checkout_url () ),
142
+ 'element_params' => $this->get_element_params ()
143
+ ] );
144
+ }
145
+
146
+ public function get_element_params() {
147
+ return [
148
+ 'style' => [
149
+ 'base' => [
150
+ 'padding' => '10px 12px',
151
+ 'color' => '#32325d',
152
+ 'fontFamily' => '-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif',
153
+ 'fontSmoothing' => 'antialiased',
154
+ 'fontSize' => '16px',
155
+ '::placeholder' => [
156
+ 'color' => '#aab7c4'
157
+ ]
158
+ ],
159
+ 'invalid' => [
160
+ 'color' => '#fa755a'
161
+ ]
162
+ ]
163
+ ];
164
+ }
165
+
166
+ /**
167
+ *
168
+ * @param WC_Order $order
169
+ */
170
+ public function get_source_args($order) {
171
+ return [ 'type' => $this->local_payment_type,
172
+ 'amount' => wc_stripe_add_number_precision ( $order->get_total () ),
173
+ 'currency' => $order->get_currency (),
174
+ 'statement_descriptor' => sprintf ( __ ( 'Order %s', 'woo-stripe' ), $order->get_order_number () ),
175
+ 'owner' => [
176
+ 'name' => $this->get_name_from_order ( $order, 'billing' ),
177
+ 'email' => $order->get_billing_email ()
178
+ ],
179
+ 'redirect' => [
180
+ 'return_url' => add_query_arg ( [
181
+ '_payment_nonce' => wp_create_nonce ( 'local-payment-' . $order->get_id () ),
182
+ 'order_id' => $order->get_id (),
183
+ 'wc-stripe-local-gateway' => $this->id
184
+ ], wc_get_checkout_url () )
185
+ ]
186
+ ];
187
+ }
188
+
189
+ public function is_local_payment_available() {
190
+ if (empty ( $this->countries )) {
191
+ return in_array ( get_woocommerce_currency (), $this->currencies );
192
+ } else {
193
+ $customer = WC ()->customer;
194
+ return in_array ( get_woocommerce_currency (), $this->currencies ) && in_array ( $customer->get_billing_country (), $this->countries );
195
+ }
196
+ }
197
+
198
+ public function get_payment_token($method_id, $method_details) {
199
+ /**
200
+ *
201
+ * @var WC_Payment_Token_Stripe_Local $token
202
+ */
203
+ $token = parent::get_payment_token ( $method_id, $method_details );
204
+ $token->set_gateway_title ( $this->title );
205
+ return $token;
206
+ }
207
+
208
+ protected function get_payment_description() {
209
+ $desc = '';
210
+ if ($this->currencies) {
211
+ $desc .= sprintf ( __ ( 'Gateway will appear when store currency is <strong>%s</strong>.', 'woo-stripe' ), implode ( ', ', $this->currencies ) );
212
+ }
213
+ if ($this->countries) {
214
+ $desc .= '<p>' . sprintf ( __ ( '& billing country is <strong>%s</strong>', 'woo-stripe' ), implode ( ', ', $this->countries ) ) . '</p>';
215
+ }
216
+ return $desc;
217
+ }
218
+ }
includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php ADDED
@@ -0,0 +1,272 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * Gateways that use PaymentIntent API should extend this abstract class.
7
+ *
8
+ * @since 3.0.0
9
+ * @package Stripe/Abstract
10
+ * @author PaymentPlugins
11
+ *
12
+ */
13
+ abstract class WC_Payment_Gateway_Stripe_Payment_Intent extends WC_Payment_Gateway_Stripe {
14
+
15
+ public function process_payment($order_id) {
16
+ $order = wc_get_order ( $order_id );
17
+
18
+ if ($this->is_change_payment_method_request ()) {
19
+ return [ 'result' => 'success',
20
+ 'redirect' => $order->get_view_order_url ()
21
+ ];
22
+ }
23
+
24
+ do_action ( 'wc_stripe_before_process_payment', $order, $this->id );
25
+
26
+ if (wc_notice_count ( 'error' ) > 0) {
27
+ return $this->order_error ();
28
+ }
29
+ $this->processing_payment = true;
30
+
31
+ // if order total is zero, then save meta but don't process payment.
32
+ if ($order->get_total () == 0) {
33
+ return $this->process_zero_total_order ( $order );
34
+ }
35
+
36
+ // first check to see if a payment intent already exists
37
+ if (( $intent_id = $order->get_meta ( '_payment_intent_id', true ) )) {
38
+ if ($this->can_update_payment_intent ( $order )) {
39
+ $intent = $this->gateway->update_payment_intent ( $intent_id, $this->get_payment_intent_args ( $order, false ) );
40
+ } else {
41
+ $intent = $this->gateway->fetch_payment_intent ( $intent_id );
42
+ }
43
+ } else {
44
+ $intent = $this->gateway->create_payment_intent ( $this->get_payment_intent_args ( $order ) );
45
+ }
46
+
47
+ if (is_wp_error ( $intent )) {
48
+ wc_add_notice ( $intent->get_error_message (), 'error' );
49
+ return $this->order_error ();
50
+ }
51
+
52
+ // always update the order with the payment intent.
53
+ $order->update_meta_data ( '_payment_intent_id', $intent->id );
54
+ $order->update_meta_data ( '_payment_method_token', $intent->payment_method );
55
+ // serialize the the intent and save to the order. The intent will be used to analyze if anything
56
+ // has changed.
57
+ $order->update_meta_data ( '_payment_intent', $intent->jsonSerialize () );
58
+ $order->save ();
59
+
60
+ if ($intent->status === 'requires_confirmation') {
61
+ $intent = $this->gateway->confirm_payment_intent ( $intent );
62
+ if (is_wp_error ( $intent )) {
63
+ wc_add_notice ( $intent->get_error_message (), 'error' );
64
+ return $this->order_error ();
65
+ }
66
+ }
67
+
68
+ // the intent was processed.
69
+ if ($intent->status === 'succeeded' || $intent->status === 'requires_capture') {
70
+ // payment has been processed.
71
+ $charges = $intent->charges;
72
+ if (count ( $charges->data ) > 0) {
73
+ $charge = $charges->data[ 0 ];
74
+ if ($charge->captured) {
75
+ $order->payment_complete ( $charge->id );
76
+ } else {
77
+ // update the order status since the intent has not been captured.
78
+ $order_status = $this->get_option ( 'order_status' );
79
+ $order->update_status ( apply_filters ( 'wc_stripe_authorized_order_status', 'default' === $order_status ? 'processing' : $order_status, $order, $this ) );
80
+ }
81
+ $this->save_order_meta ( $order, $charge );
82
+ $order->add_order_note ( sprintf ( __ ( 'Order %s successful in Stripe. Charge: %s. Payment Method: %s', 'woo-stripe' ), $charge->captured ? __ ( 'charge', 'woo-stripe' ) : __ ( 'authorization', 'woo-stripe' ), $order->get_transaction_id (), $order->get_payment_method_title () ) );
83
+ }
84
+ WC ()->cart->empty_cart ();
85
+
86
+ /**
87
+ * Save the payment method if appropriate.
88
+ * We wait until the end of order processing because a failed payment method save
89
+ * should not halt the order process. Customer's can always take action after a failed save,
90
+ * like going to the Add Payment method page.
91
+ */
92
+ if ($this->should_save_payment_method ( $order )) {
93
+ if (is_wp_error ( $this->save_payment_method ( $intent->payment_method, $order ) )) {
94
+ $this->set_payment_save_error ( $order, $this->wp_error );
95
+ }
96
+ }
97
+
98
+ return array( 'result' => 'success',
99
+ 'redirect' => $order->get_checkout_order_received_url ()
100
+ );
101
+ }
102
+ if ($intent->status === 'requires_source_action' || $intent->status === 'requires_action') {
103
+ // 3DS actions are required. Need to have customer complete action.
104
+ $url = $this->get_payment_intent_checkout_url ( $intent->client_secret );
105
+ return array( 'result' => 'success',
106
+ 'redirect' => $url
107
+ );
108
+ }
109
+ if ($intent->status === 'requires_source' || $intent->status === 'requires_payment_method') {
110
+ wc_add_notice ( __ ( 'A new payment method is required.', 'woo-stripe' ), 'error' );
111
+ return $this->order_error ();
112
+ }
113
+ }
114
+
115
+ /**
116
+ *
117
+ * @param WC_Order $order
118
+ */
119
+ public function get_payment_intent_args($order, $new = true) {
120
+ $args = [
121
+ 'amount' => wc_stripe_add_number_precision ( $order->get_total () ),
122
+ 'currency' => $order->get_currency (),
123
+ 'metadata' => $this->get_order_meta_data ( $order ),
124
+ 'description' => $this->get_order_description ( $order ),
125
+ 'shipping' => wc_stripe_order_has_shipping_address ( $order ) ? [
126
+ 'address' => [
127
+ 'city' => $order->get_shipping_city (),
128
+ 'country' => $order->get_shipping_country (),
129
+ 'line1' => $order->get_shipping_address_1 (),
130
+ 'line2' => $order->get_shipping_address_2 (),
131
+ 'postal_code' => $order->get_shipping_postcode (),
132
+ 'state' => $order->get_shipping_state ()
133
+ ],
134
+ 'name' => $this->get_name_from_order ( $order, 'shipping' )
135
+ ] : []
136
+ ];
137
+ if ($new) {
138
+ $args = array_merge ( $args, [
139
+ 'confirmation_method' => 'manual',
140
+ 'capture_method' => $this->get_option ( 'charge_type' ) === 'capture' ? 'automatic' : 'manual',
141
+ 'confirm' => false
142
+ ] );
143
+ }
144
+ if ($order->get_meta ( '_payment_method_token', true ) !== $this->get_payment_method_from_request ()) {
145
+ $args[ 'payment_method' ] = $this->get_payment_method_from_request ();
146
+ }
147
+ if (( $customer_id = wc_stripe_get_customer_id ( get_current_user_id () ) )) {
148
+ $args[ 'customer' ] = $customer_id;
149
+ }
150
+ if ($this->should_save_payment_method ( $order )) {
151
+ $args[ 'setup_future_usage' ] = 'off_session';
152
+ }
153
+ return apply_filters ( 'wc_stripe_payment_intent_args', $args, $order, $this );
154
+ }
155
+
156
+ protected function get_payment_intent_checkout_url($secret) {
157
+ // rand is used to generate some random entropy so that window hash events are triggered.
158
+ return sprintf ( '#payment-intent=%s:%s', $secret, rand ( 0, 999999 ) );
159
+ }
160
+
161
+ public function create_payment_method($id, $customer_id) {
162
+ // fetch the payment method from Stripe.
163
+ $payment_method = $this->gateway->fetch_payment_method ( $id );
164
+
165
+ if (is_wp_error ( $payment_method )) {
166
+ return $payment_method;
167
+ }
168
+
169
+ $payment_method = $this->gateway->attach_payment_method ( $payment_method, [
170
+ 'customer' => $customer_id
171
+ ] );
172
+
173
+ if (is_wp_error ( $payment_method )) {
174
+ return $payment_method;
175
+ }
176
+
177
+ return $this->get_payment_token ( $id, $payment_method );
178
+ }
179
+
180
+ public function capture_charge($amount, $order) {
181
+ $amount_in_cents = wc_stripe_add_number_precision ( $amount );
182
+ $payment_intent = $order->get_meta ( '_payment_intent_id', true );
183
+ $result = $this->gateway->capture_payment_intent ( $payment_intent, array(
184
+ 'amount_to_capture' => $amount_in_cents
185
+ ), wc_stripe_order_mode ( $order ) );
186
+ if (! is_wp_error ( $result )) {
187
+ $order->payment_complete ();
188
+ $order->add_order_note ( sprintf ( __ ( 'Order amount captured in Stripe. Amount: %s', 'woo-stripe' ), wc_price ( $amount, array(
189
+ 'currency' => $order->get_currency ()
190
+ ) ) ) );
191
+ } else {
192
+ $order->add_order_note ( sprintf ( __ ( 'Error capturing charge in Stripe. Reason: %s', 'woo-stripe' ), wc_price ( $amount, array(
193
+ 'currency' => $order->get_currency ()
194
+ ) ) ) );
195
+ }
196
+ return $result;
197
+ }
198
+
199
+ public function void_charge($order) {
200
+ $result = $this->gateway->cancel_payment_intent ( $order->get_meta ( '_payment_intent_id', true ), wc_stripe_order_mode ( $order ) );
201
+ if (is_wp_error ( $result )) {
202
+ $order->add_order_note ( sprintf ( __ ( 'Error voiding charge. Reason: %s', 'woo-stripe' ), $result->get_error_message () ) );
203
+ } else {
204
+ $order->add_order_note ( __ ( 'Charge voided in Stripe.', 'woo-stripe' ) );
205
+ }
206
+ }
207
+
208
+ /**
209
+ *
210
+ * {@inheritDoc}
211
+ *
212
+ * @see WC_Payment_Gateway_Stripe::scheduled_subscription_payment()
213
+ */
214
+ public function scheduled_subscription_payment($amount, $order) {
215
+ $args = array_merge ( $this->get_payment_intent_args ( $order ), [
216
+ 'amount' => wc_stripe_add_number_precision ( $amount ),
217
+ 'payment_method' => $order->get_meta ( '_payment_method_token', true ),
218
+ 'confirm' => true, 'off_session' => true
219
+ ] );
220
+ $intent = $this->gateway->create_payment_intent ( $args, wc_stripe_order_mode ( $order ) );
221
+
222
+ if (is_wp_error ( $intent )) {
223
+ // payment intent failed
224
+ $order->update_status ( 'failed', sprintf ( __ ( 'Recurring payment for order failed. Reason: %s', 'woo-stripe' ), $intent->get_error_message () ) );
225
+ } else {
226
+ if ($intent->status === 'succeeded' || $intent->status === 'requires_capture') {
227
+ $charges = $intent->charges->data;
228
+ if (isset ( $charges[ 0 ] )) {
229
+ $charge = $charges[ 0 ];
230
+
231
+ $this->save_order_meta ( $order, $charge );
232
+
233
+ if ($charge->captured) {
234
+ $order->payment_complete ( $charge->id );
235
+ $order->add_order_note ( sprintf ( __ ( 'Recurring payment captured in Stripe. Payment method: %s', 'woo-stripe' ), $order->get_payment_method_title () ) );
236
+ } else {
237
+ $order->update_status ( apply_filters ( 'wc_stripe_authorized_renewal_order_status', 'processing', $order, $this ), sprintf ( __ ( 'Recurring payment authorized in Stripe. Payment method: %s', 'woo-stripe' ), $order->get_payment_method_title () ) );
238
+ }
239
+ }
240
+ } else {
241
+ $order->update_status ( 'pending', sprintf ( __ ( 'Customer must manually complete payment for payment method %s', 'woo-stripe' ), $order->get_payment_method_title () ) );
242
+ }
243
+ }
244
+ }
245
+
246
+ /**
247
+ * Compares the order's saved intent to the order's updates attributes.
248
+ * If there is a delta, then the payment intent can be updated.
249
+ *
250
+ * @param WC_Order $order
251
+ */
252
+ public function can_update_payment_intent($order) {
253
+ $intent = $order->get_meta ( '_payment_intent', true );
254
+ if ($intent) {
255
+ $order_hash = sprintf ( '%s_%s_%s', wc_stripe_add_number_precision ( $order->get_total () ), wc_stripe_get_customer_id ( $order->get_user_id () ), $this->get_payment_method_from_request () );
256
+ $intent_hash = sprintf ( '%s_%s_%s', $intent[ 'amount' ], $intent[ 'customer' ], $intent[ 'payment_method' ] );
257
+ return $order_hash !== $intent_hash;
258
+ }
259
+ return false;
260
+ }
261
+
262
+ public function delete_payment_method($token_id, $token) {
263
+ $mode = $token->get_environment ();
264
+ try {
265
+ $customer_id = wc_stripe_get_customer_id ( $token->get_user_id (), $mode );
266
+ $payment_method = $this->gateway->fetch_payment_method ( $token->get_token () );
267
+ $this->gateway->delete_payment_method ( $payment_method );
268
+ } catch ( \Stripe\Error\Base $e ) {
269
+ wc_stripe_log_error ( sprintf ( __ ( 'Error deleting Stripe card. Token Id: %s', 'woo-stripe' ), $token->get_token () ) );
270
+ }
271
+ }
272
+ }
includes/abstract/abstract-wc-payment-gateway-stripe.php ADDED
@@ -0,0 +1,973 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @since 3.0.0
8
+ * @author PaymentPlugins
9
+ * @package Stripe/Abstract
10
+ *
11
+ */
12
+ abstract class WC_Payment_Gateway_Stripe extends WC_Payment_Gateway {
13
+
14
+ public $token_key;
15
+
16
+ public $saved_method_key;
17
+
18
+ public $payment_type_key;
19
+
20
+ public $payment_intent_key;
21
+
22
+ public $save_source_key;
23
+
24
+ protected $tab_title;
25
+
26
+ public $template_name;
27
+
28
+ public $product_template;
29
+
30
+ protected $checkout_error = false;
31
+
32
+ /**
33
+ * Used to create an instance of a WC_Payment_Token
34
+ *
35
+ * @var string
36
+ */
37
+ protected $token_type;
38
+
39
+ /**
40
+ *
41
+ * @var WC_Stripe_Gateway
42
+ */
43
+ protected $gateway;
44
+
45
+ /**
46
+ *
47
+ * @var WP_Error
48
+ */
49
+ protected $wp_error;
50
+
51
+ /**
52
+ *
53
+ * @var string
54
+ */
55
+ protected $payment_method_token = null;
56
+
57
+ /**
58
+ * Is the payment method synchronous or asynchronous
59
+ *
60
+ * @var bool
61
+ */
62
+ protected $synchronous = true;
63
+
64
+ /**
65
+ *
66
+ * @var bool
67
+ */
68
+ public $processing_payment = false;
69
+
70
+ public function __construct() {
71
+ $this->token_key = $this->id . '_token_key';
72
+ $this->saved_method_key = $this->id . '_saved_method_key';
73
+ $this->save_source_key = $this->id . '_save_source_key';
74
+ $this->payment_type_key = $this->id . '_payment_type_key';
75
+ $this->payment_intent_key = $this->id . '_payment_intent_key';
76
+ $this->has_fields = true;
77
+ $this->title = $this->get_option ( 'title_text' );
78
+ $this->description = $this->get_option ( 'description' );
79
+ $this->init_form_fields ();
80
+ $this->init_settings ();
81
+ $this->hooks ();
82
+ $this->init_supports ();
83
+ $this->gateway = new WC_Stripe_Gateway ();
84
+ }
85
+
86
+ public function hooks() {
87
+ add_filter ( 'wc_stripe_settings_nav_tabs', array(
88
+ $this, 'admin_nav_tab'
89
+ ) );
90
+ add_action ( 'woocommerce_settings_checkout_' . $this->id, [
91
+ $this, 'enqueue_admin_scripts'
92
+ ] );
93
+ add_action ( 'woocommerce_update_options_payment_gateways_' . $this->id, [
94
+ $this, 'process_admin_options'
95
+ ] );
96
+ add_action ( 'woocommerce_settings_checkout_' . $this->id, [
97
+ $this, 'enqueue_admin_scripts'
98
+ ] );
99
+ add_filter ( 'woocommerce_payment_methods_list_item', [
100
+ $this, 'payment_methods_list_item'
101
+ ], 10, 2 );
102
+ add_action ( 'wc_stripe_payment_token_deleted_' . $this->id, [
103
+ $this, 'delete_payment_method'
104
+ ], 10, 2 );
105
+ add_filter ( 'woocommerce_subscription_payment_meta', [
106
+ $this, 'subscription_payment_meta'
107
+ ], 10, 2 );
108
+ add_action ( 'woocommerce_scheduled_subscription_payment_' . $this->id, [
109
+ $this, 'scheduled_subscription_payment'
110
+ ], 10, 2 );
111
+ if (! is_admin ()) {
112
+ add_action ( 'woocommerce_subscriptions_pre_update_payment_method', [
113
+ $this,
114
+ 'subscriptions_pre_update_payment_method'
115
+ ], 10, 3 );
116
+ add_action ( 'woocommerce_subscription_payment_method_updated_to_' . $this->id, [
117
+ $this,
118
+ 'subscription_payment_method_updated'
119
+ ] );
120
+ }
121
+ }
122
+
123
+ public function init_supports() {
124
+ $this->supports = array( 'tokenization', 'products',
125
+ 'subscriptions', 'add_payment_method',
126
+ 'subscription_cancellation',
127
+ 'multiple_subscriptions',
128
+ 'subscription_amount_changes',
129
+ 'subscription_date_changes',
130
+ 'default_credit_card_form', 'refunds',
131
+ 'pre-orders',
132
+ 'subscription_payment_method_change_admin',
133
+ 'subscription_reactivation',
134
+ 'subscription_suspension',
135
+ 'subscription_payment_method_change_customer'
136
+ );
137
+ }
138
+
139
+ public function admin_nav_tab($tabs) {
140
+ $tabs[ $this->id ] = $this->tab_title;
141
+ return $tabs;
142
+ }
143
+
144
+ public function init_form_fields() {
145
+ $this->form_fields = include wc_stripe ()->plugin_path () . 'includes/gateways/settings/' . str_replace ( [
146
+ 'stripe_', '_'
147
+ ], [ '', '-'
148
+ ], $this->id ) . '-settings.php';
149
+ $this->form_fields = apply_filters ( 'wc_stripe_form_fields_' . $this->id, $this->form_fields );
150
+ }
151
+
152
+ public function admin_options() {
153
+ $this->output_settings_nav ();
154
+ printf ( '<input type="hidden" id="wc_stripe_prefix" name="wc_stripe_prefix" value="%1$s"/>', $this->get_prefix () );
155
+ echo '<div class="wc-stripe-settings-container ' . $this->id . '">';
156
+ parent::admin_options ();
157
+ echo '</div>';
158
+ }
159
+
160
+ public function output_settings_nav() {
161
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-settings-nav.php';
162
+ }
163
+
164
+ public function get_prefix() {
165
+ return $this->plugin_id . $this->id . '_';
166
+ }
167
+
168
+ public function generate_multiselect_html($key, $data) {
169
+ $value = ( array ) $this->get_option ( $key, array() );
170
+ $data[ 'options' ] = array_merge ( array_flip ( $value ), $data[ 'options' ] );
171
+ return parent::generate_multiselect_html ( $key, $data );
172
+ }
173
+
174
+ public function is_active($key) {
175
+ return $this->get_option ( $key ) === 'yes';
176
+ }
177
+
178
+ public function get_method_formats() {
179
+ $class_name = 'WC_Payment_Token_' . $this->token_type;
180
+ if (class_exists ( $class_name )) {
181
+ /**
182
+ *
183
+ * @var WC_Payment_Token_Stripe
184
+ */
185
+ $token = new $class_name ();
186
+ return $token->get_formats ();
187
+ }
188
+ return array();
189
+ }
190
+
191
+ public function enqueue_admin_scripts() {}
192
+
193
+ public function payment_fields() {
194
+ $this->enqueue_frontend_scripts ();
195
+ wc_stripe_token_field ( $this );
196
+ wc_stripe_payment_intent_field ( $this );
197
+ wc_stripe_get_template ( 'checkout/payment-method.php', array(
198
+ 'gateway' => $this,
199
+ 'tokens' => is_add_payment_method_page () ? null : $this->get_tokens ()
200
+ ) );
201
+ }
202
+
203
+ /**
204
+ * Output the product payment fields.
205
+ */
206
+ public function product_fields() {
207
+ global $product;
208
+ $this->enqueue_frontend_scripts ();
209
+ wc_stripe_token_field ( $this );
210
+ wc_stripe_get_template ( 'product/' . $this->template_name, array(
211
+ 'gateway' => $this, 'product' => $product
212
+ ) );
213
+ }
214
+
215
+ public function cart_fields() {
216
+ $this->enqueue_frontend_scripts ();
217
+ wc_stripe_token_field ( $this );
218
+ wc_stripe_get_template ( 'cart/' . $this->template_name, array(
219
+ 'gateway' => $this
220
+ ) );
221
+ }
222
+
223
+ /**
224
+ * Enqueue scripts needed by the gateway on the frontend of the WC shop.
225
+ *
226
+ * @param WC_Stripe_Frontend_Scripts $scripts
227
+ */
228
+ public function enqueue_frontend_scripts() {
229
+ global $wp;
230
+ if (is_add_payment_method_page ()) {
231
+ $this->enqueue_add_payment_method_scripts ( wc_stripe ()->scripts () );
232
+ }
233
+ if (is_checkout ()) {
234
+ $this->enqueue_checkout_scripts ( wc_stripe ()->scripts () );
235
+ }
236
+ if (is_cart ()) {
237
+ $this->enqueue_cart_scripts ( wc_stripe ()->scripts () );
238
+ }
239
+ if (is_product ()) {
240
+ $this->enqueue_product_scripts ( wc_stripe ()->scripts () );
241
+ }
242
+ if (! empty ( wc_stripe ()->scripts ()->enqueued_scripts )) {
243
+ wc_stripe ()->scripts ()->enqueue_script ( 'form-handler' );
244
+ wp_enqueue_style ( wc_stripe ()->scripts ()->prefix . 'styles', wc_stripe ()->assets_url () . 'css/stripe.css', array(), wc_stripe ()->version () );
245
+ }
246
+ }
247
+
248
+ /**
249
+ * Enqueue scripts needed by the gateway on the checkout page.
250
+ *
251
+ * @param WC_Stripe_Frontend_Scripts $scripts
252
+ */
253
+ public function enqueue_checkout_scripts($scripts) {}
254
+
255
+ /**
256
+ * Enqueue scripts needed by the gateway on the add payment method page.
257
+ *
258
+ * @param WC_Stripe_Frontend_Scripts $scripts
259
+ */
260
+ public function enqueue_add_payment_method_scripts($scripts) {
261
+ $this->enqueue_checkout_scripts ( $scripts );
262
+ }
263
+
264
+ /**
265
+ * Enqueue scripts needed by the gateway on the cart page.
266
+ *
267
+ * @param WC_Stripe_Frontend_Scripts $scripts
268
+ */
269
+ public function enqueue_cart_scripts($scripts) {}
270
+
271
+ /**
272
+ * Enqueue scripts needed by the gateway on the product page.
273
+ *
274
+ * @param WC_Stripe_Frontend_Scripts $scripts
275
+ */
276
+ public function enqueue_product_scripts($scripts) {}
277
+
278
+ /**
279
+ *
280
+ * @return array
281
+ */
282
+ public function get_localized_params() {
283
+ return array( 'gateway_id' => $this->id,
284
+ 'api_key' => wc_stripe_get_publishable_key (),
285
+ 'saved_method_selector' => '[name="' . $this->saved_method_key . '"]',
286
+ 'token_selector' => '[name="' . $this->token_key . '"]',
287
+ 'payment_intent_selector' => '[name="' . $this->payment_intent_key . '"]',
288
+ 'messages' => array(
289
+ 'terms' => __ ( 'Please read and accept the terms and conditions to proceed with your order.', 'woocommerce' )
290
+ ),
291
+ 'routes' => array(
292
+ 'setup_intent' => wc_stripe ()->rest_api->payment_intent->rest_url ( 'setup-intent' ),
293
+ 'add_to_cart' => wc_stripe ()->rest_api->cart->rest_url ( 'add-to-cart' ),
294
+ 'shipping_method' => wc_stripe ()->rest_api->cart->rest_url ( 'shipping-method' ),
295
+ 'shipping_address' => wc_stripe ()->rest_api->cart->rest_url ( 'shipping-address' ),
296
+ 'checkout' => wc_stripe ()->rest_api->checkout->rest_url ( 'checkout' )
297
+ ),
298
+ 'rest_nonce' => wp_create_nonce ( 'wp_rest' ),
299
+ 'needs_shipping' => $this->get_needs_shipping (),
300
+ 'banner_enabled' => $this->banner_checkout_enabled (),
301
+ 'currency' => get_woocommerce_currency (),
302
+ 'total_label' => __ ( 'Total', 'woo-stripe' ),
303
+ 'country_code' => wc_get_base_location ()[ 'country' ]
304
+ );
305
+ }
306
+
307
+ /**
308
+ * Returns the payment method the customer wants to use.
309
+ * This can be a saved payment method
310
+ * or a new payment method.
311
+ */
312
+ protected function get_payment_method_from_request() {
313
+ if ($this->use_saved_source ()) {
314
+ return $this->get_saved_source_id ();
315
+ }
316
+ return $this->get_new_source_id ();
317
+ }
318
+
319
+ /**
320
+ * Save the Stripe data to the order.
321
+ *
322
+ * @param WC_Order $order
323
+ * @param \Stripe\Charge $charge
324
+ */
325
+ public function save_order_meta($order, $charge) {
326
+ /**
327
+ *
328
+ * @var WC_Payment_Token_Stripe $token
329
+ */
330
+ $token = $this->get_payment_token ( $charge->payment_method, $charge->payment_method_details );
331
+ $order->set_transaction_id ( $charge->id );
332
+ $order->set_payment_method_title ( $token->get_payment_method_title () );
333
+ $order->update_meta_data ( '_wc_stripe_mode', wc_stripe_mode () );
334
+ $order->update_meta_data ( '_wc_stripe_charge_status', $charge->status );
335
+ $order->update_meta_data ( '_payment_method_token', $token->get_token () );
336
+ $order->save ();
337
+
338
+ // if WCS is active and there are subscriptions in the order, save meta data
339
+ if (wcs_stripe_active () && wcs_order_contains_subscription ( $order )) {
340
+ foreach ( wcs_get_subscriptions_for_order ( $order ) as $subscription ) {
341
+ $subscription->set_transaction_id ( $charge->id );
342
+ $subscription->set_payment_method_title ( $token->get_payment_method_title () );
343
+ $subscription->update_meta_data ( '_wc_stripe_mode', wc_stripe_mode () );
344
+ $subscription->update_meta_data ( '_wc_stripe_charge_status', $charge->status );
345
+ $subscription->update_meta_data ( '_payment_method_token', $token->get_token () );
346
+ $subscription->update_meta_data ( '_wc_stripe_customer', wc_stripe_get_customer_id ( $order->get_user_id () ) );
347
+ $subscription->save ();
348
+ }
349
+ }
350
+ }
351
+
352
+ public function add_payment_method() {
353
+ $customer_id = wc_stripe_get_customer_id ();
354
+ if (empty ( $customer_id )) {
355
+ $customer_id = $this->create_customer ( get_current_user_id () );
356
+ }
357
+ try {
358
+ $result = $this->create_payment_method ( $this->get_new_source_id (), $customer_id );
359
+ if (is_wp_error ( $result )) {
360
+ wc_add_notice ( sprintf ( __ ( 'Error saving your payment method. Reason: %s', 'woo-stripe' ), $result->get_error_message () ), 'error' );
361
+ return array( 'result' => 'error'
362
+ );
363
+ }
364
+ $result->set_user_id ( get_current_user_id () );
365
+ $result->save ();
366
+ WC_Payment_Tokens::set_users_default ( get_current_user_id (), $result->get_id () );
367
+ return array( 'result' => 'success',
368
+ 'redirect' => wc_get_account_endpoint_url ( 'payment-methods' )
369
+ );
370
+ } catch ( \Stripe\Error\Base $e ) {
371
+ wc_add_notice ( sprintf ( __ ( 'Error saving payment method. Reason: %s', 'woo-stripe' ), $e->getMessage () ), 'error' );
372
+ return array( 'result' => 'error'
373
+ );
374
+ }
375
+ }
376
+
377
+ public function process_refund($order_id, $amount = null, $reason = '') {
378
+ $order = wc_get_order ( $order_id );
379
+ $amount_in_cents = wc_stripe_add_number_precision ( $amount );
380
+ $charge = $order->get_transaction_id ();
381
+ try {
382
+ if (empty ( $charge )) {
383
+ throw new Exception ( __ ( 'Transaction Id cannot be empty.', 'woo-stripe' ) );
384
+ }
385
+ $result = $this->gateway->refund ( array(
386
+ 'charge' => $charge,
387
+ 'amount' => $amount_in_cents
388
+ ), wc_stripe_order_mode ( $order ) );
389
+ if (! is_wp_error ( $result )) {
390
+ $order->add_order_note ( sprintf ( __ ( 'Order refunded in Stripe. Amount: %s', 'woo-stripe' ), wc_price ( $amount, array(
391
+ 'currency' => $order->get_currency ()
392
+ ) ) ) );
393
+ return true;
394
+ }
395
+ return $result;
396
+ } catch ( Exception $e ) {
397
+ return new WP_Error ( 'refund-error', $e->getMessage () );
398
+ }
399
+ }
400
+
401
+ /**
402
+ * Captures the charge for the Stripe order.
403
+ *
404
+ * @param float $amount
405
+ * @param WC_Order $order
406
+ */
407
+ public function capture_charge($amount, $order) {}
408
+
409
+ /**
410
+ * Void the Stripe charge.
411
+ *
412
+ * @param WC_Order $order
413
+ */
414
+ public function void_charge($order) {}
415
+
416
+ /**
417
+ * Return the \Stripe\Charge object
418
+ *
419
+ * @param String $charge_id
420
+ * @param String $mode
421
+ * @return WP_Error|\Stripe\Charge
422
+ */
423
+ public function retrieve_charge($charge_id, $mode = '') {
424
+ return $this->gateway->get_charge ( $charge_id, $mode );
425
+ }
426
+
427
+ /**
428
+ *
429
+ * @param string $method_id
430
+ * @param \Stripe\Card|array $method_details
431
+ */
432
+ public function get_payment_token($method_id, $method_details) {
433
+ $class_name = 'WC_Payment_Token_' . $this->token_type;
434
+ if (class_exists ( $class_name )) {
435
+ /**
436
+ *
437
+ * @var WC_Payment_Token_Stripe $token
438
+ */
439
+ $token = new $class_name ( '', $method_details );
440
+ $token->details_to_props ( $method_details );
441
+ $token->set_token ( $method_id );
442
+ $token->set_gateway_id ( $this->id );
443
+ $token->set_format ( $this->get_option ( 'method_format' ) );
444
+ $token->set_environment ( wc_stripe_mode () );
445
+ return $token;
446
+ }
447
+ }
448
+
449
+ /**
450
+ * Return a failed order response.
451
+ *
452
+ * @return array
453
+ */
454
+ public function order_error() {
455
+ wc_stripe_set_checkout_error ();
456
+ return array( 'result' => 'failure'
457
+ );
458
+ }
459
+
460
+ /**
461
+ *
462
+ * @param WC_Order $order
463
+ */
464
+ protected function get_order_identifier($order) {
465
+ return sprintf ( '%s%s%s', $this->get_option ( 'order_prefix' ), $order->get_order_number (), $this->get_option ( 'order_suffix' ) );
466
+ }
467
+
468
+ /**
469
+ *
470
+ * @param WC_Order $order
471
+ */
472
+ protected function get_name_from_order($order, $type) {
473
+ if ($type === 'billing') {
474
+ return sprintf ( '%s %s', $order->get_billing_first_name (), $order->get_billing_last_name () );
475
+ } else {
476
+ return sprintf ( '%s %s', $order->get_shipping_first_name (), $order->get_shipping_last_name () );
477
+ }
478
+ }
479
+
480
+ /**
481
+ * Return the payment source the customer has chosen to use.
482
+ * This can be a saved source
483
+ * or a one time use source.
484
+ */
485
+ public function get_payment_source() {
486
+ if ($this->use_saved_source ()) {
487
+ return $this->get_saved_source_id ();
488
+ } else {
489
+ if ($this->payment_method_token) {
490
+ return $this->payment_method_token;
491
+ }
492
+ return $this->get_new_source_id ();
493
+ }
494
+ }
495
+
496
+ public function get_payment_intent_id() {
497
+ return ! empty ( $_POST[ $this->payment_intent_key ] ) ? $_POST[ $this->payment_intent_key ] : '';
498
+ }
499
+
500
+ /**
501
+ * Return true of the customer is using a saved payment method.
502
+ */
503
+ public function use_saved_source() {
504
+ return ( ! empty ( $_POST[ $this->payment_type_key ] ) && $_POST[ $this->payment_type_key ] === 'saved' ) || $this->payment_method_token;
505
+ }
506
+
507
+ public function get_new_source_id() {
508
+ return ! empty ( $_POST[ $this->token_key ] ) ? $_POST[ $this->token_key ] : '';
509
+ }
510
+
511
+ public function get_saved_source_id() {
512
+ return ! empty ( $_POST[ $this->saved_method_key ] ) ? $_POST[ $this->saved_method_key ] : $this->payment_method_token;
513
+ }
514
+
515
+ /**
516
+ * Create a customer in the stripe gateway.
517
+ *
518
+ * @param int $user_id
519
+ */
520
+ public function create_customer($user_id) {
521
+ $customer = WC ()->customer;
522
+ $customer_id = $this->gateway->create_customer ( array(
523
+ 'email' => $customer->get_email (),
524
+ 'name' => sprintf ( '%s %s', $customer->get_first_name (), $customer->get_last_name () ),
525
+ 'phone' => $customer->get_billing_phone ()
526
+ ) );
527
+ if (! is_wp_error ( $customer )) {
528
+ wc_stripe_save_customer ( $customer_id, $user_id );
529
+ return $customer->id;
530
+ } else {
531
+ return $customer;
532
+ }
533
+ }
534
+
535
+ /**
536
+ * Creates a payment method in Stripe.
537
+ *
538
+ * @param string $id
539
+ * payment method id
540
+ * @param string $customer_id
541
+ * WC Stripe customer ID
542
+ * @return WC_Payment_Token_Stripe|WP_Error
543
+ */
544
+ public function create_payment_method($id, $customer_id) {}
545
+
546
+ /**
547
+ *
548
+ * @param array $item
549
+ * @param WC_Payment_Token_Stripe_CC $payment_token
550
+ */
551
+ public function payment_methods_list_item($item, $payment_token) {
552
+ if ($payment_token->get_type () === $this->token_type) {
553
+ $item[ 'method' ][ 'last4' ] = $payment_token->get_last4 ();
554
+ $item[ 'method' ][ 'brand' ] = ucfirst ( $payment_token->get_brand () );
555
+ $item[ 'expires' ] = sprintf ( '%s / %s', $payment_token->get_exp_month (), $payment_token->get_exp_year () );
556
+ $item[ 'wc_stripe_method' ] = true;
557
+ }
558
+ return $item;
559
+ }
560
+
561
+ /**
562
+ *
563
+ * @param string $token_id
564
+ * @param WC_Payment_Token_Stripe $token
565
+ */
566
+ public function delete_payment_method($token_id, $token) {}
567
+
568
+ public function saved_payment_methods($tokens = array()) {
569
+ wc_stripe_get_template ( 'payment-methods.php', array(
570
+ 'tokens' => $tokens, 'gateway' => $this
571
+ ) );
572
+ }
573
+
574
+ public function get_new_method_label() {
575
+ return __ ( 'New Card', 'woo-stripe' );
576
+ }
577
+
578
+ public function get_saved_methods_label() {
579
+ return __ ( 'Saved Cards', 'woo-stripe' );
580
+ }
581
+
582
+ /**
583
+ * Return true if shipping is needed.
584
+ * Shipping is based on things like if the cart or product needs shipping.
585
+ *
586
+ * @return bool
587
+ */
588
+ public function get_needs_shipping() {
589
+ if (is_checkout () || is_cart ()) {
590
+ if (wcs_stripe_active () && WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment) {
591
+ return false;
592
+ }
593
+ return WC ()->cart->needs_shipping ();
594
+ }
595
+ if (is_product ()) {
596
+ global $product;
597
+ return is_a ( $product, 'WC_Product' ) && $product->needs_shipping ();
598
+ }
599
+ }
600
+
601
+ /**
602
+ * Return true of the payment method should be saved.
603
+ *
604
+ * @param WC_Order $order
605
+ * @return bool
606
+ */
607
+ public function should_save_payment_method($order) {
608
+ if (! $this->use_saved_source ()) {
609
+ if (wcs_stripe_active ()) {
610
+ if (wcs_order_contains_subscription ( $order )) {
611
+ return true;
612
+ }
613
+ if (wcs_cart_contains_renewal ()) {
614
+ return true;
615
+ }
616
+ }
617
+ if (! empty ( $_POST[ $this->save_source_key ] )) {
618
+ return true;
619
+ }
620
+ }
621
+ return false;
622
+ }
623
+
624
+ /**
625
+ * Returns true if the save payment method checkbox can be displayed.
626
+ *
627
+ * @return boolean
628
+ */
629
+ public function show_save_source() {
630
+ global $wp;
631
+ if (wcs_stripe_active ()) {
632
+ if (WC_Subscriptions_Cart::cart_contains_subscription ()) {
633
+ return false;
634
+ }
635
+ if (WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment) {
636
+ return false;
637
+ }
638
+ if (wcs_cart_contains_renewal ()) {
639
+ return false;
640
+ }
641
+ }
642
+ return is_user_logged_in () && is_checkout () && $this->is_active ( 'save_card_enabled' );
643
+ }
644
+
645
+ /**
646
+ * Returns a formatted array of items for display in the payment gateway's payment sheet.
647
+ *
648
+ * @param bool $encode
649
+ * @return []
650
+ */
651
+ public function get_display_items($encode = false) {}
652
+
653
+ /**
654
+ * Returns a formatted array of shipping methods for display in the payment gateway's
655
+ * payment sheet.
656
+ *
657
+ * @param bool $encode
658
+ * @return []
659
+ */
660
+ public function get_shipping_methods($encode = false) {}
661
+
662
+ /**
663
+ * Return true if product page checkout is enabled for this gateway
664
+ *
665
+ * @return bool
666
+ */
667
+ public function product_checkout_enabled() {
668
+ return in_array ( 'product', $this->get_option ( 'payment_sections' ) );
669
+ }
670
+
671
+ /**
672
+ * Return true if cart page checkout is enabled for this gateway
673
+ *
674
+ * @return bool
675
+ */
676
+ public function cart_checkout_enabled() {
677
+ return in_array ( 'cart', $this->get_option ( 'payment_sections' ) );
678
+ }
679
+
680
+ /**
681
+ * Return true if checkout page banner is enabled for this gateway
682
+ *
683
+ * @return bool
684
+ */
685
+ public function banner_checkout_enabled() {
686
+ return $this->supports ( 'wc_stripe_banner_checkout' ) && in_array ( 'checkout_banner', $this->get_option ( 'payment_sections' ) );
687
+ }
688
+
689
+ /**
690
+ * Decorate the response with data specific to the gateway.
691
+ *
692
+ * @param [] $data
693
+ */
694
+ public function add_to_cart_response($data) {
695
+ return $data;
696
+ }
697
+
698
+ /**
699
+ * Decorate the update shipping method reponse with data.
700
+ *
701
+ * @param [] $data
702
+ */
703
+ public function get_update_shipping_method_response($data) {
704
+ return $data;
705
+ }
706
+
707
+ /**
708
+ * Decorate the update shipping address respond with data.
709
+ *
710
+ * @param [] $data
711
+ */
712
+ public function get_update_shipping_address_response($data) {
713
+ return apply_filters ( 'wc_stripe_update_shipping_address_response', $data );
714
+ }
715
+
716
+ public function generate_button_demo_html($key, $data) {
717
+ $field_key = $this->get_field_key ( $key );
718
+ $data = wp_parse_args ( $data, array(
719
+ 'title' => '', 'class' => '', 'style' => '',
720
+ 'description' => '', 'desc_tip' => false,
721
+ 'id' => 'wc-stripe-button-demo'
722
+ ) );
723
+ ob_start ();
724
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-button-demo.php';
725
+ return ob_get_clean ();
726
+ }
727
+
728
+ public function generate_description_html($key, $data) {
729
+ $field_key = $this->get_field_key ( $key );
730
+ $data = wp_parse_args ( $data, array(
731
+ 'class' => '', 'style' => '',
732
+ 'description' => ''
733
+ ) );
734
+ ob_start ();
735
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-description.php';
736
+ return ob_get_clean ();
737
+ }
738
+
739
+ /**
740
+ * Returns an array of metadata for the transaction.
741
+ *
742
+ * @param WC_Order $order
743
+ */
744
+ protected function get_order_meta_data($order) {
745
+ $meta_data = [ 'gateway_id' => $this->id,
746
+ 'order_id' => $order->get_order_number (),
747
+ 'user_id' => $order->get_user_id (),
748
+ 'customer_id' => wc_stripe_get_customer_id ( $order->get_user_id () ),
749
+ 'ip_address' => $order->get_customer_ip_address (),
750
+ 'user_agent' => isset ( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : 'unavailable',
751
+ 'partner' => 'PaymentPlugins'
752
+ ];
753
+ foreach ( $order->get_items ( 'line_item' ) as $item ) {
754
+ /**
755
+ *
756
+ * @var WC_Order_Item_Product $item
757
+ */
758
+ $product = $item->get_product ();
759
+ $meta_data[ 'product_' . $product->get_id () ] = sprintf ( '%s x %s', $product->get_name (), $item->get_quantity () );
760
+ }
761
+ return apply_filters ( 'wc_stripe_order_meta_data', $meta_data, $order );
762
+ }
763
+
764
+ /**
765
+ * Save the customer's payment method.
766
+ * If the payment method has already been saved to the customer
767
+ * the simply return true.
768
+ *
769
+ * @param string $id
770
+ * @param WC_Order $order
771
+ * @return WP_Error|bool
772
+ */
773
+ public function save_payment_method($id, $order) {
774
+ $token = $this->create_payment_method ( $id, wc_stripe_get_customer_id ( $order->get_user_id () ) );
775
+ if (is_wp_error ( $token )) {
776
+ $this->wp_error = $token;
777
+ $order->add_order_note ( sprintf ( __ ( 'Attemp to save payment method failed. Reason: %s', 'woo-stripe' ), $token->get_error_message () ) );
778
+ return $token;
779
+ }
780
+ $token->set_user_id ( $order->get_user_id () );
781
+ $token->save ();
782
+
783
+ // set token value so it can be used for other processes.
784
+ $this->payment_method_token = $token->get_token ();
785
+ return true;
786
+ }
787
+
788
+ /**
789
+ * Set an error on the order.
790
+ * This error is used on the frontend to alert customer's to a failed payment method save.
791
+ *
792
+ * @param WC_Order $order
793
+ * @param WP_Error $error
794
+ */
795
+ protected function set_payment_save_error($order, $error) {
796
+ if (wcs_stripe_active () && wcs_order_contains_subscription ( $order )) {
797
+ $message = __ ( 'We were not able to save your payment method. To prevent billing issues with your subscription, please add a payment method to the subscription.', 'woo-stripe' );
798
+ } else {
799
+ $message = sprintf ( __ ( 'We were not able to save your payment method. Reason: %s', 'woo-stripe' ), $error->get_error_message () );
800
+ }
801
+ $order->update_meta_data ( '_wc_stripe_order_error', $message );
802
+ $order->save ();
803
+ }
804
+
805
+ /**
806
+ *
807
+ * @param string $token_id
808
+ * @param int $user_id
809
+ * @return null|WC_Payment_Token_Stripe_CC
810
+ */
811
+ public function get_token($token_id, $user_id) {
812
+ $tokens = WC_Payment_Tokens::get_customer_tokens ( $user_id, $this->id );
813
+ foreach ( $tokens as $token ) {
814
+ if ($token_id === $token->get_token ()) {
815
+ return $token;
816
+ }
817
+ }
818
+ return null;
819
+ }
820
+
821
+ /**
822
+ *
823
+ * @param array $payment_meta
824
+ * @param WC_Subscription $subscription
825
+ */
826
+ public function subscription_payment_meta($payment_meta, $subscription) {
827
+ $payment_meta[ $this->id ] = array(
828
+ 'post_meta' => array(
829
+ '_payment_method_token' => array(
830
+ 'value' => $subscription->get_meta ( '_payment_method_token', true ),
831
+ 'label' => __ ( 'Payment Method Token', 'braintree-payments' )
832
+ )
833
+ )
834
+ );
835
+ return $payment_meta;
836
+ }
837
+
838
+ /**
839
+ *
840
+ * @param float $amount
841
+ * @param WC_Order $order
842
+ */
843
+ public function scheduled_subscription_payment($amount, $order) {}
844
+
845
+ /**
846
+ *
847
+ * @param WC_Subscription $subscription
848
+ * @param string $new_payment_method
849
+ * @param string $old_payment_method
850
+ */
851
+ public function subscriptions_pre_update_payment_method($subscription, $new_payment_method, $old_payment_method) {
852
+ if ($new_payment_method === $this->id) {
853
+ // customer is using a new payment method so we need to save it.
854
+ if (! $this->use_saved_source ()) {
855
+ $result = $this->save_payment_method ( $this->get_new_source_id (), $subscription );
856
+ if (is_wp_error ( $result )) {
857
+ wc_add_notice ( sprintf ( __ ( 'Error saving payment method for subscription. Reason: %s', 'woo-stripe' ), $result->get_error_message () ), 'error' );
858
+ // redirect to change payment method page.
859
+ wp_safe_redirect ( $subscription->get_view_order_url () );
860
+ }
861
+ } else {
862
+ // set the payment method token so it can be used downstream.
863
+ $this->payment_method_token = $this->get_payment_source ();
864
+ }
865
+ }
866
+ }
867
+
868
+ /**
869
+ * Update the subscription with the new meta data for the gateway.
870
+ * Save any new method the customer is trying to use.
871
+ *
872
+ * @param WC_Subscription $subscription
873
+ */
874
+ public function subscription_payment_method_updated($subscription) {
875
+ $token = $this->get_token ( $this->payment_method_token, $subscription->get_user_id () );
876
+
877
+ // update the meta data needed by the gateway to process a subscription payment.
878
+ $subscription->update_meta_data ( '_payment_method_token', $this->payment_method_token );
879
+ $subscription->set_payment_method_title ( $token->get_payment_method_title () );
880
+ $subscription->save ();
881
+ }
882
+
883
+ /**
884
+ * Return true if this request is to change the payment method of a WC Subscription.
885
+ *
886
+ * @return bool
887
+ */
888
+ public function is_change_payment_method_request() {
889
+ return wcs_stripe_active () && did_action ( 'woocommerce_subscriptions_pre_update_payment_method' );
890
+ }
891
+
892
+ /**
893
+ * Sets the ID of a payment token.
894
+ *
895
+ * @param string $id
896
+ */
897
+ public function set_payment_method_token($id) {
898
+ $this->payment_method_token = $id;
899
+ }
900
+
901
+ /**
902
+ *
903
+ * @param WC_Order $order
904
+ */
905
+ public function get_order_description($order) {
906
+ return sprintf ( __ ( 'Order %s from %s', 'woo-stripe' ), $order->get_order_number (), get_bloginfo ( 'name' ) );
907
+ }
908
+
909
+ public function get_custom_attribute_html($attribs) {
910
+ if (! empty ( $attribs[ 'custom_attributes' ] ) && is_array ( $attribs[ 'custom_attributes' ] )) {
911
+ foreach ( $attribs[ 'custom_attributes' ] as $k => $v ) {
912
+ if (is_array ( $v )) {
913
+ $attribs[ 'custom_attributes' ][ $k ] = htmlspecialchars ( wp_json_encode ( $v ) );
914
+ }
915
+ }
916
+ }
917
+ return parent::get_custom_attribute_html ( $attribs );
918
+ }
919
+
920
+ /**
921
+ *
922
+ * @param WC_Order $order
923
+ */
924
+ public function process_zero_total_order($order) {
925
+ // save payment method if necessary
926
+ if ($this->should_save_payment_method ( $order )) {
927
+ $result = $this->save_payment_method ( $this->get_new_source_id (), $order );
928
+ if (is_wp_error ( $result )) {
929
+ return $this->order_error ();
930
+ }
931
+ } else {
932
+ $this->payment_method_token = $this->get_saved_source_id ();
933
+ }
934
+ $this->save_zero_total_meta ( $order );
935
+ $order_status = $this->get_option ( 'order_status' );
936
+ if ('capture' === $this->get_option ( 'charge_type' )) {
937
+ $order->payment_complete ();
938
+ } else {
939
+ $order_status = $this->get_option ( 'order_status' );
940
+ $order->update_status ( apply_filters ( 'wc_stripe_authorized_order_status', 'default' === $order_status ? 'processing' : $order_status, $order, $this ) );
941
+ }
942
+ WC ()->cart->empty_cart ();
943
+ return array( 'result' => 'success',
944
+ 'redirect' => $order->get_checkout_order_received_url ()
945
+ );
946
+ }
947
+
948
+ /**
949
+ *
950
+ * @param WC_Order $order
951
+ */
952
+ protected function save_zero_total_meta($order) {
953
+ $token = $this->get_token ( $this->payment_method_token, $order->get_user_id () );
954
+ $order->set_payment_method_title ( $token->get_payment_method_title () );
955
+ $order->update_meta_data ( '_wc_stripe_mode', wc_stripe_mode () );
956
+ $order->update_meta_data ( '_payment_method_token', $token->get_token () );
957
+ $order->save ();
958
+
959
+ if (wcs_stripe_active () && wcs_order_contains_subscription ( $order )) {
960
+ foreach ( wcs_get_subscriptions_for_order ( $order ) as $subscription ) {
961
+ /**
962
+ *
963
+ * @var WC_Subscription $subscription
964
+ */
965
+ $subscription->set_payment_method_title ( $token->get_payment_method_title () );
966
+ $subscription->update_meta_data ( '_wc_stripe_mode', wc_stripe_mode () );
967
+ $subscription->update_meta_data ( '_payment_method_token', $token->get_token () );
968
+ $subscription->update_meta_data ( '_wc_stripe_customer', wc_stripe_get_customer_id ( $order->get_user_id () ) );
969
+ $subscription->save ();
970
+ }
971
+ }
972
+ }
973
+ }
includes/abstract/abstract-wc-payment-token-stripe.php ADDED
@@ -0,0 +1,129 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! defined ( 'ABSPATH' )) {
3
+ exit (); // Exit if accessed directly.
4
+ }
5
+ /**
6
+ *
7
+ * @since 3.0.0
8
+ * @author PaymentPlugins
9
+ * @package Stripe/Abstract
10
+ *
11
+ */
12
+ abstract class WC_Payment_Token_Stripe extends WC_Payment_Token {
13
+
14
+ protected $object_type = 'payment_token';
15
+
16
+ protected $extra_data = array( 'format' => '',
17
+ 'method_type' => '',
18
+ 'environment' => 'production'
19
+ );
20
+
21
+ protected $stripe_data = array();
22
+
23
+ /**
24
+ * The format of the payment method
25
+ *
26
+ * @var string
27
+ */
28
+ protected $format = '';
29
+
30
+ public function __construct($token = '') {
31
+ // use reflection to merge all extra data keys.
32
+ $this->extra_data = array_merge ( $this->extra_data, $this->get_stripe_data ( $this ) );
33
+ parent::__construct ( $token );
34
+ }
35
+
36
+ /**
37
+ *
38
+ * @param mixed $details
39
+ */
40
+ public abstract function details_to_props($details);
41
+
42
+ public function set_format($value) {
43
+ $this->format = $value;
44
+ }
45
+
46
+ public function set_method_type($value) {
47
+ $this->set_prop ( 'method_type', $value );
48
+ }
49
+
50
+ public function set_environment($value) {
51
+ $this->set_prop ( 'environment', $value );
52
+ }
53
+
54
+ public function get_method_type() {
55
+ return $this->get_prop ( 'method_type' );
56
+ }
57
+
58
+ public function get_format() {
59
+ return $this->format;
60
+ }
61
+
62
+ public function get_environment() {
63
+ return $this->get_prop ( 'environment' );
64
+ }
65
+
66
+ /**
67
+ * Return a human readable representation of the payment method.
68
+ */
69
+ public function get_payment_method_title($format = '') {
70
+ $format = empty ( $format ) ? $this->get_format () : $format;
71
+ $format = $this->get_formats ()[ $format ][ 'format' ];
72
+ $data = $this->get_props_data ();
73
+ return apply_filters ( 'wc_stripe_payment_method_title', str_replace ( array_keys ( $data ), $data, $format ), $this );
74
+ }
75
+
76
+ public function get_props_data() {
77
+ $data = array();
78
+ foreach ( $this->extra_data as $k => $v ) {
79
+ $data[ '{' . $k . '}' ] = $this->get_prop ( $k );
80
+ }
81
+ return $data;
82
+ }
83
+
84
+ /**
85
+ * Returns an array of merged attributes comprised of the $stripe_data property.
86
+ *
87
+ * @param object $instance
88
+ */
89
+ public function get_stripe_data($instance) {
90
+ $data = array();
91
+ try {
92
+ $class = new ReflectionClass ( $instance );
93
+ $props = $class->getDefaultProperties ();
94
+ if (isset ( $props[ 'stripe_data' ] )) {
95
+ $data = $props[ 'stripe_data' ];
96
+ }
97
+ if (is_subclass_of ( get_parent_class ( $instance ), 'WC_Payment_Token_Stripe' )) {
98
+ $data = array_merge ( $this->get_stripe_data ( get_parent_class ( $instance ) ), $data );
99
+ }
100
+ return $data;
101
+ } catch ( Exception $e ) {
102
+ return array();
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Return a json array of data that represents the object.
108
+ *
109
+ * @return array
110
+ */
111
+ public function to_json() {
112
+ return apply_filters ( 'wc_stripe_get_' . $this->object_type . '_json', array(
113
+ 'id' => $this->get_id (),
114
+ 'type' => $this->get_type (),
115
+ 'method_type' => $this->get_method_type (),
116
+ 'token' => $this->get_token (),
117
+ 'title' => $this->get_payment_method_title ()
118
+ ) );
119
+ }
120
+
121
+ /**
122
+ * Return formats used by the token to display a human readable title.
123
+ */
124
+ public abstract function get_formats();
125
+
126
+ public function get_html_classes() {
127
+ return '';
128
+ }
129
+ }
includes/abstract/abstract-wc-stripe-rest-controller.php ADDED
@@ -0,0 +1,102 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Abstract
6
+ *
7
+ */
8
+ abstract class WC_Stripe_Rest_Controller {
9
+
10
+ protected $namespace = '';
11
+
12
+ /**
13
+ *
14
+ * @var WP_Error
15
+ */
16
+ protected $error = null;
17
+
18
+ /**
19
+ *
20
+ * @param string $route
21
+ */
22
+ protected function register_authenticated_route($route) {
23
+ $routes = get_option ( 'wc_stripe_authenticated_routes', array() );
24
+ $route = '/' . trim ( $route, '/' );
25
+ $routes[ md5 ( $route ) ] = $route;
26
+ update_option ( 'wc_stripe_authenticated_routes', $routes );
27
+ }
28
+
29
+ /**
30
+ * Register all routes that the controller uses.
31
+ */
32
+ abstract public function register_routes();
33
+
34
+ public function rest_uri($uri = '') {
35
+ $rest_uri = wc_stripe ()->rest_api->rest_uri () . ( ! empty ( $this->namespace ) ? trailingslashit ( $this->namespace ) : '' );
36
+ if ($uri) {
37
+ $rest_uri = trailingslashit ( $rest_uri ) . $uri;
38
+ }
39
+ return $rest_uri;
40
+ }
41
+
42
+ public function rest_url($uri = '') {
43
+ $rest_url = wc_stripe ()->rest_api->rest_url () . ( ! empty ( $this->namespace ) ? trailingslashit ( $this->namespace ) : '' );
44
+ if ($uri) {
45
+ $rest_url = trailingslashit ( $rest_url ) . $uri;
46
+ }
47
+ return $rest_url;
48
+ }
49
+
50
+ /**
51
+ *
52
+ * @param WP_REST_Request $request
53
+ */
54
+ public function admin_permission_check($request) {
55
+ if (! current_user_can ( 'administrator' )) {
56
+ return new WP_Error ( 'permission-error', __ ( 'You do not have permissions to access this resource.', 'woo-stripe' ), array(
57
+ 'status' => 403
58
+ ) );
59
+ }
60
+
61
+ return true;
62
+ }
63
+
64
+ protected function get_error_messages() {
65
+ return $this->get_messages ( 'error' );
66
+ }
67
+
68
+ protected function get_messages($types = 'all') {
69
+ $notices = wc_get_notices ();
70
+ if ($types !== 'all') {
71
+ $types = ( array ) $types;
72
+ foreach ( $notices as $type => $notice ) {
73
+ if (! in_array ( $type, $types )) {
74
+ unset ( $notices[ $type ] );
75
+ }
76
+ }
77
+ }
78
+ wc_set_notices ( $notices );
79
+ ob_start ();
80
+ $messages = wc_print_notices ();
81
+ return ob_get_clean ();
82
+ }
83
+
84
+ /**
85
+ *
86
+ * @param WP_Error $error
87
+ */
88
+ protected function add_validation_error($error) {
89
+ $data = $error->get_error_data ();
90
+ if (! is_array ( $data )) {
91
+ $data = [];
92
+ }
93
+ $error->add_data ( array_merge ( $data, [
94
+ 'status' => 200
95
+ ] ) );
96
+ $this->error = $error;
97
+ add_filter ( 'rest_request_before_callbacks', function ($response) {
98
+ return $this->error ? $this->error : response;
99
+ } );
100
+ return $error;
101
+ }
102
+ }
includes/abstract/abstract-wc-stripe-settings.php ADDED
@@ -0,0 +1,90 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Abstract
6
+ *
7
+ */
8
+ abstract class WC_Stripe_Settings_API extends WC_Settings_API {
9
+
10
+ protected $tab_title;
11
+
12
+ public function __construct() {
13
+ $this->init_form_fields ();
14
+ $this->init_settings ();
15
+ $this->hooks ();
16
+ }
17
+
18
+ public function hooks() {
19
+ add_action ( 'wc_stripe_localize_' . $this->id . '_settings', array(
20
+ $this, 'localize_settings'
21
+ ) );
22
+ }
23
+
24
+ public function admin_nav_tab($tabs) {
25
+ $tabs[ $this->id ] = $this->tab_title;
26
+ return $tabs;
27
+ }
28
+
29
+ public function admin_options() {
30
+ $this->output_settings_nav ();
31
+ printf ( '<input type="hidden" id="wc_stripe_prefix" name="wc_stripe_prefix" value="%1$s"/>', $this->get_prefix () );
32
+ echo '<div class="wc-stripe-settings-container ' . $this->id . '">';
33
+ parent::admin_options ();
34
+ echo '</div>';
35
+ }
36
+
37
+ public function output_settings_nav() {
38
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-settings-nav.php';
39
+ }
40
+
41
+ public function get_prefix() {
42
+ return $this->plugin_id . $this->id . '_';
43
+ }
44
+
45
+ public function localize_settings() {
46
+ return $this->settings;
47
+ }
48
+
49
+ public function get_custom_attribute_html($attribs) {
50
+ if (! empty ( $attribs[ 'custom_attributes' ] ) && is_array ( $attribs[ 'custom_attributes' ] )) {
51
+ foreach ( $attribs[ 'custom_attributes' ] as $k => $v ) {
52
+ if (is_array ( $v )) {
53
+ $attribs[ 'custom_attributes' ][ $k ] = htmlspecialchars ( wp_json_encode ( $v ) );
54
+ }
55
+ }
56
+ }
57
+ return parent::get_custom_attribute_html ( $attribs );
58
+ }
59
+
60
+ public function is_active($key) {
61
+ return $this->get_option ( $key ) === 'yes';
62
+ }
63
+
64
+ public function generate_description_html($key, $data) {
65
+ $field_key = $this->get_field_key ( $key );
66
+ $data = wp_parse_args ( $data, array(
67
+ 'class' => '', 'style' => '',
68
+ 'description' => ''
69
+ ) );
70
+ ob_start ();
71
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-description.php';
72
+ return ob_get_clean ();
73
+ }
74
+
75
+ public function generate_paragraph_html($key, $data) {
76
+ $field_key = $this->get_field_key ( $key );
77
+ $defaults = array( 'title' => '', 'label' => '',
78
+ 'class' => '', 'css' => '', 'type' => 'text',
79
+ 'desc_tip' => false, 'description' => '',
80
+ 'custom_attributes' => array()
81
+ );
82
+ $data = wp_parse_args ( $data, $defaults );
83
+ if (! $data[ 'label' ]) {
84
+ $data[ 'label' ] = $data[ 'title' ];
85
+ }
86
+ ob_start ();
87
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-paragraph.php';
88
+ return ob_get_clean ();
89
+ }
90
+ }
includes/admin/class-wc-stripe-admin-assets.php ADDED
@@ -0,0 +1,78 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Stripe/Admin
4
+ */
5
+ class WC_Stripe_Admin_Assets {
6
+
7
+ public function __construct() {
8
+ add_action ( 'admin_enqueue_scripts', array(
9
+ $this, 'enqueue_scripts'
10
+ ) );
11
+
12
+ add_action ( 'wp_print_scripts', array( __CLASS__,
13
+ 'localize_scripts'
14
+ ) );
15
+
16
+ add_action ( 'admin_footer', array( __CLASS__,
17
+ 'localize_scripts'
18
+ ) );
19
+ add_action ( 'wc_stripe_localize_stripe_advanced_settings', array(
20
+ __CLASS__, 'localize_advanced_scripts'
21
+ ) );
22
+ }
23
+
24
+ public function enqueue_scripts() {
25
+ global $current_section, $wc_stripe_subsection;
26
+ $screen = get_current_screen ();
27
+ $screen_id = $screen ? $screen->id : '';
28
+ $js_path = wc_stripe ()->assets_url () . 'js/';
29
+ $css_path = wc_stripe ()->assets_url () . 'css/';
30
+
31
+ wp_register_script ( 'wc-stripe-admin-settings', $js_path . 'admin/admin-settings.js', array(
32
+ 'jquery', 'jquery-blockui'
33
+ ), wc_stripe ()->version, true );
34
+ wp_register_script ( 'wc-stripe-meta-boxes-order', $js_path . 'admin/meta-boxes-order.js', array(
35
+ 'jquery', 'jquery-blockui'
36
+ ), wc_stripe ()->version, true );
37
+ wp_register_script ( 'wc-stripe-meta-boxes-subscription', $js_path . 'admin/meta-boxes-subscription.js', array(
38
+ 'jquery', 'jquery-blockui'
39
+ ), wc_stripe ()->version, true );
40
+ wp_register_style ( 'wc-stripe-admin-style', $css_path . 'admin/admin.css', array(), wc_stripe ()->version );
41
+
42
+ if (strpos ( $screen_id, 'wc-settings' ) !== false) {
43
+ if (isset ( $_REQUEST[ 'section' ] ) && preg_match ( '/stripe_[\w]*/', $_REQUEST[ 'section' ] )) {
44
+ wp_enqueue_script ( 'wc-stripe-admin-settings' );
45
+ wp_enqueue_style ( 'wc-stripe-admin-style' );
46
+ wp_enqueue_script ( 'stripe-help-widget', $js_path . 'admin/help-widget.js', array(), wc_stripe ()->version (), true );
47
+ ;
48
+ wp_localize_script ( 'wc-stripe-admin-settings', 'wc_stripe_setting_params', [
49
+ 'routes' => [
50
+ 'apple_domain' => wc_stripe ()->rest_api->settings->rest_url ( 'apple-domain' )
51
+ ],
52
+ 'rest_nonce' => wp_create_nonce ( 'wp_rest' )
53
+ ] );
54
+ }
55
+ }
56
+ if ($screen_id === 'shop_order') {
57
+ wp_enqueue_style ( 'wc-stripe-admin-style' );
58
+ }
59
+ }
60
+
61
+ public static function localize_scripts() {
62
+ global $current_section, $wc_stripe_subsection;
63
+ if (! empty ( $current_section )) {
64
+ $wc_stripe_subsection = isset ( $_GET[ 'sub_section' ] ) ? sanitize_title ( $_GET[ 'sub_section' ] ) : 'braintree_merchant_account';
65
+ do_action ( 'wc_stripe_localize_' . $current_section . '_settings' );
66
+ // added for WC 3.0.0 compatability.
67
+ remove_action ( 'admin_footer', array(
68
+ __CLASS__, 'localize_scripts'
69
+ ) );
70
+ }
71
+ }
72
+
73
+ public static function localize_advanced_scripts() {
74
+ global $current_section, $wc_stripe_subsection;
75
+ do_action ( 'wc_stripe_localize_' . $wc_stripe_subsection . '_settings' );
76
+ }
77
+ }
78
+ new WC_Stripe_Admin_Assets ();
includes/admin/class-wc-stripe-admin-menus.php ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @since 3.0.0
5
+ * @package Stripe/Admin
6
+ *
7
+ */
8
+ class WC_Stripe_Admin_Menus {
9
+
10
+ public static function init() {
11
+ add_action ( 'admin_menu', array( __CLASS__,
12
+ 'admin_menu'
13
+ ), 10 );
14
+ add_action ( 'admin_menu', array( __CLASS__,
15
+ 'sub_menu'
16
+ ), 20 );
17
+ add_action ( 'admin_head', array( __CLASS__,
18
+ 'remove_submenu'
19
+ ) );
20
+ }
21
+
22
+ public static function admin_menu() {
23
+ add_menu_page ( __ ( 'Stripe Gateway', 'woo-stripe' ), __ ( 'Stripe Gateway', 'woo-stripe' ), 'administrator', 'wc_stripe', null, null, '7.458' );
24
+ }
25
+
26
+ public static function sub_menu() {
27
+ add_submenu_page ( 'wc_stripe', __ ( 'Settings', 'woo-stripe' ), __ ( 'Settings', 'woo-stripe' ), 'administrator', admin_url ( 'admin.php?page=wc-settings&tab=checkout&section=stripe_api' ) );
28
+ add_submenu_page ( 'wc_stripe', __ ( 'Logs', 'woo-stripe' ), __ ( 'Logs', 'woo-stripe' ), 'administrator', admin_url ( 'admin.php?page=wc-status&tab=logs' ) );
29
+ /*
30
+ * add_submenu_page ( 'wc_stripe', __ ( 'Data Migration', 'woo-stripe' ), __ ( 'Data Migration', 'woo-stripe' ), 'administrator', 'wc-stripe-data-migration', array(
31
+ * __CLASS__, 'data_migration_page'
32
+ * ) );
33
+ */
34
+ add_submenu_page ( 'wc_stripe', __ ( 'Documentation', 'woo-stripe' ), __ ( 'Documentation', 'woo-stripe' ), 'administrator', 'https://docs.paymentplugins.com/wc-stripe/config' );
35
+ }
36
+
37
+ public static function remove_submenu() {
38
+ global $submenu;
39
+ if (isset ( $submenu[ 'wc_stripe' ] )) {
40
+ unset ( $submenu[ 'wc_stripe' ][ 0 ] );
41
+ }
42
+ }
43
+
44
+ public static function data_migration_page() {
45
+ include 'views/html-data-migration.php';
46
+ }
47
+ }
48
+ WC_Stripe_Admin_Menus::init ();
includes/admin/class-wc-stripe-admin-settings.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Stripe/Admin
4
+ * @author User
5
+ *
6
+ */
7
+ class WC_Stripe_Admin_Settings {
8
+
9
+ public static function init() {
10
+ add_action ( 'woocommerce_settings_checkout', array(
11
+ __CLASS__, 'output'
12
+ ) );
13
+ add_action ( 'woocommerce_settings_checkout_stripe_advanced', array(
14
+ __CLASS__, 'output_advanced_settings'
15
+ ) );
16
+ add_action ( 'woocommerce_settings_checkout_stripe_local_gateways', array(
17
+ __CLASS__, 'output_local_gateways'
18
+ ) );
19
+ add_action ( 'woocommerce_update_options_checkout_stripe_local_gateways', array(
20
+ __CLASS__, 'save_local_gateway'
21
+ ) );
22
+ add_filter ( 'wc_stripe_settings_nav_tabs', array(
23
+ __CLASS__, 'admin_settings_tabs'
24
+ ), 20 );
25
+ add_action ( 'wc_stripe_settings_before_options_stripe_advanced', array(
26
+ __CLASS__, 'before_options'
27
+ ) );
28
+ add_action ( 'wc_stripe_settings_before_options_stripe_local_gateways', array(
29
+ __CLASS__, 'before_options'
30
+ ) );
31
+ add_action ( 'woocommerce_update_options_checkout', array(
32
+ __CLASS__, 'deprecated_save'
33
+ ) );
34
+ }
35
+
36
+ public static function output() {
37
+ global $current_section;
38
+ do_action ( 'woocommerce_settings_checkout_' . $current_section );
39
+ }
40
+
41
+ public static function output_advanced_settings() {
42
+ self::output_custom_section ( '' );
43
+ }
44
+
45
+ public static function output_local_gateways() {
46
+ self::output_custom_section ( 'stripe_ideal' );
47
+ }
48
+
49
+ public static function output_custom_section($sub_section = '') {
50
+ global $current_section, $wc_stripe_subsection;
51
+ $wc_stripe_subsection = isset ( $_GET[ 'stripe_sub_section' ] ) ? sanitize_title ( $_GET[ 'stripe_sub_section' ] ) : $sub_section;
52
+ do_action ( 'woocommerce_settings_checkout_' . $current_section . '_' . $wc_stripe_subsection );
53
+ }
54
+
55
+ public static function save_local_gateway() {
56
+ self::save_custom_section ( 'stripe_ideal' );
57
+ }
58
+
59
+ public static function save_custom_section($sub_section = '') {
60
+ global $current_section, $wc_stripe_subsection;
61
+ $wc_stripe_subsection = isset ( $_GET[ 'stripe_sub_section' ] ) ? sanitize_title ( $_GET[ 'stripe_sub_section' ] ) : $sub_section;
62
+ do_action ( 'woocommerce_update_options_checkout_' . $current_section . '_' . $wc_stripe_subsection );
63
+ }
64
+
65
+ public static function deprecated_save() {
66
+ global $current_section;
67
+ if ($current_section && ! did_action ( 'woocommerce_update_options_checkout_' . $current_section )) {
68
+ do_action ( 'woocommerce_update_options_checkout_' . $current_section );
69
+ }
70
+ }
71
+
72
+ public static function admin_settings_tabs($tabs) {
73
+ $tabs[ 'stripe_local_gateways' ] = __ ( 'Local Gateways', 'woo-stripe' );
74
+ return $tabs;
75
+ }
76
+
77
+ public static function before_options() {
78
+ global $current_section, $wc_stripe_subsection;
79
+ do_action ( 'wc_stripe_settings_before_options_' . $current_section . '_' . $wc_stripe_subsection );
80
+ }
81
+ }
82
+ WC_Stripe_Admin_Settings::init ();
includes/admin/class-wc-stripe-admin-user-edit.php ADDED
@@ -0,0 +1,132 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @since 3.0.0
4
+ * @package Stripe/Admin
5
+ * @author PaymentPlugins
6
+ *
7
+ */
8
+ class WC_Stripe_Admin_User_Edit {
9
+
10
+ public static function init() {
11
+ add_action ( 'edit_user_profile', array(
12
+ __CLASS__, 'output'
13
+ ) );
14
+ add_action ( 'show_user_profile', array(
15
+ __CLASS__, 'output'
16
+ ) );
17
+ add_action ( 'edit_user_profile_update', array(
18
+ __CLASS__, 'save'
19
+ ) );
20
+ add_action ( 'personal_options_update', array(
21
+ __CLASS__, 'save'
22
+ ) );
23
+ }
24
+
25
+ /**
26
+ *
27
+ * @param WP_User $user
28
+ */
29
+ public static function output($user) {
30
+ // enquue scripts
31
+ wp_enqueue_style ( 'wc-stripe-admin-style' );
32
+
33
+ // get payment methods for all environments.
34
+ $tokens = WC_Payment_Tokens::get_customer_tokens ( $user->ID );
35
+ $payment_methods = array( 'live' => array(),
36
+ 'test' => array()
37
+ );
38
+ foreach ( $tokens as $token ) {
39
+ if ($token instanceof WC_Payment_Token_Stripe) {
40
+ if ('live' === $token->get_environment ()) {
41
+ $payment_methods[ 'live' ][] = $token;
42
+ } else {
43
+ $payment_methods[ 'test' ][] = $token;
44
+ }
45
+ }
46
+ }
47
+ include wc_stripe ()->plugin_path () . 'includes/admin/views/html-user-profile.php';
48
+ }
49
+
50
+ /**
51
+ *
52
+ * @param int $user_id
53
+ */
54
+ public static function save($user_id) {
55
+ $modes = array( 'test', 'live'
56
+ );
57
+ if (isset ( $_POST[ 'wc_stripe_live_id' ] )) {
58
+ $old_live_id = wc_stripe_get_customer_id ( $user_id, 'live' );
59
+ wc_stripe_save_customer ( wc_clean ( $_POST[ 'wc_stripe_live_id' ] ), $user_id, 'live' );
60
+ }
61
+ if (isset ( $_POST[ 'wc_stripe_test_id' ] )) {
62
+ $old_test_id = wc_stripe_get_customer_id ( $user_id, 'test' );
63
+ wc_stripe_save_customer ( wc_clean ( $_POST[ 'wc_stripe_test_id' ] ), $user_id, 'test' );
64
+ }
65
+
66
+ // check if admin want's to delete any payment methods
67
+ foreach ( $modes as $mode ) {
68
+ if (isset ( $_POST[ $mode . '_payment_method_actions' ] )) {
69
+ switch (wc_clean ( $_POST[ $mode . '_payment_method_actions' ] )) {
70
+ case 'delete' :
71
+ if (isset ( $_POST[ 'payment_methods' ], $_POST[ 'payment_methods' ][ $mode ] )) {
72
+ $tokens = $_POST[ 'payment_methods' ][ $mode ];
73
+ foreach ( $tokens as $token_id ) {
74
+ WC_Payment_Tokens::delete ( absint ( $token_id ) );
75
+ }
76
+ }
77
+ break;
78
+ }
79
+ }
80
+ }
81
+
82
+ $changes = array(
83
+ 'live' => $old_live_id !== wc_stripe_get_customer_id ( $user_id, 'live' ),
84
+ 'test' => $old_test_id !== wc_stripe_get_customer_id ( $user_id, 'test' )
85
+ );
86
+ $gateway = new WC_Stripe_Gateway ();
87
+
88
+ // this will prevent the payment method from being deleted in Stripe. We only want to remove the tokens
89
+ // from the WC tables.
90
+ remove_action ( 'woocommerce_payment_token_deleted', 'wc_stripe_woocommerce_payment_token_deleted', 10 );
91
+
92
+ // if the value has changed, then remove old payment methods and import new ones.
93
+ foreach ( $changes as $mode => $change ) {
94
+ if ($change) {
95
+ // Delete all current payment methods in WC then save new ones.
96
+ $tokens = WC_Payment_Tokens::get_customer_tokens ( $user_id );
97
+ foreach ( $tokens as $token ) {
98
+ if ($token instanceof WC_Payment_Token_Stripe) {
99
+ if ($mode === $token->get_environment ()) {
100
+ WC_Payment_Tokens::delete ( $token->get_id () );
101
+ }
102
+ }
103
+ }
104
+ // import payment methods from Stripe.
105
+ $payment_methods = $gateway->fetch_payment_methods ( wc_stripe_get_customer_id ( $user_id, $mode ), $mode );
106
+ if (! is_wp_error ( $payment_methods )) {
107
+ $gateway_id = '';
108
+ foreach ( $payment_methods->data as $payment_method ) {
109
+ if (strpos ( $payment_method->id, 'pm_' ) !== false) {
110
+ $gateway_id = 'stripe_cc';
111
+ }
112
+ if (strpos ( $payment_method->id, 'card_' ) !== false) {
113
+ $gateway_id = 'stripe_googlepay';
114
+ }
115
+ if ($gateway_id) {
116
+ /**
117
+ *
118
+ * @var WC_Payment_Gateway_Stripe $gateway
119
+ */
120
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $gateway_id ];
121
+ $token = $gateway->get_payment_token ( $payment_method->id, $payment_method );
122
+ $token->set_environment ( $mode );
123
+ $token->set_user_id ( $user_id );
124
+ $token->save ();
125
+ }
126
+ }
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+ WC_Stripe_Admin_User_Edit::init ();
includes/admin/meta-boxes/class-wc-stripe-admin-order-metaboxes.php ADDED
@@ -0,0 +1,99 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Stripe/Admin
4
+ * @author PaymentPlugins
5
+ *
6
+ */
7
+ class WC_Stripe_Admin_Order_Metaboxes {
8
+
9
+ public static function init() {
10
+ add_action ( 'add_meta_boxes', array( __CLASS__,
11
+ 'add_meta_boxes'
12
+ ), 10, 2 );
13
+ }
14
+
15
+ /**
16
+ *
17
+ * @param string $post_type
18
+ * @param WP_Post $post
19
+ */
20
+ public static function add_meta_boxes($post_type, $post) {
21
+ // only add meta box if shop_order and Stripe gateway was used.
22
+ if ($post_type !== 'shop_order') {
23
+ return;
24
+ }
25
+
26
+ add_action ( 'woocommerce_admin_order_data_after_order_details', array(
27
+ __CLASS__, 'pay_order_section'
28
+ ) );
29
+
30
+ $order = wc_get_order ( $post->ID );
31
+ $payment_method = $order->get_payment_method ();
32
+ if ($payment_method) {
33
+ $gateways = WC ()->payment_gateways ()->payment_gateways ();
34
+ if (isset ( $gateways[ $payment_method ] )) {
35
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
36
+ if ($gateway instanceof WC_Payment_Gateway_Stripe) {
37
+ add_action ( 'woocommerce_admin_order_data_after_billing_address', array(
38
+ __CLASS__, 'charge_data_view'
39
+ ) );
40
+ }
41
+ }
42
+ }
43
+ self::enqueue_scripts ();
44
+ }
45
+
46
+ /**
47
+ *
48
+ * @param WC_Order $order
49
+ */
50
+ public static function charge_data_view($order) {
51
+ if (( $transaction_id = $order->get_transaction_id () )) {
52
+ include 'views/html-order-charge-data.php';
53
+ }
54
+ }
55
+
56
+ /**
57
+ *
58
+ * @param WC_Order $order
59
+ */
60
+ public static function pay_order_section($order) {
61
+ if ($order->get_type () === 'shop_order' && $order->has_status ( 'pending' )) {
62
+ include 'views/html-order-pay.php';
63
+ $payment_methods = array();
64
+ foreach ( WC ()->payment_gateways ()->payment_gateways () as $gateway ) {
65
+ if ($gateway instanceof WC_Payment_Gateway_Stripe) {
66
+ $payment_methods = array_merge ( $payment_methods, WC_Payment_Tokens::get_customer_tokens ( $order->get_user_id (), $gateway->id ) );
67
+ }
68
+ }
69
+ wp_enqueue_script ( 'wc-stripe-elements', 'https://js.stripe.com/v3/', array(), wc_stripe ()->version, true );
70
+ wp_localize_script ( 'wc-stripe-elements', 'wc_stripe_order_pay_params', array(
71
+ 'api_key' => wc_stripe_get_publishable_key (),
72
+ 'payment_methods' => array_map ( function ($payment_method) {
73
+ return $payment_method->to_json ();
74
+ }, $payment_methods ),
75
+ 'order_status' => $order->get_status ()
76
+ ) );
77
+ wp_enqueue_script ( 'wc-stripe-admin-modals', wc_stripe ()->assets_url ( 'js/admin/modals.js' ), array(
78
+ 'wc-backbone-modal', 'jquery-blockui'
79
+ ), wc_stripe ()->version, true );
80
+ }
81
+ }
82
+
83
+ public static function enqueue_scripts() {
84
+ wp_enqueue_script ( 'wc-stripe-order-metabox', wc_stripe ()->assets_url ( 'js/admin/meta-boxes-order.js' ), array(
85
+ 'jquery', 'jquery-blockui'
86
+ ), wc_stripe ()->version (), true );
87
+
88
+ wp_localize_script ( 'wc-stripe-order-metabox', 'wc_stripe_order_metabox_params', array(
89
+ '_wpnonce' => wp_create_nonce ( 'wp_rest' ),
90
+ 'routes' => array(
91
+ 'charge_view' => wc_stripe ()->rest_api->order_actions->rest_url ( 'charge-view' ),
92
+ 'capture' => wc_stripe ()->rest_api->order_actions->rest_url ( 'capture' ),
93
+ 'void' => wc_stripe ()->rest_api->order_actions->rest_url ( 'void' ),
94
+ 'pay' => wc_stripe ()->rest_api->order_actions->rest_url ( 'pay' )
95
+ )
96
+ ) );
97
+ }
98
+ }
99
+ WC_Stripe_Admin_Order_Metaboxes::init ();
includes/admin/meta-boxes/views/html-charge-data-subview.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var \Stripe\Charge $charge
4
+ */
5
+ ?>
6
+ <?php if(!$order->has_status('cancelled')):?>
7
+ <?php if($charge->status === 'pending' || ($charge->status === 'succeeded' && !$charge->captured)):?>
8
+ <div class="charge-actions">
9
+ <h2><?php _e('Actions', 'woo-stripe')?></h2>
10
+ <div>
11
+ <input type="text" class="wc_input_price" name="capture_amount"
12
+ value="<?php echo $order->get_total()?>"
13
+ placeholder="<?php _e('capture amount', 'woo-stripe')?>" />
14
+ <button class="button button-secondary do-api-capture"><?php _e('Capture', 'woo-stripe')?></button>
15
+ <button class="button button-secondary do-api-cancel"><?php _e('Void', 'woo-stripe')?></button>
16
+ </div>
17
+ </div>
18
+ <?php endif;?>
19
+ <?php endif;?>
20
+ <div class="data-container">
21
+ <div class="charge-data column-6">
22
+ <h3><?php _e('Charge Data', 'woo-stripe')?></h3>
23
+ <div class="metadata">
24
+ <label><?php _e('Mode', 'woo-stripe')?></label>:&nbsp;
25
+ <?php $charge->livemode ? _e('Live', 'woo-stripe') : _e('Test', 'wo0o-stripe')?>
26
+ </div>
27
+ <div class="metadata">
28
+ <label><?php _e('Status', 'woo-stripe')?></label>:&nbsp;
29
+ <?php echo $charge->status;?>
30
+ </div>
31
+ <?php if(($payment_intent_id = $order->get_meta('_payment_intent_id', true))):?>
32
+ <div class="metadata">
33
+ <label><?php _e('Payment Intent', 'woo-stripe')?></label>:&nbsp;
34
+ <?php echo $payment_intent_id?>
35
+ </div>
36
+ <?php endif;?>
37
+ <?php if(isset($charge->customer)):?>
38
+ <div class="metadata">
39
+ <label><?php _e('Customer', 'woo-stripe')?></label>:&nbsp;
40
+ <?php echo $charge->customer?>
41
+ </div>
42
+ <?php endif;?>
43
+ </div>
44
+ <div class="payment-data column-6">
45
+ <h3><?php _e('Payment Method', 'woo-stripe')?></h3>
46
+ <div class="metadata">
47
+ <label><?php _e('Title', 'woo-stripe')?></label>:&nbsp;
48
+ <?php echo $order->get_payment_method_title()?>
49
+ </div>
50
+ <div class="metadata">
51
+ <label><?php _e('Type', 'woo-stripe')?></label>:&nbsp;
52
+ <?php echo $charge->payment_method_details->type;?>
53
+ </div>
54
+ <?php if(isset($charge->payment_method_details->card)):?>
55
+ <div class="metadata">
56
+ <label><?php _e('Exp', 'woo-stripe')?>:&nbsp;</label>
57
+ <?php printf('%02d / %s', $charge->payment_method_details->card->exp_month, $charge->payment_method_details->card->exp_year)?>
58
+ </div>
59
+ <div class="metadata">
60
+ <label><?php _e('Fingerprint', 'woo-stripe')?>:&nbsp;</label>
61
+ <?php echo $charge->payment_method_details->card->fingerprint;?>
62
+ </div>
63
+ <div class="metadata">
64
+ <label><?php _e('CVC check', 'woo-stripe')?>:&nbsp;</label>
65
+ <?php echo $charge->payment_method_details->card->checks->cvc_check;?>
66
+ </div>
67
+ <div class="metadata">
68
+ <label><?php _e('Postal check', 'woo-stripe')?>:&nbsp;</label>
69
+ <?php echo $charge->payment_method_details->card->checks->address_postal_code_check;?>
70
+ </div>
71
+ <div class="metadata">
72
+ <label><?php _e('Street check', 'woo-stripe')?>:&nbsp;</label>
73
+ <?php echo $charge->payment_method_details->card->checks->address_line1_check;?>
74
+ </div>
75
+ <?php endif;?>
76
+ </div>
77
+ <div class="payment-data column-6">
78
+ <h3><?php _e('Riska Data', 'woo-stripe')?></h3>
79
+ <div class="metadata">
80
+ <label><?php _e('Score', 'woo-stripe')?></label>
81
+ <?php echo $charge->outcome->risk_score;?>
82
+ </div>
83
+ <div class="metadata">
84
+ <label><?php _e('Level', 'woo-stripe')?></label>
85
+ <?php echo $charge->outcome->risk_level;?>
86
+ </div>
87
+ </div>
88
+ </div>
includes/admin/meta-boxes/views/html-order-actions.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p><b><?php _e('Charge Status', 'woo-stripe')?>:</b>&nbsp;<?php echo ucfirst(str_replace('_', ' ', $status))?></p>
2
+ <?php if($status === 'pending' && $order->get_meta('_authorization_exp_at')):
3
+ $date = new DateTime('@' . $order->get_meta('_authorization_exp_at'));
4
+ ?>
5
+ <p><b><?php _e('Authorization Expires', 'woo-stripe')?>:</b>&nbsp;<?php echo date_format($date, 'M d Y, h:i A e')?>
6
+ <?php endif;?>
7
+ <?php
8
+ switch ($status) {
9
+ case 'succeeded' :
10
+ case 'faied' :
11
+ ?>
12
+ <p><?php _e ( 'There are no actions available at this time.', 'woo-stripe' )?></p>
13
+ <?php
14
+ return;
15
+ }
16
+ $can_settle = $status === 'pending';
17
+ ?>
18
+ <div id="wc-stripe-actions">
19
+ <div class="wc-stripe-buttons-container">
20
+ <?php if($can_settle):?>
21
+ <button type="button" class="button capture-charge"><?php esc_html_e('Capture Charge', 'woo-stripe')?></button>
22
+ <?php endif;?>
23
+ </div>
24
+ <div class="wc-order-data-row wc-order-capture-charge"
25
+ style="display: none;">
26
+ <div class="wc-order-capture-charge-container">
27
+ <table class="wc-order-capture-charge">
28
+ <tr>
29
+ <td class="label"><?php esc_html_e('Total available to capture', 'woo-stripe')?>:</td>
30
+ <td class="total"><?php echo wc_price($order->get_total())?></td>
31
+ </tr>
32
+ <tr>
33
+ <td class="label"><?php esc_html_e('Amount To Capture', 'woo-stripe')?>:</td>
34
+ <td class="total"><input type="text" id="worldpay_capture_amount"
35
+ name="capture_amount" class="wc_input_price" />
36
+ <div class="clear"></div></td>
37
+ </tr>
38
+ </table>
39
+ </div>
40
+ <div class="clear"></div>
41
+ <div class="capture-actions">
42
+ <button type="button" class="button button-primary do-api-capture"><?php esc_html_e( 'Capture', 'woo-stripe' ); ?></button>
43
+ <button type="button" class="button cancel-action"><?php esc_html_e( 'Cancel', 'woo-stripe' ); ?></button>
44
+ </div>
45
+ <div class="clear"></div>
46
+ </div>
47
+ </div>
includes/admin/meta-boxes/views/html-order-charge-data.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <div class="transaction-data">
2
+ <h3><?php _e('Transaction Data / Actions', 'woo-stripe')?></h3>
3
+ <a href="#" class="do-transaction-view"
4
+ data-order="<?php echo $order->get_id()?>"></a>
5
+ </div>
6
+ <script type="text/template" id="tmpl-wc-stripe-view-transaction">
7
+ <div class="wc-backbone-modal">
8
+ <div class="wc-backbone-modal-content wc-transaction-data">
9
+ <section class="wc-backbone-modal-main" role="main">
10
+ <header class="wc-backbone-modal-header">
11
+ <h1>Transaction #{{ data.charge.id }}</h1>
12
+ <button
13
+ class="modal-close modal-close-link dashicons dashicons-no-alt">
14
+ <span class="screen-reader-text">Close modal panel</span>
15
+ </button>
16
+ </header>
17
+ <article class="wc-transaction-data-container">
18
+ {{{ data.html }}}
19
+ </article>
20
+ <footer>
21
+ <div class="inner">
22
+
23
+ </div>
24
+ </footer>
25
+ </section>
26
+ </div>
27
+ </div>
28
+ <div class="wc-backbone-modal-backdrop modal-close"></div>
29
+ </script>
30
+ <style>
31
+ #order_data .order_data_column .transaction-data a.disabled:before {
32
+ content: '';
33
+ }
34
+
35
+ #order_data .order_data_column .transaction-data a.disabled {
36
+ background: url(<?php echo plugins_url('assets/images/wpspin.gif', WC_PLUGIN_FILE)?>)
37
+ no-repeat center top;
38
+ padding: 2px 10px;
39
+ }
40
+ </style>
includes/admin/meta-boxes/views/html-order-pay.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <p class="form-field form-field-wide">
2
+ <button class="button button-secondary wc-stripe-pay-order"><?php _e('Pay for Order', 'woo-stripe')?></button>
3
+ <?php echo wc_help_tip(__('Admins can process customer orders over the phone using this functionality.', 'woo-stripe'))?>
4
+ </p>
5
+ <script type="text/template" id="tmpl-wc-stripe-modal-pay-order">
6
+ <div class="wc-backbone-modal">
7
+ <div class="wc-backbone-modal-content">
8
+ <section class="wc-backbone-modal-main" role="main">
9
+ <header class="wc-backbone-modal-header">
10
+ <h1><?php esc_html_e( 'Pay for Order', 'woocommerce' ); ?></h1>
11
+ <button
12
+ class="modal-close modal-close-link dashicons dashicons-no-alt">
13
+ <span class="screen-reader-text">Close modal panel</span>
14
+ </button>
15
+ </header>
16
+ <article>
17
+ <form id="wc-stripe-pay-order-form">
18
+ <input type="hidden" name="wc_stripe_payment_method" value="stripe_cc"/>
19
+ <input type="hidden" name="order_id" value="{{{data.order_id}}}"/>
20
+ <div class="modal-wide option">
21
+ <label><?php _e('Charge Type', 'woo-stripe')?></label>
22
+ <select name="wc_stripe_charge_type" class="wc-select2">
23
+ <option value="capture"><?php _e('Capture', 'woo-stripe')?></value>
24
+ <option value="authorize"><?php _e('Authorize', 'woo-stripe')?></value>
25
+ </select>
26
+ </div>
27
+ <#if(data.payment_methods.length){#>
28
+ <div class="modal-wide">
29
+ <input type="radio" value="token" name="payment_type" checked/>
30
+ <label class=""><?php _e('Saved Cards', 'woo-stripe')?></label>
31
+ <div class="token-container show_if_token hide_if_nonce">
32
+ <select name="payment_token_id" class="wc-select2">
33
+ <#_.each(data.payment_methods, function(method){#>
34
+ <option value="{{{method.id}}}">{{{method.title}}}</option>
35
+ <#})#>
36
+ </select>
37
+ </div>
38
+ </div>
39
+ <#}#>
40
+ <div class="modal-wide">
41
+ <input type="radio" value="nonce" name="payment_type" class="" <#if(!data.payment_methods.length){#>checked<#}#>/>
42
+ <label class=""><?php _e('New Card', 'woo-stripe')?></label>
43
+ <input type="hidden" name="payment_nonce"/>
44
+ <div id="wc-stripe-card-container" class="wc-stripe-card-container show_if_nonce hide_if_token">
45
+ <div id="card-element"></div>
46
+ </div>
47
+ <div>
48
+ </form>
49
+ </article>
50
+ <footer>
51
+ <div class="inner">
52
+ <button id="pay-order" class="button button-primary button-large"><?php esc_html_e( 'Pay', 'woo-stripe' ); ?></button>
53
+ </div>
54
+ </footer>
55
+ </section>
56
+ </div>
57
+ </div>
58
+ <div class="wc-backbone-modal-backdrop modal-close"></div>
59
+ </script>
includes/admin/settings/class-wc-stripe-api-settings.php ADDED
@@ -0,0 +1,103 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class WC_Stripe_API_Settings extends WC_Stripe_Settings_API {
3
+
4
+ public function __construct() {
5
+ $this->id = 'stripe_api';
6
+ $this->tab_title = __ ( 'API Settings', 'woo-stripe' );
7
+ parent::__construct ();
8
+ }
9
+
10
+ public function hooks() {
11
+ parent::hooks ();
12
+ add_action ( 'woocommerce_update_options_checkout_' . $this->id, array(
13
+ $this, 'process_admin_options'
14
+ ) );
15
+ add_filter ( 'wc_stripe_settings_nav_tabs', array(
16
+ $this, 'admin_nav_tab'
17
+ ) );
18
+ add_action ( 'woocommerce_settings_checkout_' . $this->id, array(
19
+ $this, 'admin_options'
20
+ ) );
21
+ }
22
+
23
+ public function init_form_fields() {
24
+ $this->form_fields = array(
25
+ 'title' => array( 'type' => 'title',
26
+ 'title' => __ ( 'API Settings', 'woo-stripe' )
27
+ ),
28
+ 'mode' => array( 'type' => 'select',
29
+ 'title' => __ ( 'Mode', 'woo-stripe' ),
30
+ 'class' => 'wc-enhanced-select',
31
+ 'options' => array(
32
+ 'test' => __ ( 'Test', 'woo-stripe' ),
33
+ 'live' => __ ( 'Live', 'woo-stripe' )
34
+ ), 'default' => 'test',
35
+ 'desc_tip' => true,
36
+ 'description' => __ ( 'The mode determines if you are processing test transaction or live transactions on your site. Test mode allows you to simulate payments so you can test your integration.', 'woo-stripe' )
37
+ ),
38
+ 'publishable_key_test' => array(
39
+ 'title' => __ ( 'Test Publishable Key', 'woo-stripe' ),
40
+ 'type' => 'text', 'default' => '',
41
+ 'desc_tip' => true,
42
+ 'description' => __ ( 'Your publishable key is used to initialize Stripe assets.', 'woo-stripe' ),
43
+ 'custom_attributes' => array(
44
+ 'data-show-if' => array(
45
+ 'mode' => 'test'
46
+ )
47
+ )
48
+ ),
49
+ 'secret_key_test' => array(
50
+ 'title' => __ ( 'Test Secret Key', 'woo-stripe' ),
51
+ 'type' => 'password',
52
+ 'default' => '', 'desc_tip' => true,
53
+ 'description' => __ ( 'Your secret key is used to authenticate requests to Stripe.', 'woo-stripe' ),
54
+ 'custom_attributes' => array(
55
+ 'data-show-if' => array(
56
+ 'mode' => 'test'
57
+ )
58
+ )
59
+ ),
60
+ 'publishable_key_live' => array(
61
+ 'title' => __ ( 'Live Publishable Key', 'woo-stripe' ),
62
+ 'type' => 'text', 'default' => '',
63
+ 'desc_tip' => true,
64
+ 'description' => __ ( 'Your publishable key is used to initialize Stripe assets.', 'woo-stripe' ),
65
+ 'custom_attributes' => array(
66
+ 'data-show-if' => array(
67
+ 'mode' => 'live'
68
+ )
69
+ )
70
+ ),
71
+ 'secret_key_live' => array(
72
+ 'title' => __ ( 'Live Secret Key', 'woo-stripe' ),
73
+ 'type' => 'password',
74
+ 'default' => '', 'desc_tip' => true,
75
+ 'description' => __ ( 'Your secret key is used to authenticate requests to Stripe.', 'woo-stripe' ),
76
+ 'custom_attributes' => array(
77
+ 'data-show-if' => array(
78
+ 'mode' => 'live'
79
+ )
80
+ )
81
+ ),
82
+ 'webhook_url' => array(
83
+ 'type' => 'paragraph',
84
+ 'title' => __ ( 'Webhook url', 'woo-stripe' ),
85
+ 'class' => 'wc-stripe-webhook',
86
+ 'text' => wc_stripe ()->rest_api->webhook->rest_url ( 'webhook' ),
87
+ 'description' => sprintf ( __ ( '<strong>Important:</strong> the webhook url is called by Stripe when events occur in your account, like a source becomes chargeable. You must add this webhook to your Stripe Dashboard if you are using any of the local gateways. %sWebhook guide%s', 'woo-stripe' ), '<a target="_blank" href="https://docs.paymentplugins.com/wc-stripe/config/#/webhooks?id=confgure-webooks">', '</a>' )
88
+ ),
89
+ 'webhook_secret' => array(
90
+ 'type' => 'password',
91
+ 'title' => __ ( 'Webhook Secret', 'woo-stripe' ),
92
+ 'description' => __ ( 'The webhook secret is used to authenticate webhooks sent from Stripe. It ensures no 3rd party can send you events, pretending to be Stripe.', 'woo-stripe' )
93
+ ),
94
+ 'debug_log' => array(
95
+ 'title' => __ ( 'Debug Log', 'woo-stripe' ),
96
+ 'type' => 'checkbox',
97
+ 'desc_tip' => true,
98
+ 'default' => 'yes',
99
+ 'description' => __ ( 'When enabled, the plugin logs important errors and info that can help you troubleshoot potential issues.', 'woo-stripe' )
100
+ )
101
+ );
102
+ }
103
+ }
includes/admin/views/html-button-demo.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tr valign="top">
2
+ <th scope="row" class="titledesc">
3
+ <label for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
4
+ </th>
5
+ <td class="forminp">
6
+ <fieldset>
7
+ <legend class="screen-reader-text"><span><?php echo wp_kses_post( $data['title'] ); ?></span></legend>
8
+ <label for="<?php echo esc_attr( $field_key ); ?>">
9
+ <div id="<?php echo $data['id']?>"></div>
10
+ <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
11
+ </fieldset>
12
+ </td>
13
+ </tr>
includes/admin/views/html-description.php ADDED
@@ -0,0 +1 @@
 
1
+ <p class="<?php echo $data['class']?>"><?php echo wp_kses_post( $data['description'] ); ?></p>
includes/admin/views/html-paragraph.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <tr valign="top">
2
+ <th scope="row" class="titledesc"><label
3
+ for="<?php echo esc_attr( $field_key ); ?>"><?php echo wp_kses_post( $data['title'] ); ?> <?php echo $this->get_tooltip_html( $data ); // WPCS: XSS ok. ?></label>
4
+ </th>
5
+ <td class="forminp">
6
+ <fieldset>
7
+ <legend class="screen-reader-text">
8
+ <span><?php echo wp_kses_post( $data['title'] ); ?></span>
9
+ </legend>
10
+ <p class="<?php echo esc_attr( $data['class'] );?>" <?php echo $this->get_custom_attribute_html( $data );?>><?php echo $data['text']?></p>
11
+ <?php echo $this->get_description_html( $data ); // WPCS: XSS ok. ?>
12
+ </fieldset>
13
+ </td>
14
+ </tr>
includes/admin/views/html-settings-local-payments-nav.php ADDED
@@ -0,0 +1,12 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ global $wc_stripe_subsection;
3
+ $tabs = apply_filters ( 'wc_stripe_local_gateways_tab', array() );
4
+ ?>
5
+ <div class="wc-stripe-advanced-settings-nav local-gateways">
6
+ <?php foreach($tabs as $id => $tab):?>
7
+ <a
8
+ class="nav-link <?php if($wc_stripe_subsection === $id){echo 'nav-link-active';}?>"
9
+ href="<?php echo admin_url( 'admin.php?page=wc-settings&tab=checkout&section=stripe_local_gateways&stripe_sub_section=' . $id)?>"><?php echo esc_attr($tab)?></a>
10
+ <?php endforeach;?>
11
+ </div>
12
+ <div class="clear"></div>
includes/admin/views/html-settings-nav.php ADDED
@@ -0,0 +1,18 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ global $current_section;
3
+ $tabs = apply_filters('wc_stripe_settings_nav_tabs', array());
4
+ ?>
5
+ <div class="wc-stripe-settings-logo">
6
+ <img src="<?php echo wc_stripe()->assets_url() . 'img/stripe_logo.svg'?>"/>
7
+ </div>
8
+ <div class="stripe-settings-nav">
9
+ <?php foreach($tabs as $id => $tab):?>
10
+ <a
11
+ class="nav-tab <?php if($current_section === $id){echo 'nav-tab-active';}?>"
12
+ href="<?php echo admin_url( 'admin.php?page=wc-settings&tab=checkout&section=' . $id)?>"><?php echo esc_attr($tab)?></a>
13
+ <?php endforeach;?>
14
+ </div>
15
+ <div class="clear"></div>
16
+ <div class="wc-stripe-docs">
17
+ <a target="_blank" class="button button-secondary" href="https://docs.paymentplugins.com/wc-stripe/config/#/<?php echo $current_section?>"><?php _e('Documentation', 'woo-stripe')?></a>
18
+ </div>
includes/admin/views/html-user-profile.php ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var WP_User $user
4
+ */
5
+ ?>
6
+ <div class="wc-stripe-user-info">
7
+ <h2><?php _e('Stripe Customer ID\'s', 'woo-stripe')?></h2>
8
+ <p><?php _e('If you change a customer ID, the customer\'s payment methods will be imported from your Stripe account.')?></p>
9
+ <p><?php _e('If you remove a customer ID, the customer\'s payment methods will be removed from the WC payment methods table.')?></p>
10
+ <table class="form-table">
11
+ <tbody>
12
+ <tr>
13
+ <th><?php _e('Live ID', 'woo-stripe')?></th>
14
+ <td>
15
+ <input type="text" id="wc_stripe_live_id" name="wc_stripe_live_id" value="<?php echo wc_stripe_get_customer_id($user->ID, 'live')?>"
16
+ </td>
17
+ </tr>
18
+ <tr>
19
+ <th><?php _e('Test ID', 'woo-stripe')?></th>
20
+ <td>
21
+ <input type="text" id="wc_stripe_test_id" name="wc_stripe_test_id" value="<?php echo wc_stripe_get_customer_id($user->ID, 'test')?>"
22
+ </td>
23
+ </tr>
24
+ </tbody>
25
+ </table>
26
+ <h2><?php _e('Stripe Live Payment Methods', 'woo-stripe')?></h2>
27
+ <?php if($payment_methods['live']):?>
28
+ <table class="wc-stripe-payment-methods">
29
+ <thead>
30
+ <tr>
31
+ <th><?php _e('Payment Gateway', 'woo-stripe')?></th>
32
+ <th><?php _e('Payment Method', 'woo-stripe')?></th>
33
+ <th><?php _e('Token', 'woo-stripe')?></th>
34
+ <th><?php _e('Actions', 'woo-stripe')?></th>
35
+ </tr>
36
+ </thead>
37
+ <tbody>
38
+ <?php foreach($payment_methods['live'] as $token):?>
39
+ <tr>
40
+ <td><?php echo $token->get_gateway_id()?></td>
41
+ <td><?php echo $token->get_payment_method_title()?></td>
42
+ <td><?php echo $token->get_token()?></td>
43
+ <td><input type="checkbox" name="payment_methods[live][]" value="<?php echo $token->get_id()?>"/></td>
44
+ </tr>
45
+ <?php endforeach;?>
46
+ <tr>
47
+ <th><?php _e('Action', 'delete')?></th>
48
+ <td>
49
+ <select name="live_payment_method_actions">
50
+ <option value="none" selected><?php _e('No Action', 'woo-stripe')?></option>
51
+ <option value="delete"><?php _e('Delete', 'woo-stripe')?></option>
52
+ </select>
53
+ </td>
54
+ </tr>
55
+ </tbody>
56
+ </table>
57
+ <?php else:?>
58
+ <?php _e('No live payment methods saved', 'woo-stripe')?>
59
+ <?php endif;?>
60
+ <h2><?php _e('Stripe Test Payment Methods', 'woo-stripe')?></h2>
61
+ <?php if($payment_methods['test']):?>
62
+ <table class="wc-stripe-payment-methods">
63
+ <thead>
64
+ <tr>
65
+ <th><?php _e('Payment Gateway', 'woo-stripe')?></th>
66
+ <th><?php _e('Payment Method', 'woo-stripe')?></th>
67
+ <th><?php _e('Token', 'woo-stripe')?></th>
68
+ <th><?php _e('Actions', 'woo-stripe')?></th>
69
+ </tr>
70
+ </thead>
71
+ <tbody>
72
+ <?php foreach($payment_methods['test'] as $token):?>
73
+ <tr>
74
+ <td><?php echo $token->get_gateway_id()?></td>
75
+ <td><?php echo $token->get_payment_method_title()?></td>
76
+ <td><?php echo $token->get_token()?></td>
77
+ <td><input type="checkbox" name="payment_methods[test][]" value="<?php echo $token->get_id()?>"/></td>
78
+ </tr>
79
+ <?php endforeach;?>
80
+ <tr>
81
+ <th><?php _e('Action', 'delete')?></th>
82
+ <td>
83
+ <select name="test_payment_method_actions">
84
+ <option value="none" selected><?php _e('No Action', 'woo-stripe')?></option>
85
+ <option value="delete"><?php _e('Delete', 'woo-stripe')?></option>
86
+ </select>
87
+ </td>
88
+ </tr>
89
+ </tbody>
90
+ </table>
91
+ <?php else:?>
92
+ <?php _e('No test payment methods saved', 'woo-stripe')?>
93
+ <?php endif;?>
94
+ <?php printf(__('%snote:%s payment methods will be deleted in Stripe if you use the delete action.', 'woo-stripe'), '<strong>', '</strong>')?>
95
+ </div>
includes/class-stripe.php ADDED
@@ -0,0 +1,246 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Singleton class that handles plugin functionality like class loading.
4
+ * @since 3.0.0
5
+ * @author PaymentPlugins
6
+ * @package Stripe/Classes
7
+ *
8
+ */
9
+ class WC_Stripe_Manager {
10
+
11
+ public static $_instance;
12
+
13
+ public static function instance() {
14
+ if (self::$_instance == null) {
15
+ self::$_instance = new self ();
16
+ }
17
+ return self::$_instance;
18
+ }
19
+
20
+ /**
21
+ *
22
+ * @var string
23
+ */
24
+ public $version = '3.0.0';
25
+
26
+ /**
27
+ *
28
+ * @var WC_Stripe_Settings_API
29
+ */
30
+ public $api_settings;
31
+
32
+ /**
33
+ *
34
+ * @var WC_Stripe_Rest_API
35
+ */
36
+ public $rest_api;
37
+
38
+ /**
39
+ *
40
+ * @var WC_Stripe_Frontend_Scripts
41
+ */
42
+ private $scripts;
43
+
44
+ /**
45
+ *
46
+ * @var array
47
+ */
48
+ private $payment_gateways;
49
+
50
+ public function __construct() {
51
+ add_action ( 'init', array( $this, 'init'
52
+ ) );
53
+ add_action ( 'admin_init', array( $this,
54
+ 'admin_init'
55
+ ) );
56
+ add_action ( 'woocommerce_init', array( $this,
57
+ 'woocommerce_dependencies'
58
+ ) );
59
+ $this->includes ();
60
+ }
61
+
62
+ /**
63
+ * Return the plugin version.
64
+ *
65
+ * @return string
66
+ */
67
+ public function version() {
68
+ return $this->version;
69
+ }
70
+
71
+ /**
72
+ * Return the url for the plugin assets.
73
+ *
74
+ * @return string
75
+ */
76
+ public function assets_url($uri = '') {
77
+ $url = WC_STRIPE_ASSETS . $uri;
78
+ if (! preg_match ( '/(\.js)|(\.css)|(\.svg)|(\.png)/', $uri )) {
79
+ return trailingslashit ( $url );
80
+ }
81
+ return $url;
82
+ }
83
+
84
+ /**
85
+ * Return the dir path for the plugin.
86
+ *
87
+ * @return string
88
+ */
89
+ public function plugin_path() {
90
+ return WC_STRIPE_PLUGIN_PATH;
91
+ }
92
+
93
+ /**
94
+ * Function that is hooked in to the Wordpress init action.
95
+ */
96
+ public function init() {}
97
+
98
+ public function includes() {
99
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-install.php';
100
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-rest-api.php';
101
+
102
+ if (is_admin ()) {
103
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/class-wc-stripe-admin-menus.php';
104
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/class-wc-stripe-admin-assets.php';
105
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/class-wc-stripe-admin-settings.php';
106
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/meta-boxes/class-wc-stripe-admin-order-metaboxes.php';
107
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/class-wc-stripe-admin-user-edit.php';
108
+ }
109
+ }
110
+
111
+ /**
112
+ * Function that is hooked in to the Wordpress admin_init action.
113
+ */
114
+ public function admin_init() {}
115
+
116
+ public function woocommerce_dependencies() {
117
+ // load functions
118
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/wc-stripe-functions.php';
119
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/wc-stripe-webhook-functions.php';
120
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/wc-stripe-hooks.php';
121
+
122
+ // load gateways
123
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-payment-gateway-stripe.php';
124
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-payment-gateway-stripe-charge.php';
125
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-payment-gateway-stripe-payment-intent.php';
126
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-payment-gateway-stripe-local-payment.php';
127
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-cc.php';
128
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-applepay.php';
129
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-googlepay.php';
130
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-payment-request.php';
131
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-ideal.php';
132
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-p24.php';
133
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-klarna.php';
134
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-giropay.php';
135
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-eps.php';
136
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-multibanco.php';
137
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-sepa.php';
138
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-sofort.php';
139
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/gateways/class-wc-payment-gateway-stripe-wechat.php';
140
+
141
+ // tokens
142
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-payment-token-stripe.php';
143
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/tokens/class-wc-payment-token-stripe-cc.php';
144
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/tokens/class-wc-payment-token-stripe-applepay.php';
145
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/tokens/class-wc-payment-token-stripe-googlepay.php';
146
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/tokens/class-wc-payment-token-stripe-local-payment.php';
147
+
148
+ // main classes
149
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-frontend-scripts.php';
150
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-field-manager.php';
151
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-rest-api.php';
152
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-gateway.php';
153
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-customer-manager.php';
154
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-frontend-notices.php';
155
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/class-wc-stripe-redirect-handler.php';
156
+
157
+ // settings
158
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-stripe-settings.php';
159
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/admin/settings/class-wc-stripe-api-settings.php';
160
+
161
+ $this->payment_gateways = apply_filters ( 'wc_stripe_payment_gateways', array(
162
+ 'WC_Payment_Gateway_Stripe_CC',
163
+ 'WC_Payment_Gateway_Stripe_ApplePay',
164
+ 'WC_Payment_Gateway_Stripe_GooglePay',
165
+ 'WC_Payment_Gateway_Stripe_Payment_Request',
166
+ 'WC_Payment_Gateway_Stripe_Ideal',
167
+ 'WC_Payment_Gateway_Stripe_P24',
168
+ // 'WC_Payment_Gateway_Stripe_Klarna',
169
+ 'WC_Payment_Gateway_Stripe_Giropay',
170
+ 'WC_Payment_Gateway_Stripe_EPS',
171
+ 'WC_Payment_Gateway_Stripe_Multibanco',
172
+ 'WC_Payment_Gateway_Stripe_Sepa',
173
+ 'WC_Payment_Gateway_Stripe_Sofort',
174
+ 'WC_Payment_Gateway_Stripe_WeChat'
175
+ ) );
176
+
177
+ $api_class = apply_filters ( 'wc_stripe_rest_api_class', 'WC_Stripe_Rest_API' );
178
+ $this->rest_api = new $api_class ();
179
+ $this->scripts = new WC_Stripe_Frontend_Scripts ();
180
+
181
+ // allow other plugins to provide their own settings classes.
182
+ $setting_classes = apply_filters ( 'wc_stripe_setting_classes', array(
183
+ 'api_settings' => 'WC_Stripe_API_Settings'
184
+ ) );
185
+ foreach ( $setting_classes as $id => $class_name ) {
186
+ if (class_exists ( $class_name )) {
187
+ $this->{$id} = new $class_name ();
188
+ }
189
+ }
190
+ }
191
+
192
+ /**
193
+ * Return the plugin template path.
194
+ */
195
+ public function template_path() {
196
+ return 'woo-stripe-payment';
197
+ }
198
+
199
+ /**
200
+ * Return the plguins default directory path for template files.
201
+ */
202
+ public function default_template_path() {
203
+ return WC_STRIPE_PLUGIN_PATH . 'templates/';
204
+ }
205
+
206
+ /**
207
+ *
208
+ * @return string
209
+ */
210
+ public function rest_uri() {
211
+ return 'wc-stripe/v1/';
212
+ }
213
+
214
+ /**
215
+ *
216
+ * @return string
217
+ */
218
+ public function rest_url() {
219
+ return get_rest_url ( null, $this->rest_uri () );
220
+ }
221
+
222
+ /**
223
+ *
224
+ * @return WC_Stripe_Frontend_Scripts
225
+ */
226
+ public function scripts() {
227
+ return $this->scripts;
228
+ }
229
+
230
+ public function payment_gateways() {
231
+ return $this->payment_gateways;
232
+ }
233
+ }
234
+
235
+ /**
236
+ * Returns the global instance of the WC_Stripe_Manager.
237
+ *
238
+ * @package Stripe/Functions
239
+ * @return WC_Stripe_Manager
240
+ */
241
+ function wc_stripe() {
242
+ return WC_Stripe_Manager::instance ();
243
+ }
244
+
245
+ // load singleton
246
+ wc_stripe ();
includes/class-wc-stripe-customer-manager.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class that manages customer creation and custom updates.
4
+ * @since 3.0.0
5
+ * @package Stripe/Classes
6
+ * @author PaymentPlugins
7
+ *
8
+ */
9
+ class WC_Stripe_Customer_Manager {
10
+
11
+ public function __construct() {
12
+ add_action ( 'woocommerce_checkout_update_customer', array(
13
+ $this, 'checkout_update_customer'
14
+ ), 10, 2 );
15
+ add_action ( 'wp_loaded', array( $this,
16
+ 'wp_loaded'
17
+ ) );
18
+ }
19
+
20
+ /**
21
+ *
22
+ * @param WC_Customer $customer
23
+ * @param array $data
24
+ */
25
+ public function checkout_update_customer($customer, $data) {
26
+ if ($this->user_has_id ( $customer )) {
27
+ if ($this->should_update_customer ( $customer )) {
28
+ $result = $this->update_customer ( $customer );
29
+ if (is_wp_error ( $result )) {
30
+ wc_add_notice ( __ ( 'Error saving customer. Reason: %s', 'woo-stripe' ), $customer_id->get_error_message () );
31
+ }
32
+ }
33
+ } else {
34
+ // create the customer
35
+ $gateway = new WC_Stripe_Gateway ();
36
+ $customer_id = $this->create_customer ( $customer );
37
+ if (! is_wp_error ( $customer_id )) {
38
+ wc_stripe_save_customer ( $customer_id, $customer->get_id () );
39
+ } else {
40
+ wc_add_notice ( __ ( 'Error saving customer. Reason: %s', 'woo-stripe' ), $customer_id->get_error_message () );
41
+ }
42
+ }
43
+ }
44
+
45
+ /**
46
+ *
47
+ * @param WC_Customer $customer
48
+ */
49
+ private function create_customer($customer) {
50
+ $gateway = new WC_Stripe_Gateway ();
51
+ return $gateway->create_customer ( apply_filters ( 'wc_stripe_customer_args', array(
52
+ 'email' => $customer->get_email (),
53
+ 'name' => sprintf ( '%s %s', $customer->get_first_name (), $customer->get_last_name () ),
54
+ 'phone' => $customer->get_billing_phone (),
55
+ 'metadata' => array(
56
+ 'user_id' => $customer->get_id (),
57
+ 'username' => $customer->get_username (),
58
+ 'website' => get_site_url ()
59
+ )
60
+ ) ) );
61
+ }
62
+
63
+ /**
64
+ *
65
+ * @param WC_Customer $customer
66
+ */
67
+ private function update_customer($customer) {
68
+ $gateway = new WC_Stripe_Gateway ();
69
+ return $gateway->update_customer ( wc_stripe_get_customer_id ( $customer->get_id () ), array(
70
+ 'email' => $customer->get_email (),
71
+ 'name' => sprintf ( '%s %s', $customer->get_first_name (), $customer->get_last_name () ),
72
+ 'phone' => $customer->get_billing_phone ()
73
+ ) );
74
+ }
75
+
76
+ /**
77
+ * Check if the Stripe customer has been created for the WC user.
78
+ * If there is no Stripe customer then
79
+ * create one and save it to the WC user.
80
+ */
81
+ public function wp_loaded() {
82
+ $customer = WC ()->customer;
83
+ if ($customer && $customer->get_id ()) {
84
+ if (! $this->user_has_id ( $customer )) {
85
+ $customer_id = $this->create_customer ( $customer );
86
+ if (! is_wp_error ( $customer_id )) {
87
+ wc_stripe_save_customer ( $customer_id, $customer->get_id () );
88
+ }
89
+ }
90
+ }
91
+ }
92
+
93
+ /**
94
+ *
95
+ * @param WC_Customer $customer
96
+ */
97
+ private function user_has_id($customer) {
98
+ $id = wc_stripe_get_customer_id ( $customer->get_id () );
99
+ return ! empty ( $id );
100
+ }
101
+
102
+ /**
103
+ * Returns true if the customer should be updated in Stripe.
104
+ *
105
+ * @param WC_Customer $customer
106
+ * @return bool
107
+ */
108
+ private function should_update_customer($customer) {
109
+ $changes = $customer->get_changes ();
110
+ if (! empty ( $changes[ 'billing' ] )) {
111
+ return array_intersect_key ( $changes[ 'billing' ], array_flip ( $this->get_attribute_keys () ) );
112
+ }
113
+ return false;
114
+ }
115
+
116
+ /**
117
+ * Returns an array of user attributes.
118
+ *
119
+ * @return array
120
+ */
121
+ private function get_attribute_keys() {
122
+ return [ 'first_name', 'last_name', 'email'
123
+ ];
124
+ }
125
+ }
126
+ new WC_Stripe_Customer_Manager ();
includes/class-wc-stripe-field-manager.php ADDED
@@ -0,0 +1,163 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @since 3.0.0
4
+ * @package Stripe/Classes
5
+ * @author Payment Plugins
6
+ *
7
+ */
8
+ class WC_Stripe_Field_Manager {
9
+
10
+ public static function init() {
11
+ add_action ( 'woocommerce_checkout_before_customer_details', array(
12
+ __CLASS__, 'output_banner_checkout_fields'
13
+ ) );
14
+ add_action ( 'woocommerce_after_add_to_cart_button', array(
15
+ __CLASS__, 'output_product_checkout_fields'
16
+ ) );
17
+ add_action ( 'woocommerce_proceed_to_checkout', [
18
+ __CLASS__, 'output_cart_fields'
19
+ ] );
20
+ add_action ( 'woocommerce_review_order_after_order_total', [
21
+ __CLASS__, 'output_checkout_fields'
22
+ ] );
23
+ add_action ( 'before_woocommerce_add_payment_method', array(
24
+ __CLASS__, 'add_payment_method_fields'
25
+ ) );
26
+ add_action ( 'before_woocommerce_pay', array(
27
+ __CLASS__, 'change_payment_request'
28
+ ) );
29
+ }
30
+
31
+ public static function output_banner_checkout_fields() {
32
+ $gateways = [];
33
+ foreach ( WC ()->payment_gateways ()->get_available_payment_gateways () as $gateway ) {
34
+ if ($gateway->supports ( 'wc_stripe_banner_checkout' ) && $gateway->banner_checkout_enabled ()) {
35
+ $gateways[ $gateway->id ] = $gateway;
36
+ }
37
+ }
38
+ if ($gateways) {
39
+ wc_stripe_get_template ( 'checkout/checkout-banner.php', [
40
+ 'gateways' => $gateways
41
+ ] );
42
+ }
43
+ }
44
+
45
+ public static function output_checkout_fields() {
46
+ // now that sources have been printed, clear them.
47
+ WC ()->session->set ( 'wc_stripe_local_payment_sources', [] );
48
+
49
+ self::output_required_fields ();
50
+
51
+ do_action ( 'wc_stripe_output_checkout_fields' );
52
+ }
53
+
54
+ public static function output_product_checkout_fields() {
55
+ global $product;
56
+ $gateways = [];
57
+ foreach ( WC ()->payment_gateways ()->get_available_payment_gateways () as $id => $gateway ) {
58
+ /**
59
+ *
60
+ * @var WC_Payment_Gateway_Stripe $gateway
61
+ */
62
+ if ($gateway->supports ( 'wc_stripe_product_checkout' ) && $gateway->product_checkout_enabled ()) {
63
+ $gateways[ $gateway->id ] = $gateway;
64
+ }
65
+ }
66
+ self::output_required_fields ();
67
+ printf ( '<input type="hidden" id="product_id", value="%s"/>', $product->get_id () );
68
+ printf ( '<input type="hidden" id="wc_stripe_product_data" data-product="%s"/>', htmlspecialchars ( wp_json_encode ( [
69
+ 'product_id' => $product->get_id (),
70
+ 'price' => $product->get_price (),
71
+ 'needs_shipping' => $product->needs_shipping ()
72
+ ] ) ) );
73
+ printf ( '<input type="hidden" id="wc_stripe_display_items" data-items="%s"/>', htmlspecialchars ( wp_json_encode ( [
74
+ [
75
+ 'amount' => wc_stripe_add_number_precision ( $product->get_price () ),
76
+ 'label' => esc_attr ( $product->get_name () ),
77
+ 'pending' => true
78
+ ]
79
+ ] ) ) );
80
+ printf ( '<input type="hidden" id="wc_stripe_shipping_options" data-items="%s"/>', htmlspecialchars ( wp_json_encode ( [] ) ) );
81
+ printf ( '<input type="hidden" id="wc_stripe_order_total_cents" data-amount="%s"/>', wc_stripe_add_number_precision ( $product->get_price () ) );
82
+
83
+ self::output_fields ( 'billing' );
84
+
85
+ // don't always need shipping fields but doesn't hurt to output them anyway.
86
+ self::output_fields ( 'shipping' );
87
+
88
+ wc_stripe_get_template ( 'product/payment-methods.php', [
89
+ 'gateways' => $gateways
90
+ ] );
91
+ }
92
+
93
+ public static function output_cart_fields() {
94
+ $gateways = [];
95
+ foreach ( WC ()->payment_gateways ()->get_available_payment_gateways () as $id => $gateway ) {
96
+ /**
97
+ *
98
+ * @var WC_Payment_Gateway_Stripe $gateway
99
+ */
100
+ if ($gateway->supports ( 'wc_stripe_cart_checkout' ) && $gateway->cart_checkout_enabled ()) {
101
+ $gateways[ $gateway->id ] = $gateway;
102
+ }
103
+ }
104
+ if (! empty ( $gateways )) {
105
+ echo '<form>';
106
+ self::output_required_fields ();
107
+
108
+ self::output_fields ( 'billing' );
109
+
110
+ if (WC ()->cart->needs_shipping ()) {
111
+ self::output_needs_shipping ( true );
112
+ self::output_fields ( 'shipping' );
113
+ } else {
114
+ self::output_needs_shipping ( false );
115
+ }
116
+
117
+ wc_stripe_get_template ( 'cart/payment-methods.php', [
118
+ 'gateways' => $gateways
119
+ ] );
120
+ echo '</form>';
121
+ }
122
+ }
123
+
124
+ public static function change_payment_request() {
125
+ if (wcs_stripe_active () && WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment) {
126
+ $subscription = wcs_get_subscription ( absint ( $_GET[ 'change_payment_method' ] ) );
127
+ self::output_required_fields ( $subscription );
128
+ }
129
+ }
130
+
131
+ public static function add_payment_method_fields() {
132
+ wc_stripe_hidden_field ( 'billing_first_name', '', WC ()->customer->get_first_name () );
133
+ wc_stripe_hidden_field ( 'billing_last_name', '', WC ()->customer->get_last_name () );
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @param WC_Order $order
139
+ */
140
+ public static function output_required_fields($order = null) {
141
+ printf ( '<input type="hidden" id="%1$s" value="%2$s"/>', 'wc_stripe_currency', get_woocommerce_currency () );
142
+ printf ( '<input type="hidden" id="%1$s" data-amount="%2$s"/>', 'wc_stripe_order_total', $order ? $order->get_total () : WC ()->cart->total );
143
+ if (is_cart () || is_checkout ()) {
144
+ printf ( '<input type="hidden" id="wc_stripe_display_items" data-items="%s"/>', wc_stripe_get_display_items ( true, $order ) );
145
+ printf ( '<input type="hidden" id="wc_stripe_shipping_options" data-items="%s"/>', wc_stripe_get_shipping_options ( true, $order ) );
146
+ printf ( '<input type="hidden" id="wc_stripe_order_total_cents" data-amount="%s"/>', wc_stripe_add_number_precision ( $order ? $order->get_total () : WC ()->cart->total ) );
147
+ }
148
+ }
149
+
150
+ public static function output_fields($prefix) {
151
+ $fields = WC ()->checkout ()->get_checkout_fields ( $prefix );
152
+ foreach ( $fields as $key => $field ) {
153
+ printf ( '<input type="hidden" id="%1$s" name="%1$s" value="%2$s"/>', $key, WC ()->checkout ()->get_value ( $key ) );
154
+ }
155
+ }
156
+
157
+ public static function output_needs_shipping($needs_shipping) {
158
+ printf ( '<input type="hidden" id="wc_stripe_needs_shipping" data-value="%s" />', $needs_shipping );
159
+ }
160
+ }
161
+ if (! is_admin ()) {
162
+ WC_Stripe_Field_Manager::init ();
163
+ }
includes/class-wc-stripe-frontend-notices.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Class that manages frontend notices for customers.
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Classes
6
+ * @since 3.0.0
7
+ *
8
+ */
9
+ class WC_Stripe_Frontend_Notices {
10
+
11
+ public static function init() {
12
+ add_action ( 'wp_enqueue_scripts', [
13
+ __CLASS__, 'enqueue_scripts'
14
+ ] );
15
+ }
16
+
17
+ public static function enqueue_scripts() {
18
+ if (isset ( $wp->query_vars[ 'order-received' ] )) {
19
+ $scripts = wc_stripe ()->scripts ();
20
+ $order_id = absint ( $wp->query_vars[ 'order-received' ] );
21
+ $order = wc_get_order ( $order_id );
22
+ $notices = [];
23
+ if (( $message = $order->get_meta ( '_wc_stripe_order_error', true ) )) {
24
+ $notices[] = wc_get_template_html ( "notices/notice.php", [
25
+ 'messages' => [ $message
26
+ ]
27
+ ] );
28
+ }
29
+ if ($order->has_status ( 'on-hold' )) {
30
+ $payment_method = $order->get_payment_method ();
31
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
32
+ if ($gateway instanceof WC_Payment_Gateway_Stripe_Local_Payment) {
33
+ $notices[] = wc_get_template_html ( "notices/notice.php", [
34
+ 'messages' => [
35
+ __ ( 'Your payment is being processed and your order status will be updated once the funds are received.', 'woo-stripe' )
36
+ ]
37
+ ] );
38
+ }
39
+ if ($notices) {
40
+ self::enqueue_notices ( $notices );
41
+ }
42
+ }
43
+ }
44
+ }
45
+
46
+ public static function enqueue_notices($notices) {
47
+ $scripts->enqueue_script ( 'notices', $scripts->assets_url ( 'js/frontend/notices.js' ), [
48
+ 'jquery'
49
+ ], wc_stripe ()->version (), true );
50
+ $scripts->localize_script ( 'notices', [
51
+ 'container' => '.woocommerce-order',
52
+ 'notices' => $notices
53
+ ] );
54
+ }
55
+ }
56
+ WC_Stripe_Frontend_Notices::init ();
includes/class-wc-stripe-frontend-scripts.php ADDED
@@ -0,0 +1,101 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handles scrip enqueuement and output of params needed by the plugin.
4
+ * @package Stripe/Classes
5
+ * @author PaymentPlugins
6
+ *
7
+ */
8
+ class WC_Stripe_Frontend_Scripts {
9
+
10
+ public $prefix = 'wc-stripe-';
11
+
12
+ public $registered_scripts = array();
13
+
14
+ public $enqueued_scripts = array();
15
+
16
+ public $localized_scripts = array();
17
+
18
+ public $global_scripts = array(
19
+ 'external' => 'https://js.stripe.com/v3/',
20
+ 'gpay' => 'https://pay.google.com/gp/p/js/pay.js'
21
+ );
22
+
23
+ public function __construct() {
24
+ add_action ( 'wp_enqueue_scripts', array( $this,
25
+ 'enqueue_scripts'
26
+ ) );
27
+ }
28
+
29
+ /**
30
+ * Enqueue all frontend scripts needed by the plugin
31
+ */
32
+ public function enqueue_scripts() {
33
+ // register global scripts
34
+ foreach ( $this->global_scripts as $handle => $src ) {
35
+ $this->register_script ( $handle, $src );
36
+ }
37
+
38
+ // register scripts that aren't part of gateways
39
+ $this->register_script ( 'wc-stripe', $this->assets_url ( 'js/frontend/wc-stripe' . $this->get_min () . '.js' ), array(
40
+ 'jquery', $this->get_handle ( 'external' )
41
+ ) );
42
+
43
+ $this->register_script ( 'form-handler', $this->assets_url ( 'js/frontend/form-handler.js' ), array(
44
+ 'jquery'
45
+ ) );
46
+
47
+ wp_localize_script ( $this->get_handle ( 'wc-stripe' ), 'wc_stripe_params', [
48
+ 'api_key' => wc_stripe_get_publishable_key ()
49
+ ] );
50
+ }
51
+
52
+ public function register_script($handle, $src, $deps = array(), $version = '', $footer = true) {
53
+ $version = empty ( $version ) ? wc_stripe ()->version () : $version;
54
+ $this->registered_scripts[] = $this->get_handle ( $handle );
55
+ wp_register_script ( $this->get_handle ( $handle ), $src, $deps, $version, $footer );
56
+ }
57
+
58
+ public function enqueue_script($handle, $src = '', $deps = array(), $version = '', $footer = true) {
59
+ $handle = $this->get_handle ( $handle );
60
+ $version = empty ( $version ) ? wc_stripe ()->version () : $version;
61
+ if (! in_array ( $handle, $this->registered_scripts )) {
62
+ $this->register_script ( $handle, $src, $deps, $version, $footer );
63
+ }
64
+ $this->enqueued_scripts[] = $handle;
65
+ wp_enqueue_script ( $handle );
66
+ }
67
+
68
+ /**
69
+ *
70
+ * @param string $handle
71
+ * @param array $data
72
+ */
73
+ public function localize_script($handle, $data) {
74
+ $handle = $this->get_handle ( $handle );
75
+ if (wp_script_is ( $handle ) && ! in_array ( $handle, $this->localized_scripts )) {
76
+ $name = str_replace ( $this->prefix, '', $handle );
77
+ $data = apply_filters ( 'wc_stripe_localize_script_' . $name, $data, $name );
78
+ if ($data) {
79
+ $this->localized_scripts[] = $handle;
80
+ $object_name = str_replace ( '-', '_', $handle ) . '_params';
81
+ wp_localize_script ( $handle, $object_name, $data );
82
+ }
83
+ }
84
+ }
85
+
86
+ public function get_handle($handle) {
87
+ return strpos ( $handle, $this->prefix ) === false ? $this->prefix . $handle : $handle;
88
+ }
89
+
90
+ /**
91
+ *
92
+ * @param string $uri
93
+ */
94
+ public function assets_url($uri = '') {
95
+ return untrailingslashit ( wc_stripe ()->assets_url ( $uri ) );
96
+ }
97
+
98
+ public function get_min() {
99
+ return $suffix = SCRIPT_DEBUG ? '' : '.min';
100
+ }
101
+ }
includes/class-wc-stripe-gateway.php ADDED
@@ -0,0 +1,368 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ use Stripe\ApiOperations\Create;
3
+ use Stripe\ApiOperations\Retrieve;
4
+ use Stripe\ApiOperations\Update;
5
+ use Stripe\ApiOperations\All;
6
+
7
+ /**
8
+ * Gateway class that abstracts all API calls to Stripe.
9
+ *
10
+ * @author Payment Plugins
11
+ * @package Stripe/Classes
12
+ *
13
+ */
14
+ class WC_Stripe_Gateway {
15
+
16
+ public function __construct() {}
17
+
18
+ public static function init() {
19
+ \Stripe\Stripe::setAppInfo ( 'Wordpress woo-stripe-payment', wc_stripe ()->version (), 'https://wordpress.org/plugins/woo-stripe-payment/', 'pp_partner_FdPtriN2Q7JLOe' );
20
+ \Stripe\Stripe::setApiVersion ( '2019-05-16' );
21
+ }
22
+
23
+ /**
24
+ * Create a customer within Stripe.
25
+ *
26
+ * @param array $args
27
+ * @return WP_Error|string
28
+ */
29
+ public function create_customer($args, $mode = '') {
30
+ try {
31
+ $customer = \Stripe\Customer::create ( apply_filters ( 'wc_stripe_create_customer_args', $args ), $this->get_api_options () );
32
+ return $customer->id;
33
+ } catch ( \Stripe\Error\Base $e ) {
34
+ $err = $e->getJsonBody ();
35
+ return new WP_Error ( 'customer-error', $err[ 'message' ] );
36
+ }
37
+ }
38
+
39
+ public function update_customer($id, $args, $mode = '') {
40
+ try {
41
+ return \Stripe\Customer::update ( $id, $args, $this->get_api_options ( $mode ) );
42
+ } catch ( \Stripe\Error\Base $e ) {
43
+ $err = $e->getJsonBody ();
44
+ return new WP_Error ( 'customer-error', $err[ 'message' ] );
45
+ }
46
+ }
47
+
48
+ public function charge($args, $mode = '') {
49
+ try {
50
+ return \Stripe\Charge::create ( $args, $this->get_api_options ( $mode ) );
51
+ } catch ( \Stripe\Error\Base $e ) {
52
+ $err = $e->getJsonBody ()[ 'error' ];
53
+ return new WP_Error ( 'charge-error', $err[ 'message' ] );
54
+ }
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @param array $args
60
+ * @param string $mode
61
+ * @return WP_Error|\Stripe\PaymentIntent
62
+ */
63
+ public function create_payment_intent($args, $mode = '') {
64
+ try {
65
+ return \Stripe\PaymentIntent::create ( $args, $this->get_api_options ( $mode ) );
66
+ } catch ( \Stripe\Error\Base $e ) {
67
+ $err = $e->getJsonBody ()[ 'error' ];
68
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
69
+ }
70
+ }
71
+
72
+ public function create_setup_intent($args, $mode = '') {
73
+ try {
74
+ return \Stripe\SetupIntent::create ( $args, $this->get_api_options ( $mode ) );
75
+ } catch ( \Stripe\Error\Base $e ) {
76
+ $err = $e->getJsonBody ()[ 'error' ];
77
+ return new WP_Error ( 'setup-intent-error', $err[ 'message' ] );
78
+ }
79
+ }
80
+
81
+ /**
82
+ *
83
+ * @param \Stripe\PaymentIntent $intent
84
+ * @param array $args
85
+ * @param string $mode
86
+ */
87
+ public function update_payment_intent($id, $args, $mode = '') {
88
+ try {
89
+ return \Stripe\PaymentIntent::update ( $id, $args, $this->get_api_options ( $mode ) );
90
+ } catch ( \Stripe\Error\Base $e ) {
91
+ $err = $e->getJsonBody ()[ 'error' ];
92
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
93
+ }
94
+ }
95
+
96
+ /**
97
+ *
98
+ * @param \Stripe\PaymentIntent $intent
99
+ * @param array $args
100
+ * @param string $mode
101
+ */
102
+ public function confirm_payment_intent($intent, $args = [], $mode = '') {
103
+ try {
104
+ /*
105
+ * $intent = $this->fetch_payment_intent ( $id, $mode );
106
+ * if (is_wp_error ( $intent )) {
107
+ * return $intent;
108
+ * }
109
+ */
110
+ return $intent->confirm ( $args, $this->get_api_options ( $mode ) );
111
+ } catch ( \Stripe\Error\Base $e ) {
112
+ $err = $e->getJsonBody ()[ 'error' ];
113
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
114
+ }
115
+ }
116
+
117
+ /**
118
+ *
119
+ * @param string $id
120
+ * @param string $mode
121
+ * @return WP_Error|\Stripe\PaymentIntent
122
+ */
123
+ public function fetch_payment_intent($id, $mode = '') {
124
+ try {
125
+ return \Stripe\PaymentIntent::retrieve ( $id, $this->get_api_options ( $mode ) );
126
+ } catch ( \Stripe\Error\Base $e ) {
127
+ $err = $e->getJsonBody ()[ 'error' ];
128
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
129
+ }
130
+ }
131
+
132
+ public function capture_payment_intent($id, $args = [], $mode = '') {
133
+ try {
134
+ $payment_intent = $this->fetch_payment_intent ( $id, $mode );
135
+ return $payment_intent->capture ( $args, $this->get_api_options ( $mode ) );
136
+ } catch ( \Stripe\Error\Base $e ) {
137
+ $err = $e->getJsonBody ()[ 'error' ];
138
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
139
+ }
140
+ }
141
+
142
+ public function cancel_payment_intent($id, $mode = '') {
143
+ try {
144
+ $payment_intent = $this->fetch_payment_intent ( $id, $mode );
145
+ return $payment_intent->cancel ( [], $this->get_api_options ( $mode ) );
146
+ } catch ( \Stripe\Error\Base $e ) {
147
+ $err = $e->getJsonBody ()[ 'error' ];
148
+ return new WP_Error ( 'payment-intent-error', $err[ 'message' ] );
149
+ }
150
+ }
151
+
152
+ /**
153
+ *
154
+ * @param string $id
155
+ * @param string $mode
156
+ * @return WP_Error|\Stripe\SetupIntent
157
+ */
158
+ public function fetch_setup_intent($id, $mode = '') {
159
+ try {
160
+ return \Stripe\SetupIntent::retrieve ( $id, $this->get_api_options ( $mode ) );
161
+ } catch ( \Stripe\Error\Base $e ) {
162
+ $err = $e->getJsonBody ()[ 'error' ];
163
+ return new WP_Error ( $err[ 'code' ], $err[ 'message' ] );
164
+ }
165
+ }
166
+
167
+ public function capture($id, $args, $mode = '') {
168
+ $charge = $this->get_charge ( $id, $mode );
169
+ if (! is_wp_error ( $charge )) {
170
+ try {
171
+ return $charge->capture ( $args, $this->get_api_options ( $mode ) );
172
+ } catch ( \Stripe\Error\Base $e ) {
173
+ return new WP_Error ( 'capture-error', sprintf ( __ ( 'Error capturing charge. Reason: %s', 'woo-stripe' ), $e->getMessage () ) );
174
+ }
175
+ } else {
176
+ return $charge;
177
+ }
178
+ }
179
+
180
+ /**
181
+ *
182
+ * @param string $charge_id
183
+ * @param string $mode
184
+ * @return \Stripe\Charge|WP_Error
185
+ */
186
+ public function get_charge($charge_id, $mode = '') {
187
+ try {
188
+ return \Stripe\Charge::retrieve ( $charge_id, $this->get_api_options ( $mode ) );
189
+ } catch ( \Stripe\Error\Base $e ) {
190
+ return new WP_Error ( $err[ 'code' ], $err[ 'message' ] );
191
+ }
192
+ }
193
+
194
+ public function refund($args, $mode = '') {
195
+ try {
196
+ return \Stripe\Refund::create ( $args, $this->get_api_options ( $mode ) );
197
+ } catch ( \Stripe\Error\Base $e ) {
198
+ $err = $e->getJsonBody ()[ 'error' ];
199
+ return new WP_Error ( 'refund', $err[ 'message' ] );
200
+ }
201
+ }
202
+
203
+ public function get_payment_method($id, $mode = '') {
204
+ try {
205
+ return \Stripe\PaymentMethod::retrieve ( $id, $this->get_api_options ( $mode ) );
206
+ } catch ( \Stripe\Error\Base $e ) {
207
+ $err = $e->getJsonBody ()[ 'error' ];
208
+ return new WP_Error ( 'payment-method', $err[ 'message' ] );
209
+ }
210
+ }
211
+
212
+ /**
213
+ *
214
+ * @param \Stripe\PaymentMethod $payment_method
215
+ * @param array $args
216
+ * @param string $mode
217
+ */
218
+ public function attach_payment_method($payment_method, $args = [], $mode = '') {
219
+ try {
220
+ return $payment_method->attach ( $args, $this->get_api_options ( $mode ) );
221
+ } catch ( \Stripe\Error\Base $e ) {
222
+ $err = $e->getJsonBody ()[ 'error' ];
223
+ return new WP_Error ( 'attach-payment-error', $err[ 'message' ] );
224
+ }
225
+ }
226
+
227
+ public function fetch_payment_method($id, $mode = '') {
228
+ try {
229
+ return \Stripe\PaymentMethod::retrieve ( $id, $this->get_api_options ( $mode ) );
230
+ } catch ( \Stripe\Error\Base $e ) {
231
+ $err = $e->getJsonBody ()[ 'error' ];
232
+ return new WP_Error ( 'fetch-payment-error', $err[ 'message' ] );
233
+ }
234
+ }
235
+
236
+ /**
237
+ *
238
+ * @param \Stripe\PaymentMethod $payment_method
239
+ * @param string $mode
240
+ */
241
+ public function delete_payment_method($payment_method, $mode = '') {
242
+ try {
243
+ return $payment_method->detach ( [], $this->get_api_options ( $mode ) );
244
+ } catch ( \Stripe\Error\Base $e ) {
245
+ $err = $e->getJsonBody ()[ 'error' ];
246
+ return new WP_Error ( 'delete-source-error', $err[ 'message' ] );
247
+ }
248
+ }
249
+
250
+ /**
251
+ *
252
+ * @param string $id
253
+ * card id
254
+ * @param string $customer
255
+ * @param string $mode
256
+ */
257
+ public function delete_card($id, $customer, $mode = '') {
258
+ try {
259
+ \Stripe\Customer::deleteSource ( $customer, $id, null, $this->get_api_options ( $mode ) );
260
+ } catch ( \Stripe\Error\Base $e ) {
261
+ $err = $e->getJsonBody ()[ 'error' ];
262
+ return new WP_Error ( 'delete-source-error', $err[ 'message' ] );
263
+ }
264
+ }
265
+
266
+ /**
267
+ *
268
+ * @param array $args
269
+ * @param string $mode
270
+ * @return WP_Error|\Stripe\PaymentMethod
271
+ */
272
+ public function create_payment_method($args, $mode = '') {
273
+ try {
274
+ return \Stripe\PaymentMethod::create ( $args, $this->get_api_options ( $mode ) );
275
+ } catch ( \Stripe\Error\Base $e ) {
276
+ $err = $e->getJsonBody ()[ 'error' ];
277
+ return new WP_Error ( 'delete-source-error', $err[ 'message' ] );
278
+ }
279
+ }
280
+
281
+ /**
282
+ *
283
+ * @param string $id
284
+ * @param string $mode
285
+ * @return WP_Error|\Stripe\Source
286
+ *
287
+ */
288
+ public function fetch_payment_source($id, $mode = '') {
289
+ try {
290
+ return \Stripe\Source::retrieve ( $id, $this->get_api_options ( $mode ) );
291
+ } catch ( \Stripe\Error\Base $e ) {
292
+ $err = $e->getJsonBody ()[ 'error' ];
293
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
294
+ }
295
+ }
296
+
297
+ /**
298
+ *
299
+ * @param string $customer_id
300
+ * @param string $id
301
+ * @param string $mode
302
+ * @return WP_Error|\Stripe\Source
303
+ */
304
+ public function create_customer_source($customer_id, $id, $mode = '') {
305
+ try {
306
+ return \Stripe\Customer::createSource ( $customer_id, [
307
+ 'source' => $id
308
+ ], $this->get_api_options ( $mode ) );
309
+ } catch ( \Stripe\Error\Base $e ) {
310
+ $err = $e->getJsonBody ()[ 'error' ];
311
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
312
+ }
313
+ }
314
+
315
+ /**
316
+ *
317
+ * @param array $args
318
+ * @param string $mode
319
+ * @return WP_Error|\Stripe\Source
320
+ */
321
+ public function create_source($args, $mode = '') {
322
+ try {
323
+ return \Stripe\Source::create ( $args, $this->get_api_options ( $mode ) );
324
+ } catch ( \Stripe\Error\Base $e ) {
325
+ $err = $e->getJsonBody ()[ 'error' ];
326
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
327
+ }
328
+ }
329
+
330
+ public function fetch_customer($customer_id, $mode = '') {
331
+ try {
332
+ return \Stripe\Customer::retrieve ( $customer_id, $this->get_api_options ( $mode ) );
333
+ } catch ( \Stripe\Error\Base $e ) {
334
+ $err = $e->getJsonBody ()[ 'error' ];
335
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
336
+ }
337
+ }
338
+
339
+ public function fetch_payment_methods($customer_id, $mode = '') {
340
+ try {
341
+ return \Stripe\PaymentMethod::all ( [
342
+ 'customer' => $customer_id,
343
+ 'type' => 'card'
344
+ ], $this->get_api_options ( $mode ) );
345
+ } catch ( \Stripe\Error\Base $e ) {
346
+ $err = $e->getJsonBody ()[ 'error' ];
347
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
348
+ }
349
+ }
350
+
351
+ public function register_domain($domain, $mode = '') {
352
+ try {
353
+ \Stripe\ApplePayDomain::create ( [
354
+ 'domain_name' => $domain
355
+ ], $this->get_api_options ( $mode ) );
356
+ } catch ( \Stripe\Error\Base $e ) {
357
+ $err = $e->getJsonBody ()[ 'error' ];
358
+ return new WP_Error ( 'source-error', $err[ 'message' ] );
359
+ }
360
+ }
361
+
362
+ private function get_api_options($mode = '') {
363
+ return apply_filters ( 'wc_stripe_api_options', [
364
+ 'api_key' => wc_stripe_get_secret_key ( $mode )
365
+ ] );
366
+ }
367
+ }
368
+ WC_Stripe_Gateway::init ();
includes/class-wc-stripe-install.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *@package Stripe/Classes
4
+ *
5
+ */
6
+ class WC_Stripe_Install {
7
+
8
+ public static function init() {
9
+ add_filter ( 'plugin_action_links_' . WC_STRIPE_PLUGIN_NAME, array(
10
+ __CLASS__, 'plugin_action_links'
11
+ ) );
12
+ }
13
+
14
+ /**
15
+ *
16
+ * @param array $links
17
+ */
18
+ public static function plugin_action_links($links) {
19
+ $action_links = array(
20
+ 'settings' => sprintf ( '<a href="%1$s">%2$s</a>', admin_url ( 'admin.php?page=wc-settings&tab=checkout&section=stripe_api' ), esc_html__ ( 'Settings', 'woo-stripe' ) ),
21
+ 'docs' => sprintf ( '<a target="_blank" href="https://docs.paymentplugins.com/wc-stripe/config">%s</a>', __ ( 'Documentation', 'woo-stripe' ) )
22
+ );
23
+ return array_merge ( $action_links, $links );
24
+ }
25
+ }
26
+ WC_Stripe_Install::init ();
includes/class-wc-stripe-redirect-handler.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Classes
6
+ *
7
+ */
8
+ class WC_Stripe_Redirect_Handler {
9
+
10
+ public static function init() {
11
+ add_action ( 'template_redirect', [ __CLASS__,
12
+ 'local_payment_redirect'
13
+ ] );
14
+ }
15
+
16
+ /**
17
+ * Check if this request is for a local payment redirect.
18
+ */
19
+ public static function local_payment_redirect() {
20
+ // resource created server side.
21
+ if (isset ( $_GET[ 'wc-stripe-local-gateway' ], $_GET[ '_payment_nonce' ], $_GET[ 'order_id' ] ) && wp_verify_nonce ( $_GET[ '_payment_nonce' ], 'local-payment-' . $_GET[ 'order_id' ] )) {
22
+ self::process_redirect ( wc_clean ( absint ( $_GET[ 'order_id' ] ) ) );
23
+ }
24
+ // resource created client side.
25
+ if (isset ( $_GET[ 'wc-stripe-local-gateway' ], $_GET[ '_payment_nonce' ] ) && wp_verify_nonce ( $_GET[ '_payment_nonce' ], 'local-payment' )) {
26
+ self::process_redirect ( WC ()->session->get ( 'wc_stripe_order_id', 0 ) );
27
+ }
28
+ }
29
+
30
+ /**
31
+ */
32
+ public static function process_redirect($order_id) {
33
+ $order = wc_get_order ( $order_id );
34
+ $payment_method = wc_clean ( $_GET[ 'wc-stripe-local-gateway' ] );
35
+ // first do some validations on the source
36
+ $stripe_gateway = new WC_Stripe_Gateway ();
37
+
38
+ $source = $stripe_gateway->fetch_payment_source ( wc_clean ( $_GET[ 'source' ] ) );
39
+ if (is_wp_error ( $source )) {
40
+ wc_add_notice ( sprintf ( __ ( 'Error retrieving payment source. Reason: %s', 'woo-stripe' ), $source->get_error_message () ), 'error' );
41
+ return;
42
+ } else {
43
+ if ('failed' === $source->status) {
44
+ wc_add_notice ( __ ( 'Payment authorization failed. Please select another payment method.', 'woo-stripe' ), 'error' );
45
+ return;
46
+ }
47
+ }
48
+ $transaction_id = $order->get_transaction_id ();
49
+ // if there is no transaction ID then the order hasn't been processed via webhooks yet.
50
+ if (! $$transaction_id) {
51
+ $order->update_status ( 'on-hold', __ ( 'Status updated to on hold. Charge will be created when source.chargeable webhook received.', 'woo-stripe' ) );
52
+ }
53
+ wp_safe_redirect ( $order->get_checkout_order_received_url () );
54
+ exit ();
55
+
56
+ /**
57
+ *
58
+ * @var WC_Payment_Gateway_Stripe_Local_Payment $gateway
59
+ */
60
+ /*
61
+ * $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
62
+ * $gateway->processing_payment = true;
63
+ * $_POST[ $gateway->token_key ] = wc_clean ( $_GET[ 'source' ] );
64
+ *
65
+ * $result = $gateway->process_payment ( $order_id );
66
+ *
67
+ * if (isset ( $result[ 'result' ] ) && 'success' === $result[ 'result' ]) {
68
+ * wp_safe_redirect ( $result[ 'redirect' ] );
69
+ * exit ();
70
+ * }
71
+ */
72
+ }
73
+ }
74
+ WC_Stripe_Redirect_Handler::init ();
includes/class-wc-stripe-rest-api.php ADDED
@@ -0,0 +1,114 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Classes
6
+ * @propertyWC_Stripe_Rest_Controller $order_actions
7
+ * @property WC_Stripe_Rest_Controller $cart
8
+ * @property WC_Stripe_Rest_Controller $checkout
9
+ * @propertyWC_Stripe_Rest_Controller $payment_intent
10
+ * @property WC_Stripe_Rest_Controller $googlepay
11
+ * @property WC_Stripe_Rest_Controller $settings
12
+ * @property WC_Stripe_Rest_Controller $webhook
13
+ */
14
+ class WC_Stripe_Rest_API {
15
+
16
+ /**
17
+ *
18
+ * @var array
19
+ */
20
+ private $controllers = array();
21
+
22
+ public function __construct() {
23
+ $this->include_classes ();
24
+ add_action ( 'rest_api_init', array( $this,
25
+ 'register_routes'
26
+ ) );
27
+ }
28
+
29
+ public static function init() {
30
+ add_filter ( 'woocommerce_is_rest_api_request', array(
31
+ __CLASS__, 'is_rest_api_request'
32
+ ) );
33
+ }
34
+
35
+ /**
36
+ *
37
+ * @param WC_Braintree_Rest_Controller $key
38
+ */
39
+ public function __get($key) {
40
+ $controller = isset ( $this->controllers[ $key ] ) ? $this->controllers[ $key ] : '';
41
+ if (empty ( $controller )) {
42
+ wc_doing_it_wrong ( __FUNCTION__, sprintf ( __ ( '%1$s is an invalid controller name.', 'woo-stripe' ), $key ), wc_stripe ()->version );
43
+ }
44
+ return $controller;
45
+ }
46
+
47
+ public function __set($key, $value) {
48
+ $this->controllers[ $key ] = $value;
49
+ }
50
+
51
+ private function include_classes() {
52
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/abstract/abstract-wc-stripe-rest-controller.php';
53
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-order-actions.php';
54
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-payment-intent.php';
55
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-cart.php';
56
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-checkout.php';
57
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-googlepay.php';
58
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-payment-method.php';
59
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-gateway-settings.php';
60
+ include_once WC_STRIPE_PLUGIN_PATH . 'includes/controllers/class-wc-stripe-controller-webhook.php';
61
+
62
+ foreach ( $this->get_controllers () as $key => $class_name ) {
63
+ if (class_exists ( $class_name )) {
64
+ $this->{$key} = new $class_name ();
65
+ }
66
+ }
67
+ }
68
+
69
+ public function register_routes() {
70
+ WC ()->payment_gateways ();
71
+ foreach ( $this->controllers as $key => $controller ) {
72
+ if (is_callable ( array( $controller,
73
+ 'register_routes'
74
+ ) )) {
75
+ $controller->{ 'register_routes' } ();
76
+ }
77
+ }
78
+ }
79
+
80
+ public function get_controllers() {
81
+ $controllers = array(
82
+ 'order_actions' => 'WC_Stripe_Controller_Order_Actions',
83
+ 'checkout' => 'WC_Stripe_Controller_Checkout',
84
+ 'cart' => 'WC_Stripe_Controller_Cart',
85
+ 'payment_intent' => 'WC_Stripe_Controller_Payment_Intent',
86
+ 'googlepay' => 'WC_Stripe_Controller_GooglePay',
87
+ 'payment_method' => 'WC_Stripe_Controller_Payment_Method',
88
+ 'settings' => 'WC_Stripe_Controller_Gateway_Settings',
89
+ 'webhook' => 'WC_Stripe_Controller_Webhook'
90
+ );
91
+ return apply_filters ( 'wc_stripe_api_controllers', $controllers );
92
+ }
93
+
94
+ public function rest_url() {
95
+ return wc_stripe ()->rest_url ();
96
+ }
97
+
98
+ public function rest_uri() {
99
+ return wc_stripe ()->rest_uri ();
100
+ }
101
+
102
+ /**
103
+ * Added after WC 3.6 so WC_STRIPE_PLUGIN_PATH, and Session are loaded for Stripe rest requests.
104
+ *
105
+ * @param bool $bool
106
+ */
107
+ public static function is_rest_api_request($bool) {
108
+ if (! empty ( $_SERVER[ 'REQUEST_URI' ] ) && strpos ( $_SERVER[ 'REQUEST_URI' ], wc_stripe ()->rest_uri () ) !== - 1) {
109
+ $bool = false;
110
+ }
111
+ return $bool;
112
+ }
113
+ }
114
+ WC_Stripe_Rest_API::init ();
includes/controllers/class-wc-stripe-controller-cart.php ADDED
@@ -0,0 +1,237 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Controller class that perfors cart operations for client side requests.
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Controllers
6
+ *
7
+ */
8
+ class WC_Stripe_Controller_Cart extends WC_Stripe_Rest_Controller {
9
+
10
+ protected $namespace = 'cart/';
11
+
12
+ public function register_routes() {
13
+ register_rest_route ( $this->rest_uri (), 'shipping-method', [
14
+ 'methods' => WP_REST_Server::CREATABLE,
15
+ 'callback' => [ $this,
16
+ 'update_shipping_method'
17
+ ],
18
+ 'args' => [
19
+ 'shipping_methods' => [
20
+ 'required' => true
21
+ ],
22
+ 'payment_method' => [
23
+ 'required' => true
24
+ ]
25
+ ]
26
+ ] );
27
+ register_rest_route ( $this->rest_uri (), 'shipping-address', [
28
+ 'methods' => WP_REST_Server::CREATABLE,
29
+ 'callback' => [ $this,
30
+ 'update_shipping_address'
31
+ ],
32
+ 'args' => [
33
+ 'address' => [
34
+ 'required' => true
35
+ ],
36
+ 'payment_method' => [
37
+ 'required' => true
38
+ ]
39
+ ]
40
+ ] );
41
+ register_rest_route ( $this->rest_uri (), 'add-to-cart', [
42
+ 'methods' => WP_REST_Server::CREATABLE,
43
+ 'callback' => [ $this, 'add_to_cart'
44
+ ],
45
+ 'args' => [
46
+ 'product_id' => [
47
+ 'required' => true
48
+ ],
49
+ 'qty' => [ 'required' => true,
50
+ 'validate_callback' => [
51
+ $this,
52
+ 'validate_quantity'
53
+ ]
54
+ ],
55
+ 'payment_method' => [
56
+ 'required' => true
57
+ ]
58
+ ]
59
+ ] );
60
+ }
61
+
62
+ /**
63
+ *
64
+ * @param int $qty
65
+ * @param WP_REST_Request $request
66
+ */
67
+ public function validate_quantity($qty, $request) {
68
+ if ($qty == 0) {
69
+ return $this->add_validation_error ( new WP_Error ( 'cart-error', __ ( 'Quantity must be greater than zero.', 'woo-stripe' ) ) );
70
+ }
71
+ return true;
72
+ }
73
+
74
+ /**
75
+ * Update the shipping method chosen by the customer.
76
+ *
77
+ * @param WP_REST_Request $request
78
+ */
79
+ public function update_shipping_method($request) {
80
+ wc_maybe_define_constant ( 'WOOCOMMERCE_CART', true );
81
+ $shipping_methods = $request->get_param ( 'shipping_methods' );
82
+ $payment_method = $request->get_param ( 'payment_method' );
83
+ /**
84
+ *
85
+ * @var WC_Payment_Gateway_Stripe $gateway
86
+ */
87
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
88
+
89
+ wc_stripe_update_shipping_methods ( $shipping_methods );
90
+
91
+ WC ()->cart->calculate_totals ();
92
+
93
+ return rest_ensure_response ( apply_filters ( 'wc_stripe_update_shipping_method_response', [
94
+ 'data' => $gateway->get_update_shipping_method_response ( [
95
+ 'newData' => [
96
+ 'status' => 'success',
97
+ 'total' => [
98
+ 'amount' => wc_stripe_add_number_precision ( WC ()->cart->total ),
99
+ 'label' => __ ( 'Total', 'woo-stripe' ),
100
+ 'pending' => false
101
+ ],
102
+ 'displayItems' => wc_stripe_get_display_items (),
103
+ 'shippingOptions' => wc_stripe_get_shipping_options ()
104
+ ],
105
+ 'shipping_methods' => WC ()->session->get ( 'chosen_shipping_methods', [] )
106
+ ] )
107
+ ] ) );
108
+ }
109
+
110
+ /**
111
+ *
112
+ * @param WP_REST_Request $request
113
+ */
114
+ public function update_shipping_address($request) {
115
+ wc_maybe_define_constant ( 'WOOCOMMERCE_CART', true );
116
+ $address = $request->get_param ( 'address' );
117
+ $payment_method = $request->get_param ( 'payment_method' );
118
+ /**
119
+ *
120
+ * @var WC_Payment_Gateway_Stripe $gateway
121
+ */
122
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
123
+ try {
124
+ wc_stripe_update_customer_location ( $address );
125
+
126
+ // calculate cart totals so shipping etc is updated.
127
+ WC ()->cart->calculate_totals ();
128
+
129
+ if (! $this->has_shipping_methods ( WC ()->shipping ()->get_packages () )) {
130
+ throw new Exception ( 'No valid shipping methods.' );
131
+ }
132
+
133
+ return rest_ensure_response ( apply_filters ( 'wc_stripe_update_shipping_method_response', [
134
+ 'data' => $gateway->get_update_shipping_address_response ( [
135
+ 'newData' => [
136
+ 'status' => 'success',
137
+ 'total' => [
138
+ 'amount' => wc_stripe_add_number_precision ( WC ()->cart->total ),
139
+ 'label' => __ ( 'Total', 'woo-stripe' ),
140
+ 'pending' => false
141
+ ],
142
+ 'displayItems' => wc_stripe_get_display_items (),
143
+ 'shippingOptions' => wc_stripe_get_shipping_options ()
144
+ ]
145
+ ] )
146
+ ] ) );
147
+ } catch ( Exception $e ) {
148
+ return new WP_Error ( 'address-error', $e->getMessage (), [
149
+ 'status' => 200,
150
+ 'newData' => [
151
+ 'status' => 'invalid_shipping_address'
152
+ ]
153
+ ] );
154
+ }
155
+ }
156
+
157
+ /**
158
+ *
159
+ * @param WP_REST_Request $request
160
+ */
161
+ public function add_to_cart($request) {
162
+ // WC 3.0.0 requires WOOCOMMERCE_CART to be defined.
163
+ wc_maybe_define_constant ( 'WOOCOMMERCE_CART', true );
164
+ $payment_method = $request->get_param ( 'payment_method' );
165
+ /**
166
+ *
167
+ * @var WC_Payment_Gateway_Stripe $gateway
168
+ */
169
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
170
+
171
+ // empty the cart since we only care about adding the product selected by the customer
172
+ WC ()->cart->empty_cart ();
173
+ $product_id = $request->get_param ( 'product_id' );
174
+ $qty = $request->get_param ( 'qty' );
175
+ $variation_id = $request->get_param ( 'variation_id' ) == null ? 0 : $request->get_param ( 'variation_id' );
176
+ if (WC ()->cart->add_to_cart ( $product_id, $qty, $variation_id ) == false) {
177
+ return new WP_Error ( 'cart-error', $this->get_error_messages (), [
178
+ 'status' => 200
179
+ ] );
180
+ } else {
181
+ WC ()->cart->calculate_totals ();
182
+ // add to cart was successful. Send a new X-WP-Nonce since it will be different now that a WC session exists.
183
+ rest_get_server ()->send_header ( 'X-WP-Nonce', wp_create_nonce ( 'wp_rest' ) );
184
+ return rest_ensure_response ( apply_filters ( 'wc_stripe_add_to_cart_response', [
185
+ 'data' => $gateway->add_to_cart_response ( [
186
+ 'total' => WC ()->cart->total,
187
+ 'subtotal' => WC ()->cart->subtotal,
188
+ 'totalCents' => wc_stripe_add_number_precision ( WC ()->cart->total ),
189
+ 'displayItems' => wc_stripe_get_display_items (),
190
+ 'shippingOptions' => wc_stripe_get_shipping_options ()
191
+ ] )
192
+ ], $gateway, $request ) );
193
+ }
194
+ }
195
+
196
+ protected function get_error_messages() {
197
+ return $this->get_messages ( 'error' );
198
+ }
199
+
200
+ /**
201
+ *
202
+ * {@inheritDoc}
203
+ *
204
+ * @see WC_Stripe_Rest_Controller::get_messages()
205
+ */
206
+ protected function get_messages($types = 'all') {
207
+ $notices = wc_get_notices ();
208
+ $message = '';
209
+ if ($types !== 'all') {
210
+ $types = ( array ) $types;
211
+ foreach ( $notices as $type => $notice ) {
212
+ if (! in_array ( $type, $types )) {
213
+ unset ( $notices[ $type ] );
214
+ }
215
+ }
216
+ }
217
+ foreach ( $notices as $notice ) {
218
+ $message .= sprintf ( ' %s', $notice );
219
+ }
220
+
221
+ return trim ( $message );
222
+ }
223
+
224
+ /**
225
+ * Return true if the provided packages have shipping methods.
226
+ *
227
+ * @param array $packages
228
+ */
229
+ private function has_shipping_methods($packages) {
230
+ foreach ( $packages as $i => $package ) {
231
+ if (! empty ( $package[ 'rates' ] )) {
232
+ return true;
233
+ }
234
+ }
235
+ return false;
236
+ }
237
+ }
includes/controllers/class-wc-stripe-controller-checkout.php ADDED
@@ -0,0 +1,134 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Stripe_Rest_Controller' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @author PaymentPlugins
8
+ * @since 3.0.0
9
+ * @package Stripe/Controllers
10
+ *
11
+ */
12
+ class WC_Stripe_Controller_Checkout extends WC_Stripe_Rest_Controller {
13
+
14
+ protected $namespace = '';
15
+
16
+ public function register_routes() {
17
+ register_rest_route ( $this->rest_uri (), 'checkout', [
18
+ 'methods' => WP_REST_Server::CREATABLE,
19
+ 'callback' => [ $this,
20
+ 'process_checkout'
21
+ ]
22
+ ] );
23
+ }
24
+
25
+ /**
26
+ * Process the WC Order
27
+ *
28
+ * @param WP_REST_Request $request
29
+ */
30
+ public function process_checkout($request) {
31
+ wc_maybe_define_constant ( 'DOING_AJAX', true );
32
+ $this->actions ();
33
+ $checkout = WC ()->checkout ();
34
+ $payment_method = $request->get_param ( 'payment_method' );
35
+ /**
36
+ *
37
+ * @var WC_Payment_Gateway_Stripe $gateway
38
+ */
39
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
40
+
41
+ $this->required_post_data ();
42
+
43
+ try {
44
+ do_action ( 'wc_stripe_rest_process_checkout', $request, $gateway );
45
+ if (! is_user_logged_in ()) {
46
+ $this->create_customer ( $request );
47
+ }
48
+ // set the checkout nonce so no exceptions are thrown.
49
+ $_REQUEST[ '_wpnonce' ] = $_POST[ '_wpnonce' ] = wp_create_nonce ( 'woocommerce-process_checkout' );
50
+ $checkout->process_checkout ();
51
+ } catch ( Exception $e ) {
52
+ wc_add_notice ( $e->getMessage (), 'error' );
53
+ }
54
+ if (wc_notice_count ( 'error' ) > 0) {
55
+ return $this->send_response ( false );
56
+ }
57
+ return $this->send_response ( true );
58
+ }
59
+
60
+ /**
61
+ *
62
+ * @param WP_REST_Request $request
63
+ */
64
+ private function create_customer($request) {
65
+ $create = WC ()->checkout ()->is_registration_required ();
66
+ // create an account for the user if it's required for things like subscriptions.
67
+ if (wcs_stripe_active () && WC_Subscriptions_Cart::cart_contains_subscription ()) {
68
+ $create = true;
69
+ }
70
+ if ($create) {
71
+ $password = wp_generate_password ();
72
+ $username = $email = $request->get_param ( 'billing_email' );
73
+ $result = wc_create_new_customer ( $email, $username, $password );
74
+ if ($result instanceof WP_Error) {
75
+ // for email exists errors you want customer to either login or use a different email address.
76
+ throw new Exception ( $result->get_error_message () );
77
+ }
78
+ $this->customer_id = $result;
79
+
80
+ // log the customer in
81
+ wp_set_current_user ( $this->customer_id );
82
+ wc_set_customer_auth_cookie ( $this->customer_id );
83
+
84
+ // As we are now logged in, cart will need to refresh to receive updated nonces
85
+ WC ()->session->set ( 'reload_checkout', true );
86
+ }
87
+ }
88
+
89
+ private function send_response($success) {
90
+ $reload = WC ()->session->get ( 'reload_checkout', false );
91
+ $data = array(
92
+ 'result' => $success ? 'success' : 'failure',
93
+ 'messages' => $reload ? null : $this->get_error_messages (),
94
+ 'reload' => $reload
95
+ );
96
+ unset ( WC ()->session->reload_checkout );
97
+ return rest_ensure_response ( $data );
98
+ }
99
+
100
+ public function validate_payment_method($payment_method) {
101
+ $gateways = WC ()->payment_gateways ()->payment_gateways ();
102
+ return isset ( $gateways[ $payment_method ] ) ? true : new WP_Error ( 'validation-error', 'Please choose a valid payment method.' );
103
+ }
104
+
105
+ private function actions() {
106
+ add_action ( 'woocommerce_after_checkout_validation', array(
107
+ $this, 'after_checkout_validation'
108
+ ), 10, 2 );
109
+ }
110
+
111
+ /**
112
+ *
113
+ * @param array $data
114
+ * @param WP_Error $errors
115
+ */
116
+ public function after_checkout_validation($data, $errors) {
117
+ if ($errors->get_error_message ( 'required-field' )) {
118
+ wc_add_notice ( apply_filters ( 'wc_stripe_after_checkout_validation_notice', sprintf ( __ ( 'Some required fields were missing. Please click %shere%s to complete your payment.', 'woo-stripe-payments' ), '<a href="' . wc_get_checkout_url () . '">', '</a>' ), $data, $errors ), 'notice' );
119
+ wp_send_json ( array( 'result' => 'failure',
120
+ 'messages' => $this->get_messages ( 'notice' ),
121
+ 'reload' => false
122
+ ), 200 );
123
+ }
124
+ }
125
+
126
+ private function required_post_data() {
127
+ if (WC ()->cart->needs_shipping ()) {
128
+ $_POST[ 'ship_to_different_address' ] = true;
129
+ }
130
+ if (wc_get_page_id ( 'terms' ) > 0) {
131
+ $_POST[ 'terms' ] = 1;
132
+ }
133
+ }
134
+ }
includes/controllers/class-wc-stripe-controller-gateway-settings.php ADDED
@@ -0,0 +1,69 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Stripe/Controllers
4
+ * @author PaymentPlugins
5
+ *
6
+ */
7
+ class WC_Stripe_Controller_Gateway_Settings extends WC_Stripe_Rest_Controller {
8
+
9
+ protected $namespace = 'gateway-settings/';
10
+
11
+ public function register_routes() {
12
+ register_rest_route ( $this->rest_uri (), 'apple-domain', [
13
+ 'methods' => WP_REST_Server::CREATABLE,
14
+ 'callback' => [ $this,
15
+ 'register_apple_domain'
16
+ ],
17
+ 'permission_callback' => array( $this,
18
+ 'admin_permission_check'
19
+ )
20
+ ] );
21
+ }
22
+
23
+ /**
24
+ * Register the site domain with Stripe for Apple Pay.
25
+ *
26
+ * @param WP_REST_Request $request
27
+ */
28
+ public function register_apple_domain($request) {
29
+ $gateway = new WC_Stripe_Gateway ();
30
+ // try to add domain association file.
31
+ if (defined ( 'ABSPATH' )) {
32
+ $path = ABSPATH . '.well-known';
33
+ $file = $path . '/apple-developer-merchantid-domain-association';
34
+ if (! file_exists ( $file )) {
35
+ require_once ( ABSPATH . '/wp-admin/includes/file.php' );
36
+ if (function_exists ( 'WP_Filesystem' ) && ( WP_Filesystem () )) {
37
+ /**
38
+ *
39
+ * @var WP_Filesystem_Base $wp_filesystem
40
+ */
41
+ global $wp_filesystem;
42
+ if (! $wp_filesystem->is_dir ( $path )) {
43
+ $wp_filesystem->mkdir ( $path );
44
+ }
45
+ $contents = $wp_filesystem->get_contents ( WC_STRIPE_PLUGIN_PATH . 'apple-developer-merchantid-domain-association' );
46
+ $wp_filesystem->put_contents ( $file, $contents, 0755 );
47
+ }
48
+ }
49
+ }
50
+ $server_name = $_SERVER[ 'SERVER_NAME' ];
51
+ try {
52
+ $api_key = wc_stripe_get_secret_key ( 'live' );
53
+ if (empty ( $api_key )) {
54
+ throw new Exception ( __ ( 'You cannot register your domain until you have configured your Live API keys.', 'woo-stripe' ) );
55
+ }
56
+ $result = $gateway->register_domain ( $server_name, 'live' );
57
+ if (is_wp_error ( $result )) {
58
+ throw new Exception ( $result->get_error_message () );
59
+ }
60
+ return rest_ensure_response ( [
61
+ 'message' => sprintf ( __ ( 'Domain %s registered successfully. You can confirm in your Stripe Dashboard at https://dashboard.stripe.com/account/apple_pay.', 'woo-stripe' ), $server_name )
62
+ ] );
63
+ } catch ( Exception $e ) {
64
+ return new WP_Error ( 'domain-error', $e->getMessage (), [
65
+ 'status' => 200
66
+ ] );
67
+ }
68
+ }
69
+ }
includes/controllers/class-wc-stripe-controller-googlepay.php ADDED
@@ -0,0 +1,141 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Stripe_Rest_Controller' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @author PaymentPlugins
8
+ * @package Stripe/Controllers
9
+ */
10
+ class WC_Stripe_Controller_GooglePay extends WC_Stripe_Rest_Controller {
11
+
12
+ protected $namespace = 'googlepay/';
13
+
14
+ /**
15
+ *
16
+ * @var WC_Payment_Gateway_Stripe
17
+ */
18
+ private $gateway;
19
+
20
+ /**
21
+ *
22
+ * @var string
23
+ */
24
+ private $shipping_method_id;
25
+
26
+ /**
27
+ *
28
+ * @var array
29
+ */
30
+ private $shipping_methods = [];
31
+
32
+ /**
33
+ *
34
+ * @var string
35
+ */
36
+ private $reason_code;
37
+
38
+ public function register_routes() {
39
+ register_rest_route ( $this->rest_uri (), 'shipping-data', [
40
+ 'methods' => WP_REST_Server::CREATABLE,
41
+ 'callback' => [ $this,
42
+ 'update_shipping_data'
43
+ ],
44
+ 'args' => [
45
+ 'shipping_address' => [
46
+ 'required' => true
47
+ ],
48
+ 'shipping_methods' => [
49
+ 'required' => false
50
+ ],
51
+ 'shipping_method_id' => [
52
+ 'required' => true
53
+ ]
54
+ ]
55
+ ] );
56
+ }
57
+
58
+ /**
59
+ * Update the WC shipping data from the Google payment sheet.
60
+ *
61
+ * @param WP_REST_Request $request
62
+ */
63
+ public function update_shipping_data($request) {
64
+ wc_maybe_define_constant ( 'WOOCOMMERCE_CART', true );
65
+ $address = $request->get_param ( 'shipping_address' );
66
+ $this->shipping_methods = $request->get_param ( 'shipping_methods' );
67
+ $this->shipping_methods = null == $this->shipping_methods ? [] : $this->shipping_methods;
68
+ $this->shipping_method_id = $request->get_param ( 'shipping_method_id' );
69
+
70
+ $this->gateway = WC ()->payment_gateways ()->payment_gateways ()[ 'stripe_googlepay' ];
71
+
72
+ try {
73
+ wc_stripe_update_customer_location ( $address );
74
+
75
+ wc_stripe_update_shipping_methods ( $this->shipping_methods );
76
+
77
+ // update the WC cart with the new shipping options
78
+ WC ()->cart->calculate_totals ();
79
+
80
+ // if shipping address is not serviceable, throw an error.
81
+ if (! wc_stripe_shipping_address_serviceable ()) {
82
+ $this->reason_code = 'SHIPPING_ADDRESS_UNSERVICEABLE';
83
+ throw new Exception ( __ ( 'Your shipping address is not serviceable.', 'woo-stripe' ) );
84
+ }
85
+
86
+ return rest_ensure_response ( apply_filters ( 'wc_stripe_googlepay_paymentdata_response', [
87
+ 'data' => [
88
+ 'shipping_methods' => $this->get_shipping_methods (),
89
+ 'paymentRequestUpdate' => $this->get_payment_response_data ()
90
+ ]
91
+ ] ) );
92
+ } catch ( Exception $e ) {
93
+ return new WP_Error ( 'payment-data-error', $e->getMessage (), [
94
+ 'status' => 200,
95
+ 'data' => [
96
+ 'error' => [
97
+ 'reason' => $this->reason_code,
98
+ 'message' => $e->getMessage (),
99
+ 'intent' => 'SHIPPING_ADDRESS'
100
+ ]
101
+ ]
102
+ ] );
103
+ }
104
+ }
105
+
106
+ /**
107
+ * Return a formatted array of response data required by the Google payment sheet.
108
+ */
109
+ public function get_payment_response_data() {
110
+ return [
111
+ 'newTransactionInfo' => [
112
+ 'currencyCode' => get_woocommerce_currency (),
113
+ 'totalPriceStatus' => 'FINAL',
114
+ 'totalPrice' => strval ( WC ()->cart->total ),
115
+ 'displayItems' => $this->gateway->get_display_items (),
116
+ 'totalPriceLabel' => __ ( 'Total', 'woo-stripe' )
117
+ ],
118
+ 'newShippingOptionParameters' => [
119
+ 'shippingOptions' => $this->gateway->get_shipping_methods (),
120
+ 'defaultSelectedOptionId' => $this->get_default_shipping_method ()
121
+ ]
122
+ ];
123
+ }
124
+
125
+ private function get_shipping_methods() {
126
+ return WC ()->session->get ( 'chosen_shipping_methods', [] );
127
+ }
128
+
129
+ /**
130
+ * Returns a default shipping method based on the chosen shipping methods.
131
+ *
132
+ * @return string
133
+ */
134
+ private function get_default_shipping_method() {
135
+ $chosen_shipping_methods = WC ()->session->get ( 'chosen_shipping_methods', [] );
136
+ if (! empty ( $chosen_shipping_methods )) {
137
+ return sprintf ( '%s:%s', 0, current ( $chosen_shipping_methods ) );
138
+ }
139
+ return $this->shipping_method_id;
140
+ }
141
+ }
includes/controllers/class-wc-stripe-controller-order-actions.php ADDED
@@ -0,0 +1,285 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ class WC_Stripe_Controller_Order_Actions extends WC_Stripe_Rest_Controller {
3
+
4
+ protected $namespace = 'order~action/';
5
+
6
+ public function register_routes() {
7
+ register_rest_route ( $this->rest_uri (), 'capture', array(
8
+ 'methods' => WP_REST_Server::CREATABLE,
9
+ 'callback' => array( $this, 'capture'
10
+ ),
11
+ 'permission_callback' => array( $this,
12
+ 'admin_permission_check'
13
+ ),
14
+ 'args' => array(
15
+ 'order_id' => array(
16
+ 'required' => true,
17
+ 'type' => 'int',
18
+ 'validate_callback' => array(
19
+ $this,
20
+ 'validate_order_id'
21
+ )
22
+ ),
23
+ 'amount' => array(
24
+ 'required' => true,
25
+ 'type' => 'float'
26
+ )
27
+ )
28
+ ) );
29
+ register_rest_route ( $this->rest_uri (), 'void', array(
30
+ 'methods' => WP_REST_Server::CREATABLE,
31
+ 'callback' => array( $this, 'void'
32
+ ),
33
+ 'permission_callback' => array( $this,
34
+ 'admin_permission_check'
35
+ ),
36
+ 'args' => array(
37
+ 'order_id' => array(
38
+ 'required' => true,
39
+ 'type' => 'number',
40
+ 'validate_callback' => array(
41
+ $this,
42
+ 'validate_order_id'
43
+ )
44
+ )
45
+ )
46
+ ) );
47
+ register_rest_route ( $this->rest_uri (), 'pay', array(
48
+ 'methods' => WP_REST_Server::CREATABLE,
49
+ 'callback' => array( $this,
50
+ 'process_payment'
51
+ ),
52
+ 'permission_callback' => array( $this,
53
+ 'admin_permission_check'
54
+ ),
55
+ 'args' => array(
56
+ 'order_id' => array(
57
+ 'required' => true,
58
+ 'type' => 'number',
59
+ 'validate_callback' => array(
60
+ $this,
61
+ 'validate_order_id'
62
+ )
63
+ )
64
+ )
65
+ ) );
66
+ register_rest_route ( $this->rest_uri (), 'customer-payment-methods', array(
67
+ 'methods' => WP_REST_Server::READABLE,
68
+ 'callback' => array( $this,
69
+ 'customer_payment_methods'
70
+ ),
71
+ 'permission_callback' => array( $this,
72
+ 'admin_permission_check'
73
+ ),
74
+ 'args' => array(
75
+ 'customer_id' => array(
76
+ 'required' => true,
77
+ 'type' => 'number'
78
+ )
79
+ )
80
+ ) );
81
+ register_rest_route ( $this->rest_uri (), 'charge-view', array(
82
+ 'methods' => WP_REST_Server::READABLE,
83
+ 'callback' => array( $this, 'charge_view'
84
+ ),
85
+ 'permission_callback' => array( $this,
86
+ 'admin_permission_check'
87
+ ),
88
+ 'args' => array(
89
+ 'order_id' => array(
90
+ 'required' => true,
91
+ 'type' => 'number'
92
+ )
93
+ )
94
+ ) );
95
+ }
96
+
97
+ /**
98
+ * Return true if the order_id is a valid post.
99
+ *
100
+ * @param int $order_id
101
+ */
102
+ public function validate_order_id($order_id) {
103
+ return null !== get_post ( $order_id );
104
+ }
105
+
106
+ /**
107
+ *
108
+ * @param WP_REST_Request $request
109
+ */
110
+ public function capture($request) {
111
+ $order_id = $request->get_param ( 'order_id' );
112
+ $order = wc_get_order ( $order_id );
113
+ $amount = $request->get_param ( 'amount' );
114
+ if (! is_numeric ( $amount )) {
115
+ return new WP_Error ( 'invalid_data', __ ( 'Invalid amount entered.', 'woo-stripe' ), array(
116
+ 'success' => false, 'status' => 200
117
+ ) );
118
+ }
119
+ try {
120
+ /**
121
+ *
122
+ * @var WC_Payment_Gateway_Stripe $gateway
123
+ */
124
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $order->get_payment_method () ];
125
+ $result = $gateway->capture_charge ( $amount, $order );
126
+ if (is_wp_error ( $result )) {
127
+ throw new Exception ( $result->get_error_message () );
128
+ }
129
+ return rest_ensure_response ( array() );
130
+ } catch ( Exception $e ) {
131
+ return new WP_Error ( 'capture-error', $e->getMessage (), array(
132
+ 'status' => 200
133
+ ) );
134
+ }
135
+ }
136
+
137
+ /**
138
+ *
139
+ * @param WP_REST_Request $request
140
+ */
141
+ public function void($request) {
142
+ $order_id = $request->get_param ( 'order_id' );
143
+ $order = wc_get_order ( $order_id );
144
+ /**
145
+ * When the order's status is set to cancelled, the wc_stripe_order_cancelled
146
+ * function is called, which voids the charge.
147
+ */
148
+ $order->update_status ( 'cancelled' );
149
+ return rest_ensure_response ( array() );
150
+ }
151
+
152
+ /**
153
+ * Process a payment as an admin.
154
+ *
155
+ * @param WP_REST_Request $request
156
+ */
157
+ public function process_payment($request) {
158
+ $order_id = $request->get_param ( 'order_id' );
159
+ $payment_type = $request->get_param ( 'payment_type' );
160
+ $order = wc_get_order ( $order_id );
161
+ $use_token = $payment_type === 'token';
162
+ try {
163
+ // perform some validations
164
+ if ($order->get_total () == 0) {
165
+ if (! wcs_stripe_active ()) {
166
+ throw new Exception ( __ ( 'Order total must be greater than zero.', 'woo-stripe' ) );
167
+ } else {
168
+ if (! wcs_order_contains_subscription ( $order )) {
169
+ throw new Exception ( __ ( 'Order total must be greater than zero.', 'woo-stripe' ) );
170
+ }
171
+ }
172
+ }
173
+ if ($order->get_transaction_id ()) {
174
+ throw new Exception ( sprintf ( __ ( 'This order has already been processed. Transaction ID: %s. Payment method: %s', 'woo-stripe' ), $order->get_transaction_id (), $order->get_payment_method_title () ) );
175
+ }
176
+ if (! $use_token) {
177
+ // only credit card payments are allowed for one off payments as an admin.
178
+ $payment_method = 'stripe_cc';
179
+ } else if ($payment_type === 'token') {
180
+ $token_id = intval ( $request->get_param ( 'payment_token_id' ) );
181
+ $token = WC_Payment_Tokens::get ( $token_id );
182
+ if ($token->get_user_id () !== $order->get_customer_id ()) {
183
+ throw new Exception ( __ ( 'Order customer Id and payment method customer Id do not match.', 'woo-stripe' ) );
184
+ }
185
+ $payment_method = $token->get_gateway_id ();
186
+ }
187
+ /**
188
+ *
189
+ * @var WC_Payment_Gateway_Stripe $gateway
190
+ */
191
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
192
+ // temporarily set the charge type of the gateway to whatever the admin has selected.
193
+ $gateway->settings[ 'charge_type' ] = $request->get_param ( 'wc_stripe_charge_type' );
194
+ // set the payment gateway to the order.
195
+ $order->set_payment_method ( $gateway->id );
196
+ $order->save ();
197
+ if (! $use_token) {
198
+ $_POST[ $gateway->token_key ] = $request->get_param ( 'payment_nonce' );
199
+ } else {
200
+ $gateway->set_payment_method_token ( $token->get_token () );
201
+ }
202
+
203
+ // set intent atttribute off_session. Stripe requires confirm to be true to use off session.
204
+ add_filter ( 'wc_stripe_payment_intent_args', function ($args) {
205
+ $args[ 'confirm' ] = true;
206
+ $args[ 'off_session' ] = true;
207
+ return $args;
208
+ } );
209
+
210
+ $result = $gateway->process_payment ( $order_id );
211
+
212
+ if (isset ( $result[ 'result' ] ) && $result[ 'result' ] === 'success') {
213
+ return rest_ensure_response ( array(
214
+ 'success' => true
215
+ ) );
216
+ } else {
217
+ // create a new order since updates to the order were made during the process_payment call.
218
+ $order = wc_get_order ( $order_id );
219
+ $order->update_status ( 'pending' );
220
+ return new WP_Error ( 'order-error', $this->get_error_messages (), [
221
+ 'status' => 200, 'success' => false
222
+ ] );
223
+ }
224
+ } catch ( Exception $e ) {
225
+ return new WP_Error ( 'order-error', '<div class="woocommerce-error">' . $e->getMessage () . '</div>', [
226
+ 'status' => 200
227
+ ] );
228
+ }
229
+ }
230
+
231
+ /**
232
+ *
233
+ * @param WP_REST_Request $request
234
+ */
235
+ public function customer_payment_methods($request) {
236
+ $customer_id = $request->get_param ( 'customer_id' );
237
+ $tokens = array();
238
+ foreach ( WC ()->payment_gateways ()->payment_gateways () as $gateway ) {
239
+ if ($gateway instanceof WC_Braintree_Payment_Gateway) {
240
+ $tokens = array_merge ( $tokens, WC_Payment_Tokens::get_customer_tokens ( $customer_id, $gateway->id ) );
241
+ }
242
+ }
243
+ $tokens = array_values ( WC_Payment_Tokens::get_customer_tokens ( $customer_id, 'braintree_cc' ) );
244
+ return rest_ensure_response ( array(
245
+ 'payment_methods' => array_map ( function ($payment_method) {
246
+ return $payment_method->to_json ();
247
+ }, $tokens )
248
+ ) );
249
+ }
250
+
251
+ /**
252
+ *
253
+ * @param WP_REST_Request $request
254
+ */
255
+ public function charge_view($request) {
256
+ $order = wc_get_order ( absint ( $request->get_param ( 'order_id' ) ) );
257
+ /**
258
+ *
259
+ * @var WC_Payment_Gateway_Stripe $gateway
260
+ */
261
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $order->get_payment_method () ];
262
+ try {
263
+ // fetch the charge so data is up to date.
264
+ $charge = $gateway->retrieve_charge ( $order->get_transaction_id (), wc_stripe_order_mode ( $order ) );
265
+
266
+ $order->update_meta_data ( '_wc_stripe_charge_status', $charge->status );
267
+ $order->save ();
268
+ ob_start ();
269
+ include wc_stripe ()->plugin_path () . 'includes/admin/meta-boxes/views/html-charge-data-subview.php';
270
+ $html = ob_get_clean ();
271
+ return rest_ensure_response ( array(
272
+ 'data' => array(
273
+ 'order_id' => $order->get_id (),
274
+ 'order_number' => $order->get_order_number (),
275
+ 'charge' => $charge->jsonSerialize (),
276
+ 'html' => $html
277
+ )
278
+ ) );
279
+ } catch ( Exception $e ) {
280
+ return new WP_Error ( 'charge-error', $e->getMessage (), array(
281
+ 'status' => 200
282
+ ) );
283
+ }
284
+ }
285
+ }
includes/controllers/class-wc-stripe-controller-payment-intent.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Controller which handles Payment Intent related actions such as creation.
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Classes
6
+ *
7
+ */
8
+ class WC_Stripe_Controller_Payment_Intent extends WC_Stripe_Rest_Controller {
9
+
10
+ protected $namespace = '';
11
+
12
+ public function register_routes() {
13
+ register_rest_route ( $this->rest_uri (), 'setup-intent', array(
14
+ 'methods' => WP_REST_Server::READABLE,
15
+ 'callback' => array( $this,
16
+ 'create_setup_intent'
17
+ )
18
+ ) );
19
+ }
20
+
21
+ /**
22
+ *
23
+ * @param WP_REST_Request $request
24
+ */
25
+ public function create_setup_intent($request) {
26
+ $gateway = new WC_Stripe_Gateway ();
27
+ $intent = $gateway->create_setup_intent ( array(
28
+ 'usage' => 'off_session'
29
+ ) );
30
+ try {
31
+ if (is_wp_error ( $intent )) {
32
+ throw new Exception ( $result->get_error_message () );
33
+ }
34
+ return rest_ensure_response ( array(
35
+ 'intent' => array(
36
+ 'client_secret' => $intent->client_secret
37
+ )
38
+ ) );
39
+ } catch ( Exception $e ) {
40
+ return new WP_Error ( 'payment-intent-error', sprintf ( __ ( 'Error creating payment intent. Reason: %s', 'woo-stripe' ), $e->getMessage () ), array(
41
+ 'status' => 200
42
+ ) );
43
+ }
44
+ }
45
+ }
includes/controllers/class-wc-stripe-controller-payment-method.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @package Stripe/Controllers
4
+ * @author PaymentPlugins
5
+ * @since 3.0.0
6
+ *
7
+ */
8
+ class WC_Stripe_Controller_Payment_Method extends WC_Stripe_Rest_Controller {
9
+
10
+ protected $namespace = 'payment-method';
11
+
12
+ public function register_routes() {
13
+ register_rest_route ( $this->rest_uri (), 'token', [
14
+ 'methods' => WP_REST_Server::CREATABLE,
15
+ 'callback' => [ $this,
16
+ 'payment_method_from_token'
17
+ ]
18
+ ] );
19
+ }
20
+
21
+ /**
22
+ * Creates a PaymentMethod from a Token.
23
+ * Use case for this controller would be if a token
24
+ * is provided on the client side, but PaymentIntent is desired instead of a Charge. The token must be converted to
25
+ * a PaymentMethod for use in a PaymentIntent.
26
+ *
27
+ * @param WP_REST_Request $request
28
+ * @return WP_Error|WP_REST_Response|mixed
29
+ */
30
+ public function payment_method_from_token($request) {
31
+ $gateway = new WC_Stripe_Gateway ();
32
+ $result = $gateway->create_payment_method ( [
33
+ 'type' => 'card',
34
+ 'card' => [
35
+ 'token' => $request->get_param ( 'token' )
36
+ ]
37
+ ] );
38
+ if (is_wp_error ( $result )) {
39
+ return new WP_Error ( 'payment-method', $result->get_error_message (), [
40
+ 'status' => 200
41
+ ] );
42
+ }
43
+ return rest_ensure_response ( [
44
+ 'payment_method' => $result->jsonSerialize ()
45
+ ] );
46
+ }
47
+ }
includes/controllers/class-wc-stripe-controller-webhook.php ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ *
4
+ * @author PaymentPlugins
5
+ * @package Stripe/Controllers
6
+ *
7
+ */
8
+ class WC_Stripe_Controller_Webhook extends WC_Stripe_Rest_Controller {
9
+
10
+ protected $namespace = '';
11
+
12
+ private $secret;
13
+
14
+ public function register_routes() {
15
+ register_rest_route ( $this->rest_uri (), 'webhook', [
16
+ 'methods' => WP_REST_Server::CREATABLE,
17
+ 'callback' => [ $this, 'webhook'
18
+ ]
19
+ ] );
20
+ }
21
+
22
+ /**
23
+ *
24
+ * @param WP_REST_Request $request
25
+ */
26
+ public function webhook($request) {
27
+ $payload = $request->get_body ();
28
+ $this->secret = wc_stripe ()->api_settings->get_option ( 'webhook_secret' );
29
+ $header = isset ( $_SERVER[ 'HTTP_STRIPE_SIGNATURE' ] ) ? $_SERVER[ 'HTTP_STRIPE_SIGNATURE' ] : '';
30
+ try {
31
+ $event = \Stripe\Webhook::constructEvent ( $payload, $header, $this->secret );
32
+ wc_stripe_log_info ( sprintf ( 'Webhook notficiation received: Event: %s. Payload: %s', $event->type, print_r ( $payload, true ) ) );
33
+ $type = $event->type;
34
+ $type = str_replace ( '.', '_', $type );
35
+
36
+ // allow functionality to hook in to the event action
37
+ do_action ( 'wc_stripe_webhook_' . $type, $event->data->object, $request, $event );
38
+
39
+ return rest_ensure_response ( apply_filters ( 'wc_stripe_webhook_response', [], $event, $request ) );
40
+ } catch ( \Stripe\Error\SignatureVerification $e ) {
41
+ wc_stripe_log_info ( __ ( 'Invalid signaute received. Verify that your webhook secret is correct.', 'woo-stripe' ) );
42
+ return $this->send_error_response ( __ ( 'Invalid signaute received. Verify that your webhook secret is correct.', 'woo-stripe' ) );
43
+ } catch ( Exception $e ) {
44
+ return $this->send_error_response ( $e->getMessage () );
45
+ }
46
+ }
47
+
48
+ private function send_error_response($message, $code = 400) {
49
+ return new WP_Error ( 'webhook-error', $message, [
50
+ 'status' => $code
51
+ ] );
52
+ }
53
+ }
includes/gateways/class-wc-payment-gateway-stripe-applepay.php ADDED
@@ -0,0 +1,82 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_ApplePay extends WC_Payment_Gateway_Stripe_Payment_Intent {
11
+
12
+ public function __construct() {
13
+ $this->id = 'stripe_applepay';
14
+ $this->tab_title = __ ( 'Apple Pay', 'woo-stripe' );
15
+ $this->template_name = 'applepay.php';
16
+ $this->token_type = 'Stripe_ApplePay';
17
+ $this->method_title = __ ( 'Stripe Apple Pay', 'woo-stripe' );
18
+ $this->method_description = __ ( 'Apple Pay gateway that integrates with your Stripe account.', 'woo-stripe' );
19
+ parent::__construct ();
20
+ $this->icon = wc_stripe ()->assets_url ( 'img/applepay.svg' );
21
+ }
22
+
23
+ public function init_supports() {
24
+ parent::init_supports ();
25
+ $this->supports[] = 'wc_stripe_cart_checkout';
26
+ $this->supports[] = 'wc_stripe_product_checkout';
27
+ $this->supports[] = 'wc_stripe_banner_checkout';
28
+ }
29
+
30
+ public function enqueue_product_scripts($scripts) {
31
+ $scripts->enqueue_script ( 'applepay-product', $scripts->assets_url ( 'js/frontend/applepay-product.js' ), [
32
+ $scripts->get_handle ( 'wc-stripe' ),
33
+ $scripts->get_handle ( 'external' )
34
+ ], wc_stripe ()->version (), true );
35
+ $scripts->localize_script ( 'applepay-product', $this->get_localized_params () );
36
+ }
37
+
38
+ public function enqueue_cart_scripts($scripts) {
39
+ $scripts->enqueue_script ( 'applepay-cart', $scripts->assets_url ( 'js/frontend/applepay-cart.js' ), [
40
+ $scripts->get_handle ( 'wc-stripe' ),
41
+ $scripts->get_handle ( 'external' )
42
+ ], wc_stripe ()->version (), true );
43
+ $scripts->localize_script ( 'applepay-cart', $this->get_localized_params () );
44
+ }
45
+
46
+ public function enqueue_checkout_scripts($scripts) {
47
+ $scripts->enqueue_script ( 'applepay-checkout', $scripts->assets_url ( 'js/frontend/applepay-checkout.js' ), [
48
+ $scripts->get_handle ( 'wc-stripe' ),
49
+ $scripts->get_handle ( 'external' )
50
+ ], wc_stripe ()->version (), true );
51
+ $scripts->localize_script ( 'applepay-checkout', $this->get_localized_params () );
52
+ }
53
+
54
+ public function get_localized_params() {
55
+ return array_merge_recursive ( parent::get_localized_params (), [
56
+ 'messages' => [
57
+ 'invalid_amount' => __ ( 'Please update you product quantity before using Apple Pay.', 'woo-stripe' )
58
+ ],
59
+ 'button' => wc_stripe_get_template_html ( 'applepay-button.php', [
60
+ 'style' => $this->get_option ( 'button_style' ),
61
+ 'type' => $this->get_button_type ()
62
+ ] )
63
+ ] );
64
+ }
65
+
66
+ /**
67
+ * Returns the Apple Pay button type based on the current page.
68
+ *
69
+ * @return string
70
+ */
71
+ protected function get_button_type() {
72
+ if (is_checkout ()) {
73
+ return $this->get_option ( 'button_type_checkout' );
74
+ }
75
+ if (is_cart ()) {
76
+ return $this->get_option ( 'button_type_cart' );
77
+ }
78
+ if (is_product ()) {
79
+ return $this->get_option ( 'button_type_product' );
80
+ }
81
+ }
82
+ }
includes/gateways/class-wc-payment-gateway-stripe-cc.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @since 3.0.0
4
+ * @package Stripe/Gateways
5
+ * @author User
6
+ *
7
+ */
8
+ class WC_Payment_Gateway_Stripe_CC extends WC_Payment_Gateway_Stripe_Payment_Intent {
9
+
10
+ public function __construct() {
11
+ $this->id = 'stripe_cc';
12
+ $this->tab_title = __ ( 'Credit Cards', 'woo-stripe' );
13
+ $this->template_name = 'credit-card.php';
14
+ $this->token_type = 'Stripe_CC';
15
+ $this->method_title = __ ( 'Stripe Credit Cards', 'woo-stripe' );
16
+ $this->method_description = __ ( 'Credit card gateway that integrates with your Stripe account.', 'woo-stripe' );
17
+ parent::__construct ();
18
+ }
19
+
20
+ public function hooks() {
21
+ parent::hooks ();
22
+ }
23
+
24
+ public function get_icon() {
25
+ return wc_stripe_get_template ( 'card-icons.php', array(
26
+ 'cards' => $this->get_option ( 'cards' ),
27
+ 'style' => $this->get_option ( 'icon_style' )
28
+ ) );
29
+ }
30
+
31
+ public function enqueue_checkout_scripts($scripts) {
32
+ $scripts->enqueue_script ( 'credit-card', $scripts->assets_url ( 'js/frontend/credit-card.js' ), array(
33
+ $scripts->prefix . 'external',
34
+ $scripts->prefix . 'wc-stripe'
35
+ ) );
36
+ $scripts->localize_script ( 'credit-card', $this->get_localized_params () );
37
+ }
38
+
39
+ public function get_localized_params() {
40
+ $data = parent::get_localized_params ();
41
+ return array_merge ( $data, array(
42
+ 'style' => $this->get_form_style (),
43
+ 'elementOptions' => $this->get_element_options (),
44
+ 'custom_form' => $this->is_custom_form_active (),
45
+ 'html' => [
46
+ 'card_brand' => sprintf ( '<img id="wc-stripe-card" src="%s" />', $this->get_custom_form ()[ 'cardBrand' ] )
47
+ ],
48
+ 'cards' => [
49
+ 'visa' => wc_stripe ()->assets_url ( 'img/cards/visa.svg' ),
50
+ 'amex' => wc_stripe ()->assets_url ( 'img/cards/amex.svg' ),
51
+ 'mastercard' => wc_stripe ()->assets_url ( 'img/cards/mastercard.svg' ),
52
+ 'discover' => wc_stripe ()->assets_url ( 'img/cards/discover.svg' ),
53
+ 'diners' => wc_stripe ()->assets_url ( 'img/cards/diners.svg' ),
54
+ 'jcb' => wc_stripe ()->assets_url ( 'img/cards/jcb.svg' ),
55
+ 'unionpay' => wc_stripe ()->assets_url ( 'img/cards/china_union_pay.svg' ),
56
+ 'unknown' => $this->get_custom_form ()[ 'cardBrand' ]
57
+ ]
58
+ ) );
59
+ }
60
+
61
+ private function get_form_style() {
62
+ if ($this->is_custom_form_active ()) {
63
+ $style = $this->get_custom_form ()[ 'elementStyles' ];
64
+ } else {
65
+ $style = array(
66
+ 'base' => array( 'color' => '#32325d',
67
+ 'fontFamily' => '"Helvetica Neue", Helvetica, sans-serif',
68
+ 'fontSmoothing' => 'antialiased',
69
+ 'fontSize' => '18px',
70
+ '::placeholder' => array(
71
+ 'color' => '#aab7c4'
72
+ ), ':focus' => []
73
+ ),
74
+ 'invalid' => array(
75
+ 'color' => '#fa755a',
76
+ 'iconColor' => '#fa755a'
77
+ )
78
+ );
79
+ }
80
+ return apply_filters ( 'wc_stripe_cc_element_style', $style );
81
+ }
82
+
83
+ private function get_custom_form() {
84
+ return wc_stripe_get_custom_forms ()[ $this->get_option ( 'custom_form' ) ];
85
+ }
86
+
87
+ private function get_element_options() {
88
+ return $this->get_custom_form ()[ 'elementOptions' ];
89
+ }
90
+
91
+ /**
92
+ * Returns true if custom forms are enabled.
93
+ *
94
+ * @return bool
95
+ */
96
+ public function is_custom_form_active() {
97
+ return $this->get_option ( 'form_type' ) === 'custom';
98
+ }
99
+
100
+ public function get_custom_form_template() {
101
+ $form = $this->get_option ( 'custom_form' );
102
+ return wc_stripe_get_custom_forms ()[ $form ][ 'template' ];
103
+ }
104
+
105
+ /**
106
+ * Returns true if the postal code field is enabled.
107
+ *
108
+ * @return bool
109
+ */
110
+ public function postal_enabled() {
111
+ if (is_checkout ()) {
112
+ return $this->is_active ( 'postal_enabled' );
113
+ }
114
+ if (is_add_payment_method_page ()) {
115
+ return true;
116
+ }
117
+ }
118
+
119
+ /**
120
+ * Returns true if the cvv field is enabled.
121
+ *
122
+ * @return bool
123
+ */
124
+ public function cvv_enabled() {
125
+ return $this->is_active ( 'cvv_enabled' );
126
+ }
127
+ }
includes/gateways/class-wc-payment-gateway-stripe-eps.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_EPS extends WC_Payment_Gateway_Stripe_Local_Payment {
11
+
12
+ public function __construct() {
13
+ $this->local_payment_type = 'eps';
14
+ $this->currencies = [ 'EUR'
15
+ ];
16
+ $this->id = 'stripe_eps';
17
+ $this->tab_title = __ ( 'EPS', 'woo-stripe' );
18
+ $this->template_name = 'local-payment.php';
19
+ $this->token_type = 'Stripe_Local';
20
+ $this->method_title = __ ( 'EPS', 'woo-stripe' );
21
+ $this->method_description = __ ( 'EPS gateway that integrates with your Stripe account.', 'woo-stripe' );
22
+ $this->icon = wc_stripe ()->assets_url ( 'img/eps.svg' );
23
+ $this->order_button_text = __ ( 'EPS', 'woo-stripe' );
24
+ parent::__construct ();
25
+ }
26
+
27
+ public function get_local_payment_settings() {
28
+ return [
29
+ 'desc' => array( 'type' => 'description',
30
+ 'description' => $this->get_payment_description()
31
+ ),
32
+ 'enabled' => array(
33
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
34
+ 'type' => 'checkbox',
35
+ 'default' => 'no', 'value' => 'yes',
36
+ 'desc_tip' => true,
37
+ 'description' => __ ( 'If enabled, your site can accept P24 payments through Stripe.', 'woo-stripe' )
38
+ ),
39
+ 'general_settings' => array(
40
+ 'type' => 'title',
41
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
42
+ ),
43
+ 'title_text' => array( 'type' => 'text',
44
+ 'title' => __ ( 'Title', 'woo-stripe' ),
45
+ 'default' => __ ( 'EPS', 'woo-stripe' ),
46
+ 'desc_tip' => true,
47
+ 'description' => __ ( 'Title of the p24 gateway' )
48
+ ),
49
+ 'description' => array(
50
+ 'title' => __ ( 'Description', 'woo-stripe' ),
51
+ 'type' => 'text', 'default' => '',
52
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
53
+ 'desc_tip' => true
54
+ )
55
+ ];
56
+ }
57
+ }
includes/gateways/class-wc-payment-gateway-stripe-giropay.php ADDED
@@ -0,0 +1,59 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_Giropay extends WC_Payment_Gateway_Stripe_Local_Payment {
11
+
12
+ public function __construct() {
13
+ $this->local_payment_type = 'giropay';
14
+ $this->currencies = [ 'EUR'
15
+ ];
16
+ $this->countries = [ 'DE'
17
+ ];
18
+ $this->id = 'stripe_giropay';
19
+ $this->tab_title = __ ( 'Giropay', 'woo-stripe' );
20
+ $this->template_name = 'local-payment.php';
21
+ $this->token_type = 'Stripe_Local';
22
+ $this->method_title = __ ( 'Giropay', 'woo-stripe' );
23
+ $this->method_description = __ ( 'Giropay gateway that integrates with your Stripe account.', 'woo-stripe' );
24
+ $this->icon = wc_stripe ()->assets_url ( 'img/giropay.svg' );
25
+ $this->order_button_text = __ ( 'Giropay', 'woo-stripe' );
26
+ parent::__construct ();
27
+ }
28
+
29
+ public function get_local_payment_settings() {
30
+ return [
31
+ 'desc' => array( 'type' => 'description',
32
+ 'description' => $this->get_payment_description()
33
+ ),
34
+ 'enabled' => array(
35
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
36
+ 'type' => 'checkbox',
37
+ 'default' => 'no', 'value' => 'yes',
38
+ 'desc_tip' => true,
39
+ 'description' => __ ( 'If enabled, your site can Giropay card payments through Stripe.', 'woo-stripe' )
40
+ ),
41
+ 'general_settings' => array(
42
+ 'type' => 'title',
43
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
44
+ ),
45
+ 'title_text' => array( 'type' => 'text',
46
+ 'title' => __ ( 'Title', 'woo-stripe' ),
47
+ 'default' => __ ( 'Giropay', 'woo-stripe' ),
48
+ 'desc_tip' => true,
49
+ 'description' => __ ( 'Title of the Giropay gateway' )
50
+ ),
51
+ 'description' => array(
52
+ 'title' => __ ( 'Description', 'woo-stripe' ),
53
+ 'type' => 'text', 'default' => '',
54
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
55
+ 'desc_tip' => true
56
+ )
57
+ ];
58
+ }
59
+ }
includes/gateways/class-wc-payment-gateway-stripe-googlepay.php ADDED
@@ -0,0 +1,173 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @author PaymentPlugins
8
+ * @since 3.0.0
9
+ * @package Stripe/Gateways
10
+ *
11
+ */
12
+ class WC_Payment_Gateway_Stripe_GooglePay extends WC_Payment_Gateway_Stripe_Charge {
13
+
14
+ public function __construct() {
15
+ $this->id = 'stripe_googlepay';
16
+ $this->tab_title = __ ( 'Google Pay', 'woo-stripe' );
17
+ $this->template_name = 'googlepay.php';
18
+ $this->token_type = 'Stripe_GooglePay';
19
+ $this->method_title = __ ( 'Stripe Google Pay', 'woo-stripe' );
20
+ $this->method_description = __ ( 'Google Pay gateway that integrates with your Stripe account.', 'woo-stripe' );
21
+ parent::__construct ();
22
+ $this->icon = wc_stripe ()->assets_url ( 'img/' . $this->get_option ( 'icon' ) . '.svg' );
23
+ }
24
+
25
+ public function init_supports() {
26
+ parent::init_supports ();
27
+ $this->supports[] = 'wc_stripe_cart_checkout';
28
+ $this->supports[] = 'wc_stripe_product_checkout';
29
+ $this->supports[] = 'wc_stripe_banner_checkout';
30
+ }
31
+
32
+ public function enqueue_checkout_scripts($scripts) {
33
+ $scripts->enqueue_script ( 'googlepay-checkout', $scripts->assets_url ( 'js/frontend/googlepay-checkout.js' ), array(
34
+ $scripts->get_handle ( 'wc-stripe' ),
35
+ $scripts->get_handle ( 'gpay' )
36
+ ), wc_stripe ()->version (), true );
37
+ $scripts->localize_script ( 'googlepay-checkout', $this->get_localized_params () );
38
+ }
39
+
40
+ public function enqueue_product_scripts($scripts) {
41
+ $scripts->enqueue_script ( 'googlepay-product', $scripts->assets_url ( 'js/frontend/googlepay-product.js' ), array(
42
+ $scripts->get_handle ( 'wc-stripe' ),
43
+ $scripts->get_handle ( 'gpay' )
44
+ ), wc_stripe ()->version (), true );
45
+ $scripts->localize_script ( 'googlepay-product', $this->get_localized_params () );
46
+ }
47
+
48
+ public function enqueue_cart_scripts($scripts) {
49
+ $scripts->enqueue_script ( 'googlepay-cart', $scripts->assets_url ( 'js/frontend/googlepay-cart.js' ), array(
50
+ $scripts->get_handle ( 'wc-stripe' ),
51
+ $scripts->get_handle ( 'gpay' )
52
+ ), wc_stripe ()->version (), true );
53
+ $scripts->localize_script ( 'googlepay-cart', $this->get_localized_params () );
54
+ }
55
+
56
+ public function enqueue_admin_scripts() {
57
+ wp_register_script ( 'gpay-external', wc_stripe ()->scripts ()->global_scripts[ 'gpay' ], [], wc_stripe ()->version (), true );
58
+ wp_enqueue_script ( 'wc-stripe-gpay-admin', wc_stripe ()->assets_url ( 'js/admin/googlepay.js' ), [
59
+ 'gpay-external', 'wc-stripe-admin-settings'
60
+ ], wc_stripe ()->version (), true );
61
+ }
62
+
63
+ public function get_localized_params() {
64
+ $data = array_merge_recursive ( parent::get_localized_params (), [
65
+ 'environment' => wc_stripe_mode () === 'test' ? 'TEST' : 'PRODUCTION',
66
+ 'merchant_id' => wc_stripe_mode () === 'test' ? '' : $this->get_option ( 'merchant_id' ),
67
+ 'merchant_name' => $this->get_option ( 'merchant_name' ),
68
+ 'button_color' => $this->get_option ( 'button_color' ),
69
+ 'button_style' => $this->get_option ( 'button_style' ),
70
+ 'total_price_label' => __ ( 'Total', 'woo-stripe' ),
71
+ 'routes' => [
72
+ 'payment_data' => wc_stripe ()->rest_api->googlepay->rest_url ( 'shipping-data' )
73
+ ],
74
+ 'messages' => [
75
+ 'invalid_amount' => __ ( 'Please update you product quantity before using Google Pay.', 'woo-stripe' )
76
+ ]
77
+ ] );
78
+ return $data;
79
+ }
80
+
81
+ public function get_display_items($encode = false) {
82
+ $items = [];
83
+ if (wcs_stripe_active () && WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment) {
84
+ $subscription = wcs_get_subscription ( absint ( $_GET[ 'change_payment_method' ] ) );
85
+ $items[] = [
86
+ 'label' => __ ( 'Subscription', 'woo-stripe' ),
87
+ 'type' => 'SUBTOTAL',
88
+ 'price' => strval ( $subscription->get_total () )
89
+ ];
90
+ } else {
91
+ foreach ( WC ()->cart->get_cart () as $cart_item ) {
92
+ /**
93
+ *
94
+ * @var WC_Product $product
95
+ */
96
+ $product = $cart_item[ 'data' ];
97
+ $qty = $cart_item[ 'quantity' ];
98
+ $items[] = [
99
+ 'label' => $qty > 1 ? sprintf ( '%s X %s', $product->get_name (), $qty ) : $product->get_name (),
100
+ 'type' => 'LINE_ITEM',
101
+ 'price' => strval ( round ( $product->get_price () * $qty, 2, PHP_ROUND_HALF_UP ) )
102
+ ];
103
+ }
104
+ if (WC ()->cart->needs_shipping ()) {
105
+ $items[] = [
106
+ 'label' => __ ( 'Shipping', 'woo-stripe' ),
107
+ 'type' => 'LINE_ITEM',
108
+ 'price' => strval ( WC ()->cart->shipping_total )
109
+ ];
110
+ }
111
+ if (wc_tax_enabled ()) {
112
+ $items[] = [
113
+ 'label' => __ ( 'Tax', 'woo-stripe' ),
114
+ 'type' => 'LINE_ITEM',
115
+ 'price' => strval ( WC ()->cart->get_taxes_total () )
116
+ ];
117
+ }
118
+ }
119
+ return $encode ? htmlspecialchars ( json_encode ( $items ) ) : $items;
120
+ }
121
+
122
+ public function get_shipping_methods($encode = false) {
123
+ if (wcs_stripe_active () && WC_Subscriptions_Change_Payment_Gateway::$is_request_to_change_payment) {
124
+ $methods = [];
125
+ } else {
126
+ $methods = [];
127
+ $packages = WC ()->shipping ()->get_packages ();
128
+ foreach ( $packages as $i => $package ) {
129
+ foreach ( $package[ 'rates' ] as $rate ) {
130
+ /**
131
+ *
132
+ * @var WC_Shipping_Rate $rate
133
+ */
134
+ $methods[] = [
135
+ 'id' => sprintf ( '%s:%s', $i, $rate->id ),
136
+ 'label' => $this->get_shipping_method_label ( $rate ),
137
+ 'description' => ''
138
+ ];
139
+ }
140
+ }
141
+ if (empty ( $methods )) {
142
+ // GPay does not like empty shipping methods. Make a temporary one;
143
+ $methods[] = [ 'id' => 'default',
144
+ 'label' => __ ( 'Waiting...', 'woo-stripe' ),
145
+ 'description' => __ ( 'loading shipping methods...', 'woo-stripe' )
146
+ ];
147
+ }
148
+ }
149
+ return $encode ? htmlspecialchars ( json_encode ( $methods ) ) : $methods;
150
+ }
151
+
152
+ /**
153
+ * Return a formatted shipping method label.
154
+ * <strong>Example</strong>&nbsp;5 Day shipping: 5 USD
155
+ *
156
+ * @param WC_Shipping_Rate $rate
157
+ * @return
158
+ *
159
+ */
160
+ public function get_shipping_method_label($rate) {
161
+ if (wc_stripe_display_prices_including_tax ()) {
162
+ $total = $rate->cost + $rate->get_shipping_tax ();
163
+ } else {
164
+ $total = $rate->cost;
165
+ }
166
+ return sprintf ( '%s: %s %s', $rate->get_label (), $total, get_woocommerce_currency () );
167
+ }
168
+
169
+ public function add_to_cart_response($data) {
170
+ $data[ 'googlepay' ][ 'displayItems' ] = $this->get_display_items ();
171
+ return $data;
172
+ }
173
+ }
includes/gateways/class-wc-payment-gateway-stripe-ideal.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_Ideal extends WC_Payment_Gateway_Stripe_Local_Payment {
11
+
12
+ public function __construct() {
13
+ $this->local_payment_type = 'ideal';
14
+ $this->currencies = [ 'EUR'
15
+ ];
16
+ $this->id = 'stripe_ideal';
17
+ $this->tab_title = __ ( 'iDEAL', 'woo-stripe' );
18
+ $this->method_title = __ ( 'iDEAL', 'woo-stripe' );
19
+ $this->method_description = __ ( 'Ideal gateway that integrates with your Stripe account.', 'woo-stripe' );
20
+ $this->icon = wc_stripe ()->assets_url ( 'img/ideal.svg' );
21
+ $this->order_button_text = __ ( 'iDEAL', 'woo-stripe' );
22
+ parent::__construct ();
23
+ }
24
+
25
+ public function get_local_payment_settings() {
26
+ return [
27
+ 'desc' => array( 'type' => 'description',
28
+ 'description' => $this->get_payment_description()
29
+ ),
30
+ 'enabled' => array(
31
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
32
+ 'type' => 'checkbox',
33
+ 'default' => 'no', 'value' => 'yes',
34
+ 'desc_tip' => true,
35
+ 'description' => __ ( 'If enabled, your site can accept credit card payments through Stripe.', 'woo-stripe' )
36
+ ),
37
+ 'general_settings' => array(
38
+ 'type' => 'title',
39
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
40
+ ),
41
+ 'title_text' => array( 'type' => 'text',
42
+ 'title' => __ ( 'Title', 'woo-stripe' ),
43
+ 'default' => __ ( 'iDEAL', 'woo-stripe' ),
44
+ 'desc_tip' => true,
45
+ 'description' => __ ( 'Title of the iDEAL gateway' )
46
+ ),
47
+ 'description' => array(
48
+ 'title' => __ ( 'Description', 'woo-stripe' ),
49
+ 'type' => 'text', 'default' => '',
50
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
51
+ 'desc_tip' => true
52
+ )
53
+ ];
54
+ }
55
+ }
includes/gateways/class-wc-payment-gateway-stripe-klarna.php ADDED
@@ -0,0 +1,105 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_Klarna extends WC_Payment_Gateway_Stripe_Local_Payment {
11
+
12
+ public function __construct() {
13
+ $this->local_payment_type = 'klarna';
14
+ $this->currencies = [ 'EUR', 'SEK', 'NOK',
15
+ 'DKK', 'GBP', 'USD'
16
+ ];
17
+ $this->id = 'stripe_klarna';
18
+ $this->tab_title = __ ( 'Klarna', 'woo-stripe' );
19
+ $this->template_name = 'local-payment.php';
20
+ $this->token_type = 'Stripe_Local';
21
+ $this->method_title = __ ( 'Klarna', 'woo-stripe' );
22
+ $this->method_description = __ ( 'Klarna gateway that integrates with your Stripe account.', 'woo-stripe' );
23
+ $this->icon = wc_stripe ()->assets_url ( 'img/klarna.svg' );
24
+ $this->order_button_text = __ ( 'Klarna', 'woo-stripe' );
25
+ parent::__construct ();
26
+ }
27
+
28
+ public function get_local_payment_settings() {
29
+ return [
30
+ 'desc' => array( 'type' => 'description',
31
+ 'description' => $this->get_payment_description()
32
+ ),
33
+ 'enabled' => array(
34
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
35
+ 'type' => 'checkbox',
36
+ 'default' => 'no', 'value' => 'yes',
37
+ 'desc_tip' => true,
38
+ 'description' => __ ( 'If enabled, your site can accept Klarna payments through Stripe.', 'woo-stripe' )
39
+ ),
40
+ 'general_settings' => array(
41
+ 'type' => 'title',
42
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
43
+ ),
44
+ 'title_text' => array( 'type' => 'text',
45
+ 'title' => __ ( 'Title', 'woo-stripe' ),
46
+ 'default' => __ ( 'Klarna', 'woo-stripe' ),
47
+ 'desc_tip' => true,
48
+ 'description' => __ ( 'Title of the Klarna gateway' )
49
+ ),
50
+ 'description' => array(
51
+ 'title' => __ ( 'Description', 'woo-stripe' ),
52
+ 'type' => 'text', 'default' => '',
53
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
54
+ 'desc_tip' => true
55
+ )
56
+ ];
57
+ }
58
+
59
+ public function get_required_parameters() {
60
+ return [ 'USD' => [ 'US'
61
+ ], 'EUR' => [ 'AT', 'FI', 'DE', 'NL'
62
+ ], 'DKK' => [ 'DK'
63
+ ], 'NOK' => [ 'NO'
64
+ ], 'SEK' => [ 'SE'
65
+ ], 'GBP' => [ 'GB'
66
+ ]
67
+ ];
68
+ }
69
+
70
+ public function is_local_payment_available() {
71
+ $currency = get_woocommerce_currency ();
72
+ $country = WC ()->customer->get_billing_country ();
73
+ if ($country) {
74
+ $params = $this->get_required_parameters ();
75
+ return isset ( $params[ $currency ] ) && array_search ( $country, $params[ $currency ] ) !== false;
76
+ }
77
+ return false;
78
+ }
79
+
80
+ private function get_source_items() {
81
+ return [ 'type' => 'sku',
82
+ 'description' => 'WC Order', 'quantity' => 1,
83
+ 'currency' => get_woocommerce_currency (),
84
+ 'amount' => wc_stripe_add_number_precision ( WC ()->cart->total )
85
+ ];
86
+ }
87
+
88
+ public function get_source_args($order) {
89
+ return array_merge_recursive ( parent::get_source_args ( $order ), [
90
+ 'klarna' => [ 'product' => 'payment',
91
+ 'purchase_country' => $order->get_billing_country ()
92
+ ],
93
+ 'owner' => [
94
+ 'address' => [
95
+ 'city' => $order->get_billing_city (),
96
+ 'country' => $order->get_billing_country (),
97
+ 'line1' => $order->get_billing_address_1 (),
98
+ 'line2' => $order->get_billing_address_2 (),
99
+ 'postal_code' => $order->get_billing_postcode (),
100
+ 'state' => $order->get_billing_state ()
101
+ ]
102
+ ], 'source_order' => []
103
+ ] );
104
+ }
105
+ }
includes/gateways/class-wc-payment-gateway-stripe-multibanco.php ADDED
@@ -0,0 +1,58 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @package Stripe/Gateways
8
+ * @author PaymentPlugins
9
+ *
10
+ */
11
+ class WC_Payment_Gateway_Stripe_Multibanco extends WC_Payment_Gateway_Stripe_Local_Payment {
12
+
13
+ public function __construct() {
14
+ $this->local_payment_type = 'multibanco';
15
+ $this->currencies = [ 'EUR'
16
+ ];
17
+ $this->id = 'stripe_multibanco';
18
+ $this->tab_title = __ ( 'Multibanco', 'woo-stripe' );
19
+ $this->template_name = 'local-payment.php';
20
+ $this->token_type = 'Stripe_Local';
21
+ $this->method_title = __ ( 'EPS', 'woo-stripe' );
22
+ $this->method_description = __ ( 'Multibanco gateway that integrates with your Stripe account.', 'woo-stripe' );
23
+ $this->icon = wc_stripe ()->assets_url ( 'img/multibanco.svg' );
24
+ $this->order_button_text = __ ( 'Multibanco', 'woo-stripe' );
25
+ parent::__construct ();
26
+ }
27
+
28
+ public function get_local_payment_settings() {
29
+ return [
30
+ 'desc' => array( 'type' => 'description',
31
+ 'description' => $this->get_payment_description()
32
+ ),
33
+ 'enabled' => array(
34
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
35
+ 'type' => 'checkbox',
36
+ 'default' => 'no', 'value' => 'yes',
37
+ 'desc_tip' => true,
38
+ 'description' => __ ( 'If enabled, your site can accept Multibanco payments through Stripe.', 'woo-stripe' )
39
+ ),
40
+ 'general_settings' => array(
41
+ 'type' => 'title',
42
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
43
+ ),
44
+ 'title_text' => array( 'type' => 'text',
45
+ 'title' => __ ( 'Title', 'woo-stripe' ),
46
+ 'default' => __ ( 'Multibanco', 'woo-stripe' ),
47
+ 'desc_tip' => true,
48
+ 'description' => __ ( 'Title of the Multibanco gateway' )
49
+ ),
50
+ 'description' => array(
51
+ 'title' => __ ( 'Description', 'woo-stripe' ),
52
+ 'type' => 'text', 'default' => '',
53
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
54
+ 'desc_tip' => true
55
+ )
56
+ ];
57
+ }
58
+ }
includes/gateways/class-wc-payment-gateway-stripe-p24.php ADDED
@@ -0,0 +1,57 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @package Stripe/Gateways
7
+ * @author PaymentPlugins
8
+ *
9
+ */
10
+ class WC_Payment_Gateway_Stripe_P24 extends WC_Payment_Gateway_Stripe_Local_Payment {
11
+
12
+ public function __construct() {
13
+ $this->local_payment_type = 'p24';
14
+ $this->currencies = [ 'EUR', 'PLN'
15
+ ];
16
+ $this->id = 'stripe_p24';
17
+ $this->tab_title = __ ( 'Przelewy24', 'woo-stripe' );
18
+ $this->template_name = 'local-payment.php';
19
+ $this->token_type = 'Stripe_Local';
20
+ $this->method_title = __ ( 'Przelewy24', 'woo-stripe' );
21
+ $this->method_description = __ ( 'P24 gateway that integrates with your Stripe account.', 'woo-stripe' );
22
+ $this->icon = wc_stripe ()->assets_url ( 'img/p24.svg' );
23
+ $this->order_button_text = __ ( 'P24', 'woo-stripe' );
24
+ parent::__construct ();
25
+ }
26
+
27
+ public function get_local_payment_settings() {
28
+ return [
29
+ 'desc' => array( 'type' => 'description',
30
+ 'description' => $this->get_payment_description()
31
+ ),
32
+ 'enabled' => array(
33
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
34
+ 'type' => 'checkbox',
35
+ 'default' => 'no', 'value' => 'yes',
36
+ 'desc_tip' => true,
37
+ 'description' => __ ( 'If enabled, your site can accept P24 payments through Stripe.', 'woo-stripe' )
38
+ ),
39
+ 'general_settings' => array(
40
+ 'type' => 'title',
41
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
42
+ ),
43
+ 'title_text' => array( 'type' => 'text',
44
+ 'title' => __ ( 'Title', 'woo-stripe' ),
45
+ 'default' => __ ( 'P24', 'woo-stripe' ),
46
+ 'desc_tip' => true,
47
+ 'description' => __ ( 'Title of the p24 gateway' )
48
+ ),
49
+ 'description' => array(
50
+ 'title' => __ ( 'Description', 'woo-stripe' ),
51
+ 'type' => 'text', 'default' => '',
52
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
53
+ 'desc_tip' => true
54
+ )
55
+ ];
56
+ }
57
+ }
includes/gateways/class-wc-payment-gateway-stripe-payment-request.php ADDED
@@ -0,0 +1,80 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * This gateway is provided so merchants can accept Chrome Payments, Microsoft Pay, etc.
7
+ *
8
+ * @author PaymentPlugins
9
+ * @package Stripe/Gateways
10
+ *
11
+ */
12
+ class WC_Payment_Gateway_Stripe_Payment_Request extends WC_Payment_Gateway_Stripe_Payment_Intent {
13
+
14
+ public function __construct() {
15
+ $this->id = 'stripe_payment_request';
16
+ $this->tab_title = __ ( 'PaymentRequest Gateway', 'woo-stripe' );
17
+ $this->template_name = 'payment-request.php';
18
+ $this->token_type = 'Stripe_CC';
19
+ $this->method_title = __ ( 'Stripe Payment Request', 'woo-stripe' );
20
+ $this->method_description = __ ( 'Gateway that renders based on the user\'s browser. Chrome payment methods, Microsoft pay, etc.', 'woo-stripe' );
21
+ parent::__construct ();
22
+ }
23
+
24
+ public function init_supports() {
25
+ parent::init_supports ();
26
+ $this->supports[] = 'wc_stripe_cart_checkout';
27
+ $this->supports[] = 'wc_stripe_product_checkout';
28
+ $this->supports[] = 'wc_stripe_banner_checkout';
29
+ }
30
+
31
+ public function get_icon() {
32
+ return wc_stripe_get_template ( 'payment-request-icons.php' );
33
+ }
34
+
35
+ public function enqueue_product_scripts($scripts) {
36
+ $this->enqueue_checkout_scripts ( $scripts );
37
+ }
38
+
39
+ public function enqueue_cart_scripts($scripts) {
40
+ $this->enqueue_checkout_scripts ( $scripts );
41
+ }
42
+
43
+ public function enqueue_checkout_scripts($scripts) {
44
+ $scripts->enqueue_script ( 'payment-request', $scripts->assets_url ( 'js/frontend/payment-request.js' ), [
45
+ $scripts->get_handle ( 'wc-stripe' ),
46
+ $scripts->get_handle ( 'external' )
47
+ ], wc_stripe ()->version (), true );
48
+
49
+ $scripts->localize_script ( 'payment-request', $this->get_localized_params () );
50
+ }
51
+
52
+ public function get_localized_params() {
53
+ return array_merge_recursive ( parent::get_localized_params (), [
54
+ 'button' => [
55
+ 'type' => $this->get_option ( 'button_type' ),
56
+ 'theme' => $this->get_option ( 'button_theme' ),
57
+ 'height' => $this->get_button_height ()
58
+ ],
59
+ 'icons' => [
60
+ 'chrome' => wc_stripe ()->assets_url ( 'img/chrome.svg' )
61
+ ],
62
+ 'messages' => [
63
+ 'add_to_cart' => __ ( 'Adding to cart...', 'woo-stripe' ),
64
+ 'choose_product' => __ ( 'Please select a product option before updating quantity.', 'woo-stripe' )
65
+ ]
66
+ ] );
67
+ }
68
+
69
+ private function get_button_height() {
70
+ $value = $this->get_option ( 'button_height' );
71
+ $value .= strpos ( $value, 'px' ) === false ? 'px' : '';
72
+ return $value;
73
+ }
74
+
75
+ private function get_icon_for_payment_request() {
76
+ $user_agent = isset ( $_SERVER[ 'HTTP_USER_AGENT' ] ) ? $_SERVER[ 'HTTP_USER_AGENT' ] : '';
77
+ if (! empty ( $user_agent )) {
78
+ }
79
+ }
80
+ }
includes/gateways/class-wc-payment-gateway-stripe-sepa.php ADDED
@@ -0,0 +1,66 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @package Stripe/Gateways
8
+ * @author PaymentPlugins
9
+ *
10
+ */
11
+ class WC_Payment_Gateway_Stripe_Sepa extends WC_Payment_Gateway_Stripe_Local_Payment {
12
+
13
+ public function __construct() {
14
+ $this->synchronous = false;
15
+ $this->local_payment_type = 'sepa_debit';
16
+ $this->currencies = [ 'EUR'
17
+ ];
18
+ $this->id = 'stripe_sepa';
19
+ $this->tab_title = __ ( 'SEPA', 'woo-stripe' );
20
+ $this->template_name = 'local-payment.php';
21
+ $this->token_type = 'Stripe_Local';
22
+ $this->method_title = __ ( 'Sepa', 'woo-stripe' );
23
+ $this->method_description = __ ( 'Sepa gateway that integrates with your Stripe account.', 'woo-stripe' );
24
+ $this->icon = wc_stripe ()->assets_url ( 'img/sepa.svg' );
25
+ $this->order_button_text = __ ( 'SEPA', 'woo-stripe' );
26
+ parent::__construct ();
27
+ }
28
+
29
+ public function get_local_payment_settings() {
30
+ return [
31
+ 'desc' => array( 'type' => 'description',
32
+ 'description' => $this->get_payment_description()
33
+ ),
34
+ 'enabled' => array(
35
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
36
+ 'type' => 'checkbox',
37
+ 'default' => 'no', 'value' => 'yes',
38
+ 'desc_tip' => true,
39
+ 'description' => __ ( 'If enabled, your site can accept P24 payments through Stripe.', 'woo-stripe' )
40
+ ),
41
+ 'general_settings' => array(
42
+ 'type' => 'title',
43
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
44
+ ),
45
+ 'title_text' => array( 'type' => 'text',
46
+ 'title' => __ ( 'Title', 'woo-stripe' ),
47
+ 'default' => __ ( 'SEPA Direct Debit', 'woo-stripe' ),
48
+ 'desc_tip' => true,
49
+ 'description' => __ ( 'Title of the Sepa gateway' )
50
+ ),
51
+ 'description' => array(
52
+ 'title' => __ ( 'Description', 'woo-stripe' ),
53
+ 'type' => 'text', 'default' => '',
54
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
55
+ 'desc_tip' => true
56
+ )
57
+ ];
58
+ }
59
+
60
+ public function get_element_params() {
61
+ return array_merge ( parent::get_element_params (), [
62
+ 'supportedCountries' => [ 'SEPA'
63
+ ]
64
+ ] );
65
+ }
66
+ }
includes/gateways/class-wc-payment-gateway-stripe-sofort.php ADDED
@@ -0,0 +1,70 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @package Stripe/Gateways
8
+ * @author PaymentPlugins
9
+ *
10
+ */
11
+ class WC_Payment_Gateway_Stripe_Sofort extends WC_Payment_Gateway_Stripe_Local_Payment {
12
+
13
+ public function __construct() {
14
+ $this->synchronous = false;
15
+ $this->local_payment_type = 'sofort';
16
+ $this->currencies = [ 'EUR'
17
+ ];
18
+ $this->countries = [ 'AT', 'BE', 'DE', 'ES',
19
+ 'IT', 'NL'
20
+ ];
21
+ $this->id = 'stripe_sofort';
22
+ $this->tab_title = __ ( 'Sofort', 'woo-stripe' );
23
+ $this->template_name = 'local-payment.php';
24
+ $this->token_type = 'Stripe_Local';
25
+ $this->method_title = __ ( 'Sofort', 'woo-stripe' );
26
+ $this->method_description = __ ( 'Sofort gateway that integrates with your Stripe account.', 'woo-stripe' );
27
+ $this->icon = wc_stripe ()->assets_url ( 'img/sofort.svg' );
28
+ $this->order_button_text = __ ( 'SOFORT', 'woo-stripe' );
29
+ parent::__construct ();
30
+ }
31
+
32
+ public function get_local_payment_settings() {
33
+ return [
34
+ 'desc' => array( 'type' => 'description',
35
+ 'description' => $this->get_payment_description()
36
+ ),
37
+ 'enabled' => array(
38
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
39
+ 'type' => 'checkbox',
40
+ 'default' => 'no', 'value' => 'yes',
41
+ 'desc_tip' => true,
42
+ 'description' => __ ( 'If enabled, your site can accept Sofort payments through Stripe.', 'woo-stripe' )
43
+ ),
44
+ 'general_settings' => array(
45
+ 'type' => 'title',
46
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
47
+ ),
48
+ 'title_text' => array( 'type' => 'text',
49
+ 'title' => __ ( 'Title', 'woo-stripe' ),
50
+ 'default' => __ ( 'SOFORT', 'woo-stripe' ),
51
+ 'desc_tip' => true,
52
+ 'description' => __ ( 'Title of the Sofort gateway' )
53
+ ),
54
+ 'description' => array(
55
+ 'title' => __ ( 'Description', 'woo-stripe' ),
56
+ 'type' => 'text', 'default' => '',
57
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
58
+ 'desc_tip' => true
59
+ )
60
+ ];
61
+ }
62
+
63
+ public function get_source_args($order) {
64
+ return array_merge ( parent::get_source_args ( $order ), [
65
+ 'sofort' => [
66
+ 'country' => $order->get_billing_country ()
67
+ ]
68
+ ] );
69
+ }
70
+ }
includes/gateways/class-wc-payment-gateway-stripe-wechat.php ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Gateway_Local_Payment' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @package Stripe/Gateways
8
+ * @author PaymentPlugins
9
+ *
10
+ */
11
+ class WC_Payment_Gateway_Stripe_WeChat extends WC_Payment_Gateway_Stripe_Local_Payment {
12
+
13
+ public function __construct() {
14
+ $this->local_payment_type = 'wechat';
15
+ $this->currencies = [ 'AUD', 'CAD', 'EUR',
16
+ 'GBP', 'HKD', 'JPY', 'SGD', 'USD'
17
+ ];
18
+ $this->id = 'stripe_wechat';
19
+ $this->tab_title = __ ( 'WeChat', 'woo-stripe' );
20
+ $this->template_name = 'local-payment.php';
21
+ $this->token_type = 'Stripe_Local';
22
+ $this->method_title = __ ( 'WeChat', 'woo-stripe' );
23
+ $this->method_description = __ ( 'WeChat gateway that integrates with your Stripe account.', 'woo-stripe' );
24
+ $this->icon = wc_stripe ()->assets_url ( 'img/wechat.svg' );
25
+ $this->order_button_text = __ ( 'WeChat', 'woo-stripe' );
26
+ parent::__construct ();
27
+ }
28
+
29
+ public function get_local_payment_settings() {
30
+ return [
31
+ 'desc' => array( 'type' => 'description',
32
+ 'description' => $this->get_payment_description()
33
+ ),
34
+ 'enabled' => array(
35
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
36
+ 'type' => 'checkbox',
37
+ 'default' => 'no', 'value' => 'yes',
38
+ 'desc_tip' => true,
39
+ 'description' => __ ( 'If enabled, your site can accept P24 payments through Stripe.', 'woo-stripe' )
40
+ ),
41
+ 'general_settings' => array(
42
+ 'type' => 'title',
43
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
44
+ ),
45
+ 'title_text' => array( 'type' => 'text',
46
+ 'title' => __ ( 'Title', 'woo-stripe' ),
47
+ 'default' => __ ( 'WeChat', 'woo-stripe' ),
48
+ 'desc_tip' => true,
49
+ 'description' => __ ( 'Title of the WeChat gateway', 'woo-stripe' )
50
+ ),
51
+ 'description' => array(
52
+ 'title' => __ ( 'Description', 'woo-stripe' ),
53
+ 'type' => 'text', 'default' => '',
54
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
55
+ 'desc_tip' => true
56
+ )
57
+ ];
58
+ }
59
+
60
+ protected function get_source_redirect_url($source) {
61
+ return $source->wechat->qr_code_url;
62
+ }
63
+ }
includes/gateways/settings/applepay-settings.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ return array(
3
+ 'desc' => array( 'type' => 'description',
4
+ 'description' => sprintf ( '<div class="wc-stripe-register-domain"><button class="button button-secondary api-register-domain">%s</button></div><p>%s</p>', __ ( 'Register Domain', 'woo-stripe' ), sprintf ( __ ( 'This plugin attemps to add the domain association file to your server automatically when you click the Register Domain button. If that fails due to file permssions, you must add the <strong>%s.well-known/apple-developer-merchantid-domain-association%s</strong> file to your domain and register your domain within the Stripe Dashboard.', 'woo-stripe' ), '<a href="https://stripe.com/files/apple-pay/apple-developer-merchantid-domain-association">', '</a>' ) )
5
+ ),
6
+ 'enabled' => array(
7
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
8
+ 'type' => 'checkbox', 'default' => 'no',
9
+ 'value' => 'yes', 'desc_tip' => true,
10
+ 'description' => __ ( 'If enabled, your site can accept Apple Pay payments through Stripe.', 'woo-stripe' )
11
+ ),
12
+ 'general_settings' => array( 'type' => 'title',
13
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
14
+ ),
15
+ 'title_text' => array( 'type' => 'text',
16
+ 'title' => __ ( 'Title', 'woo-stripe' ),
17
+ 'default' => __ ( 'Apple Pay', 'woo-stripe' ),
18
+ 'desc_tip' => true,
19
+ 'description' => __ ( 'Title of the credit card gateway' )
20
+ ),
21
+ 'description' => array(
22
+ 'title' => __ ( 'Description', 'woo-stripe' ),
23
+ 'type' => 'text', 'default' => '',
24
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
25
+ 'desc_tip' => true
26
+ ),
27
+ 'method_format' => array(
28
+ 'title' => __ ( 'Credit Card Display', 'woo-stripe' ),
29
+ 'type' => 'select',
30
+ 'class' => 'wc-enhanced-select',
31
+ 'options' => wp_list_pluck ( $this->get_method_formats (), 'example' ),
32
+ 'value' => '', 'default' => 'type_ending_in',
33
+ 'desc_tip' => true,
34
+ 'description' => __ ( 'This option allows you to customize how the credit card will display for your customers on orders, subscriptions, etc.' )
35
+ ),
36
+ 'charge_type' => array( 'type' => 'select',
37
+ 'title' => __ ( 'Charge Type', 'woo-stripe' ),
38
+ 'default' => 'capture',
39
+ 'class' => 'wc-enhanced-select',
40
+ 'options' => array(
41
+ 'capture' => __ ( 'Capture', 'woo-stripe' ),
42
+ 'authorize' => __ ( 'Authorize', 'woo-stripe' )
43
+ ), 'desc_tip' => true,
44
+ 'description' => __ ( 'This option determines whether the customer\'s funds are captured immediately or authorized and can be captured at a later date.', 'woo-stripe' )
45
+ ),
46
+ 'payment_sections' => array(
47
+ 'type' => 'multiselect',
48
+ 'title' => __ ( 'Payment Sections', 'woo-stripe' ),
49
+ 'class' => 'wc-enhanced-select',
50
+ 'options' => [
51
+ 'product' => __ ( 'Product Page', 'woo-stripe' ),
52
+ 'cart' => __ ( 'Cart Page', 'woo-stripe' ),
53
+ 'checkout_banner' => __ ( 'Top of Checkout', 'woo-stripe' )
54
+ ], 'default' => [ 'product', 'cart'
55
+ ],
56
+ 'description' => __ ( 'Increase your conversion rate by offering Apple Pay on your Product and Cart pages, or at the top of the checkout page.', 'woo-stripe' )
57
+ ),
58
+ 'order_status' => array( 'type' => 'select',
59
+ 'title' => __ ( 'Order Status', 'woo-stripe' ),
60
+ 'default' => 'default',
61
+ 'class' => 'wc-enhanced-select',
62
+ 'options' => array_merge ( array(
63
+ 'default' => __ ( 'Default', 'woo-stripe' )
64
+ ), wc_get_order_statuses () ),
65
+ 'tool_tip' => true,
66
+ 'description' => __ ( 'This is the status of the order once payment is complete. If <b>Default</b> is selected, then WooCommerce will set the order status automatically based on internal logic which states if a product is virtual and downloadable then status is set to complete. Products that require shipping are set to Processing. Default is the recommended setting as it allows standard WooCommerce code to process the order status.', 'woo-stripe' )
67
+ ),
68
+ /* 'order_prefix' => array( 'type' => 'text',
69
+ 'title' => __ ( 'Order Prefix', 'woo-stripe' ),
70
+ 'value' => '', 'default' => '',
71
+ 'class' => '', 'desc_tip' => true,
72
+ 'description' => __ ( 'The order prefix is prepended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
73
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
74
+ ),
75
+ 'order_suffix' => array( 'type' => 'text',
76
+ 'title' => __ ( 'Order Suffix', 'woo-stripe' ),
77
+ 'value' => '', 'default' => '',
78
+ 'class' => '', 'desc_tip' => true,
79
+ 'description' => __ ( 'The order suffix is appended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
80
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
81
+ ), */
82
+ 'button_section' => [ 'type' => 'title',
83
+ 'title' => __ ( 'Button Settings', 'woo-stripe' )
84
+ ],
85
+ 'button_style' => [ 'type' => 'select',
86
+ 'title' => __ ( 'Button Design', 'woo-stripe' ),
87
+ 'class' => 'wc-enhanced-select',
88
+ 'default' => 'apple-pay-button-black',
89
+ 'options' => array(
90
+ 'apple-pay-button-black' => __ ( 'Black Button', 'woo-stripe' ),
91
+ 'apple-pay-button-white-with-line' => __ ( 'White With Black Line', 'woo-stripe' ),
92
+ 'apple-pay-button-white' => __ ( 'White Button', 'woo-stripe' )
93
+ ),
94
+ 'description' => __ ( 'This is the style for all Apple Pay buttons presented on your store.', 'woo-stripe' )
95
+ ],
96
+ 'button_type_checkout' => array(
97
+ 'title' => __ ( 'Checkout button type', 'woo-stripe' ),
98
+ 'type' => 'select',
99
+ 'options' => array(
100
+ 'plain' => __ ( 'Standard Button', 'woo-stripe' ),
101
+ 'buy' => __ ( 'Buy with Apple Pay', 'woo-stripe' )
102
+ ),
103
+ // 'check-out' => __ ( 'Checkout with Apple Pay', 'woo-stripe' )
104
+ 'default' => 'plain'
105
+ ),
106
+ 'button_type_cart' => array(
107
+ 'title' => __ ( 'Cart button type', 'woo-stripe' ),
108
+ 'type' => 'select',
109
+ 'options' => array(
110
+ 'plain' => __ ( 'Standard Button', 'woo-stripe' ),
111
+ 'buy' => __ ( 'Buy with Apple Pay', 'woo-stripe' )
112
+ ),
113
+ // 'check-out' => __ ( 'Checkout with Apple Pay', 'woo-stripe' )
114
+ 'default' => 'plain'
115
+ ),
116
+ 'button_type_product' => array(
117
+ 'title' => __ ( 'Product button type', 'woo-stripe' ),
118
+ 'type' => 'select',
119
+ 'options' => array(
120
+ 'plain' => __ ( 'Standard Button', 'woo-stripe' ),
121
+ 'buy' => __ ( 'Buy with Apple Pay', 'woo-stripe' )
122
+ ),
123
+ // 'check-out' => __ ( 'Checkout with Apple Pay', 'woo-stripe' )
124
+ 'default' => 'buy'
125
+ )
126
+ );
includes/gateways/settings/cc-settings.php ADDED
@@ -0,0 +1,127 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ return array(
3
+ 'enabled' => array(
4
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
5
+ 'type' => 'checkbox', 'default' => 'yes',
6
+ 'value' => 'yes', 'desc_tip' => true,
7
+ 'description' => __ ( 'If enabled, your site can accept credit card payments through Stripe.', 'woo-stripe' )
8
+ ),
9
+ 'desc1' => array( 'type' => 'description',
10
+ 'description' => sprintf ( __ ( '%sTest cards%s', 'woo-stripe' ), '<a target="_blank" href="https://stripe.com/docs/testing#cards">', '</a>' )
11
+ ),
12
+ 'general_settings' => array( 'type' => 'title',
13
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
14
+ ),
15
+ 'title_text' => array( 'type' => 'text',
16
+ 'title' => __ ( 'Title', 'woo-stripe' ),
17
+ 'default' => __ ( 'Credit Cards', 'woo-stripe' ),
18
+ 'desc_tip' => true,
19
+ 'description' => __ ( 'Title of the credit card gateway' )
20
+ ),
21
+ 'description' => array(
22
+ 'title' => __ ( 'Description', 'woo-stripe' ),
23
+ 'type' => 'text', 'default' => '',
24
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
25
+ 'desc_tip' => true
26
+ ),
27
+ 'method_format' => array(
28
+ 'title' => __ ( 'Credit Card Display', 'woo-stripe' ),
29
+ 'type' => 'select',
30
+ 'class' => 'wc-enhanced-select',
31
+ 'options' => wp_list_pluck ( $this->get_method_formats (), 'example' ),
32
+ 'value' => '', 'default' => 'type_ending_in',
33
+ 'desc_tip' => true,
34
+ 'description' => __ ( 'This option allows you to customize how the credit card will display for your customers on orders, subscriptions, etc.' )
35
+ ),
36
+ 'charge_type' => array( 'type' => 'select',
37
+ 'title' => __ ( 'Charge Type', 'woo-stripe' ),
38
+ 'default' => 'capture',
39
+ 'class' => 'wc-enhanced-select',
40
+ 'options' => array(
41
+ 'capture' => __ ( 'Capture', 'woo-stripe' ),
42
+ 'authorize' => __ ( 'Authorize', 'woo-stripe' )
43
+ ), 'desc_tip' => true,
44
+ 'description' => __ ( 'This option determines whether the customer\'s funds are captured immediately or authorized and can be captured at a later date.', 'woo-stripe' )
45
+ ),
46
+ 'order_status' => array( 'type' => 'select',
47
+ 'title' => __ ( 'Order Status', 'woo-stripe' ),
48
+ 'default' => 'default',
49
+ 'class' => 'wc-enhanced-select',
50
+ 'options' => array_merge ( array(
51
+ 'default' => __ ( 'Default', 'woo-stripe' )
52
+ ), wc_get_order_statuses () ),
53
+ 'tool_tip' => true,
54
+ 'description' => __ ( 'This is the status of the order once payment is complete. If <b>Default</b> is selected, then WooCommerce will set the order status automatically based on internal logic which states if a product is virtual and downloadable then status is set to complete. Products that require shipping are set to Processing. Default is the recommended setting as it allows standard WooCommerce code to process the order status.', 'woo-stripe' )
55
+ ),
56
+ 'save_card_enabled' => array( 'type' => 'checkbox',
57
+ 'value' => 'yes', 'default' => 'yes',
58
+ 'title' => __ ( 'Allow Credit Card Save', 'woo-stripe' ),
59
+ 'desc_tip' => false,
60
+ 'description' => __ ( 'If enabled, a checkbox will be available on the checkout page allowing your customer\'s to save their credit card. The payment methods are stored securely in Stripe\'s vault and never touch your server. Note: if the cart contains a subscription, there will be no checkbox because the payment method will be saved automatically. There will also be no checkbox for guest checkout as a user must be logged in to save a payment method.', 'woo-stripe' )
61
+ ),
62
+ 'cards' => array( 'type' => 'multiselect',
63
+ 'title' => __ ( 'Accepted Payment Methods', 'wwoo-stripe' ),
64
+ 'class' => 'wc-enhanced-select stripe-accepted-cards',
65
+ 'default' => array( 'amex', 'discover',
66
+ 'visa', 'mastercard'
67
+ ),
68
+ 'options' => array(
69
+ 'visa' => __ ( 'Visa', 'wwoo-stripe' ),
70
+ 'amex' => __ ( 'Amex', 'wwoo-stripe' ),
71
+ 'discover' => __ ( 'Discover', 'wwoo-stripe' ),
72
+ 'mastercard' => __ ( 'MasterCard', 'wwoo-stripe' ),
73
+ 'jcb' => __ ( 'JCB', 'wwoo-stripe' ),
74
+ 'maestro' => __ ( 'Maestro', 'wwoo-stripe' ),
75
+ 'diners' => __ ( 'Diners Club', 'wwoo-stripe' ),
76
+ 'china_union_pay' => __ ( 'Union Pay', 'wwoo-stripe' )
77
+ ), 'desc_tip' => true,
78
+ 'description' => __ ( 'The selected icons will show customers which credit card brands you accept.', 'wwoo-stripe' )
79
+ ),
80
+ 'form_title' => array( 'type' => 'title',
81
+ 'title' => __ ( 'Credit Card Form', 'woo-stripe' )
82
+ ),
83
+ 'form_type' => array(
84
+ 'title' => __ ( 'Card Form', 'woo-stripe' ),
85
+ 'type' => 'select',
86
+ 'options' => array(
87
+ 'inline' => __ ( 'Stripe form', 'woo-stripe' ),
88
+ 'custom' => __ ( 'Custom form', 'woo-stripe' )
89
+ ), 'default' => 'inline',
90
+ 'description' => __ ( 'The Stripe form option displays a CC form rendered by Stripe. It works well with most themes. The custom card forms are offered if you want more options on the CC form design.', 'woo-stripe' )
91
+ ),
92
+ 'custom_form' => array(
93
+ 'title' => __ ( 'Custom Form', 'woo-stripe' ),
94
+ 'type' => 'select',
95
+ 'options' => wp_list_pluck ( wc_stripe_get_custom_forms (), 'label' ),
96
+ 'default' => 'bootstrap',
97
+ 'description' => __ ( 'The design of the credit card form.', 'woo-stripe' ),
98
+ 'desc_tip' => true,
99
+ 'custom_attributes' => array(
100
+ 'data-show-if' => array(
101
+ 'form_type' => 'custom'
102
+ )
103
+ )
104
+ ),
105
+ 'postal_enabled' => array(
106
+ 'title' => __ ( 'Postal Code', 'woo-stripe' ),
107
+ 'type' => 'checkbox', 'default' => 'yes',
108
+ 'description' => __ ( 'If enabled, the CC form will show the postal code on the checkout page. If disabled, the billing field\'s postal code will be used. The postal code will show on the Add Payment Method page for security reasons.', 'woo-stripe' ),
109
+ 'desc_tip' => true,
110
+ 'custom_attributes' => array(
111
+ 'data-show-if' => array(
112
+ 'form_type' => 'custom'
113
+ )
114
+ )
115
+ ),
116
+ /* 'cvv_enabled' => array(
117
+ 'title' => __ ( 'CVV Code', 'woo-stripe' ),
118
+ 'type' => 'checkbox', 'default' => 'yes',
119
+ 'description' => __ ( 'If enabled, the CC form will show the cvv field.', 'woo-stripe' ),
120
+ 'desc_tip' => true,
121
+ 'custom_attributes' => array(
122
+ 'data-show-if' => array(
123
+ 'form_type' => 'custom'
124
+ )
125
+ )
126
+ ) */
127
+ );
includes/gateways/settings/googlepay-settings.php ADDED
@@ -0,0 +1,144 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ return array(
3
+ 'desc1' => array( 'type' => 'description',
4
+ 'description' => '<p><a target="_blank" href="https://services.google.com/fb/forms/googlepayAPIenable/">' . __ ( 'Google Pay Request', 'woo-stripe' ) . '</a>. ' . __ ( 'When you submit your request for Google Pay, request to be whitelisted for callbackintents. This ensures that the order items are displayed on the Google Payment sheet.', 'woo-stripe' ) . '</p>' . __ ( 'To have the Google API team approve your integration you can enable test mode and Google Pay. When test mode is enabled, Google Pay will work, allowing you to capture the necessary screenshots the Google API team needs to approve your Merchant ID request.', 'woo-stripe' )
5
+ ),
6
+ 'desc2' => array( 'type' => 'description',
7
+ 'description' => sprintf ( '<p>%s</p>', sprintf ( __ ( 'If you don\'t want to request a Google Merchant ID, you can use the %sPayment Request Gateway%s which has a Google Pay integration through Stripe via the Chrome browser.', 'woo-stripe' ), '<a target="_blank" href="' . admin_url ( 'admin.php?page=wc-settings&tab=checkout&section=stripe_payment_request' ) . '">', '</a>' ) )
8
+ ),
9
+ 'enabled' => array(
10
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
11
+ 'type' => 'checkbox', 'default' => 'no',
12
+ 'value' => 'yes', 'desc_tip' => true,
13
+ 'description' => __ ( 'If enabled, your site can accept Google Pay payments through Stripe.', 'woo-stripe' )
14
+ ),
15
+ 'general_settings' => array( 'type' => 'title',
16
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
17
+ ),
18
+ 'merchant_id' => array( 'type' => 'text',
19
+ 'title' => __ ( 'Merchant ID', 'woo-stripe' ),
20
+ 'default' => '',
21
+ 'description' => __ ( 'Your Google Merchant ID is given to you by the Google API team once you register for Google Pay. While testing in TEST mode you can leave this value blank and Google Pay will work.', 'woo-stripe' )
22
+ ),
23
+ 'title_text' => array( 'type' => 'text',
24
+ 'title' => __ ( 'Title', 'woo-stripe' ),
25
+ 'default' => __ ( 'Google Pay', 'woo-stripe' ),
26
+ 'desc_tip' => true,
27
+ 'description' => __ ( 'Title of the credit card gateway' )
28
+ ),
29
+ 'description' => array(
30
+ 'title' => __ ( 'Description', 'woo-stripe' ),
31
+ 'type' => 'text', 'default' => '',
32
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
33
+ 'desc_tip' => true
34
+ ),
35
+ 'method_format' => array(
36
+ 'title' => __ ( 'Credit Card Display', 'woo-stripe' ),
37
+ 'type' => 'select',
38
+ 'class' => 'wc-enhanced-select',
39
+ 'options' => wp_list_pluck ( $this->get_method_formats (), 'example' ),
40
+ 'value' => '', 'default' => 'type_ending_in',
41
+ 'desc_tip' => true,
42
+ 'description' => __ ( 'This option allows you to customize how the credit card will display for your customers on orders, subscriptions, etc.' )
43
+ ),
44
+ 'charge_type' => array( 'type' => 'select',
45
+ 'title' => __ ( 'Charge Type', 'woo-stripe' ),
46
+ 'default' => 'capture',
47
+ 'class' => 'wc-enhanced-select',
48
+ 'options' => array(
49
+ 'capture' => __ ( 'Capture', 'woo-stripe' ),
50
+ 'authorize' => __ ( 'Authorize', 'woo-stripe' )
51
+ ), 'desc_tip' => true,
52
+ 'description' => __ ( 'This option determines whether the customer\'s funds are capture immediately or authorized and can be captured at a later date.', 'woo-stripe' )
53
+ ),
54
+ 'payment_sections' => array(
55
+ 'type' => 'multiselect',
56
+ 'title' => __ ( 'Payment Sections', 'woo-stripe' ),
57
+ 'class' => 'wc-enhanced-select',
58
+ 'options' => [
59
+ 'product' => __ ( 'Product Page', 'woo-stripe' ),
60
+ 'cart' => __ ( 'Cart Page', 'woo-stripe' ),
61
+ 'checkout_banner' => __ ( 'Top of Checkout', 'woo-stripe' )
62
+ ], 'default' => [ 'product', 'cart'
63
+ ],
64
+ 'description' => __ ( 'Increase your conversion rate by offering Google Pay on your Product and Cart pages, or at the top of the checkout page.', 'woo-stripe' )
65
+ ),
66
+ 'order_status' => array( 'type' => 'select',
67
+ 'title' => __ ( 'Order Status', 'woo-stripe' ),
68
+ 'default' => 'default',
69
+ 'class' => 'wc-enhanced-select',
70
+ 'options' => array_merge ( array(
71
+ 'default' => __ ( 'Default', 'woo-stripe' )
72
+ ), wc_get_order_statuses () ),
73
+ 'tool_tip' => true,
74
+ 'description' => __ ( 'This is the status of the order once payment is complete. If <b>Default</b> is selected, then WooCommerce will set the order status automatically based on internal logic which states if a product is virtual and downloadable then status is set to complete. Products that require shipping are set to Processing. Default is the recommended setting as it allows standard WooCommerce code to process the order status.', 'woo-stripe' )
75
+ ),
76
+ 'merchant_name' => [ 'type' => 'text',
77
+ 'title' => __ ( 'Merchant Name', 'woo-stripe' ),
78
+ 'default' => get_bloginfo ( 'name' ),
79
+ 'description' => __ ( 'The name of your business as it appears on the Google Pay payment sheet.', 'woo-stripe' ),
80
+ 'desc_tip' => true
81
+ ],
82
+ 'icon' => array(
83
+ 'title' => __ ( 'Icon', 'woo-stripe' ),
84
+ 'type' => 'select',
85
+ 'options' => array(
86
+ 'googlepay_outline' => __ ( 'With Outline', 'woo-stripe' ),
87
+ 'googlepay_standard' => __ ( 'Standard', 'woo-stripe' )
88
+ ), 'default' => 'googlepay_standard',
89
+ 'desc_tip' => true,
90
+ 'description' => __ ( 'This is the icon style that appears next to the gateway on the checkout page.', 'woo-stripe' )
91
+ ),
92
+ /* 'order_prefix' => array( 'type' => 'text',
93
+ 'title' => __ ( 'Order Prefix', 'woo-stripe' ),
94
+ 'value' => '', 'default' => '',
95
+ 'class' => '', 'desc_tip' => true,
96
+ 'description' => __ ( 'The order prefix is prepended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
97
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
98
+ ),
99
+ 'order_suffix' => array( 'type' => 'text',
100
+ 'title' => __ ( 'Order Suffix', 'woo-stripe' ),
101
+ 'value' => '', 'default' => '',
102
+ 'class' => '', 'desc_tip' => true,
103
+ 'description' => __ ( 'The order suffix is appended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
104
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
105
+ ), */
106
+ /* 'order_status' => array( 'type' => 'select',
107
+ 'title' => __ ( 'Order Status', 'woo-stripe' ),
108
+ 'default' => 'default',
109
+ 'class' => 'wc-enhanced-select',
110
+ 'options' => array_merge ( array(
111
+ 'default' => __ ( 'Default', 'woo-stripe' )
112
+ ), wc_get_order_statuses () ),
113
+ 'tool_tip' => true,
114
+ 'description' => __ ( 'This is the status of the order once payment is complete. If <b>Default</b> is selected, then WooCommerce will set the order status automatically based on internal logic which states if a product is virtual and downloadable then status is set to complete. Products that require shipping are set to Processing. Default is the recommended setting as it allows standard WooCommerce code to process the order status.', 'woo-stripe' )
115
+ ), */
116
+ 'button_section' => array( 'type' => 'title',
117
+ 'title' => __ ( 'Button Options', 'woo-stripe' )
118
+ ),
119
+ 'button_color' => array(
120
+ 'title' => __ ( 'Button Color', 'woo-stripe' ),
121
+ 'type' => 'select',
122
+ 'class' => 'gpay-button-option button-color',
123
+ 'options' => array(
124
+ 'black' => __ ( 'Black', 'woo-stripe' ),
125
+ 'white' => __ ( 'White', 'woo-stripe' )
126
+ ), 'default' => 'black',
127
+ 'description' => __ ( 'The button color of the GPay button.', 'woo-stripe' )
128
+ ),
129
+ 'button_style' => array(
130
+ 'title' => __ ( 'Button Style', 'woo-stripe' ),
131
+ 'type' => 'select',
132
+ 'class' => 'gpay-button-option button-style',
133
+ 'options' => array(
134
+ 'long' => __ ( 'Long', 'woo-stripe' ),
135
+ 'short' => __ ( 'Short', 'woo-stripe' )
136
+ ), 'default' => 'long',
137
+ 'description' => __ ( 'The button style of the GPay button.', 'woo-stripe' )
138
+ ),
139
+ 'button_render' => [ 'type' => 'button_demo',
140
+ 'title' => __ ( 'Button Design', 'woo-stripe' ),
141
+ 'id' => 'gpay-button',
142
+ 'description' => __ ( 'If you can\'t see the Google Pay button, try switching to a Chrome browser.', 'woo-stripe' )
143
+ ]
144
+ );
includes/gateways/settings/payment-request-settings.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ return array(
3
+ 'desc' => array( 'type' => 'description',
4
+ 'description' => __ ( 'The PaymentRequest gateway uses your customer\'s browser to render payment options like Google Pay and Microsoft Pay. You can either use the Google Pay gateway for example, or this gateway.
5
+ The difference is this gateway uses Stripe\'s PaymentRequest Button rather than render a Google Pay specific button.', 'woo-stripe' )
6
+ ),
7
+ 'enabled' => array(
8
+ 'title' => __ ( 'Enabled', 'woo-stripe' ),
9
+ 'type' => 'checkbox', 'default' => 'no',
10
+ 'value' => 'yes', 'desc_tip' => true,
11
+ 'description' => __ ( 'If enabled, your site can accept Apple Pay payments through Stripe.', 'woo-stripe' )
12
+ ),
13
+ 'general_settings' => array( 'type' => 'title',
14
+ 'title' => __ ( 'General Settings', 'woo-stripe' )
15
+ ),
16
+ 'title_text' => array( 'type' => 'text',
17
+ 'title' => __ ( 'Title', 'woo-stripe' ),
18
+ 'default' => __ ( 'Browser Payments', 'woo-stripe' ),
19
+ 'desc_tip' => true,
20
+ 'description' => __ ( 'Title of the credit card gateway' )
21
+ ),
22
+ 'description' => array(
23
+ 'title' => __ ( 'Description', 'woo-stripe' ),
24
+ 'type' => 'text', 'default' => '',
25
+ 'description' => __ ( 'Leave blank if you don\'t want a description to show for the gateway.', 'woo-stripe' ),
26
+ 'desc_tip' => true
27
+ ),
28
+ 'method_format' => array(
29
+ 'title' => __ ( 'Credit Card Display', 'woo-stripe' ),
30
+ 'type' => 'select',
31
+ 'class' => 'wc-enhanced-select',
32
+ 'options' => wp_list_pluck ( $this->get_method_formats (), 'example' ),
33
+ 'value' => '', 'default' => 'type_ending_in',
34
+ 'desc_tip' => true,
35
+ 'description' => __ ( 'This option allows you to customize how the credit card will display for your customers on orders, subscriptions, etc.' )
36
+ ),
37
+ 'charge_type' => array( 'type' => 'select',
38
+ 'title' => __ ( 'Charge Type', 'woo-stripe' ),
39
+ 'default' => 'capture',
40
+ 'class' => 'wc-enhanced-select',
41
+ 'options' => array(
42
+ 'capture' => __ ( 'Capture', 'woo-stripe' ),
43
+ 'authorize' => __ ( 'Authorize', 'woo-stripe' )
44
+ ), 'desc_tip' => true,
45
+ 'description' => __ ( 'This option determines whether the customer\'s funds are captured immediately or authorized and can be captured at a later date.', 'woo-stripe' )
46
+ ),
47
+ 'payment_sections' => array(
48
+ 'type' => 'multiselect',
49
+ 'title' => __ ( 'Payment Sections', 'woo-stripe' ),
50
+ 'class' => 'wc-enhanced-select',
51
+ 'options' => [
52
+ 'product' => __ ( 'Product Page', 'woo-stripe' ),
53
+ 'cart' => __ ( 'Cart Page', 'woo-stripe' ),
54
+ 'checkout_banner' => __ ( 'Top of Checkout', 'woo-stripe' )
55
+ ], 'default' => [ 'product', 'cart'
56
+ ],
57
+ 'description' => __ ( 'Increase your conversion rate by offering Apple Pay on your Product and Cart pages, or at the top of the checkout page.', 'woo-stripe' )
58
+ ),
59
+ /* 'order_prefix' => array( 'type' => 'text',
60
+ 'title' => __ ( 'Order Prefix', 'woo-stripe' ),
61
+ 'value' => '', 'default' => '',
62
+ 'class' => '', 'desc_tip' => true,
63
+ 'description' => __ ( 'The order prefix is prepended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
64
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
65
+ ),
66
+ 'order_suffix' => array( 'type' => 'text',
67
+ 'title' => __ ( 'Order Suffix', 'woo-stripe' ),
68
+ 'value' => '', 'default' => '',
69
+ 'class' => '', 'desc_tip' => true,
70
+ 'description' => __ ( 'The order suffix is appended to the WooCommerce order id and will appear within Braintree as the Order ID. This setting can be helpful if you want to distinguish
71
+ orders that came from this particular site, plugin, or gateway.', 'woo-stripe' )
72
+ ), */
73
+ 'order_status' => array( 'type' => 'select',
74
+ 'title' => __ ( 'Order Status', 'woo-stripe' ),
75
+ 'default' => 'default',
76
+ 'class' => 'wc-enhanced-select',
77
+ 'options' => array_merge ( array(
78
+ 'default' => __ ( 'Default', 'woo-stripe' )
79
+ ), wc_get_order_statuses () ),
80
+ 'tool_tip' => true,
81
+ 'description' => __ ( 'This is the status of the order once payment is complete. If <b>Default</b> is selected, then WooCommerce will set the order status automatically based on internal logic which states if a product is virtual and downloadable then status is set to complete. Products that require shipping are set to Processing. Default is the recommended setting as it allows standard WooCommerce code to process the order status.', 'woo-stripe' )
82
+ ),
83
+ 'button_section' => [ 'type' => 'title',
84
+ 'title' => __ ( 'Button Settings', 'woo-stripe' )
85
+ ],
86
+ 'button_type' => [ 'type' => 'select',
87
+ 'title' => __ ( 'Type', 'woo-stripe' ),
88
+ 'options' => [
89
+ 'default' => __ ( 'default', 'woo-stripe' ),
90
+ // 'donate' => __ ( 'donate', 'woo-stripe' ),
91
+ 'buy' => __ ( 'buy', 'woo-stripe' )
92
+ ], 'default' => 'buy', 'desc_tip' => true,
93
+ 'description' => __ ( 'This defines the type of button that will display.', 'woo-stripe' )
94
+ ],
95
+ 'button_theme' => [ 'type' => 'select',
96
+ 'title' => __ ( 'Theme', 'woo-stripe' ),
97
+ 'options' => [
98
+ 'dark' => __ ( 'dark', 'woo-stripe' ),
99
+ 'light' => __ ( 'light', 'woo-stripe' ),
100
+ 'light-outline' => __ ( 'light-outline', 'woo-stripe' )
101
+ ], 'default' => 'dark', 'desc_tip' => true,
102
+ 'description' => __ ( 'This defines the color scheme for the button.', 'woo-stripe' )
103
+ ],
104
+ 'button_height' => [ 'type' => 'text',
105
+ 'title' => __ ( 'Height', 'woo-stripe' ),
106
+ 'default' => '40', 'desc_tip' => true,
107
+ 'description' => __ ( 'The height of the button. Max height is 64', 'woo-stripe' )
108
+ ]
109
+ );
includes/tokens/class-wc-payment-token-stripe-applepay.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Token_Stripe_CC' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @author PaymentPlugins
8
+ * @package Stripe/Tokens
9
+ *
10
+ */
11
+ class WC_Payment_Token_Stripe_ApplePay extends WC_Payment_Token_Stripe_CC {
12
+
13
+ protected $type = 'Stripe_ApplePay';
14
+
15
+ /**
16
+ *
17
+ * {@inheritDoc}
18
+ *
19
+ * @see WC_Payment_Token_Stripe_CC::details_to_props()
20
+ */
21
+ public function details_to_props($details) {
22
+ parent::details_to_props ( $details );
23
+ }
24
+ }
includes/tokens/class-wc-payment-token-stripe-cc.php ADDED
@@ -0,0 +1,126 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Token_Stripe' )) {
3
+ return;
4
+ }
5
+ /**
6
+ * @sin 3.0.0
7
+ * @author PaymentPlugins
8
+ * @package Stripe/Tokens
9
+ *
10
+ */
11
+ class WC_Payment_Token_Stripe_CC extends WC_Payment_Token_Stripe {
12
+
13
+ protected $type = 'Stripe_CC';
14
+
15
+ protected $stripe_data = array( 'brand' => '',
16
+ 'exp_month' => '', 'exp_year' => '',
17
+ 'last4' => '', 'fingerprint' => '',
18
+ 'masked_number' => ''
19
+ );
20
+
21
+ public function details_to_props($details) {
22
+ if (isset ( $details[ 'card' ] )) {
23
+ $card = $details[ 'card' ];
24
+ }
25
+ if ($details instanceof \Stripe\Card) {
26
+ $card = $details;
27
+ }
28
+ $this->set_brand ( ucfirst ( $card[ 'brand' ] ) );
29
+ $this->set_last4 ( $card[ 'last4' ] );
30
+ $this->set_exp_month ( $card[ 'exp_month' ] );
31
+ $this->set_exp_year ( $card[ 'exp_year' ] );
32
+ $this->set_masked_number ( sprintf ( '********%s', $card[ 'last4' ] ) );
33
+ }
34
+
35
+ public function get_brand($context = 'view') {
36
+ return $this->get_prop ( 'brand', $context );
37
+ }
38
+
39
+ public function set_brand($value) {
40
+ $this->set_prop ( 'brand', $value );
41
+ }
42
+
43
+ public function get_last4($context = 'view') {
44
+ return $this->get_prop ( 'last4', $context );
45
+ }
46
+
47
+ public function get_masked_number($context = 'view') {
48
+ return $this->get_prop ( 'masked_number', $context );
49
+ }
50
+
51
+ public function set_last4($last4) {
52
+ $this->set_prop ( 'last4', $last4 );
53
+ }
54
+
55
+ public function set_masked_number($value) {
56
+ $this->set_prop ( 'masked_number', $value );
57
+ }
58
+
59
+ public function set_fingerprint($value) {
60
+ $this->set_prop ( 'fingerprint', $value );
61
+ }
62
+
63
+ public function get_fingerprint($context = 'view') {
64
+ return $this->get_prop ( 'fingerprint', $context );
65
+ }
66
+
67
+ public function get_exp_year($context = 'view') {
68
+ return $this->get_prop ( 'exp_year', $context );
69
+ }
70
+
71
+ public function set_exp_year($year) {
72
+ $this->set_prop ( 'exp_year', $year );
73
+ }
74
+
75
+ public function get_exp_month($context = 'view') {
76
+ return $this->get_prop ( 'exp_month', $context );
77
+ }
78
+
79
+ public function set_exp_month($month) {
80
+ $this->set_prop ( 'exp_month', str_pad ( $month, 2, '0', STR_PAD_LEFT ) );
81
+ }
82
+
83
+ public function get_html_classes() {
84
+ return sprintf ( '%s', str_replace ( ' ', '', ucfirst ( $this->get_brand () ) ) );
85
+ }
86
+
87
+ public function get_formats() {
88
+ return array(
89
+ 'type_ending_in' => array(
90
+ 'label' => __ ( 'Type Ending In', 'woo-stripe' ),
91
+ 'example' => 'Visa ending in 1111',
92
+ 'format' => __ ( '{brand} ending in {last4}', 'woo-stripe' )
93
+ ),
94
+ 'type_masked_number' => array(
95
+ 'label' => __ ( 'Type Masked Number', 'woo-stripe' ),
96
+ 'example' => 'Visa ********1111',
97
+ 'format' => '{brand} {masked_number}'
98
+ ),
99
+ 'type_dash_masked_number' => array(
100
+ 'label' => __ ( 'Type Dash Masked Number', 'woo-stripe' ),
101
+ 'example' => 'Visa - ********1111',
102
+ 'format' => '{brand} - {masked_number}'
103
+ ),
104
+ 'type_last4' => array(
105
+ 'label' => __ ( 'Type Last 4', 'woo-stripe' ),
106
+ 'example' => 'Visa 1111',
107
+ 'format' => '{brand} {last4}'
108
+ ),
109
+ 'type_dash_last4' => array(
110
+ 'label' => __ ( 'Type Dash & Last 4', 'woo-stripe' ),
111
+ 'example' => 'Visa - 1111',
112
+ 'format' => '{brand} - {last4}'
113
+ ),
114
+ 'last4' => array(
115
+ 'label' => __ ( 'Last Four', 'woo-stripe' ),
116
+ 'example' => '1111',
117
+ 'format' => '{last4}'
118
+ ),
119
+ 'card_type' => array(
120
+ 'label' => __ ( 'Card Type', 'woo-stripe' ),
121
+ 'example' => 'Visa',
122
+ 'format' => '{brand}'
123
+ )
124
+ );
125
+ }
126
+ }
includes/tokens/class-wc-payment-token-stripe-googlepay.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ if (! class_exists ( 'WC_Payment_Token_Stripe_CC' )) {
3
+ return;
4
+ }
5
+ /**
6
+ *
7
+ * @author PaymentPlugins
8
+ * @package Stripe/Tokens
9
+ *
10
+ */
11
+ class WC_Payment_Token_Stripe_GooglePay extends WC_Payment_Token_Stripe_CC {
12
+
13
+ protected $type = 'Stripe_GooglePay';
14
+
15
+ /**
16
+ *
17
+ * {@inheritDoc}
18
+ *
19
+ * @see WC_Payment_Token_Stripe_CC::details_to_props()
20
+ */
21
+ public function details_to_props($details) {
22
+ parent::details_to_props ( $details );
23
+ }
24
+ }
includes/tokens/class-wc-payment-token-stripe-local-payment.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @since 3.0.0
4
+ * @package Stripe/Tokens
5
+ * @author PaymentPlugins
6
+ *
7
+ */
8
+ class WC_Payment_Token_Stripe_Local extends WC_Payment_Token_Stripe {
9
+
10
+ protected $type = 'Stripe_Local';
11
+
12
+ protected $stripe_data = [ 'gateway_title' => ''
13
+ ];
14
+
15
+ public function details_to_props($details) {}
16
+
17
+ public function set_gateway_title($value) {
18
+ $this->set_prop ( 'gateway_title', $value );
19
+ }
20
+
21
+ public function get_gateway_title($context = 'view') {
22
+ return $this->get_prop ( 'gateway_title', $context );
23
+ }
24
+
25
+ public function get_formats() {
26
+ return [
27
+ 'gateway_title' => [
28
+ 'label' => __ ( 'Gateway Title', 'woo-stripe' ),
29
+ 'example' => 'P24',
30
+ 'format' => '{gateway_title}'
31
+ ]
32
+ ];
33
+ }
34
+ }
includes/wc-stripe-functions.php ADDED
@@ -0,0 +1,771 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * @since 3.0.0
5
+ * @package Stripe/Functions
6
+ * Wrapper for wc_get_template that returns Stripe specfic templates.
7
+ * @param string $template_name
8
+ * @param array $args
9
+ */
10
+ function wc_stripe_get_template($template_name, $args = array()) {
11
+ wc_get_template ( $template_name, $args, wc_stripe ()->template_path (), wc_stripe ()->default_template_path () );
12
+ }
13
+
14
+ /**
15
+ *
16
+ *
17
+ * Wrapper for wc_get_template_html that returns Stripe specififc templates in an html string.
18
+ *
19
+ * @package Stripe/Functions
20
+ * @since 3.0.0
21
+ * @param string $template_name
22
+ * @param array $args
23
+ * @return string
24
+ */
25
+ function wc_stripe_get_template_html($template_name, $args = array()) {
26
+ return wc_get_template_html ( $template_name, $args, wc_stripe ()->template_path (), wc_stripe ()->default_template_path () );
27
+ }
28
+
29
+ /**
30
+ * Return true if WCS is active.
31
+ *
32
+ * @package Stripe/Functions
33
+ * @return boolean
34
+ */
35
+ function wcs_stripe_active() {
36
+ return function_exists ( 'wcs_is_subscription' );
37
+ }
38
+
39
+ /**
40
+ *
41
+ * @package Stripe/Functions
42
+ * @param WC_Payment_Gateway_Stripe $gateway
43
+ */
44
+ function wc_stripe_token_field($gateway) {
45
+ wc_stripe_hidden_field ( $gateway->token_key, 'wc-stripe-token-field' );
46
+ }
47
+
48
+ /**
49
+ *
50
+ * @package Stripe/Functions
51
+ * @param WC_Payment_Gateway_Stripe $gateway
52
+ */
53
+ function wc_stripe_payment_intent_field($gateway) {
54
+ wc_stripe_hidden_field ( $gateway->payment_intent_key, 'wc-stripe-payment-intent-field' );
55
+ }
56
+
57
+ /**
58
+ *
59
+ * @package Stripe/Functions
60
+ * @param string $id
61
+ * @param string $class
62
+ * @param string $value
63
+ */
64
+ function wc_stripe_hidden_field($id, $class = '', $value = '') {
65
+ printf ( '<input type="hidden" class="%1$s" id="%2$s" name="%2$s" value="%3$s"/>', $class, $id, $value );
66
+ }
67
+
68
+ /**
69
+ * Return the mode for the plugin.
70
+ *
71
+ * @package Stripe/Functions
72
+ * @return string
73
+ */
74
+ function wc_stripe_mode() {
75
+ return wc_stripe ()->api_settings->get_option ( 'mode' );
76
+ }
77
+
78
+ /**
79
+ * Return the secret key for the provided mode.
80
+ * If no mode given, the key for the active mode is returned.
81
+ *
82
+ * @package Stripe/Functions
83
+ * @since 3.0.0
84
+ * @param string $mode
85
+ */
86
+ function wc_stripe_get_secret_key($mode = '') {
87
+ $mode = empty ( $mode ) ? wc_stripe_mode () : $mode;
88
+ return wc_stripe ()->api_settings->get_option ( "secret_key_{$mode}" );
89
+ }
90
+
91
+ /**
92
+ * Return the publishable key for the provided mode.
93
+ * If no mode given, the key for the active mode is returned.
94
+ *
95
+ * @package Stripe/Functions
96
+ * @since 3.0.0
97
+ * @param string $mode
98
+ */
99
+ function wc_stripe_get_publishable_key($mode = '') {
100
+ $mode = empty ( $mode ) ? wc_stripe_mode () : $mode;
101
+ return wc_stripe ()->api_settings->get_option ( "publishable_key_{$mode}" );
102
+ }
103
+
104
+ /**
105
+ * Return the stripe customer ID
106
+ *
107
+ * @package Stripe/Functions
108
+ * @since 3.0.0
109
+ * @param int $user_id
110
+ * @param string $mode
111
+ */
112
+ function wc_stripe_get_customer_id($user_id = '', $mode = '') {
113
+ $mode = empty ( $mode ) ? wc_stripe_mode () : $mode;
114
+ if ($user_id === 0) {
115
+ return '';
116
+ }
117
+ if (empty ( $user_id )) {
118
+ $user_id = get_current_user_id ();
119
+ }
120
+ return get_user_meta ( $user_id, "wc_stripe_customer_{$mode}", true );
121
+ }
122
+
123
+ /**
124
+ *
125
+ * @package Stripe/Functions
126
+ * @param string $customer_id
127
+ * @param int $user_id
128
+ * @param string $mode
129
+ */
130
+ function wc_stripe_save_customer($customer_id, $user_id, $mode = '') {
131
+ $mode = empty ( $mode ) ? wc_stripe_mode () : $mode;
132
+ $key = "wc_stripe_customer_{$mode}";
133
+ update_user_meta ( $user_id, $key, $customer_id );
134
+ }
135
+
136
+ /**
137
+ *
138
+ * @since 3.0.0
139
+ * @package Stripe/Functions
140
+ * @param int $token_id
141
+ * @param WC_Payment_Token $token
142
+ */
143
+ function wc_stripe_woocommerce_payment_token_deleted($token_id, $token) {
144
+ if (! did_action ( 'woocommerce_payment_gateways' )) {
145
+ WC_Payment_Gateways::instance ();
146
+ }
147
+ do_action ( 'wc_stripe_payment_token_deleted_' . $token->get_gateway_id (), $token_id, $token );
148
+ }
149
+
150
+ /**
151
+ * Log the provided message in the WC logs directory.
152
+ *
153
+ * @since 3.0.0
154
+ * @package Stripe/Functions
155
+ * @param int $level
156
+ * @param string $message
157
+ */
158
+ function wc_stripe_log($level, $message) {
159
+ if (wc_stripe ()->api_settings->is_active ( 'debug_log' )) {
160
+ $log = wc_get_logger ();
161
+ $log->log ( $level, $message, array(
162
+ 'source' => 'wc-stripe'
163
+ ) );
164
+ }
165
+ }
166
+
167
+ /**
168
+ *
169
+ * @since 3.0.0
170
+ * @package Stripe/Functions
171
+ * @param string $message
172
+ */
173
+ function wc_stripe_log_error($message) {
174
+ wc_stripe_log ( WC_Log_Levels::ERROR, $message );
175
+ }
176
+
177
+ /**
178
+ *
179
+ * @since 3.0.0
180
+ * @package Stripe/Functions
181
+ * @param string $message
182
+ */
183
+ function wc_stripe_log_info($message) {
184
+ wc_stripe_log ( WC_Log_Levels::INFO, $message );
185
+ }
186
+
187
+ /**
188
+ * Return the mode that the order was created in.
189
+ * Values can be <strong>live</strong> or <strong>test</strong>
190
+ *
191
+ * @since 3.0.0
192
+ * @package Stripe/Functions
193
+ * @param WC_Order $order
194
+ */
195
+ function wc_stripe_order_mode($order) {
196
+ return $order->get_meta ( '_wc_stripe_mode', true );
197
+ }
198
+
199
+ /**
200
+ *
201
+ * @since 3.0.0
202
+ * @package Stripe\Functions
203
+ * @param array $gateways
204
+ */
205
+ function wc_stripe_payment_gateways($gateways) {
206
+ return array_merge ( $gateways, wc_stripe ()->payment_gateways () );
207
+ }
208
+
209
+ /**
210
+ * Cancel the Stripe charge
211
+ *
212
+ * @package Stripe/Functions
213
+ * @param int $order_id
214
+ * @param WC_Order $order
215
+ */
216
+ function wc_stripe_order_cancelled($order_id, $order) {
217
+ /**
218
+ *
219
+ * @var WC_Payment_Gateway_Stripe $gateway
220
+ */
221
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $order->get_payment_method () ];
222
+ $gateway->void_charge ( $order );
223
+ }
224
+
225
+ /**
226
+ *
227
+ * @package Stripe/Functions
228
+ * @param int $order_id
229
+ * @param WC_Order $order
230
+ */
231
+ function wc_stripe_order_status_completed($order_id, $order) {
232
+ /**
233
+ *
234
+ * @var WC_Payment_Gateway_Stripe $gateway
235
+ */
236
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $order->get_payment_method () ];
237
+ if (! $gateway->processing_payment) {
238
+ $gateway->capture_charge ( $order->get_total (), $order );
239
+ }
240
+ }
241
+
242
+ /**
243
+ *
244
+ * @since 3.0.0
245
+ * @package Stripe/Functions
246
+ * @param [] $address
247
+ * @throws Exception
248
+ */
249
+ function wc_stripe_update_customer_location($address) {
250
+ // address validation for countries other than US is problematic when using responses from payment sources like Apple Pay.
251
+ if ($address[ 'postcode' ] && $address[ 'country' ] === 'US' && ! WC_Validation::is_postcode ( $address[ 'postcode' ], $address[ 'country' ] )) {
252
+ throw new Exception ( __ ( 'Please enter a valid postcode / ZIP.', 'woocommerce' ) );
253
+ } elseif ($address[ 'postcode' ]) {
254
+ $address[ 'postcode' ] = wc_format_postcode ( $address[ 'postcode' ], $address[ 'country' ] );
255
+ }
256
+
257
+ if ($address[ 'country' ]) {
258
+ WC ()->customer->set_billing_location ( $address[ 'country' ], $address[ 'state' ], $address[ 'postcode' ], $address[ 'city' ] );
259
+ WC ()->customer->set_shipping_location ( $address[ 'country' ], $address[ 'state' ], $address[ 'postcode' ], $address[ 'city' ] );
260
+ // set the customer's address if it's in the $address array
261
+ if (! empty ( $address[ 'address_1' ] )) {
262
+ WC ()->customer->set_shipping_address_1 ( wc_clean ( $address[ 'address_1' ] ) );
263
+ }
264
+ if (! empty ( $address[ 'address_2' ] )) {
265
+ WC ()->customer->set_shipping_address_2 ( wc_clean ( $address[ 'address_2' ] ) );
266
+ }
267
+ if (! empty ( $address[ 'first_name' ] )) {
268
+ WC ()->customer->set_shipping_first_name ( $address[ 'first_name' ] );
269
+ }
270
+ if (! empty ( $address[ 'last_name' ] )) {
271
+ WC ()->customer->set_shipping_last_name ( $address[ 'last_name' ] );
272
+ }
273
+ } else {
274
+ WC ()->customer->set_billing_address_to_base ();
275
+ WC ()->customer->set_shipping_address_to_base ();
276
+ }
277
+
278
+ WC ()->customer->set_calculated_shipping ( true );
279
+ WC ()->customer->save ();
280
+
281
+ do_action ( 'woocommerce_calculated_shipping' );
282
+ }
283
+
284
+ /**
285
+ *
286
+ * @since 3.0.0
287
+ * @package Stripe/Functions
288
+ * @param [] $methods
289
+ */
290
+ function wc_stripe_update_shipping_methods($methods) {
291
+ $chosen_shipping_methods = WC ()->session->get ( 'chosen_shipping_methods', [] );
292
+
293
+ foreach ( $methods as $i => $method ) {
294
+ $chosen_shipping_methods[ $i ] = $method;
295
+ }
296
+
297
+ WC ()->session->set ( 'chosen_shipping_methods', $chosen_shipping_methods );
298
+ }
299
+
300
+ /**
301
+ * Return true if there are shipping packages that contain rates.
302
+ *
303
+ * @since 3.0.0
304
+ * @package Stripe/Functions
305
+ * @return boolean
306
+ */
307
+ function wc_stripe_shipping_address_serviceable() {
308
+ $packages = WC ()->shipping ()->get_packages ();
309
+ if ($packages) {
310
+ foreach ( $packages as $package ) {
311
+ if (count ( $package[ 'rates' ] ) > 0) {
312
+ return true;
313
+ }
314
+ }
315
+ }
316
+ return false;
317
+ }
318
+
319
+ /**
320
+ *
321
+ * @package Stripe/Functions
322
+ * @param bool $encode
323
+ * @param WC_Order $order
324
+ * @since 3.0.0
325
+ */
326
+ function wc_stripe_get_display_items($encode = false, $order = null) {
327
+ $items = [];
328
+ if (! $order) {
329
+ foreach ( WC ()->cart->get_cart () as $cart_item ) {
330
+ /**
331
+ *
332
+ * @var WC_Product $product
333
+ */
334
+ $product = $cart_item[ 'data' ];
335
+ $qty = $cart_item[ 'quantity' ];
336
+ $items[] = [
337
+ 'label' => $qty > 1 ? sprintf ( '%s X %s', $product->get_name (), $qty ) : $product->get_name (),
338
+ 'pending' => false,
339
+ 'amount' => wc_stripe_add_number_precision ( $product->get_price () * $qty )
340
+ ];
341
+ }
342
+ if (WC ()->cart->needs_shipping ()) {
343
+ $items[] = [
344
+ 'label' => __ ( 'Shipping', 'woo-stripe' ),
345
+ 'pending' => false,
346
+ 'amount' => wc_stripe_add_number_precision ( WC ()->cart->shipping_total )
347
+ ];
348
+ }
349
+ if (wc_tax_enabled ()) {
350
+ $items[] = [
351
+ 'label' => __ ( 'Tax', 'woo-stripe' ),
352
+ 'pending' => false,
353
+ 'amount' => wc_stripe_add_number_precision ( WC ()->cart->get_taxes_total () )
354
+ ];
355
+ }
356
+ } else {
357
+ $items[] = [
358
+ 'label' => __ ( 'Subscription', 'woo-stripe' ),
359
+ 'pending' => false,
360
+ 'amount' => wc_stripe_add_number_precision ( $order->get_total () )
361
+ ];
362
+ }
363
+ $items = apply_filters ( 'wc_stripe_get_display_items', $items, $order );
364
+ return $encode ? htmlspecialchars ( wp_json_encode ( $items ) ) : $items;
365
+ }
366
+
367
+ /**
368
+ *
369
+ * @since 3.0.0
370
+ * @package Stripe/Functions
371
+ * @param bool $encode
372
+ * @param WC_Order $order
373
+ * @return mixed
374
+ */
375
+ function wc_stripe_get_shipping_options($encode = false, $order = null) {
376
+ $methods = [];
377
+ if (! $order) {
378
+ $ids = [];
379
+ $chosen_shipping_methods = WC ()->session->get ( 'chosen_shipping_methods', [] );
380
+ $packages = WC ()->shipping ()->get_packages ();
381
+ foreach ( $packages as $i => $package ) {
382
+ foreach ( $package[ 'rates' ] as $rate ) {
383
+ /**
384
+ *
385
+ * @var WC_Shipping_Rate $rate
386
+ */
387
+ $methods[] = [
388
+ 'id' => sprintf ( '%s:%s', $i, $rate->id ),
389
+ 'label' => sprintf ( '%s', esc_attr ( $rate->get_label () ) ),
390
+ 'detail' => '',
391
+ 'amount' => wc_stripe_add_number_precision ( $rate->cost )
392
+ ];
393
+ $ids[] = $rate->id;
394
+ }
395
+ // Stripe always shows the first shipping option as selected. Make sure the chosen method
396
+ // is first in the array.
397
+ if (isset ( $chosen_shipping_methods[ $i ] )) {
398
+ $index = array_search ( $chosen_shipping_methods[ $i ], $ids );
399
+ if ($index != 0) {
400
+ $temp = $methods[ 0 ];
401
+ $methods[ 0 ] = $methods[ $index ];
402
+ $methods[ $index ] = $temp;
403
+ }
404
+ }
405
+ }
406
+ if (empty ( $methods )) {
407
+ // GPay does not like empty shipping methods. Make a temporary one;
408
+ $methods[] = [ 'id' => 'default',
409
+ 'label' => __ ( 'Waiting...', 'woo-stripe' ),
410
+ 'detail' => __ ( 'loading shipping methods...', 'woo-stripe' ),
411
+ 'amount' => 0
412
+ ];
413
+ }
414
+ }
415
+ $methods = apply_filters ( 'wc_stripe_get_shipping_options', $methods, $order );
416
+ return $encode ? htmlspecialchars ( wp_json_encode ( $methods ) ) : $methods;
417
+ }
418
+
419
+ /**
420
+ *
421
+ * @since 3.0.0
422
+ * @package Stripe/Functions
423
+ */
424
+ function wc_stripe_set_checkout_error() {
425
+ add_action ( 'woocommerce_after_template_part', 'wc_stripe_output_checkout_error' );
426
+ }
427
+
428
+ /**
429
+ *
430
+ * @since 3.0.0
431
+ * @package Stripe/Functions
432
+ * @param string $template_name
433
+ */
434
+ function wc_stripe_output_checkout_error($template_name) {
435
+ if ($template_name === 'notices/error.php' && is_ajax ()) {
436
+ echo '<input type="hidden" id="wc_stripe_checkout_error" value="true"/>';
437
+ remove_action ( 'woocommerce_after_template_part', 'wc_braintree_output_checkout_error' );
438
+ add_filter ( 'wp_kses_allowed_html', 'wc_stripe_add_allowed_html', 10, 2 );
439
+ }
440
+ }
441
+
442
+ /**
443
+ *
444
+ * @since 3.0.0
445
+ * @package Stripe/Functions
446
+ */
447
+ function wc_stripe_add_allowed_html($tags, $context) {
448
+ if ($context === 'post') {
449
+ $tags[ 'input' ] = array( 'id' => true,
450
+ 'type' => true, 'value' => true
451
+ );
452
+ }
453
+ return $tags;
454
+ }
455
+
456
+ /**
457
+ * Save WCS meta data when it's changed in the admin section.
458
+ * By default WCS saves the
459
+ * payment method title as the gateway title. This method saves the payment method title in
460
+ * a human readable format suitable for the frontend.
461
+ *
462
+ * @package Stripe/Functions
463
+ * @param int $post_id
464
+ * @param WP_Post $post
465
+ */
466
+ function wc_stripe_process_shop_subscription_meta($post_id, $post) {
467
+ $subscription = wcs_get_subscription ( $post_id );
468
+ $gateway_id = $subscription->get_payment_method ();
469
+ $gateways = WC ()->payment_gateways ()->payment_gateways ();
470
+ if (isset ( $gateways[ $gateway_id ] )) {
471
+ $gateway = $gateways[ $gateway_id ];
472
+ if ($gateway instanceof WC_Payment_Gateway_Stripe) {
473
+ $token = $gateway->get_token ( $subscription->get_meta ( '_payment_method_token' ), $subscription->get_customer_id () );
474
+ if ($token) {
475
+ $subscription->set_payment_method_title ( $token->get_payment_method_title () );
476
+ $subscription->save ();
477
+ }
478
+ }
479
+ }
480
+ }
481
+
482
+ /**
483
+ * Filter the WC payment gateways based on criteria specific to Stripe functionality.
484
+ *
485
+ * <strong>Example:</strong> on add payment method page, only show the CC gateway for Stripe.
486
+ *
487
+ * @since 3.0.0
488
+ * @package Stripe/Functions
489
+ * @param WC_Payment_Gateway[] $gateways
490
+ */
491
+ function wc_stripe_available_payment_gateways($gateways) {
492
+ global $wp;
493
+ if (is_add_payment_method_page () && ! isset ( $wp->query_vars[ 'payment-methods' ] )) {
494
+ foreach ( $gateways as $gateway ) {
495
+ if ($gateway instanceof WC_Payment_Gateway_Stripe) {
496
+ if ('stripe_cc' !== $gateway->id) {
497
+ unset ( $gateways[ $gateway->id ] );
498
+ }
499
+ }
500
+ }
501
+ }
502
+ return $gateways;
503
+ }
504
+
505
+ /**
506
+ *
507
+ * @since 3.0.0
508
+ * @package Stripe/Functions
509
+ * @return array
510
+ */
511
+ function wc_stripe_get_local_payment_params() {
512
+ $data = [];
513
+ $gateways = WC ()->payment_gateways ()->payment_gateways ();
514
+ foreach ( $gateways as $gateway ) {
515
+ if ($gateway instanceof WC_Payment_Gateway_Stripe_Local_Payment) {
516
+ $data[ 'gateways' ][ $gateway->id ] = $gateway->get_localized_params ();
517
+ }
518
+ }
519
+ $data[ 'api_key' ] = wc_stripe_get_publishable_key ();
520
+ return $data;
521
+ }
522
+
523
+ /**
524
+ *
525
+ * @package Stripe/Functions
526
+ * @since 3.0.0
527
+ * @param array $gateways
528
+ * @return WC_Payment_Gateway[]
529
+ */
530
+ function wc_stripe_get_available_local_gateways($gateways) {
531
+ foreach ( $gateways as $gateway ) {
532
+ if ($gateway instanceof WC_Payment_Gateway_Stripe_Local_Payment) {
533
+ if (! $gateway->is_local_payment_available ()) {
534
+ unset ( $gateways[ $gateway->id ] );
535
+ }
536
+ }
537
+ }
538
+ return $gateways;
539
+ }
540
+
541
+ /**
542
+ *
543
+ * @since 3.0.0
544
+ * @package Stripe/Functions
545
+ * @param string|int $key
546
+ */
547
+ function wc_stripe_set_idempotency_key($key) {
548
+ global $wc_stripe_idempotency_key;
549
+ $wc_stripe_idempotency_key = $key;
550
+ }
551
+
552
+ /**
553
+ *
554
+ * @since 3.0.0
555
+ * @package Stripe/Functions
556
+ * @return mixed
557
+ */
558
+ function wc_stripe_get_idempotency_key() {
559
+ global $wc_stripe_idempotency_key;
560
+ return $wc_stripe_idempotency_key;
561
+ }
562
+
563
+ /**
564
+ *
565
+ * @since 3.0.0
566
+ * @package Stripe/Functions
567
+ * @param array $options
568
+ * @return array
569
+ */
570
+ function wc_stripe_api_options($options) {
571
+ $key = wc_stripe_get_idempotency_key ();
572
+ if ($key) {
573
+ $options[ 'idempotency_key' ] = $key;
574
+ }
575
+ return $options;
576
+ }
577
+
578
+ /**
579
+ *
580
+ * @since 3.0.0
581
+ * @package Stripe/Functions
582
+ * @param string $order_status
583
+ * @param int $order_id
584
+ * @param WC_Order $order
585
+ */
586
+ function wc_stripe_payment_complete_order_status($order_status, $order_id, $order) {
587
+ if (is_checkout ()) {
588
+ /**
589
+ *
590
+ * @var WC_Payment_Gateway_Stripe $gateway
591
+ */
592
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $order->get_payment_method () ];
593
+ if ('default' !== $gateway->get_option ( 'order_status' )) {
594
+ $order_status = $gateway->get_option ( 'order_status' );
595
+ }
596
+ }
597
+ return $order_status;
598
+ }
599
+
600
+ /**
601
+ * Wrapper for wc_stripe_add_number_precision if WC 3.2 or greater.If function doesn't exist, then
602
+ * plugin does rounding.
603
+ *
604
+ * @since 3.0.0
605
+ * @package Stripe/Functions
606
+ * @param float $value
607
+ * @param string $round
608
+ * @return number
609
+ */
610
+ function wc_stripe_add_number_precision($value, $round = true) {
611
+ if (function_exists ( 'wc_add_number_precision' )) {
612
+ return wc_add_number_precision ( $value, $round );
613
+ } else {
614
+ $cent_precision = pow ( 10, wc_get_price_decimals () );
615
+ $value = $value * $cent_precision;
616
+ return $round ? round ( $value, wc_get_rounding_precision () - wc_get_price_decimals () ) : $value;
617
+ }
618
+ }
619
+
620
+ /**
621
+ * Return an array of credit card forms.
622
+ *
623
+ * @since 3.0.0
624
+ * @package Stripe/Functions
625
+ * @return mixed
626
+ */
627
+ function wc_stripe_get_custom_forms() {
628
+ return apply_filters ( 'wc_stripe_get_custom_forms', [
629
+ 'simple' => [
630
+ 'template' => 'cc-forms/simple.php',
631
+ 'label' => __ ( 'Simple form', 'woo-stripe' ),
632
+ 'cardBrand' => wc_stripe ()->assets_url ( 'img/card_brand2.svg' ),
633
+ 'elementStyles' => [
634
+ 'base' => [
635
+ 'color' => '#32325D',
636
+ 'fontWeight' => 500,
637
+ 'fontFamily' => 'Source Code Pro, Consolas, Menlo, monospace',
638
+ 'fontSize' => '16px',
639
+ 'fontSmoothing' => 'antialiased',
640
+ '::placeholder' => [
641
+ 'color' => '#CFD7DF'
642
+ ],
643
+ ':-webkit-autofill' => [
644
+ 'color' => '#e39f48'
645
+ ]
646
+ ],
647
+ 'invalid' => [
648
+ 'color' => '#E25950',
649
+ '::placeholder' => [
650
+ 'color' => '#FFCCA5'
651
+ ]
652
+ ]
653
+ ],
654
+ 'elementOptions' => [
655
+ 'fonts' => [
656
+ [
657
+ 'cssSrc' => 'https://fonts.googleapis.com/css?family=Source+Code+Pro'
658
+ ]
659
+ ]
660
+ ]
661
+ ],
662
+ 'inline' => [
663
+ 'template' => 'cc-forms/inline.php',
664
+ 'label' => __ ( 'Inline Form', 'woo-stripe' ),
665
+ 'cardBrand' => wc_stripe ()->assets_url ( 'img/card_brand.svg' ),
666
+ 'elementStyles' => [
667
+ 'base' => [
668
+ 'color' => '#fff',
669
+ 'fontWeight' => 600,
670
+ 'fontFamily' => 'Roboto, Open Sans, Segoe UI, sans-serif',
671
+ 'fontSize' => '16px',
672
+ 'fontSmoothing' => 'antialiased',
673
+ ':focus' => [
674
+ 'color' => '#fff'
675
+ ],
676
+ '::placeholder' => [
677
+ 'color' => '#87BBFD'
678
+ ],
679
+ ':focus::placeholder' => [
680
+ 'color' => '#CFD7DF'
681
+ ],
682
+ ':-webkit-autofill' => [
683
+ 'color' => '#fce883'
684
+ ]
685
+ ],
686
+ 'invalid' => [
687
+ 'color' => '#ffc7ee'
688
+ ]
689
+ ],
690
+ 'elementOptions' => [
691
+ 'fonts' => [
692
+ [
693
+ 'cssSrc' => 'https://fonts.googleapis.com/css?family=Roboto'
694
+ ]
695
+ ]
696
+ ]
697
+ ],
698
+ 'rounded' => [
699
+ 'template' => 'cc-forms/round.php',
700
+ 'label' => __ ( 'Rounded Form', 'woo-stripe' ),
701
+ 'cardBrand' => wc_stripe ()->assets_url ( 'img/card_brand.svg' ),
702
+ 'elementStyles' => [
703
+ 'base' => [
704
+ 'color' => '#fff',
705
+ 'fontWeight' => 600,
706
+ 'fontFamily' => 'Quicksand, Open Sans, Segoe UI, sans-serif',
707
+ 'fontSize' => '16px',
708
+ 'fontSmoothing' => 'antialiased',
709
+ ':focus' => [
710
+ 'color' => '#424770'
711
+ ],
712
+ '::placeholder' => [
713
+ 'color' => '#9BACC8'
714
+ ],
715
+ ':focus::placeholder' => [
716
+ 'color' => '#CFD7DF'
717
+ ],
718
+ ':-webkit-autofill' => [
719
+ 'color' => '#e39f48'
720
+ ]
721
+ ],
722
+ 'invalid' => [
723
+ 'color' => '#fff',
724
+ ':focus' => [
725
+ 'color' => '#FA755A'
726
+ ],
727
+ '::placeholder' => [
728
+ 'color' => '#FFCCA5'
729
+ ]
730
+ ]
731
+ ],
732
+ 'elementOptions' => [
733
+ 'fonts' => [
734
+ [
735
+ 'cssSrc' => 'https://fonts.googleapis.com/css?family=Quicksand'
736
+ ]
737
+ ]
738
+ ]
739
+ ]
740
+ ] );
741
+ }
742
+
743
+ /**
744
+ *
745
+ * @package Stripe/Functions
746
+ * @since 3.0.0
747
+ * @param WC_Order $order
748
+ */
749
+ function wc_stripe_order_has_shipping_address($order) {
750
+ if (method_exists ( $order, 'has_shipping_address' )) {
751
+ return $order->has_shipping_address ();
752
+ } else {
753
+ return $order->get_shipping_address_1 () || $order->get_shipping_address_2 ();
754
+ }
755
+ }
756
+
757
+ /**
758
+ *
759
+ * @since 3.0.0
760
+ * @package Stripe/Functions
761
+ */
762
+ function wc_stripe_display_prices_including_tax() {
763
+ $cart = WC ()->cart;
764
+ if (method_exists ( $cart, 'display_prices_including_tax' )) {
765
+ return $cart->display_prices_including_tax ();
766
+ } else {
767
+ $customer = WC ()->customer;
768
+ $customer_exempt = $customer && $customer->get_is_vat_exempt ();
769
+ 'incl' === $cart->tax_display_cart && ! $customer_exempt;
770
+ }
771
+ }
includes/wc-stripe-hooks.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Actions
4
+ */
5
+ add_action ( 'woocommerce_payment_token_deleted', 'wc_stripe_woocommerce_payment_token_deleted', 10, 2 );
6
+ add_action ( 'woocommerce_order_status_cancelled', 'wc_stripe_order_cancelled', 10, 2 );
7
+ add_action ( 'woocommerce_order_status_completed', 'wc_stripe_order_status_completed', 10, 2 );
8
+ /**
9
+ * * Webhook Actions ***
10
+ */
11
+ add_action ( 'wc_stripe_webhook_source_chargeable', 'wc_stripe_process_source_chargeable', 10, 2 );
12
+
13
+ /**
14
+ * Filters
15
+ */
16
+ add_filter ( 'wc_stripe_api_options', 'wc_stripe_api_options' );
17
+ add_filter ( 'woocommerce_payment_gateways', 'wc_stripe_payment_gateways' );
18
+ add_filter ( 'woocommerce_available_payment_gateways', 'wc_stripe_available_payment_gateways' );
19
+ add_action ( 'woocommerce_process_shop_subscription_meta', 'wc_stripe_process_shop_subscription_meta', 10, 2 );
20
+ add_filter ( 'woocommerce_available_payment_gateways', 'wc_stripe_get_available_local_gateways' );
21
+ add_filter ( 'woocommerce_payment_complete_order_status', 'wc_stripe_payment_complete_order_status', 10, 3 );
includes/wc-stripe-webhook-functions.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Processes the charge via webhooks for local payment methods like iDEAL, EPS, etc.
5
+ * @version 3.0.0
6
+ * @package Stripe/Functions
7
+ *
8
+ * @param \Stripe\Source $source
9
+ * @param WP_REST_Request $request
10
+ */
11
+ function wc_stripe_process_source_chargeable($source, $request) {
12
+ // first retrieve the order_id using the source ID.
13
+ global $wpdb;
14
+
15
+ $order_id = $wpdb->get_var ( $wpdb->prepare ( "SELECT ID FROM {$wpdb->posts} AS posts LEFT JOIN {$wpdb->postmeta} AS meta ON posts.ID = meta.post_id WHERE meta.meta_key = %s AND meta.meta_value = %s LIMIT 1", '_stripe_source_id', $source->id ) );
16
+ if (! $order_id) {
17
+ wc_stripe_log_error ( sprintf ( 'Could not create a charge for source %s. No order ID was found in your Wordpress database.' ), $source->id );
18
+ return;
19
+ }
20
+ // get the gateway
21
+ $order = wc_get_order ( $order_id );
22
+
23
+ // if the order has a transaction ID, then a charge has already been created.
24
+ if (( $transaction_id = $order->get_transaction_id () )) {
25
+ wc_stripe_log_info ( sprintf ( 'source.chargeable event received. Charge has already been created for order %s. Event exited.', $order_id ) );
26
+ return;
27
+ }
28
+ $payment_method = $order->get_payment_method ();
29
+
30
+ /**
31
+ *
32
+ * @var WC_Payment_Gateway_Stripe $gateway
33
+ */
34
+ $gateway = WC ()->payment_gateways ()->payment_gateways ()[ $payment_method ];
35
+
36
+ $gateway->set_payment_method_token ( $source->id );
37
+
38
+ // only process webhook charges for local payment methods.
39
+ if ($gateway instanceof WC_Payment_Gateway_Stripe_Local_Payment) {
40
+ $gateway->processing_payment = true;
41
+
42
+ // if the payment fails, then should rety be performed?
43
+ $gateway->process_payment ( $order_id );
44
+ }
45
+ }
readme.txt ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ === Stripe For WooCommerce ===
2
+ Contributors: mr.clayton
3
+ Tags: stripe, credit cards, apple pay, google pay, ideal, sepa, sofort
4
+ Requires at least: 3.0.1
5
+ Tested up to: 5.2.2
6
+ Requires PHP: 5.4
7
+ Stable tag: 3.0.0
8
+ Copyright: Payment Plugins
9
+ License: GPLv2 or later
10
+ License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
+
12
+ == Description ==
13
+ Accept Credit Cards, Google Pay, ApplePay, P24, iDEAL and more all in one plugin for free!
14
+
15
+ = Boost conversion by offering product and cart page checkout =
16
+ Stripe for WooCommerce is made to supercharge your conversion rate by decreasing payment friction for your customer.
17
+ Offer Google Pay, Apple Pay, and Stripe's Browser payment methods on product pages, cart pages, and at the top of your checkout page.
18
+
19
+ = Visit our demo site to see all the payment methods in action =
20
+ [Demo Site](https://demos.paymentplugins.com/wc-stripe/product/pullover/)
21
+
22
+ To see Apple Pay, visit the site using an iOS device. Google Pay will display for supported browsers like Chrome.
23
+
24
+ = Features =
25
+ - Credit Cards
26
+ - Google Pay
27
+ - Apple Pay
28
+ - 3DS 2.0
29
+ - WooCommerce Subscriptions
30
+
31
+ == Frequently Asked Questions ==
32
+ = How do I test this plugin? =
33
+ You can enable the plugin's test mode, which allows you to simulate transactions.
34
+
35
+ = Does your plugin support WooCommerce Subscriptions? =
36
+ Yes, the plugin supports all functionality related to WooCommerce Subscriptions.
37
+
38
+ = Where is your documentation? =
39
+ https://docs.paymentplugins.com/wc-stripe/config/#/
40
+
41
+ = Why isn't the Payment Request button showing on my local machine? =
42
+ If you're site is not loading over https, then Stripe won't render the Payment Request button. Make sure you are using https.
43
+
44
+ == Screenshots ==
45
+ 1. Let customers pay directly from product pages
46
+ 2. Apple pay on the cart page
47
+ 3. Custom credit card forms
48
+ 4. Local payment methods liek iDEAL and P24
49
+ 5. Configuration pages
50
+
51
+ == Changelog ==
52
+ 3.0.0 - First commit
53
+
54
+ == Upgrade Notice ==
55
+ = 3.0.0 =
stripe-payments.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * Plugin Name: Stripe For WooCommerce
5
+ * Plugin URI: https://docs.paymentplugins.com/wc-stripe/config/
6
+ * Description: Accept credit cards, Google Pay, & Apple Pay using Stripe.
7
+ * Version: 3.0.0
8
+ * Author: Payment Plugins, support@paymentplugins.com
9
+ * Text Domain: woo-stripe
10
+ * Domain Path: /i18n/languages/
11
+ * Tested up to: 5.2
12
+ * WC requires at least: 3.0.0
13
+ * WC tested up to: 3.7.0
14
+ */
15
+ function wc_stripe_php_version_notice() {
16
+ $message = sprintf ( __ ( 'Your PHP version is %s but Stripe requires version 5.4+.', 'woo-stripe' ), PHP_VERSION );
17
+ echo '<div class="notice notice-error"><p style="font-size: 16px">' . $message . '</p></div>';
18
+ }
19
+
20
+ if (version_compare ( PHP_VERSION, '5.4', '<' )) {
21
+ add_action ( 'admin_init', 'wc_stripe_php_version_notice' );
22
+ return;
23
+ }
24
+
25
+ define ( 'WC_STRIPE_PLUGIN_PATH', plugin_dir_path ( __FILE__ ) );
26
+ define ( 'WC_STRIPE_ASSETS', plugin_dir_url ( __FILE__ ) . 'assets/' );
27
+ define ( 'WC_STRIPE_PLUGIN_NAME', plugin_basename ( __FILE__ ) );
28
+ define ( 'WC_STRIPE_CLASS_VERSION', '6.40.0' );
29
+ // include main plugin file.
30
+ require_once ( WC_STRIPE_PLUGIN_PATH . 'includes/class-stripe.php' );
31
+ // load Stripe classes
32
+ require_once ( WC_STRIPE_PLUGIN_PATH . 'stripe-php-' . WC_STRIPE_CLASS_VERSION . '/init.php' );
stripe-php-6.40.0/.gitignore ADDED
@@ -0,0 +1,17 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Mac OS X dumps these all over the place.
2
+ .DS_Store
3
+
4
+ # Ignore the SimpleTest library if it is installed to /test/.
5
+ /test/simpletest/
6
+
7
+ # Ignore the /vendor/ directory for people using composer
8
+ /vendor/
9
+
10
+ # If the vendor directory isn't being commited the composer.lock file should also be ignored
11
+ composer.lock
12
+
13
+ # Ignore PHPUnit coverage file
14
+ clover.xml
15
+
16
+ # Ignore IDE's configuration files
17
+ .idea
stripe-php-6.40.0/CHANGELOG.md ADDED
@@ -0,0 +1,715 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Changelog
2
+
3
+ ## 6.40.0 - 2019-06-27
4
+ * [#675](https://github.com/stripe/stripe-php/pull/675) Add support for `SetupIntent` resource and APIs
5
+
6
+ ## 6.39.2 - 2019-06-26
7
+ * [#676](https://github.com/stripe/stripe-php/pull/676) Fix exception message in `CustomerBalanceTransaction::update()`
8
+
9
+ ## 6.39.1 - 2019-06-25
10
+ * [#674](https://github.com/stripe/stripe-php/pull/674) Add new constants for `collection_method` on `Invoice`
11
+
12
+ ## 6.39.0 - 2019-06-24
13
+ * [#673](https://github.com/stripe/stripe-php/pull/673) Enable request latency telemetry by default
14
+
15
+ ## 6.38.0 - 2019-06-17
16
+ * [#649](https://github.com/stripe/stripe-php/pull/649) Add support for `CustomerBalanceTransaction` resource and APIs
17
+
18
+ ## 6.37.2 - 2019-06-17
19
+ * [#671](https://github.com/stripe/stripe-php/pull/671) Add new PHPDoc
20
+ * [#672](https://github.com/stripe/stripe-php/pull/672) Add constants for `submit_type` on Checkout `Session`
21
+
22
+ ## 6.37.1 - 2019-06-14
23
+ * [#670](https://github.com/stripe/stripe-php/pull/670) Add new PHPDoc
24
+
25
+ ## 6.37.0 - 2019-05-23
26
+ * [#663](https://github.com/stripe/stripe-php/pull/663) Add support for `radar.early_fraud_warning` resource
27
+
28
+ ## 6.36.0 - 2019-05-22
29
+ * [#661](https://github.com/stripe/stripe-php/pull/661) Add constants for new TaxId types
30
+ * [#662](https://github.com/stripe/stripe-php/pull/662) Add constants for BalanceTransaction types
31
+
32
+ ## 6.35.2 - 2019-05-20
33
+ * [#655](https://github.com/stripe/stripe-php/pull/655) Add constants for payment intent statuses
34
+ * [#659](https://github.com/stripe/stripe-php/pull/659) Fix PHPDoc for various nested Account actions
35
+ * [#660](https://github.com/stripe/stripe-php/pull/660) Fix various PHPDoc
36
+
37
+ ## 6.35.1 - 2019-05-20
38
+ * [#658](https://github.com/stripe/stripe-php/pull/658) Use absolute value when checking timestamp tolerance
39
+
40
+ ## 6.35.0 - 2019-05-14
41
+ * [#651](https://github.com/stripe/stripe-php/pull/651) Add support for the Capability resource and APIs
42
+
43
+ ## 6.34.6 - 2019-05-13
44
+ * [#654](https://github.com/stripe/stripe-php/pull/654) Fix typo in definition of `Event::PAYMENT_METHOD_ATTACHED` constant
45
+
46
+ ## 6.34.5 - 2019-05-06
47
+ * [#647](https://github.com/stripe/stripe-php/pull/647) Set the return type to static for more operations
48
+
49
+ ## 6.34.4 - 2019-05-06
50
+ * [#650](https://github.com/stripe/stripe-php/pull/650) Add missing constants for Event types
51
+
52
+ ## 6.34.3 - 2019-05-01
53
+ * [#644](https://github.com/stripe/stripe-php/pull/644) Update return type to `static` to improve static analysis
54
+ * [#645](https://github.com/stripe/stripe-php/pull/645) Fix constant for `payment_intent.payment_failed`
55
+
56
+ ## 6.34.2 - 2019-04-26
57
+ * [#642](https://github.com/stripe/stripe-php/pull/642) Fix an issue where existing idempotency keys would be overwritten when using automatic retries
58
+
59
+ ## 6.34.1 - 2019-04-25
60
+ * [#640](https://github.com/stripe/stripe-php/pull/640) Add missing phpdocs
61
+
62
+ ## 6.34.0 - 2019-04-24
63
+ * [#626](https://github.com/stripe/stripe-php/pull/626) Add support for the `TaxRate` resource and APIs
64
+ * [#639](https://github.com/stripe/stripe-php/pull/639) Fix multiple phpdoc issues
65
+
66
+ ## 6.33.0 - 2019-04-22
67
+ * [#630](https://github.com/stripe/stripe-php/pull/630) Add support for the `TaxId` resource and APIs
68
+
69
+ ## 6.32.1 - 2019-04-19
70
+ * [#636](https://github.com/stripe/stripe-php/pull/636) Correct type of `$personId` in PHPDoc
71
+
72
+ ## 6.32.0 - 2019-04-18
73
+ * [#621](https://github.com/stripe/stripe-php/pull/621) Add support for `CreditNote`
74
+
75
+ ## 6.31.5 - 2019-04-12
76
+ * [#628](https://github.com/stripe/stripe-php/pull/628) Add constants for `person.*` event types
77
+ * [#628](https://github.com/stripe/stripe-php/pull/628) Add missing constants for `Account` and `Person`
78
+
79
+ ## 6.31.4 - 2019-04-05
80
+ * [#624](https://github.com/stripe/stripe-php/pull/624) Fix encoding of nested parameters in multipart requests
81
+
82
+ ## 6.31.3 - 2019-04-02
83
+ * [#623](https://github.com/stripe/stripe-php/pull/623) Only use HTTP/2 with curl >= 7.60.0
84
+
85
+ ## 6.31.2 - 2019-03-25
86
+ * [#619](https://github.com/stripe/stripe-php/pull/619) Fix PHPDoc return types for list methods for nested resources
87
+
88
+ ## 6.31.1 - 2019-03-22
89
+ * [#612](https://github.com/stripe/stripe-php/pull/612) Add a lot of constants
90
+ * [#614](https://github.com/stripe/stripe-php/pull/614) Add missing subscription status constants
91
+
92
+ ## 6.31.0 - 2019-03-18
93
+ * [#600](https://github.com/stripe/stripe-php/pull/600) Add support for the `PaymentMethod` resource and APIs
94
+ * [#606](https://github.com/stripe/stripe-php/pull/606) Add support for retrieving a Checkout `Session`
95
+ * [#611](https://github.com/stripe/stripe-php/pull/611) Add support for deleting a Terminal `Location` and `Reader`
96
+
97
+ ## 6.30.5 - 2019-03-11
98
+ * [#607](https://github.com/stripe/stripe-php/pull/607) Correctly handle case where a metadata key is called `metadata`
99
+
100
+ ## 6.30.4 - 2019-02-27
101
+ * [#602](https://github.com/stripe/stripe-php/pull/602) Add `subscription_schedule` to `Subscription` for PHPDoc.
102
+
103
+ ## 6.30.3 - 2019-02-26
104
+ * [#603](https://github.com/stripe/stripe-php/pull/603) Improve PHPDoc on the `Source` object to cover all types of Sources currently supported.
105
+
106
+ ## 6.30.2 - 2019-02-25
107
+ * [#601](https://github.com/stripe/stripe-php/pull/601) Fix PHPDoc across multiple resources and add support for new events.
108
+
109
+ ## 6.30.1 - 2019-02-16
110
+ * [#599](https://github.com/stripe/stripe-php/pull/599) Fix PHPDoc for `SubscriptionSchedule` and `SubscriptionScheduleRevision`
111
+
112
+ ## 6.30.0 - 2019-02-12
113
+ * [#590](https://github.com/stripe/stripe-php/pull/590) Add support for `SubscriptionSchedule` and `SubscriptionScheduleRevision`
114
+
115
+ ## 6.29.3 - 2019-01-31
116
+ * [#592](https://github.com/stripe/stripe-php/pull/592) Some more PHPDoc fixes
117
+
118
+ ## 6.29.2 - 2019-01-31
119
+ * [#591](https://github.com/stripe/stripe-php/pull/591) Fix PHPDoc for nested resources
120
+
121
+ ## 6.29.1 - 2019-01-25
122
+ * [#566](https://github.com/stripe/stripe-php/pull/566) Fix dangling message contents
123
+ * [#586](https://github.com/stripe/stripe-php/pull/586) Don't overwrite `CURLOPT_HTTP_VERSION` option
124
+
125
+ ## 6.29.0 - 2019-01-23
126
+ * [#579](https://github.com/stripe/stripe-php/pull/579) Rename `CheckoutSession` to `Session` and move it under the `Checkout` namespace. This is a breaking change, but we've reached out to affected merchants and all new merchants would use the new approach.
127
+
128
+ ## 6.28.1 - 2019-01-21
129
+ * [#580](https://github.com/stripe/stripe-php/pull/580) Properly serialize `individual` on `Account` objects
130
+
131
+ ## 6.28.0 - 2019-01-03
132
+ * [#576](https://github.com/stripe/stripe-php/pull/576) Add support for iterating directly over `Collection` instances
133
+
134
+ ## 6.27.0 - 2018-12-21
135
+ * [#571](https://github.com/stripe/stripe-php/pull/571) Add support for the `CheckoutSession` resource
136
+
137
+ ## 6.26.0 - 2018-12-11
138
+ * [#568](https://github.com/stripe/stripe-php/pull/568) Enable persistent connections
139
+
140
+ ## 6.25.0 - 2018-12-10
141
+ * [#567](https://github.com/stripe/stripe-php/pull/567) Add support for account links
142
+
143
+ ## 6.24.0 - 2018-11-28
144
+ * [#562](https://github.com/stripe/stripe-php/pull/562) Add support for the Review resource
145
+ * [#564](https://github.com/stripe/stripe-php/pull/564) Add event name constants for subscription schedule aborted/expiring
146
+
147
+ ## 6.23.0 - 2018-11-27
148
+ * [#542](https://github.com/stripe/stripe-php/pull/542) Add support for `ValueList` and `ValueListItem` for Radar
149
+
150
+ ## 6.22.1 - 2018-11-20
151
+ * [#561](https://github.com/stripe/stripe-php/pull/561) Add cast and some docs to telemetry introduced in 6.22.0/#549
152
+
153
+ ## 6.22.0 - 2018-11-15
154
+ * [#549](https://github.com/stripe/stripe-php/pull/549) Add support for client telemetry
155
+
156
+ ## 6.21.1 - 2018-11-12
157
+ * [#548](https://github.com/stripe/stripe-php/pull/548) Don't mutate `Exception` class properties from `OAuthBase` error
158
+
159
+ ## 6.21.0 - 2018-11-08
160
+ * [#537](https://github.com/stripe/stripe-php/pull/537) Add new API endpoints for the `Invoice` resource.
161
+
162
+ ## 6.20.1 - 2018-11-07
163
+ * [#546](https://github.com/stripe/stripe-php/pull/546) Drop files from the Composer package that aren't needed in the release
164
+
165
+ ## 6.20.0 - 2018-10-30
166
+ * [#536](https://github.com/stripe/stripe-php/pull/536) Add support for the `Person` resource
167
+ * [#541](https://github.com/stripe/stripe-php/pull/541) Add support for the `WebhookEndpoint` resource
168
+
169
+ ## 6.19.5 - 2018-10-17
170
+ * [#539](https://github.com/stripe/stripe-php/pull/539) Fix methods on `\Stripe\PaymentIntent` to properly pass arguments to the API.
171
+
172
+ ## 6.19.4 - 2018-10-11
173
+ * [#534](https://github.com/stripe/stripe-php/pull/534) Fix PSR-4 autoloading for `\Stripe\FileUpload` class alias
174
+
175
+ ## 6.19.3 - 2018-10-09
176
+ * [#530](https://github.com/stripe/stripe-php/pull/530) Add constants for `flow` (`FLOW_*`), `status` (`STATUS_*`) and `usage` (`USAGE_*`) on `\Stripe\Source`
177
+
178
+ ## 6.19.2 - 2018-10-08
179
+ * [#531](https://github.com/stripe/stripe-php/pull/531) Store HTTP response headers in case-insensitive array
180
+
181
+ ## 6.19.1 - 2018-09-25
182
+ * [#526](https://github.com/stripe/stripe-php/pull/526) Ignore null values in request parameters
183
+
184
+ ## 6.19.0 - 2018-09-24
185
+ * [#523](https://github.com/stripe/stripe-php/pull/523) Add support for Stripe Terminal
186
+
187
+ ## 6.18.0 - 2018-09-24
188
+ * [#520](https://github.com/stripe/stripe-php/pull/520) Rename `\Stripe\FileUpload` to `\Stripe\File`
189
+
190
+ ## 6.17.2 - 2018-09-18
191
+ * [#522](https://github.com/stripe/stripe-php/pull/522) Fix warning when adding a new additional owner to an existing array
192
+
193
+ ## 6.17.1 - 2018-09-14
194
+ * [#517](https://github.com/stripe/stripe-php/pull/517) Integer-index encode all sequential arrays
195
+
196
+ ## 6.17.0 - 2018-09-05
197
+ * [#514](https://github.com/stripe/stripe-php/pull/514) Add support for reporting resources
198
+
199
+ ## 6.16.0 - 2018-08-23
200
+ * [#509](https://github.com/stripe/stripe-php/pull/509) Add support for usage record summaries
201
+
202
+ ## 6.15.0 - 2018-08-03
203
+ * [#504](https://github.com/stripe/stripe-php/pull/504) Add cancel support for topups
204
+
205
+ ## 6.14.0 - 2018-08-02
206
+ * [#505](https://github.com/stripe/stripe-php/pull/505) Add support for file links
207
+
208
+ ## 6.13.0 - 2018-07-31
209
+ * [#502](https://github.com/stripe/stripe-php/pull/502) Add `isDeleted()` method to `\Stripe\StripeObject`
210
+
211
+ ## 6.12.0 - 2018-07-28
212
+ * [#501](https://github.com/stripe/stripe-php/pull/501) Add support for scheduled query runs (`\Stripe\Sigma\ScheduledQueryRun`) for Sigma
213
+
214
+ ## 6.11.0 - 2018-07-26
215
+ * [#500](https://github.com/stripe/stripe-php/pull/500) Add support for Stripe Issuing
216
+
217
+ ## 6.10.4 - 2018-07-19
218
+ * [#498](https://github.com/stripe/stripe-php/pull/498) Internal improvements to the `\Stripe\ApiResource.classUrl()` method
219
+
220
+ ## 6.10.3 - 2018-07-16
221
+ * [#497](https://github.com/stripe/stripe-php/pull/497) Use HTTP/2 only for HTTPS requests
222
+
223
+ ## 6.10.2 - 2018-07-11
224
+ * [#494](https://github.com/stripe/stripe-php/pull/494) Enable HTTP/2 support
225
+
226
+ ## 6.10.1 - 2018-07-10
227
+ * [#493](https://github.com/stripe/stripe-php/pull/493) Add PHPDoc for `auto_advance` on `\Stripe\Invoice`
228
+
229
+ ## 6.10.0 - 2018-06-28
230
+ * [#488](https://github.com/stripe/stripe-php/pull/488) Add support for `$appPartnerId` to `Stripe::setAppInfo()`
231
+
232
+ ## 6.9.0 - 2018-06-28
233
+ * [#487](https://github.com/stripe/stripe-php/pull/487) Add support for payment intents
234
+
235
+ ## 6.8.2 - 2018-06-24
236
+ * [#486](https://github.com/stripe/stripe-php/pull/486) Make `Account.deauthorize()` return the `StripeObject` from the API
237
+
238
+ ## 6.8.1 - 2018-06-13
239
+ * [#472](https://github.com/stripe/stripe-php/pull/472) Added phpDoc for `ApiRequestor` and others, especially regarding thrown errors
240
+
241
+ ## 6.8.0 - 2018-06-13
242
+ * [#481](https://github.com/stripe/stripe-php/pull/481) Add new `\Stripe\Discount` and `\Stripe\OrderItem` classes, add more PHPDoc describing object attributes
243
+
244
+ ## 6.7.4 - 2018-05-29
245
+ * [#480](https://github.com/stripe/stripe-php/pull/480) PHPDoc changes for API version 2018-05-21 and the addition of the new `CHARGE_EXPIRED` event type
246
+
247
+ ## 6.7.3 - 2018-05-28
248
+ * [#479](https://github.com/stripe/stripe-php/pull/479) Fix unnecessary traits on `\Stripe\InvoiceLineItem`
249
+
250
+ ## 6.7.2 - 2018-05-28
251
+ * [#471](https://github.com/stripe/stripe-php/pull/471) Add `OBJECT_NAME` constant to all API resource classes, add `\Stripe\InvoiceLineItem` class
252
+
253
+ ## 6.7.1 - 2018-05-13
254
+ * [#468](https://github.com/stripe/stripe-php/pull/468) Update fields in PHP docs for accuracy
255
+
256
+ ## 6.7.0 - 2018-05-09
257
+ * [#466](https://github.com/stripe/stripe-php/pull/466) Add support for issuer fraud records
258
+
259
+ ## 6.6.0 - 2018-04-11
260
+ * [#460](https://github.com/stripe/stripe-php/pull/460) Add support for flexible billing primitives
261
+
262
+ ## 6.5.0 - 2018-04-05
263
+ * [#461](https://github.com/stripe/stripe-php/pull/461) Don't zero keys on non-`metadata` subobjects
264
+
265
+ ## 6.4.2 - 2018-03-17
266
+ * [#458](https://github.com/stripe/stripe-php/pull/458) Add PHPDoc for `account` on `\Stripe\Event`
267
+
268
+ ## 6.4.1 - 2018-03-02
269
+ * [#455](https://github.com/stripe/stripe-php/pull/455) Fix namespaces in PHPDoc
270
+ * [#456](https://github.com/stripe/stripe-php/pull/456) Fix namespaces for some exceptions
271
+
272
+ ## 6.4.0 - 2018-02-28
273
+ * [#453](https://github.com/stripe/stripe-php/pull/453) Add constants for `reason` (`REASON_*`) and `status` (`STATUS_*`) on `\Stripe\Dispute`
274
+
275
+ ## 6.3.2 - 2018-02-27
276
+ * [#452](https://github.com/stripe/stripe-php/pull/452) Add PHPDoc for `amount_paid` and `amount_remaining` on `\Stripe\Invoice`
277
+
278
+ ## 6.3.1 - 2018-02-26
279
+ * [#443](https://github.com/stripe/stripe-php/pull/443) Add event types as constants to `\Stripe\Event` class
280
+
281
+ ## 6.3.0 - 2018-02-23
282
+ * [#450](https://github.com/stripe/stripe-php/pull/450) Add support for `code` attribute on all Stripe exceptions
283
+
284
+ ## 6.2.0 - 2018-02-21
285
+ * [#440](https://github.com/stripe/stripe-php/pull/440) Add support for topups
286
+ * [#442](https://github.com/stripe/stripe-php/pull/442) Fix PHPDoc for `\Stripe\Error\SignatureVerification`
287
+
288
+ ## 6.1.0 - 2018-02-12
289
+ * [#435](https://github.com/stripe/stripe-php/pull/435) Fix header persistence on `Collection` objects
290
+ * [#436](https://github.com/stripe/stripe-php/pull/436) Introduce new `Idempotency` error class
291
+
292
+ ## 6.0.0 - 2018-02-07
293
+ Major version release. List of backwards incompatible changes to watch out for:
294
+ + The minimum PHP version is now 5.4.0. If you're using PHP 5.3 or older, consider upgrading to a more recent version.
295
+ * `\Stripe\AttachedObject` no longer exists. Attributes that used to be instances of `\Stripe\AttachedObject` (such as `metadata`) are now instances of `\Stripe\StripeObject`.
296
+ + Attributes that used to be PHP arrays (such as `legal_entity->additional_owners` on `\Stripe\Account` instances) are now instances of `\Stripe\StripeObject`, except when they are empty. `\Stripe\StripeObject` has array semantics so this should not be an issue unless you are actively checking types.
297
+ * `\Stripe\Collection` now derives from `\Stripe\StripeObject` rather than from `\Stripe\ApiResource`.
298
+
299
+ Pull requests included in this release:
300
+ * [#410](https://github.com/stripe/stripe-php/pull/410) Drop support for PHP 5.3
301
+ * [#411](https://github.com/stripe/stripe-php/pull/411) Use traits for common API operations
302
+ * [#414](https://github.com/stripe/stripe-php/pull/414) Use short array syntax
303
+ * [#404](https://github.com/stripe/stripe-php/pull/404) Fix serialization logic
304
+ * [#417](https://github.com/stripe/stripe-php/pull/417) Remove `ExternalAccount` class
305
+ * [#418](https://github.com/stripe/stripe-php/pull/418) Increase test coverage
306
+ * [#421](https://github.com/stripe/stripe-php/pull/421) Update CA bundle and add script for future updates
307
+ * [#422](https://github.com/stripe/stripe-php/pull/422) Use vendored CA bundle for all requests
308
+ * [#428](https://github.com/stripe/stripe-php/pull/428) Support for automatic request retries
309
+
310
+ ## 5.9.2 - 2018-02-07
311
+ * [#431](https://github.com/stripe/stripe-php/pull/431) Update PHPDoc @property tags for latest API version
312
+
313
+ ## 5.9.1 - 2018-02-06
314
+ * [#427](https://github.com/stripe/stripe-php/pull/427) Add and update PHPDoc @property tags on all API resources
315
+
316
+ ## 5.9.0 - 2018-01-17
317
+ * [#421](https://github.com/stripe/stripe-php/pull/421) Updated bundled CA certificates
318
+ * [#423](https://github.com/stripe/stripe-php/pull/423) Escape unsanitized input in OAuth example
319
+
320
+ ## 5.8.0 - 2017-12-20
321
+ * [#403](https://github.com/stripe/stripe-php/pull/403) Add `__debugInfo()` magic method to `StripeObject`
322
+
323
+ ## 5.7.0 - 2017-11-28
324
+ * [#390](https://github.com/stripe/stripe-php/pull/390) Remove some unsupported API methods
325
+ * [#391](https://github.com/stripe/stripe-php/pull/391) Alphabetize the list of API resources in `Util::convertToStripeObject()` and add missing resources
326
+ * [#393](https://github.com/stripe/stripe-php/pull/393) Fix expiry date update for card sources
327
+
328
+ ## 5.6.0 - 2017-10-31
329
+ * [#386](https://github.com/stripe/stripe-php/pull/386) Support for exchange rates APIs
330
+
331
+ ## 5.5.1 - 2017-10-30
332
+ * [#387](https://github.com/stripe/stripe-php/pull/387) Allow `personal_address_kana` and `personal_address_kanji` to be updated on an account
333
+
334
+ ## 5.5.0 - 2017-10-27
335
+ * [#385](https://github.com/stripe/stripe-php/pull/385) Support for listing source transactions
336
+
337
+ ## 5.4.0 - 2017-10-24
338
+ * [#383](https://github.com/stripe/stripe-php/pull/383) Add static methods to manipulate resources from parent
339
+ * `Account` gains methods for external accounts and login links (e.g. `createExternalAccount`, `createLoginLink`)
340
+ * `ApplicationFee` gains methods for refunds
341
+ * `Customer` gains methods for sources
342
+ * `Transfer` gains methods for reversals
343
+
344
+ ## 5.3.0 - 2017-10-11
345
+ * [#378](https://github.com/stripe/stripe-php/pull/378) Rename source `delete` to `detach` (and deprecate the former)
346
+
347
+ ## 5.2.3 - 2017-09-27
348
+ * Add PHPDoc for `Card`
349
+
350
+ ## 5.2.2 - 2017-09-20
351
+ * Fix deserialization mapping of `FileUpload` objects
352
+
353
+ ## 5.2.1 - 2017-09-14
354
+ * Serialized `shipping` nested attribute
355
+
356
+ ## 5.2.0 - 2017-08-29
357
+ * Add support for `InvalidClient` OAuth error
358
+
359
+ ## 5.1.3 - 2017-08-14
360
+ * Allow `address_kana` and `address_kanji` to be updated for custom accounts
361
+
362
+ ## 5.1.2 - 2017-08-01
363
+ * Fix documented return type of `autoPagingIterator()` (was missing namespace)
364
+
365
+ ## 5.1.1 - 2017-07-03
366
+ * Fix order returns to use the right URL `/v1/order_returns`
367
+
368
+ ## 5.1.0 - 2017-06-30
369
+ * Add support for OAuth
370
+
371
+ ## 5.0.0 - 2017-06-27
372
+ * `pay` on invoice now takes params as well as opts
373
+
374
+ ## 4.13.0 - 2017-06-19
375
+ * Add support for ephemeral keys
376
+
377
+ ## 4.12.0 - 2017-06-05
378
+ * Clients can implement `getUserAgentInfo()` to add additional user agent information
379
+
380
+ ## 4.11.0 - 2017-06-05
381
+ * Implement `Countable` for `AttachedObject` (`metadata` and `additional_owners`)
382
+
383
+ ## 4.10.0 - 2017-05-25
384
+ * Add support for login links
385
+
386
+ ## 4.9.1 - 2017-05-10
387
+ * Fix docs to include arrays on `$id` parameter for retrieve methods
388
+
389
+ ## 4.9.0 - 2017-04-28
390
+ * Support for checking webhook signatures
391
+
392
+ ## 4.8.1 - 2017-04-24
393
+ * Allow nested field `payout_schedule` to be updated
394
+
395
+ ## 4.8.0 - 2017-04-20
396
+ * Add `\Stripe\Stripe::setLogger()` to support an external PSR-3 compatible logger
397
+
398
+ ## 4.7.0 - 2017-04-10
399
+ * Add support for payouts and recipient transfers
400
+
401
+ ## 4.6.0 - 2017-04-06
402
+ * Please see 4.7.0 instead (no-op release)
403
+
404
+ ## 4.5.1 - 2017-03-22
405
+ * Remove hard dependency on cURL
406
+
407
+ ## 4.5.0 - 2017-03-20
408
+ * Support for detaching sources from customers
409
+
410
+ ## 4.4.2 - 2017-02-27
411
+ * Correct handling of `owner` parameter when updating sources
412
+
413
+ ## 4.4.1 - 2017-02-24
414
+ * Correct the error check on a bad JSON decoding
415
+
416
+ ## 4.4.0 - 2017-01-18
417
+ * Add support for updating sources
418
+
419
+ ## 4.3.0 - 2016-11-30
420
+ * Add support for verifying sources
421
+
422
+ ## 4.2.0 - 2016-11-21
423
+ * Add retrieve method for 3-D Secure resources
424
+
425
+ ## 4.1.1 - 2016-10-21
426
+ * Add docblock with model properties for `Plan`
427
+
428
+ ## 4.1.0 - 2016-10-18
429
+ * Support for 403 status codes (permission denied)
430
+
431
+ ## 4.0.1 - 2016-10-17
432
+ * Fix transfer reversal materialization
433
+ * Fixes for some property definitions in docblocks
434
+
435
+ ## 4.0.0 - 2016-09-28
436
+ * Support for subscription items
437
+ * Drop attempt to force TLS 1.2: please note that this could be breaking if you're using old OS distributions or packages and upgraded recently (so please make sure to test your integration!)
438
+
439
+ ## 3.23.0 - 2016-09-15
440
+ * Add support for Apple Pay domains
441
+
442
+ ## 3.22.0 - 2016-09-13
443
+ * Add `Stripe::setAppInfo` to allow plugins to register user agent information
444
+
445
+ ## 3.21.0 - 2016-08-25
446
+ * Add `Source` model for generic payment sources
447
+
448
+ ## 3.20.0 - 2016-08-08
449
+ * Add `getDeclineCode` to card errors
450
+
451
+ ## 3.19.0 - 2016-07-29
452
+ * Opt requests directly into TLS 1.2 where OpenSSL >= 1.0.1 (see #277 for context)
453
+
454
+ ## 3.18.0 - 2016-07-28
455
+ * Add new `STATUS_` constants for subscriptions
456
+
457
+ ## 3.17.1 - 2016-07-28
458
+ * Fix auto-paging iterator so that it plays nicely with `iterator_to_array`
459
+
460
+ ## 3.17.0 - 2016-07-14
461
+ * Add field annotations to model classes for better editor hinting
462
+
463
+ ## 3.16.0 - 2016-07-12
464
+ * Add `ThreeDSecure` model for 3-D secure payments
465
+
466
+ ## 3.15.0 - 2016-06-29
467
+ * Add static `update` method to all resources that can be changed.
468
+
469
+ ## 3.14.3 - 2016-06-20
470
+ * Make sure that cURL never sends `Expects: 100-continue`, even on large request bodies
471
+
472
+ ## 3.14.2 - 2016-06-03
473
+ * Add `inventory` under `SKU` to list of keys that have nested data and can be updated
474
+
475
+ ## 3.14.1 - 2016-05-27
476
+ * Fix some inconsistencies in PHPDoc
477
+
478
+ ## 3.14.0 - 2016-05-25
479
+ * Add support for returning Relay orders
480
+
481
+ ## 3.13.0 - 2016-05-04
482
+ * Add `list`, `create`, `update`, `retrieve`, and `delete` methods to the Subscription class
483
+
484
+ ## 3.12.1 - 2016-04-07
485
+ * Additional check on value arrays for some extra safety
486
+
487
+ ## 3.12.0 - 2016-03-31
488
+ * Fix bug `refreshFrom` on `StripeObject` would not take an `$opts` array
489
+ * Fix bug where `$opts` not passed to parent `save` method in `Account`
490
+ * Fix bug where non-existent variable was referenced in `reverse` in `Transfer`
491
+ * Update CA cert bundle for compatibility with OpenSSL versions below 1.0.1
492
+
493
+ ## 3.11.0 - 2016-03-22
494
+ * Allow `CurlClient` to be initialized with default `CURLOPT_*` options
495
+
496
+ ## 3.10.1 - 2016-03-22
497
+ * Fix bug where request params and options were ignored in `ApplicationFee`'s `refund.`
498
+
499
+ ## 3.10.0 - 2016-03-15
500
+ * Add `reject` on `Account` to support the new API feature
501
+
502
+ ## 3.9.2 - 2016-03-04
503
+ * Fix error when an object's metadata is set more than once
504
+
505
+ ## 3.9.1 - 2016-02-24
506
+ * Fix encoding behavior of nested arrays for requests (see #227)
507
+
508
+ ## 3.9.0 - 2016-02-09
509
+ * Add automatic pagination mechanism with `autoPagingIterator()`
510
+ * Allow global account ID to be set with `Stripe::setAccountId()`
511
+
512
+ ## 3.8.0 - 2016-02-08
513
+ * Add `CountrySpec` model for looking up country payment information
514
+
515
+ ## 3.7.1 - 2016-02-01
516
+ * Update bundled CA certs
517
+
518
+ ## 3.7.0 - 2016-01-27
519
+ * Support deleting Relay products and SKUs
520
+
521
+ ## 3.6.0 - 2016-01-05
522
+ * Allow configuration of HTTP client timeouts
523
+
524
+ ## 3.5.0 - 2015-12-01
525
+ * Add a verification routine for external accounts
526
+
527
+ ## 3.4.0 - 2015-09-14
528
+ * Products, SKUs, and Orders -- https://stripe.com/relay
529
+
530
+ ## 3.3.0 - 2015-09-11
531
+ * Add support for 429 Rate Limit response
532
+
533
+ ## 3.2.0 - 2015-08-17
534
+ * Add refund listing and retrieval without an associated charge
535
+
536
+ ## 3.1.0 - 2015-08-03
537
+ * Add dispute listing and retrieval
538
+ * Add support for manage account deletion
539
+
540
+ ## 3.0.0 - 2015-07-28
541
+ * Rename `\Stripe\Object` to `\Stripe\StripeObject` (PHP 7 compatibility)
542
+ * Rename `getCode` and `getParam` in exceptions to `getStripeCode` and `getStripeParam`
543
+ * Add support for calling `json_encode` on Stripe objects in PHP 5.4+
544
+ * Start supporting/testing PHP 7
545
+
546
+ ## 2.3.0 - 2015-07-06
547
+ * Add request ID to all Stripe exceptions
548
+
549
+ ## 2.2.0 - 2015-06-01
550
+ * Add support for Alipay accounts as sources
551
+ * Add support for bank accounts as sources (private beta)
552
+ * Add support for bank accounts and cards as external_accounts on Account objects
553
+
554
+ ## 2.1.4 - 2015-05-13
555
+ * Fix CA certificate file path (thanks @lphilps & @matthewarkin)
556
+
557
+ ## 2.1.3 - 2015-05-12
558
+ * Fix to account updating to permit `tos_acceptance` and `personal_address` to be set properly
559
+ * Fix to Transfer reversal creation (thanks @neatness!)
560
+ * Network requests are now done through a swappable class for easier mocking
561
+
562
+ ## 2.1.2 - 2015-04-10
563
+ * Remove SSL cert revokation checking (all pre-Heartbleed certs have expired)
564
+ * Bug fixes to account updating
565
+
566
+ ## 2.1.1 - 2015-02-27
567
+ * Support transfer reversals
568
+
569
+ ## 2.1.0 - 2015-02-19
570
+ * Support new API version (2015-02-18)
571
+ * Added Bitcoin Receiever update and delete actions
572
+ * Edited tests to prefer "source" over "card" as per new API version
573
+
574
+ ## 2.0.1 - 2015-02-16
575
+ * Fix to fetching endpoints that use a non-default baseUrl (`FileUpload`)
576
+
577
+ ## 2.0.0 - 2015-02-14
578
+ * Bumped minimum version to 5.3.3
579
+ * Switched to Stripe namespace instead of Stripe_ class name prefiexes (thanks @chadicus!)
580
+ * Switched tests to PHPUnit (thanks @chadicus!)
581
+ * Switched style guide to PSR2 (thanks @chadicus!)
582
+ * Added $opts hash to the end of most methods: this permits passing 'idempotency_key', 'stripe_account', or 'stripe_version'. The last 2 will persist across multiple object loads.
583
+ * Added support for retrieving Account by ID
584
+
585
+ ## 1.18.0 - 2015-01-21
586
+ * Support making bitcoin charges through BitcoinReceiver source object
587
+
588
+ ## 1.17.5 - 2014-12-23
589
+ * Adding support for creating file uploads.
590
+
591
+ ## 1.17.4 - 2014-12-15
592
+ * Saving objects fetched with a custom key now works (thanks @JustinHook & @jpasilan)
593
+ * Added methods for reporting charges as safe or fraudulent and for specifying the reason for refunds
594
+
595
+ ## 1.17.3 - 2014-11-06
596
+ * Better handling of HHVM support for SSL certificate blacklist checking.
597
+
598
+ ## 1.17.2 - 2014-09-23
599
+ * Coupons now are backed by a `Stripe_Coupon` instead of `Stripe_Object`, and support updating metadata
600
+ * Running operations (`create`, `retrieve`, `all`) on upcoming invoice items now works
601
+
602
+ ## 1.17.1 - 2014-07-31
603
+ * Requests now send Content-Type header
604
+
605
+ ## 1.17.0 - 2014-07-29
606
+ * Application Fee refunds now a list instead of array
607
+ * HHVM now works
608
+ * Small bug fixes (thanks @bencromwell & @fastest963)
609
+ * `__toString` now returns the name of the object in addition to its JSON representation
610
+
611
+ ## 1.16.0 - 2014-06-17
612
+ * Add metadata for refunds and disputes
613
+
614
+ ## 1.15.0 - 2014-05-28
615
+ * Support canceling transfers
616
+
617
+ ## 1.14.1 - 2014-05-21
618
+ * Support cards for recipients.
619
+
620
+ ## 1.13.1 - 2014-05-15
621
+ * Fix bug in account resource where `id` wasn't in the result
622
+
623
+ ## 1.13.0 - 2014-04-10
624
+ * Add support for certificate blacklisting
625
+ * Update ca bundle
626
+ * Drop support for HHVM (Temporarily)
627
+
628
+ ## 1.12.0 - 2014-04-01
629
+ * Add Stripe_RateLimitError for catching rate limit errors.
630
+ * Update to Zend coding style (thanks, @jpiasetz)
631
+
632
+ ## 1.11.0 - 2014-01-29
633
+ * Add support for multiple subscriptions per customer
634
+
635
+ ## 1.10.1 - 2013-12-02
636
+ * Add new ApplicationFee
637
+
638
+ ## 1.9.1 - 2013-11-08
639
+ * Fix a bug where a null nestable object causes warnings to fire.
640
+
641
+ ## 1.9.0 - 2013-10-16
642
+ * Add support for metadata API.
643
+
644
+ ## 1.8.4 - 2013-09-18
645
+ * Add support for closing disputes.
646
+
647
+ ## 1.8.3 - 2013-08-13
648
+ * Add new Balance and BalanceTransaction
649
+
650
+ ## 1.8.2 - 2013-08-12
651
+ * Add support for unsetting attributes by updating to NULL. Setting properties to a blank string is now an error.
652
+
653
+ ## 1.8.1 - 2013-07-12
654
+ * Add support for multiple cards API (Stripe API version 2013-07-12: https://stripe.com/docs/upgrades#2013-07-05)
655
+
656
+ ## 1.8.0 - 2013-04-11
657
+ * Allow Transfers to be creatable
658
+ * Add new Recipient resource
659
+
660
+ ## 1.7.15 - 2013-02-21
661
+ * Add 'id' to the list of permanent object attributes
662
+
663
+ ## 1.7.14 - 2013-02-20
664
+
665
+ * Don't re-encode strings that are already encoded in UTF-8. If you were previously using plan or coupon objects with UTF-8 IDs, they may have been treated as ISO-8859-1 (Latin-1) and encoded to UTF-8 a 2nd time. You may now need to pass the IDs to utf8_encode before passing them to Stripe_Plan::retrieve or Stripe_Coupon::retrieve.
666
+ * Ensure that all input is encoded in UTF-8 before submitting it to Stripe's servers. (github issue #27)
667
+
668
+ ## 1.7.13 - 2013-02-01
669
+ * Add support for passing options when retrieving Stripe objects e.g., Stripe_Charge::retrieve(array("id"=>"foo", "expand" => array("customer"))); Stripe_Charge::retrieve("foo") will continue to work
670
+
671
+ ## 1.7.12 - 2013-01-15
672
+ * Add support for setting a Stripe API version override
673
+
674
+ ## 1.7.11 - 2012-12-30
675
+ * Version bump to cleanup constants and such (fix issue #26)
676
+
677
+ ## 1.7.10 - 2012-11-08
678
+ * Add support for updating charge disputes.
679
+ * Fix bug preventing retrieval of null attributes
680
+
681
+ ## 1.7.9 - 2012-11-08
682
+ * Fix usage under autoloaders such as the one generated by composer (fix issue #22)
683
+
684
+ ## 1.7.8 - 2012-10-30
685
+ * Add support for creating invoices.
686
+ * Add support for new invoice lines return format
687
+ * Add support for new list objects
688
+
689
+ ## 1.7.7 - 2012-09-14
690
+ * Get all of the various version numbers in the repo in sync (no other changes)
691
+
692
+ ## 1.7.6 - 2012-08-31
693
+ * Add update and pay methods to Invoice resource
694
+
695
+ ## 1.7.5 - 2012-08-23
696
+ * Change internal function names so that Stripe_SingletonApiRequest is E_STRICT-clean (github issue #16)
697
+
698
+ ## 1.7.4 - 2012-08-21
699
+ * Bugfix so that Stripe objects (e.g. Customer, Charge objects) used in API calls are transparently converted to their object IDs
700
+
701
+ ## 1.7.3 - 2012-08-15
702
+ * Add new Account resource
703
+
704
+ ## 1.7.2 - 2012-06-26
705
+ * Make clearer that you should be including lib/Stripe.php, not test/Stripe.php (github issue #14)
706
+
707
+ ## 1.7.1 - 2012-05-24
708
+ * Add missing argument to Stripe_InvalidRequestError constructor in Stripe_ApiResource::instanceUrl. Fixes a warning when Stripe_ApiResource::instanceUrl is called on a resource with no ID (fix issue #12)
709
+
710
+ ## 1.7.0 - 2012-05-17
711
+ * Support Composer and Packagist (github issue #9)
712
+ * Add new deleteDiscount method to Stripe_Customer
713
+ * Add new Transfer resource
714
+ * Switch from using HTTP Basic auth to Bearer auth. (Note: Stripe will support Basic auth for the indefinite future, but recommends Bearer auth when possible going forward)
715
+ * Numerous test suite improvements
stripe-php-6.40.0/LICENSE ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ The MIT License
2
+
3
+ Copyright (c) 2010-2019 Stripe, Inc. (https://stripe.com)
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
stripe-php-6.40.0/README.md ADDED
@@ -0,0 +1,257 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Stripe PHP bindings
2
+
3
+ [![Build Status](https://travis-ci.org/stripe/stripe-php.svg?branch=master)](https://travis-ci.org/stripe/stripe-php)
4
+ [![Latest Stable Version](https://poser.pugx.org/stripe/stripe-php/v/stable.svg)](https://packagist.org/packages/stripe/stripe-php)
5
+ [![Total Downloads](https://poser.pugx.org/stripe/stripe-php/downloads.svg)](https://packagist.org/packages/stripe/stripe-php)
6
+ [![License](https://poser.pugx.org/stripe/stripe-php/license.svg)](https://packagist.org/packages/stripe/stripe-php)
7
+ [![Code Coverage](https://coveralls.io/repos/stripe/stripe-php/badge.svg?branch=master)](https://coveralls.io/r/stripe/stripe-php?branch=master)
8
+
9
+ The Stripe PHP library provides convenient access to the Stripe API from
10
+ applications written in the PHP language. It includes a pre-defined set of
11
+ classes for API resources that initialize themselves dynamically from API
12
+ responses which makes it compatible with a wide range of versions of the Stripe
13
+ API.
14
+
15
+ ## Requirements
16
+
17
+ PHP 5.4.0 and later.
18
+
19
+ ## Composer
20
+
21
+ You can install the bindings via [Composer](http://getcomposer.org/). Run the following command:
22
+
23
+ ```bash
24
+ composer require stripe/stripe-php
25
+ ```
26
+
27
+ To use the bindings, use Composer's [autoload](https://getcomposer.org/doc/01-basic-usage.md#autoloading):
28
+
29
+ ```php
30
+ require_once('vendor/autoload.php');
31
+ ```
32
+
33
+ ## Manual Installation
34
+
35
+ If you do not wish to use Composer, you can download the [latest release](https://github.com/stripe/stripe-php/releases). Then, to use the bindings, include the `init.php` file.
36
+
37
+ ```php
38
+ require_once('/path/to/stripe-php/init.php');
39
+ ```
40
+
41
+ ## Dependencies
42
+
43
+ The bindings require the following extensions in order to work properly:
44
+
45
+ - [`curl`](https://secure.php.net/manual/en/book.curl.php), although you can use your own non-cURL client if you prefer
46
+ - [`json`](https://secure.php.net/manual/en/book.json.php)
47
+ - [`mbstring`](https://secure.php.net/manual/en/book.mbstring.php) (Multibyte String)
48
+
49
+ If you use Composer, these dependencies should be handled automatically. If you install manually, you'll want to make sure that these extensions are available.
50
+
51
+ ## Getting Started
52
+
53
+ Simple usage looks like:
54
+
55
+ ```php
56
+ \Stripe\Stripe::setApiKey('sk_test_BQokikJOvBiI2HlWgH4olfQ2');
57
+ $charge = \Stripe\Charge::create(['amount' => 2000, 'currency' => 'usd', 'source' => 'tok_189fqt2eZvKYlo2CTGBeg6Uq']);
58
+ echo $charge;
59
+ ```
60
+
61
+ ## Documentation
62
+
63
+ See the [PHP API docs](https://stripe.com/docs/api/php#intro).
64
+
65
+ ## Legacy Version Support
66
+
67
+ ### PHP 5.3
68
+
69
+ If you are using PHP 5.3, you can download v5.9.2 ([zip](https://github.com/stripe/stripe-php/archive/v5.9.2.zip), [tar.gz](https://github.com/stripe/stripe-php/archive/v5.9.2.tar.gz)) from our [releases page](https://github.com/stripe/stripe-php/releases). This version will continue to work with new versions of the Stripe API for all common uses.
70
+
71
+ ### PHP 5.2
72
+
73
+ If you are using PHP 5.2, you can download v1.18.0 ([zip](https://github.com/stripe/stripe-php/archive/v1.18.0.zip), [tar.gz](https://github.com/stripe/stripe-php/archive/v1.18.0.tar.gz)) from our [releases page](https://github.com/stripe/stripe-php/releases). This version will continue to work with new versions of the Stripe API for all common uses.
74
+
75
+ This legacy version may be included via `require_once("/path/to/stripe-php/lib/Stripe.php");`, and used like:
76
+
77
+ ```php
78
+ Stripe::setApiKey('d8e8fca2dc0f896fd7cb4cb0031ba249');
79
+ $charge = Stripe_Charge::create(array('source' => 'tok_XXXXXXXX', 'amount' => 2000, 'currency' => 'usd'));
80
+ echo $charge;
81
+ ```
82
+
83
+ ## Custom Request Timeouts
84
+
85
+ *NOTE:* We do not recommend decreasing the timeout for non-read-only calls (e.g. charge creation), since even if you locally timeout, the request on Stripe's side can still complete. If you are decreasing timeouts on these calls, make sure to use [idempotency tokens](https://stripe.com/docs/api/php#idempotent_requests) to avoid executing the same transaction twice as a result of timeout retry logic.
86
+
87
+ To modify request timeouts (connect or total, in seconds) you'll need to tell the API client to use a CurlClient other than its default. You'll set the timeouts in that CurlClient.
88
+
89
+ ```php
90
+ // set up your tweaked Curl client
91
+ $curl = new \Stripe\HttpClient\CurlClient();
92
+ $curl->setTimeout(10); // default is \Stripe\HttpClient\CurlClient::DEFAULT_TIMEOUT
93
+ $curl->setConnectTimeout(5); // default is \Stripe\HttpClient\CurlClient::DEFAULT_CONNECT_TIMEOUT
94
+
95
+ echo $curl->getTimeout(); // 10
96
+ echo $curl->getConnectTimeout(); // 5
97
+
98
+ // tell Stripe to use the tweaked client
99
+ \Stripe\ApiRequestor::setHttpClient($curl);
100
+
101
+ // use the Stripe API client as you normally would
102
+ ```
103
+
104
+ ## Custom cURL Options (e.g. proxies)
105
+
106
+ Need to set a proxy for your requests? Pass in the requisite `CURLOPT_*` array to the CurlClient constructor, using the same syntax as `curl_stopt_array()`. This will set the default cURL options for each HTTP request made by the SDK, though many more common options (e.g. timeouts; see above on how to set those) will be overridden by the client even if set here.
107
+
108
+ ```php
109
+ // set up your tweaked Curl client
110
+ $curl = new \Stripe\HttpClient\CurlClient([CURLOPT_PROXY => 'proxy.local:80']);
111
+ // tell Stripe to use the tweaked client
112
+ \Stripe\ApiRequestor::setHttpClient($curl);
113
+ ```
114
+
115
+ Alternately, a callable can be passed to the CurlClient constructor that returns the above array based on request inputs. See `testDefaultOptions()` in `tests/CurlClientTest.php` for an example of this behavior. Note that the callable is called at the beginning of every API request, before the request is sent.
116
+
117
+ ### Configuring a Logger
118
+
119
+ The library does minimal logging, but it can be configured
120
+ with a [`PSR-3` compatible logger][psr3] so that messages
121
+ end up there instead of `error_log`:
122
+
123
+ ```php
124
+ \Stripe\Stripe::setLogger($logger);
125
+ ```
126
+
127
+ ### Accessing response data
128
+
129
+ You can access the data from the last API response on any object via `getLastResponse()`.
130
+
131
+ ```php
132
+ $charge = \Stripe\Charge::create(['amount' => 2000, 'currency' => 'usd', 'source' => 'tok_visa']);
133
+ echo $charge->getLastResponse()->headers['Request-Id'];
134
+ ```
135
+
136
+ ### SSL / TLS compatibility issues
137
+
138
+ Stripe's API now requires that [all connections use TLS 1.2](https://stripe.com/blog/upgrading-tls). Some systems (most notably some older CentOS and RHEL versions) are capable of using TLS 1.2 but will use TLS 1.0 or 1.1 by default. In this case, you'd get an `invalid_request_error` with the following error message: "Stripe no longer supports API requests made with TLS 1.0. Please initiate HTTPS connections with TLS 1.2 or later. You can learn more about this at [https://stripe.com/blog/upgrading-tls](https://stripe.com/blog/upgrading-tls).".
139
+
140
+ The recommended course of action is to [upgrade your cURL and OpenSSL packages](https://support.stripe.com/questions/how-do-i-upgrade-my-stripe-integration-from-tls-1-0-to-tls-1-2#php) so that TLS 1.2 is used by default, but if that is not possible, you might be able to solve the issue by setting the `CURLOPT_SSLVERSION` option to either `CURL_SSLVERSION_TLSv1` or `CURL_SSLVERSION_TLSv1_2`:
141
+
142
+ ```php
143
+ $curl = new \Stripe\HttpClient\CurlClient([CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1]);
144
+ \Stripe\ApiRequestor::setHttpClient($curl);
145
+ ```
146
+
147
+ ### Per-request Configuration
148
+
149
+ For apps that need to use multiple keys during the lifetime of a process, like
150
+ one that uses [Stripe Connect][connect], it's also possible to set a
151
+ per-request key and/or account:
152
+
153
+ ```php
154
+ \Stripe\Charge::all([], [
155
+ 'api_key' => 'sk_test_...',
156
+ 'stripe_account' => 'acct_...'
157
+ ]);
158
+
159
+ \Stripe\Charge::retrieve("ch_18atAXCdGbJFKhCuBAa4532Z", [
160
+ 'api_key' => 'sk_test_...',
161
+ 'stripe_account' => 'acct_...'
162
+ ]);
163
+ ```
164
+
165
+ ### Configuring CA Bundles
166
+
167
+ By default, the library will use its own internal bundle of known CA
168
+ certificates, but it's possible to configure your own:
169
+
170
+ ```php
171
+ \Stripe\Stripe::setCABundlePath("path/to/ca/bundle");
172
+ ```
173
+
174
+ ### Configuring Automatic Retries
175
+
176
+ The library can be configured to automatically retry requests that fail due to
177
+ an intermittent network problem:
178
+
179
+ ```php
180
+ \Stripe\Stripe::setMaxNetworkRetries(2);
181
+ ```
182
+
183
+ [Idempotency keys][idempotency-keys] are added to requests to guarantee that
184
+ retries are safe.
185
+
186
+ ### Request latency telemetry
187
+
188
+ By default, the library sends request latency telemetry to Stripe. These
189
+ numbers help Stripe improve the overall latency of its API for all users.
190
+
191
+ You can disable this behavior if you prefer:
192
+
193
+ ```php
194
+ \Stripe\Stripe::setEnableTelemetry(false);
195
+ ```
196
+
197
+ ## Development
198
+
199
+ Get [Composer][composer]. For example, on Mac OS:
200
+
201
+ ```bash
202
+ brew install composer
203
+ ```
204
+
205
+ Install dependencies:
206
+
207
+ ```bash
208
+ composer install
209
+ ```
210
+
211
+ The test suite depends on [stripe-mock], so make sure to fetch and run it from a
212
+ background terminal ([stripe-mock's README][stripe-mock] also contains
213
+ instructions for installing via Homebrew and other methods):
214
+
215
+ ```bash
216
+ go get -u github.com/stripe/stripe-mock
217
+ stripe-mock
218
+ ```
219
+
220
+ Install dependencies as mentioned above (which will resolve [PHPUnit](http://packagist.org/packages/phpunit/phpunit)), then you can run the test suite:
221
+
222
+ ```bash
223
+ ./vendor/bin/phpunit
224
+ ```
225
+
226
+ Or to run an individual test file:
227
+
228
+ ```bash
229
+ ./vendor/bin/phpunit tests/UtilTest.php
230
+ ```
231
+
232
+ Update bundled CA certificates from the [Mozilla cURL release][curl]:
233
+
234
+ ```bash
235
+ ./update_certs.php
236
+ ```
237
+
238
+ ## Attention plugin developers
239
+
240
+ Are you writing a plugin that integrates Stripe and embeds our library? Then please use the `setAppInfo` function to identify your plugin. For example:
241
+
242
+ ```php
243
+ \Stripe\Stripe::setAppInfo("MyAwesomePlugin", "1.2.34", "https://myawesomeplugin.info");
244
+ ```
245
+
246
+ The method should be called once, before any request is sent to the API. The second and third parameters are optional.
247
+
248
+ ### SSL / TLS configuration option
249
+
250
+ See the "SSL / TLS compatibility issues" paragraph above for full context. If you want to ensure that your plugin can be used on all systems, you should add a configuration option to let your users choose between different values for `CURLOPT_SSLVERSION`: none (default), `CURL_SSLVERSION_TLSv1` and `CURL_SSLVERSION_TLSv1_2`.
251
+
252
+ [composer]: https://getcomposer.org/
253
+ [connect]: https://stripe.com/connect
254
+ [curl]: http://curl.haxx.se/docs/caextract.html
255
+ [psr3]: http://www.php-fig.org/psr/psr-3/
256
+ [idempotency-keys]: https://stripe.com/docs/api/php#idempotent_requests
257
+ [stripe-mock]: https://github.com/stripe/stripe-mock
stripe-php-6.40.0/VERSION ADDED
@@ -0,0 +1 @@
 
1
+ 6.40.0
stripe-php-6.40.0/build.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #!/usr/bin/env php
2
+ <?php
3
+ chdir(dirname(__FILE__));
4
+
5
+ $autoload = (int)$argv[1];
6
+ $returnStatus = null;
7
+
8
+ if (!$autoload) {
9
+ // Modify composer to not autoload Stripe
10
+ $composer = json_decode(file_get_contents('composer.json'), true);
11
+ unset($composer['autoload']);
12
+ unset($composer['require-dev']['squizlabs/php_codesniffer']);
13
+ file_put_contents('composer.json', json_encode($composer, JSON_PRETTY_PRINT));
14
+ }
15
+
16
+ passthru('composer update', $returnStatus);
17
+ if ($returnStatus !== 0) {
18
+ exit(1);
19
+ }
20
+
21
+ if ($autoload) {
22
+ // Only run CS on 1 of the 2 environments
23
+ passthru(
24
+ './vendor/bin/phpcs --standard=PSR2 -n lib tests *.php',
25
+ $returnStatus
26
+ );
27
+ if ($returnStatus !== 0) {
28
+ exit(1);
29
+ }
30
+ }
31
+
32
+ $config = $autoload ? 'phpunit.xml' : 'phpunit.no_autoload.xml';
33
+ passthru("./vendor/bin/phpunit -c $config", $returnStatus);
34
+ if ($returnStatus !== 0) {
35
+ exit(1);
36
+ }
stripe-php-6.40.0/composer.json ADDED
@@ -0,0 +1,37 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "name": "stripe/stripe-php",
3
+ "description": "Stripe PHP Library",
4
+ "keywords": [
5
+ "stripe",
6
+ "payment processing",
7
+ "api"
8
+ ],
9
+ "homepage": "https://stripe.com/",
10
+ "license": "MIT",
11
+ "authors": [
12
+ {
13
+ "name": "Stripe and contributors",
14
+ "homepage": "https://github.com/stripe/stripe-php/contributors"
15
+ }
16
+ ],
17
+ "require": {
18
+ "php": ">=5.4.0",
19
+ "ext-curl": "*",
20
+ "ext-json": "*",
21
+ "ext-mbstring": "*"
22
+ },
23
+ "require-dev": {
24
+ "phpunit/phpunit": "~4.0",
25
+ "php-coveralls/php-coveralls": "1.*",
26
+ "squizlabs/php_codesniffer": "~2.0",
27
+ "symfony/process": "~2.8"
28
+ },
29
+ "autoload": {
30
+ "psr-4": { "Stripe\\" : "lib/" }
31
+ },
32
+ "extra": {
33
+ "branch-alias": {
34
+ "dev-master": "2.0-dev"
35
+ }
36
+ }
37
+ }
stripe-php-6.40.0/data/ca-certificates.crt ADDED
@@ -0,0 +1,3646 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ##
2
+ ## Bundle of CA Root Certificates
3
+ ##
4
+ ## Certificate data from Mozilla as of: Wed Sep 20 03:12:05 2017 GMT
5
+ ##
6
+ ## This is a bundle of X.509 certificates of public Certificate Authorities
7
+ ## (CA). These were automatically extracted from Mozilla's root certificates
8
+ ## file (certdata.txt). This file can be found in the mozilla source tree:
9
+ ## https://hg.mozilla.org/releases/mozilla-release/raw-file/default/security/nss/lib/ckfw/builtins/certdata.txt
10
+ ##
11
+ ## It contains the certificates in PEM format and therefore
12
+ ## can be directly used with curl / libcurl / php_curl, or with
13
+ ## an Apache+mod_ssl webserver for SSL client authentication.
14
+ ## Just configure this file as the SSLCACertificateFile.
15
+ ##
16
+ ## Conversion done with mk-ca-bundle.pl version 1.27.
17
+ ## SHA256: 2b2dbe5244e0047e088c597998883a913f6c5fffd1cb5c0fe5a368c8466cb2ec
18
+ ##
19
+
20
+
21
+ GlobalSign Root CA
22
+ ==================
23
+ -----BEGIN CERTIFICATE-----
24
+ MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkGA1UEBhMCQkUx
25
+ GTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jvb3QgQ0ExGzAZBgNVBAMTEkds
26
+ b2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAwMDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNV
27
+ BAYTAkJFMRkwFwYDVQQKExBHbG9iYWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYD
28
+ VQQDExJHbG9iYWxTaWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDa
29
+ DuaZjc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavpxy0Sy6sc
30
+ THAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp1Wrjsok6Vjk4bwY8iGlb
31
+ Kk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdGsnUOhugZitVtbNV4FpWi6cgKOOvyJBNP
32
+ c1STE4U6G7weNLWLBYy5d4ux2x8gkasJU26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrX
33
+ gzT/LCrBbBlDSgeF59N89iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV
34
+ HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0BAQUF
35
+ AAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOzyj1hTdNGCbM+w6Dj
36
+ Y1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE38NflNUVyRRBnMRddWQVDf9VMOyG
37
+ j/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymPAbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhH
38
+ hm4qxFYxldBniYUr+WymXUadDKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveC
39
+ X4XSQRjbgbMEHMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
40
+ -----END CERTIFICATE-----
41
+
42
+ GlobalSign Root CA - R2
43
+ =======================
44
+ -----BEGIN CERTIFICATE-----
45
+ MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4GA1UECxMXR2xv
46
+ YmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
47
+ bFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
48
+ aWduIFJvb3QgQ0EgLSBSMjETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
49
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6
50
+ ErPLv4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8eoLrvozp
51
+ s6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklqtTleiDTsvHgMCJiEbKjN
52
+ S7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzdC9XZzPnqJworc5HGnRusyMvo4KD0L5CL
53
+ TfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pazq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6C
54
+ ygPCm48CAwEAAaOBnDCBmTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E
55
+ FgQUm+IHV2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5nbG9i
56
+ YWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG3lm0mi3f3BmGLjAN
57
+ BgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4GsJ0/WwbgcQ3izDJr86iw8bmEbTUsp
58
+ 9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu
59
+ 01yiPqFbQfXf5WRDLenVOavSot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG7
60
+ 9G+dwfCMNYxdAfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
61
+ TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
62
+ -----END CERTIFICATE-----
63
+
64
+ Verisign Class 3 Public Primary Certification Authority - G3
65
+ ============================================================
66
+ -----BEGIN CERTIFICATE-----
67
+ MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQswCQYDVQQGEwJV
68
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
69
+ cmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
70
+ IG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNh
71
+ dGlvbiBBdXRob3JpdHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQsw
72
+ CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRy
73
+ dXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhv
74
+ cml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWduIENsYXNzIDMgUHVibGljIFByaW1hcnkg
75
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
76
+ ggEBAMu6nFL8eB8aHm8bN3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1
77
+ EUGO+i2tKmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGukxUc
78
+ cLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBmCC+Vk7+qRy+oRpfw
79
+ EuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJXwzw3sJ2zq/3avL6QaaiMxTJ5Xpj
80
+ 055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWuimi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEA
81
+ ERSWwauSCPc/L8my/uRan2Te2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5f
82
+ j267Cz3qWhMeDGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
83
+ /Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565pF4ErWjfJXir0
84
+ xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGtTxzhT5yvDwyd93gN2PQ1VoDa
85
+ t20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
86
+ -----END CERTIFICATE-----
87
+
88
+ Entrust.net Premium 2048 Secure Server CA
89
+ =========================================
90
+ -----BEGIN CERTIFICATE-----
91
+ MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChMLRW50cnVzdC5u
92
+ ZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBpbmNvcnAuIGJ5IHJlZi4gKGxp
93
+ bWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
94
+ BAMTKkVudHJ1c3QubmV0IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQx
95
+ NzUwNTFaFw0yOTA3MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3
96
+ d3d3LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTEl
97
+ MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5u
98
+ ZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgpMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
99
+ MIIBCgKCAQEArU1LqRKGsuqjIAcVFmQqK0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOL
100
+ Gp18EzoOH1u3Hs/lJBQesYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSr
101
+ hRSGlVuXMlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVTXTzW
102
+ nLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/HoZdenoVve8AjhUi
103
+ VBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH4QIDAQABo0IwQDAOBgNVHQ8BAf8E
104
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJ
105
+ KoZIhvcNAQEFBQADggEBADubj1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPy
106
+ T/4xmf3IDExoU8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf
107
+ zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5bu/8j72gZyxKT
108
+ J1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+bYQLCIt+jerXmCHG8+c8eS9e
109
+ nNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/ErfF6adulZkMV8gzURZVE=
110
+ -----END CERTIFICATE-----
111
+
112
+ Baltimore CyberTrust Root
113
+ =========================
114
+ -----BEGIN CERTIFICATE-----
115
+ MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJRTESMBAGA1UE
116
+ ChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYDVQQDExlCYWx0aW1vcmUgQ3li
117
+ ZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoXDTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMC
118
+ SUUxEjAQBgNVBAoTCUJhbHRpbW9yZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFs
119
+ dGltb3JlIEN5YmVyVHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKME
120
+ uyKrmD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjrIZ3AQSsB
121
+ UnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeKmpYcqWe4PwzV9/lSEy/C
122
+ G9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSuXmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9
123
+ XbIGevOF6uvUA65ehD5f/xXtabz5OTZydc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjpr
124
+ l3RjM71oGDHweI12v/yejl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoI
125
+ VDaGezq1BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEB
126
+ BQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT929hkTI7gQCvlYpNRh
127
+ cL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3WgxjkzSswF07r51XgdIGn9w/xZchMB5
128
+ hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsa
129
+ Y71k5h+3zvDyny67G7fyUIhzksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9H
130
+ RCwBXbsdtTLSR9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
131
+ -----END CERTIFICATE-----
132
+
133
+ AddTrust External Root
134
+ ======================
135
+ -----BEGIN CERTIFICATE-----
136
+ MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
137
+ QWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYD
138
+ VQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEw
139
+ NDgzOFowbzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRU
140
+ cnVzdCBFeHRlcm5hbCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0Eg
141
+ Um9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvtH7xsD821
142
+ +iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9uMq/NzgtHj6RQa1wVsfw
143
+ Tz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzXmk6vBbOmcZSccbNQYArHE504B4YCqOmo
144
+ aSYYkKtMsE8jqzpPhNjfzp/haW+710LXa0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy
145
+ 2xSoRcRdKn23tNbE7qzNE0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv7
146
+ 7+ldU9U0WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYDVR0P
147
+ BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0Jvf6xCZU7wO94CTL
148
+ VBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRUcnVzdCBBQjEmMCQGA1UECxMdQWRk
149
+ VHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsxIjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENB
150
+ IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZl
151
+ j7DYd7usQWxHYINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
152
+ 6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvCNr4TDea9Y355
153
+ e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEXc4g/VhsxOBi0cQ+azcgOno4u
154
+ G+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5amnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
155
+ -----END CERTIFICATE-----
156
+
157
+ Entrust Root Certification Authority
158
+ ====================================
159
+ -----BEGIN CERTIFICATE-----
160
+ MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMCVVMxFjAUBgNV
161
+ BAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0Lm5ldC9DUFMgaXMgaW5jb3Jw
162
+ b3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMWKGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsG
163
+ A1UEAxMkRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0
164
+ MloXDTI2MTEyNzIwNTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMu
165
+ MTkwNwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSByZWZlcmVu
166
+ Y2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNVBAMTJEVudHJ1c3QgUm9v
167
+ dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
168
+ ALaVtkNC+sZtKm9I35RMOVcF7sN5EUFoNu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYsz
169
+ A9u3g3s+IIRe7bJWKKf44LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOww
170
+ Cj0Yzfv9KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGIrb68
171
+ j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi94DkZfs0Nw4pgHBN
172
+ rziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOBsDCBrTAOBgNVHQ8BAf8EBAMCAQYw
173
+ DwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAigA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1
174
+ MzQyWjAfBgNVHSMEGDAWgBRokORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DH
175
+ hmak8fdLQ/uEvW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
176
+ A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9tO1KzKtvn1ISM
177
+ Y/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6ZuaAGAT/3B+XxFNSRuzFVJ7yVTa
178
+ v52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTS
179
+ W3iDVuycNsMm4hH2Z0kdkquM++v/eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0
180
+ tHuu2guQOHXvgR1m0vdXcDazv/wor3ElhVsT/h5/WrQ8
181
+ -----END CERTIFICATE-----
182
+
183
+ GeoTrust Global CA
184
+ ==================
185
+ -----BEGIN CERTIFICATE-----
186
+ MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
187
+ Ew1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9iYWwgQ0EwHhcNMDIwNTIxMDQw
188
+ MDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5j
189
+ LjEbMBkGA1UEAxMSR2VvVHJ1c3QgR2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
190
+ CgKCAQEA2swYYzD99BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjo
191
+ BbdqfnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDviS2Aelet
192
+ 8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU1XupGc1V3sjs0l44U+Vc
193
+ T4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+bw8HHa8sHo9gOeL6NlMTOdReJivbPagU
194
+ vTLrGAMoUgRx5aszPeE4uwc2hGKceeoWMPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTAD
195
+ AQH/MB0GA1UdDgQWBBTAephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVk
196
+ DBF9qn1luMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKInZ57Q
197
+ zxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfStQWVYrmm3ok9Nns4
198
+ d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcFPseKUgzbFbS9bZvlxrFUaKnjaZC2
199
+ mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Unhw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6p
200
+ XE0zX5IJL4hmXXeXxx12E6nV5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvm
201
+ Mw==
202
+ -----END CERTIFICATE-----
203
+
204
+ GeoTrust Universal CA
205
+ =====================
206
+ -----BEGIN CERTIFICATE-----
207
+ MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
208
+ R2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVyc2FsIENBMB4XDTA0MDMwNDA1
209
+ MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IElu
210
+ Yy4xHjAcBgNVBAMTFUdlb1RydXN0IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIP
211
+ ADCCAgoCggIBAKYVVaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9t
212
+ JPi8cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTTQjOgNB0e
213
+ RXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFhF7em6fgemdtzbvQKoiFs
214
+ 7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2vc7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d
215
+ 8Lsrlh/eezJS/R27tQahsiFepdaVaH/wmZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7V
216
+ qnJNk22CDtucvc+081xdVHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3Cga
217
+ Rr0BHdCXteGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZf9hB
218
+ Z3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfReBi9Fi1jUIxaS5BZu
219
+ KGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+nhutxx9z3SxPGWX9f5NAEC7S8O08
220
+ ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0
221
+ XG0D08DYj3rWMB8GA1UdIwQYMBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIB
222
+ hjANBgkqhkiG9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
223
+ aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fXIwjhmF7DWgh2
224
+ qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzynANXH/KttgCJwpQzgXQQpAvvL
225
+ oJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0zuzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsK
226
+ xr2EoyNB3tZ3b4XUhRxQ4K5RirqNPnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxF
227
+ KyDuSN/n3QmOGKjaQI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2
228
+ DFKWkoRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9ER/frslK
229
+ xfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQtDF4JbAiXfKM9fJP/P6EU
230
+ p8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/SfuvmbJxPgWp6ZKy7PtXny3YuxadIwVyQD8vI
231
+ P/rmMuGNG2+k5o7Y+SlIis5z/iw=
232
+ -----END CERTIFICATE-----
233
+
234
+ GeoTrust Universal CA 2
235
+ =======================
236
+ -----BEGIN CERTIFICATE-----
237
+ MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMN
238
+ R2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwHhcNMDQwMzA0
239
+ MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3Qg
240
+ SW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUA
241
+ A4ICDwAwggIKAoICAQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0
242
+ DE81WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUGFF+3Qs17
243
+ j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdqXbboW0W63MOhBW9Wjo8Q
244
+ JqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxLse4YuU6W3Nx2/zu+z18DwPw76L5GG//a
245
+ QMJS9/7jOvdqdzXQ2o3rXhhqMcceujwbKNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2
246
+ WP0+GfPtDCapkzj4T8FdIgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP
247
+ 20gaXT73y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRthAAn
248
+ ZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgocQIgfksILAAX/8sgC
249
+ SqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4Lt1ZrtmhN79UNdxzMk+MBB4zsslG
250
+ 8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2
251
+ +/CfXGJx7Tz0RzgQKzAfBgNVHSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8E
252
+ BAMCAYYwDQYJKoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
253
+ dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQL1EuxBRa3ugZ
254
+ 4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgrFg5fNuH8KrUwJM/gYwx7WBr+
255
+ mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSoag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpq
256
+ A1Ihn0CoZ1Dy81of398j9tx4TuaYT1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpg
257
+ Y+RdM4kX2TGq2tbzGDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiP
258
+ pm8m1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJVOCiNUW7d
259
+ FGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH6aLcr34YEoP9VhdBLtUp
260
+ gn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwXQMAJKOSLakhT2+zNVVXxxvjpoixMptEm
261
+ X36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
262
+ -----END CERTIFICATE-----
263
+
264
+ Visa eCommerce Root
265
+ ===================
266
+ -----BEGIN CERTIFICATE-----
267
+ MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBrMQswCQYDVQQG
268
+ EwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2Ug
269
+ QXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2
270
+ WhcNMjIwNjI0MDAxNjEyWjBrMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMm
271
+ VmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
272
+ bW1lcmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h2mCxlCfL
273
+ F9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4ElpF7sDPwsRROEW+1QK8b
274
+ RaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdVZqW1LS7YgFmypw23RuwhY/81q6UCzyr0
275
+ TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI
276
+ /k4+oKsGGelT84ATB+0tvz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzs
277
+ GHxBvfaLdXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
278
+ MB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUFAAOCAQEAX/FBfXxc
279
+ CLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcRzCSs00Rsca4BIGsDoo8Ytyk6feUW
280
+ YFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pz
281
+ zkWKsKZJ/0x9nXGIxHYdkFsd7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBu
282
+ YQa7FkKMcPcw++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
283
+ 398znM/jra6O1I7mT1GvFpLgXPYHDw==
284
+ -----END CERTIFICATE-----
285
+
286
+ Certum Root CA
287
+ ==============
288
+ -----BEGIN CERTIFICATE-----
289
+ MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQK
290
+ ExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBDQTAeFw0wMjA2MTExMDQ2Mzla
291
+ Fw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBMMRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8u
292
+ by4xEjAQBgNVBAMTCUNlcnR1bSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6x
293
+ wS7TT3zNJc4YPk/EjG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdL
294
+ kKWoePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GIULdtlkIJ
295
+ 89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapuOb7kky/ZR6By6/qmW6/K
296
+ Uz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUgAKpoC6EahQGcxEZjgoi2IrHu/qpGWX7P
297
+ NSzVttpd90gzFFS269lvzs2I1qsb2pY7HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkq
298
+ hkiG9w0BAQUFAAOCAQEAuI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+
299
+ GXYkHAQaTOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTgxSvg
300
+ GrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1qCjqTE5s7FCMTY5w/
301
+ 0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5xO/fIR/RpbxXyEV6DHpx8Uq79AtoS
302
+ qFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs6GAqm4VKQPNriiTsBhYscw==
303
+ -----END CERTIFICATE-----
304
+
305
+ Comodo AAA Services root
306
+ ========================
307
+ -----BEGIN CERTIFICATE-----
308
+ MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEbMBkGA1UECAwS
309
+ R3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRowGAYDVQQKDBFDb21vZG8gQ0Eg
310
+ TGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAw
311
+ MFoXDTI4MTIzMTIzNTk1OVowezELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hl
312
+ c3RlcjEQMA4GA1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNV
313
+ BAMMGEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
314
+ ggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQuaBtDFcCLNSS1UY8y2bmhG
315
+ C1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe3M/vg4aijJRPn2jymJBGhCfHdr/jzDUs
316
+ i14HZGWCwEiwqJH5YZ92IFCokcdmtet4YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszW
317
+ Y19zjNoFmag4qMsXeDZRrOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjH
318
+ Ypy+g8cmez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQUoBEK
319
+ Iz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wewYDVR0f
320
+ BHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20vQUFBQ2VydGlmaWNhdGVTZXJ2aWNl
321
+ cy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29tb2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2Vz
322
+ LmNybDANBgkqhkiG9w0BAQUFAAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm
323
+ 7l3sAg9g1o1QGE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
324
+ Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2G9w84FoVxp7Z
325
+ 8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsil2D4kF501KKaU73yqWjgom7C
326
+ 12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
327
+ -----END CERTIFICATE-----
328
+
329
+ QuoVadis Root CA
330
+ ================
331
+ -----BEGIN CERTIFICATE-----
332
+ MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJCTTEZMBcGA1UE
333
+ ChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
334
+ eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAz
335
+ MTkxODMzMzNaFw0yMTAzMTcxODMzMzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRp
336
+ cyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQD
337
+ EyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF
338
+ AAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Ypli4kVEAkOPcahdxYTMuk
339
+ J0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2DrOpm2RgbaIr1VxqYuvXtdj182d6UajtL
340
+ F8HVj71lODqV0D1VNk7feVcxKh7YWWVJWCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeL
341
+ YzcS19Dsw3sgQUSj7cugF+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWen
342
+ AScOospUxbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCCAk4w
343
+ PQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVvdmFkaXNvZmZzaG9y
344
+ ZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREwggENMIIBCQYJKwYBBAG+WAABMIH7
345
+ MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNlIG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmlj
346
+ YXRlIGJ5IGFueSBwYXJ0eSBhc3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJs
347
+ ZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
348
+ Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYIKwYBBQUHAgEW
349
+ Fmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3TKbkGGew5Oanwl4Rqy+/fMIGu
350
+ BgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rqy+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkw
351
+ FwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0
352
+ aG9yaXR5MS4wLAYDVQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6
353
+ tlCLMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSkfnIYj9lo
354
+ fFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf87C9TqnN7Az10buYWnuul
355
+ LsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1RcHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2x
356
+ gI4JVrmcGmD+XcHXetwReNDWXcG31a0ymQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi
357
+ 5upZIof4l/UO/erMkqQWxFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi
358
+ 5nrQNiOKSnQ2+Q==
359
+ -----END CERTIFICATE-----
360
+
361
+ QuoVadis Root CA 2
362
+ ==================
363
+ -----BEGIN CERTIFICATE-----
364
+ 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
390
+ -----END CERTIFICATE-----
391
+
392
+ QuoVadis Root CA 3
393
+ ==================
394
+ -----BEGIN CERTIFICATE-----
395
+ MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0xGTAXBgNVBAoT
396
+ EFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJvb3QgQ0EgMzAeFw0wNjExMjQx
397
+ OTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM
398
+ aW1pdGVkMRswGQYDVQQDExJRdW9WYWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
399
+ DwAwggIKAoICAQDMV0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNgg
400
+ DhoB4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUrH556VOij
401
+ KTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd8lyyBTNvijbO0BNO/79K
402
+ DDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9CabwvvWhDFlaJKjdhkf2mrk7AyxRllDdLkgbv
403
+ BNDInIjbC3uBr7E9KsRlOni27tyAsdLTmZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwp
404
+ p5ijJUMv7/FfJuGITfhebtfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8
405
+ nT8KKdjcT5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDtWAEX
406
+ MJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZc6tsgLjoC2SToJyM
407
+ Gf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A4iLItLRkT9a6fUg+qGkM17uGcclz
408
+ uD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYDVR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHT
409
+ BgkrBgEEAb5YAAMwgcUwgZMGCCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmlj
410
+ YXRlIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
411
+ aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVudC4wLQYIKwYB
412
+ BQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2NwczALBgNVHQ8EBAMCAQYwHQYD
413
+ VR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4GA1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4
414
+ ywLQoUmkRzBFMQswCQYDVQQGEwJCTTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UE
415
+ AxMSUXVvVmFkaXMgUm9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZV
416
+ qyM07ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSemd1o417+s
417
+ hvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd+LJ2w/w4E6oM3kJpK27z
418
+ POuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2
419
+ Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadNt54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp
420
+ 8kokUvd0/bpO5qgdAm6xDYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBC
421
+ bjPsMZ57k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6szHXu
422
+ g/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0jWy10QJLZYxkNc91p
423
+ vGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeTmJlglFwjz1onl14LBQaTNx47aTbr
424
+ qZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK4SVhM7JZG+Ju1zdXtg2pEto=
425
+ -----END CERTIFICATE-----
426
+
427
+ Security Communication Root CA
428
+ ==============================
429
+ -----BEGIN CERTIFICATE-----
430
+ MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
431
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
432
+ HhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMP
433
+ U0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEw
434
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw
435
+ 8yl89f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJDKaVv0uM
436
+ DPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9Ms+k2Y7CI9eNqPPYJayX
437
+ 5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/NQV3Is00qVUarH9oe4kA92819uZKAnDfd
438
+ DJZkndwi92SL32HeFZRSFaB9UslLqCHJxrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2
439
+ JChzAgMBAAGjPzA9MB0GA1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYw
440
+ DwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vGkl3g
441
+ 0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfrUj94nK9NrvjVT8+a
442
+ mCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5Bw+SUEmK3TGXX8npN6o7WWWXlDLJ
443
+ s58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJUJRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ
444
+ 6rBK+1YWc26sTfcioU+tHXotRSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAi
445
+ FL39vmwLAw==
446
+ -----END CERTIFICATE-----
447
+
448
+ Sonera Class 2 Root CA
449
+ ======================
450
+ -----BEGIN CERTIFICATE-----
451
+ MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEPMA0GA1UEChMG
452
+ U29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAxMDQwNjA3Mjk0MFoXDTIxMDQw
453
+ NjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNVBAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJh
454
+ IENsYXNzMiBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3
455
+ /Ei9vX+ALTU74W+oZ6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybT
456
+ dXnt5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s3TmVToMG
457
+ f+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2EjvOr7nQKV0ba5cTppCD8P
458
+ tOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu8nYybieDwnPz3BjotJPqdURrBGAgcVeH
459
+ nfO+oJAjPYok4doh28MCAwEAAaMzMDEwDwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITT
460
+ XjwwCwYDVR0PBAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt
461
+ 0jSv9zilzqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/3DEI
462
+ cbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvDFNr450kkkdAdavph
463
+ Oe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6Tk6ezAyNlNzZRZxe7EJQY670XcSx
464
+ EtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLH
465
+ llpwrN9M
466
+ -----END CERTIFICATE-----
467
+
468
+ Camerfirma Chambers of Commerce Root
469
+ ====================================
470
+ -----BEGIN CERTIFICATE-----
471
+ MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
472
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
473
+ ZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAx
474
+ NjEzNDNaFw0zNzA5MzAxNjEzNDRaMH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZp
475
+ cm1hIFNBIENJRiBBODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3Jn
476
+ MSIwIAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0BAQEFAAOC
477
+ AQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtbunXF/KGIJPov7coISjlU
478
+ xFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0dBmpAPrMMhe5cG3nCYsS4No41XQEMIwRH
479
+ NaqbYE6gZj3LJgqcQKH0XZi/caulAGgq7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jW
480
+ DA+wWFjbw2Y3npuRVDM30pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFV
481
+ d9oKDMyXroDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIGA1Ud
482
+ EwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5jaGFtYmVyc2lnbi5v
483
+ cmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p26EpW1eLTXYGduHRooowDgYDVR0P
484
+ AQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hh
485
+ bWJlcnNpZ24ub3JnMCcGA1UdEgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYD
486
+ VR0gBFEwTzBNBgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
487
+ aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEBAAxBl8IahsAi
488
+ fJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZdp0AJPaxJRUXcLo0waLIJuvvD
489
+ L8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wN
490
+ UPf6s+xCX6ndbcj0dc97wXImsQEcXCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/n
491
+ ADydb47kMgkdTXg0eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1
492
+ erfutGWaIZDgqtCYvDi1czyL+Nw=
493
+ -----END CERTIFICATE-----
494
+
495
+ Camerfirma Global Chambersign Root
496
+ ==================================
497
+ -----BEGIN CERTIFICATE-----
498
+ MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMe
499
+ QUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1i
500
+ ZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYx
501
+ NDE4WhcNMzcwOTMwMTYxNDE4WjB9MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJt
502
+ YSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEg
503
+ MB4GA1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUAA4IBDQAw
504
+ ggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0Mi+ITaFgCPS3CU6gSS9J
505
+ 1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/sQJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8O
506
+ by4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpVeAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl
507
+ 6DJWk0aJqCWKZQbua795B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c
508
+ 8lCrEqWhz0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0TAQH/
509
+ BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1iZXJzaWduLm9yZy9j
510
+ aGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4wTcbOX60Qq+UDpfqpFDAOBgNVHQ8B
511
+ Af8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAHMCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBj
512
+ aGFtYmVyc2lnbi5vcmcwKgYDVR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9y
513
+ ZzBbBgNVHSAEVDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
514
+ bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0BAQUFAAOCAQEA
515
+ PDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUMbKGKfKX0j//U2K0X1S0E0T9Y
516
+ gOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXiryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJ
517
+ PJ7oKXqJ1/6v/2j1pReQvayZzKWGVwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4
518
+ IBHNfTIzSJRUTN3cecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREes
519
+ t2d/AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
520
+ -----END CERTIFICATE-----
521
+
522
+ XRamp Global CA Root
523
+ ====================
524
+ -----BEGIN CERTIFICATE-----
525
+ MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UE
526
+ BhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2Vj
527
+ dXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
528
+ dXRob3JpdHkwHhcNMDQxMTAxMTcxNDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMx
529
+ HjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkg
530
+ U2VydmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
531
+ dHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS638eMpSe2OAtp87ZOqCwu
532
+ IR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCPKZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMx
533
+ foArtYzAQDsRhtDLooY2YKTVMIJt2W7QDxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FE
534
+ zG+gSqmUsE3a56k0enI4qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqs
535
+ AxcZZPRaJSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNViPvry
536
+ xS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
537
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASsjVy16bYbMDYGA1UdHwQvMC0wK6Ap
538
+ oCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMC
539
+ AQEwDQYJKoZIhvcNAQEFBQADggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc
540
+ /Kh4ZzXxHfARvbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
541
+ qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLaIR9NmXmd4c8n
542
+ nxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSyi6mx5O+aGtA9aZnuqCij4Tyz
543
+ 8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQO+7ETPTsJ3xCwnR8gooJybQDJbw=
544
+ -----END CERTIFICATE-----
545
+
546
+ Go Daddy Class 2 CA
547
+ ===================
548
+ -----BEGIN CERTIFICATE-----
549
+ MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMY
550
+ VGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRp
551
+ ZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkG
552
+ A1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
553
+ RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQAD
554
+ ggENADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
555
+ 2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+qN1j3hybX2C32
556
+ qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiOr18SPaAIBQi2XKVlOARFmR6j
557
+ YGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmY
558
+ vLEHZ6IVDd2gWMZEewo+YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0O
559
+ BBYEFNLEsNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h/t2o
560
+ atTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMu
561
+ MTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwG
562
+ A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wim
563
+ PQoZ+YeAEW5p5JYXMP80kWNyOO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKt
564
+ I3lpjbi2Tc7PTMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
565
+ HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mERdEr/VxqHD3VI
566
+ Ls9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5CufReYNnyicsbkqWletNw+vHX/b
567
+ vZ8=
568
+ -----END CERTIFICATE-----
569
+
570
+ Starfield Class 2 CA
571
+ ====================
572
+ -----BEGIN CERTIFICATE-----
573
+ MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzElMCMGA1UEChMc
574
+ U3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZpZWxkIENsYXNzIDIg
575
+ Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBo
576
+ MQswCQYDVQQGEwJVUzElMCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAG
577
+ A1UECxMpU3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqG
578
+ SIb3DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf8MOh2tTY
579
+ bitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN+lq2cwQlZut3f+dZxkqZ
580
+ JRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVm
581
+ epsZGD3/cVE8MC5fvj13c7JdBmzDI1aaK4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSN
582
+ F4Azbl5KXZnJHoe0nRrA1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HF
583
+ MIHCMB0GA1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fRzt0f
584
+ hvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNo
585
+ bm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBDbGFzcyAyIENlcnRpZmljYXRpb24g
586
+ QXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGs
587
+ afPzWdqbAYcaT1epoXkJKtv3L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLM
588
+ PUxA2IGvd56Deruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
589
+ xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynpVSJYACPq4xJD
590
+ KVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEYWQPJIrSPnNVeKtelttQKbfi3
591
+ QBFGmh95DmK/D5fs4C8fF5Q=
592
+ -----END CERTIFICATE-----
593
+
594
+ StartCom Certification Authority
595
+ ================================
596
+ -----BEGIN CERTIFICATE-----
597
+ MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
598
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
599
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
600
+ NjM2WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
601
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
602
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
603
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
604
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
605
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
606
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
607
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
608
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
609
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
610
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
611
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
612
+ 37uMdBNSSwIDAQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
613
+ FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9jZXJ0LnN0YXJ0
614
+ Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3JsLnN0YXJ0Y29tLm9yZy9zZnNj
615
+ YS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFMBgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUH
616
+ AgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRw
617
+ Oi8vY2VydC5zdGFydGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYg
618
+ U3RhcnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlhYmlsaXR5
619
+ LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2YgdGhlIFN0YXJ0Q29tIENl
620
+ cnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFpbGFibGUgYXQgaHR0cDovL2NlcnQuc3Rh
621
+ cnRjb20ub3JnL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilT
622
+ dGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOC
623
+ AgEAFmyZ9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8jhvh
624
+ 3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUWFjgKXlf2Ysd6AgXm
625
+ vB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJzewT4F+irsfMuXGRuczE6Eri8sxHk
626
+ fY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3
627
+ fsNrarnDy0RLrHiQi+fHLB5LEUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZ
628
+ EoalHmdkrQYuL6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
629
+ yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuCO3NJo2pXh5Tl
630
+ 1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6Vum0ABj6y6koQOdjQK/W/7HW/
631
+ lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkyShNOsF/5oirpt9P/FlUQqmMGqz9IgcgA38coro
632
+ g14=
633
+ -----END CERTIFICATE-----
634
+
635
+ Taiwan GRCA
636
+ ===========
637
+ -----BEGIN CERTIFICATE-----
638
+ MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/MQswCQYDVQQG
639
+ EwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4X
640
+ DTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1owPzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dv
641
+ dmVybm1lbnQgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQAD
642
+ ggIPADCCAgoCggIBAJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qN
643
+ w8XRIePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1qgQdW8or5
644
+ BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKyyhwOeYHWtXBiCAEuTk8O
645
+ 1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAtsF/tnyMKtsc2AtJfcdgEWFelq16TheEfO
646
+ htX7MfP6Mb40qij7cEwdScevLJ1tZqa2jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wov
647
+ J5pGfaENda1UhhXcSTvxls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7
648
+ Q3hub/FCVGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHKYS1t
649
+ B6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoHEgKXTiCQ8P8NHuJB
650
+ O9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThNXo+EHWbNxWCWtFJaBYmOlXqYwZE8
651
+ lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1UdDgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNV
652
+ HRMEBTADAQH/MDkGBGcqBwAEMTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg2
653
+ 09yewDL7MTqKUWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
654
+ TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyfqzvS/3WXy6Tj
655
+ Zwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaKZEk9GhiHkASfQlK3T8v+R0F2
656
+ Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFEJPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlU
657
+ D7gsL0u8qV1bYH+Mh6XgUmMqvtg7hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6Qz
658
+ DxARvBMB1uUO07+1EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+Hbk
659
+ Z6MmnD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WXudpVBrkk
660
+ 7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44VbnzssQwmSNOXfJIoRIM3BKQ
661
+ CZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDeLMDDav7v3Aun+kbfYNucpllQdSNpc5Oy
662
+ +fwC00fmcc4QAu4njIT/rEUNE1yDMuAlpYYsfPQS
663
+ -----END CERTIFICATE-----
664
+
665
+ DigiCert Assured ID Root CA
666
+ ===========================
667
+ -----BEGIN CERTIFICATE-----
668
+ MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQG
669
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
670
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzEx
671
+ MTEwMDAwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
672
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0Ew
673
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7cJpSIqvTO
674
+ 9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYPmDI2dsze3Tyoou9q+yHy
675
+ UmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW
676
+ /lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpy
677
+ oeb6pNnVFzF1roV9Iq4/AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whf
678
+ GHdPAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRF
679
+ 66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYunpyGd823IDzANBgkq
680
+ hkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRCdWKuh+vy1dneVrOfzM4UKLkNl2Bc
681
+ EkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTffwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38Fn
682
+ SbNd67IJKusm7Xi+fT8r87cmNW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i
683
+ 8b5QZ7dsvfPxH2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
684
+ +o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
685
+ -----END CERTIFICATE-----
686
+
687
+ DigiCert Global Root CA
688
+ =======================
689
+ -----BEGIN CERTIFICATE-----
690
+ MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQG
691
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
692
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBDQTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAw
693
+ MDAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
694
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkq
695
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsBCSDMAZOn
696
+ TjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97nh6Vfe63SKMI2tavegw5
697
+ BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt43C/dxC//AH2hdmoRBBYMql1GNXRor5H
698
+ 4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7PT19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y
699
+ 7vrTC0LUq7dBMtoM1O/4gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQAB
700
+ o2MwYTAOBgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbRTLtm
701
+ 8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUwDQYJKoZIhvcNAQEF
702
+ BQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/EsrhMAtudXH/vTBH1jLuG2cenTnmCmr
703
+ EbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIt
704
+ tep3Sp+dWOIrWcBAI+0tKIJFPnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886
705
+ UAb3LujEV0lsYSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
706
+ CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
707
+ -----END CERTIFICATE-----
708
+
709
+ DigiCert High Assurance EV Root CA
710
+ ==================================
711
+ -----BEGIN CERTIFICATE-----
712
+ MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQG
713
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSsw
714
+ KQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5jZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAw
715
+ MFoXDTMxMTExMDAwMDAwMFowbDELMAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZ
716
+ MBcGA1UECxMQd3d3LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFu
717
+ Y2UgRVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm+9S75S0t
718
+ Mqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTWPNt0OKRKzE0lgvdKpVMS
719
+ OO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEMxChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3
720
+ MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFBIk5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQ
721
+ NAQTXKFx01p8VdteZOE3hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUe
722
+ h10aUAsgEsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQFMAMB
723
+ Af8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaAFLE+w2kD+L9HAdSY
724
+ JhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3NecnzyIZgYIVyHbIUf4KmeqvxgydkAQ
725
+ V8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6zeM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFp
726
+ myPInngiK3BD41VHMWEZ71jFhS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkK
727
+ mNEVX58Svnw2Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
728
+ vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep+OkuE6N36B9K
729
+ -----END CERTIFICATE-----
730
+
731
+ Certplus Class 2 Primary CA
732
+ ===========================
733
+ -----BEGIN CERTIFICATE-----
734
+ MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAwPTELMAkGA1UE
735
+ BhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFzcyAyIFByaW1hcnkgQ0EwHhcN
736
+ OTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2Vy
737
+ dHBsdXMxGzAZBgNVBAMTEkNsYXNzIDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEP
738
+ ADCCAQoCggEBANxQltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR
739
+ 5aiRVhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyLkcAbmXuZ
740
+ Vg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCdEgETjdyAYveVqUSISnFO
741
+ YFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yasH7WLO7dDWWuwJKZtkIvEcupdM5i3y95e
742
+ e++U8Rs+yskhwcWYAqqi9lt3m/V+llU0HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRME
743
+ CDAGAQH/AgEKMAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJ
744
+ YIZIAYb4QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMuY29t
745
+ L0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/AN9WM2K191EBkOvD
746
+ P9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8yfFC82x/xXp8HVGIutIKPidd3i1R
747
+ TtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMRFcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+
748
+ 7UCmnYR0ObncHoUW2ikbhiMAybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW
749
+ //1IMwrh3KWBkJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
750
+ l7+ijrRU
751
+ -----END CERTIFICATE-----
752
+
753
+ DST Root CA X3
754
+ ==============
755
+ -----BEGIN CERTIFICATE-----
756
+ MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/MSQwIgYDVQQK
757
+ ExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMTDkRTVCBSb290IENBIFgzMB4X
758
+ DTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVowPzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1
759
+ cmUgVHJ1c3QgQ28uMRcwFQYDVQQDEw5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQAD
760
+ ggEPADCCAQoCggEBAN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmT
761
+ rE4Orz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEqOLl5CjH9
762
+ UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9bxiqKqy69cK3FCxolkHRy
763
+ xXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40d
764
+ utolucbY38EVAjqr2m7xPi71XAicPNaDaeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0T
765
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQ
766
+ MA0GCSqGSIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69ikug
767
+ dB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXrAvHRAosZy5Q6XkjE
768
+ GB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZzR8srzJmwN0jP41ZL9c8PDHIyh8bw
769
+ RLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubS
770
+ fZGL+T0yjWW06XyxV3bqxbYoOb8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
771
+ -----END CERTIFICATE-----
772
+
773
+ DST ACES CA X6
774
+ ==============
775
+ -----BEGIN CERTIFICATE-----
776
+ MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQG
777
+ EwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QxETAPBgNVBAsTCERTVCBBQ0VT
778
+ MRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0wMzExMjAyMTE5NThaFw0xNzExMjAyMTE5NTha
779
+ MFsxCzAJBgNVBAYTAlVTMSAwHgYDVQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UE
780
+ CxMIRFNUIEFDRVMxFzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOC
781
+ AQ8AMIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPuktKe1jzI
782
+ DZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7gLFViYsx+tC3dr5BPTCa
783
+ pCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZHfAjIgrrep4c9oW24MFbCswKBXy314pow
784
+ GCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4aahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPy
785
+ MjwmR/onJALJfh1biEITajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1Ud
786
+ EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rkc3Qu
787
+ Y29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnRy
788
+ dXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMtaW5kZXguaHRtbDAdBgNVHQ4EFgQU
789
+ CXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZIhvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V2
790
+ 5FYrnJmQ6AgwbN99Pe7lv7UkQIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6t
791
+ Fr8hlxCBPeP/h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
792
+ nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpRrscL9yuwNwXs
793
+ vFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf29w4LTJxoeHtxMcfrHuBnQfO3
794
+ oKfN5XozNmr6mis=
795
+ -----END CERTIFICATE-----
796
+
797
+ SwissSign Gold CA - G2
798
+ ======================
799
+ -----BEGIN CERTIFICATE-----
800
+ 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
826
+ -----END CERTIFICATE-----
827
+
828
+ SwissSign Silver CA - G2
829
+ ========================
830
+ -----BEGIN CERTIFICATE-----
831
+ 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
857
+ -----END CERTIFICATE-----
858
+
859
+ GeoTrust Primary Certification Authority
860
+ ========================================
861
+ -----BEGIN CERTIFICATE-----
862
+ MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQG
863
+ EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMoR2VvVHJ1c3QgUHJpbWFyeSBD
864
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgx
865
+ CzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQ
866
+ cmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
867
+ CgKCAQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9AWbK7hWN
868
+ b6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjAZIVcFU2Ix7e64HXprQU9
869
+ nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE07e9GceBrAqg1cmuXm2bgyxx5X9gaBGge
870
+ RwLmnWDiNpcB3841kt++Z8dtd1k7j53WkBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGt
871
+ tm/81w7a4DSwDRp35+MImO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
872
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJKoZI
873
+ hvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ16CePbJC/kRYkRj5K
874
+ Ts4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl4b7UVXGYNTq+k+qurUKykG/g/CFN
875
+ NWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6KoKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHa
876
+ Floxt/m0cYASSJlyc1pZU8FjUjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG
877
+ 1riR/aYNKxoUAT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
878
+ -----END CERTIFICATE-----
879
+
880
+ thawte Primary Root CA
881
+ ======================
882
+ -----BEGIN CERTIFICATE-----
883
+ MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCBqTELMAkGA1UE
884
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
885
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
886
+ cml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3
887
+ MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwg
888
+ SW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMv
889
+ KGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAMT
890
+ FnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCs
891
+ oPD7gFnUnMekz52hWXMJEEUMDSxuaPFsW0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ
892
+ 1CRfBsDMRJSUjQJib+ta3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGc
893
+ q/gcfomk6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6Sk/K
894
+ aAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94JNqR32HuHUETVPm4p
895
+ afs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYD
896
+ VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XPr87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUF
897
+ AAOCAQEAeRHAS7ORtvzw6WfUDW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeE
898
+ uzLlQRHAd9mzYJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
899
+ xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2/qxAeeWsEG89
900
+ jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/LHbTY5xZ3Y+m4Q6gLkH3LpVH
901
+ z7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7jVaMaA==
902
+ -----END CERTIFICATE-----
903
+
904
+ VeriSign Class 3 Public Primary Certification Authority - G5
905
+ ============================================================
906
+ -----BEGIN CERTIFICATE-----
907
+ MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
908
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
909
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
910
+ IHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRp
911
+ ZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCB
912
+ yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2ln
913
+ biBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2lnbiwgSW5jLiAtIEZvciBh
914
+ dXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmlt
915
+ YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
916
+ ggEKAoIBAQCvJAgIKXo1nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKz
917
+ j/i5Vbext0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIzSdhD
918
+ Y2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQGBO+QueQA5N06tRn/
919
+ Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+rCpSx4/VBEnkjWNHiDxpg8v+R70r
920
+ fk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/
921
+ BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2Uv
922
+ Z2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
923
+ aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKvMzEzMA0GCSqG
924
+ SIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzEp6B4Eq1iDkVwZMXnl2YtmAl+
925
+ X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKE
926
+ KQsTb47bDN0lAtukixlE0kF6BWlKWE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiC
927
+ Km0oHw0LxOXnGiYZ4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vE
928
+ ZV8NhnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
929
+ -----END CERTIFICATE-----
930
+
931
+ SecureTrust CA
932
+ ==============
933
+ -----BEGIN CERTIFICATE-----
934
+ MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBIMQswCQYDVQQG
935
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xFzAVBgNVBAMTDlNlY3VyZVRy
936
+ dXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIzMTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAe
937
+ BgNVBAoTF1NlY3VyZVRydXN0IENvcnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCC
938
+ ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQX
939
+ OZEzZum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO0gMdA+9t
940
+ DWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIaowW8xQmxSPmjL8xk037uH
941
+ GFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b
942
+ 01k/unK8RCSc43Oz969XL0Imnal0ugBS8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmH
943
+ ursCAwEAAaOBnTCBmjATBgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/
944
+ BAUwAwEB/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCegJYYj
945
+ aHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
946
+ KoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt36Z3q059c4EVlew3KW+JwULKUBRSu
947
+ SceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHf
948
+ mbx8IVQr5Fiiu1cprp6poxkmD5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZ
949
+ nMUFdAvnZyPSCPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
950
+ 3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
951
+ -----END CERTIFICATE-----
952
+
953
+ Secure Global CA
954
+ ================
955
+ -----BEGIN CERTIFICATE-----
956
+ MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBKMQswCQYDVQQG
957
+ EwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBH
958
+ bG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkxMjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEg
959
+ MB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwg
960
+ Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jx
961
+ YDiJiQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa/FHtaMbQ
962
+ bqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJjnIFHovdRIWCQtBJwB1g
963
+ 8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnIHmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYV
964
+ HDGA76oYa8J719rO+TMg1fW9ajMtgQT7sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi
965
+ 0XPnj3pDAgMBAAGjgZ0wgZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1Ud
966
+ EwEB/wQFMAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCswKaAn
967
+ oCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsGAQQBgjcVAQQDAgEA
968
+ MA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0LURYD7xh8yOOvaliTFGCRsoTciE6+
969
+ OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXOH0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cn
970
+ CDpOGR86p1hcF895P4vkp9MmI50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/5
971
+ 3CYNv6ZHdAbYiNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
972
+ f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
973
+ -----END CERTIFICATE-----
974
+
975
+ COMODO Certification Authority
976
+ ==============================
977
+ -----BEGIN CERTIFICATE-----
978
+ MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCBgTELMAkGA1UE
979
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
980
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNVBAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1
981
+ dGhvcml0eTAeFw0wNjEyMDEwMDAwMDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEb
982
+ MBkGA1UECBMSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFD
983
+ T01PRE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
984
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3UcEbVASY06m/weaKXTuH
985
+ +7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI2GqGd0S7WWaXUF601CxwRM/aN5VCaTww
986
+ xHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV
987
+ 4EajcNxo2f8ESIl33rXp+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA
988
+ 1KGzqSX+DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5OnKVI
989
+ rLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW/zAOBgNVHQ8BAf8E
990
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6gPKA6hjhodHRwOi8vY3JsLmNvbW9k
991
+ b2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9uQXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOC
992
+ AQEAPpiem/Yb6dc5t3iuHXIYSdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CP
993
+ OGEIqB6BCsAvIC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
994
+ RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4zJVSk/BwJVmc
995
+ IGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5ddBA6+C4OmF4O5MBKgxTMVBbkN
996
+ +8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IBZQ==
997
+ -----END CERTIFICATE-----
998
+
999
+ Network Solutions Certificate Authority
1000
+ =======================================
1001
+ -----BEGIN CERTIFICATE-----
1002
+ MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQG
1003
+ EwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydOZXR3b3Jr
1004
+ IFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMx
1005
+ MjM1OTU5WjBiMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
1006
+ MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0G
1007
+ CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwzc7MEL7xx
1008
+ jOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPPOCwGJgl6cvf6UDL4wpPT
1009
+ aaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rlmGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXT
1010
+ crA/vGp97Eh/jcOrqnErU2lBUzS1sLnFBgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc
1011
+ /Qzpf14Dl847ABSHJ3A4qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMB
1012
+ AAGjgZcwgZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIBBjAP
1013
+ BgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwubmV0c29sc3NsLmNv
1014
+ bS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3JpdHkuY3JsMA0GCSqGSIb3DQEBBQUA
1015
+ A4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc86fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q
1016
+ 4LqILPxFzBiwmZVRDuwduIj/h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/
1017
+ GGUsyfJj4akH/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
1018
+ wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHNpGxlaKFJdlxD
1019
+ ydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
1020
+ -----END CERTIFICATE-----
1021
+
1022
+ COMODO ECC Certification Authority
1023
+ ==================================
1024
+ -----BEGIN CERTIFICATE-----
1025
+ MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTELMAkGA1UEBhMC
1026
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
1027
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBB
1028
+ dXRob3JpdHkwHhcNMDgwMzA2MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0Ix
1029
+ GzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMR
1030
+ Q09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRo
1031
+ b3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSRFtSrYpn1PlILBs5BAH+X
1032
+ 4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0JcfRK9ChQtP6IHG4/bC8vCVlbpVsLM5ni
1033
+ wz2J+Wos77LTBumjQjBAMB0GA1UdDgQWBBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8E
1034
+ BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VG
1035
+ FAkK+qDmfQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdvGDeA
1036
+ U/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
1037
+ -----END CERTIFICATE-----
1038
+
1039
+ Security Communication EV RootCA1
1040
+ =================================
1041
+ -----BEGIN CERTIFICATE-----
1042
+ MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1043
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMhU2VjdXJpdHkgQ29tbXVuaWNh
1044
+ dGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIzMloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UE
1045
+ BhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNl
1046
+ Y3VyaXR5IENvbW11bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1047
+ AQoCggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSERMqm4miO
1048
+ /VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gOzXppFodEtZDkBp2uoQSX
1049
+ WHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4z
1050
+ ZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDFMxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4
1051
+ bepJz11sS6/vmsJWXMY1VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK
1052
+ 9U2vP9eCOKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
1053
+ SIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HWtWS3irO4G8za+6xm
1054
+ iEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZq51ihPZRwSzJIxXYKLerJRO1RuGG
1055
+ Av8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDbEJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnW
1056
+ mHyojf6GPgcWkuF75x3sM3Z+Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEW
1057
+ T1MKZPlO9L9OVL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490
1058
+ -----END CERTIFICATE-----
1059
+
1060
+ OISTE WISeKey Global Root GA CA
1061
+ ===============================
1062
+ -----BEGIN CERTIFICATE-----
1063
+ MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCBijELMAkGA1UE
1064
+ BhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHlyaWdodCAoYykgMjAwNTEiMCAG
1065
+ A1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBH
1066
+ bG9iYWwgUm9vdCBHQSBDQTAeFw0wNTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYD
1067
+ VQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIw
1068
+ IAYDVQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5
1069
+ IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAy0+zAJs9
1070
+ Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxRVVuuk+g3/ytr6dTqvirdqFEr12bDYVxg
1071
+ Asj1znJ7O7jyTmUIms2kahnBAbtzptf2w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbD
1072
+ d50kc3vkDIzh2TbhmYsFmQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ
1073
+ /yxViJGg4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t94B3R
1074
+ LoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw
1075
+ AwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQwEAYJKwYBBAGCNxUBBAMCAQAwDQYJ
1076
+ KoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOxSPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vIm
1077
+ MMkQyh2I+3QZH4VFvbBsUfk2ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4
1078
+ +vg1YFkCExh8vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa
1079
+ hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZiFj4A4xylNoEY
1080
+ okxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ/L7fCg0=
1081
+ -----END CERTIFICATE-----
1082
+
1083
+ Certigna
1084
+ ========
1085
+ -----BEGIN CERTIFICATE-----
1086
+ MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNVBAYTAkZSMRIw
1087
+ EAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4XDTA3MDYyOTE1MTMwNVoXDTI3
1088
+ MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwI
1089
+ Q2VydGlnbmEwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7q
1090
+ XOEm7RFHYeGifBZ4QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyH
1091
+ GxnygQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbwzBfsV1/p
1092
+ ogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q130yGLMLLGq/jj8UEYkg
1093
+ DncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKf
1094
+ Irjxwo1p3Po6WAbfAgMBAAGjgbwwgbkwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQ
1095
+ tCRZvgHyUtVF9lo53BEwZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJ
1096
+ BgNVBAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzjAQ/J
1097
+ SP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG9w0BAQUFAAOCAQEA
1098
+ hQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8hbV6lUmPOEvjvKtpv6zf+EwLHyzs+
1099
+ ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFncfca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1klu
1100
+ PBS1xp81HlDQwY9qcEQCYsuuHWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY
1101
+ 1gkIl2PlwS6wt0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw
1102
+ WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg==
1103
+ -----END CERTIFICATE-----
1104
+
1105
+ Deutsche Telekom Root CA 2
1106
+ ==========================
1107
+ -----BEGIN CERTIFICATE-----
1108
+ MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMT
1109
+ RGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEG
1110
+ A1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENBIDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5
1111
+ MjM1OTAwWjBxMQswCQYDVQQGEwJERTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0G
1112
+ A1UECxMWVC1UZWxlU2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBS
1113
+ b290IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEUha88EOQ5
1114
+ bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhCQN/Po7qCWWqSG6wcmtoI
1115
+ KyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1MjwrrFDa1sPeg5TKqAyZMg4ISFZbavva4VhY
1116
+ AUlfckE8FQYBjl2tqriTtM2e66foai1SNNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aK
1117
+ Se5TBY8ZTNXeWHmb0mocQqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTV
1118
+ jlsB9WoHtxa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAPBgNV
1119
+ HRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAlGRZrTlk5ynr
1120
+ E/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756AbrsptJh6sTtU6zkXR34ajgv8HzFZMQSy
1121
+ zhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpaIzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8
1122
+ rZ7/gFnkm0W09juwzTkZmDLl6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4G
1123
+ dyd1Lx+4ivn+xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
1124
+ Cm26OWMohpLzGITY+9HPBVZkVw==
1125
+ -----END CERTIFICATE-----
1126
+
1127
+ Cybertrust Global Root
1128
+ ======================
1129
+ -----BEGIN CERTIFICATE-----
1130
+ MIIDoTCCAomgAwIBAgILBAAAAAABD4WqLUgwDQYJKoZIhvcNAQEFBQAwOzEYMBYGA1UEChMPQ3li
1131
+ ZXJ0cnVzdCwgSW5jMR8wHQYDVQQDExZDeWJlcnRydXN0IEdsb2JhbCBSb290MB4XDTA2MTIxNTA4
1132
+ MDAwMFoXDTIxMTIxNTA4MDAwMFowOzEYMBYGA1UEChMPQ3liZXJ0cnVzdCwgSW5jMR8wHQYDVQQD
1133
+ ExZDeWJlcnRydXN0IEdsb2JhbCBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA
1134
+ +Mi8vRRQZhP/8NN57CPytxrHjoXxEnOmGaoQ25yiZXRadz5RfVb23CO21O1fWLE3TdVJDm71aofW
1135
+ 0ozSJ8bi/zafmGWgE07GKmSb1ZASzxQG9Dvj1Ci+6A74q05IlG2OlTEQXO2iLb3VOm2yHLtgwEZL
1136
+ AfVJrn5GitB0jaEMAs7u/OePuGtm839EAL9mJRQr3RAwHQeWP032a7iPt3sMpTjr3kfb1V05/Iin
1137
+ 89cqdPHoWqI7n1C6poxFNcJQZZXcY4Lv3b93TZxiyWNzFtApD0mpSPCzqrdsxacwOUBdrsTiXSZT
1138
+ 8M4cIwhhqJQZugRiQOwfOHB3EgZxpzAYXSUnpQIDAQABo4GlMIGiMA4GA1UdDwEB/wQEAwIBBjAP
1139
+ BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBS2CHsNesysIEyGVjJez6tuhS1wVzA/BgNVHR8EODA2
1140
+ MDSgMqAwhi5odHRwOi8vd3d3Mi5wdWJsaWMtdHJ1c3QuY29tL2NybC9jdC9jdHJvb3QuY3JsMB8G
1141
+ A1UdIwQYMBaAFLYIew16zKwgTIZWMl7Pq26FLXBXMA0GCSqGSIb3DQEBBQUAA4IBAQBW7wojoFRO
1142
+ lZfJ+InaRcHUowAl9B8Tq7ejhVhpwjCt2BWKLePJzYFa+HMjWqd8BfP9IjsO0QbE2zZMcwSO5bAi
1143
+ 5MXzLqXZI+O4Tkogp24CJJ8iYGd7ix1yCcUxXOl5n4BHPa2hCwcUPUf/A2kaDAtE52Mlp3+yybh2
1144
+ hO0j9n0Hq0V+09+zv+mKts2oomcrUtW3ZfA5TGOgkXmTUg9U3YO7n9GPp1Nzw8v/MOx8BLjYRB+T
1145
+ X3EJIrduPuocA06dGiBh+4E37F78CkWr1+cXVdCg6mCbpvbjjFspwgZgFJ0tl0ypkxWdYcQBX0jW
1146
+ WL1WMRJOEcgh4LMRkWXbtKaIOM5V
1147
+ -----END CERTIFICATE-----
1148
+
1149
+ ePKI Root Certification Authority
1150
+ =================================
1151
+ -----BEGIN CERTIFICATE-----
1152
+ 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
1178
+ -----END CERTIFICATE-----
1179
+
1180
+ T\xc3\x9c\x42\xC4\xB0TAK UEKAE K\xC3\xB6k Sertifika Hizmet Sa\xC4\x9Flay\xc4\xb1\x63\xc4\xb1s\xc4\xb1 - S\xC3\xBCr\xC3\xBCm 3
1181
+ =============================================================================================================================
1182
+ -----BEGIN CERTIFICATE-----
1183
+ MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRSMRgwFgYDVQQH
1184
+ DA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJpbGltc2VsIHZlIFRla25vbG9q
1185
+ aWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSwVEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ry
1186
+ b25payB2ZSBLcmlwdG9sb2ppIEFyYcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNV
1187
+ BAsMGkthbXUgU2VydGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUg
1188
+ S8O2ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAeFw0wNzA4
1189
+ MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIxGDAWBgNVBAcMD0dlYnpl
1190
+ IC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmlsaW1zZWwgdmUgVGVrbm9sb2ppayBBcmHF
1191
+ n3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBUQUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZl
1192
+ IEtyaXB0b2xvamkgQXJhxZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2Ft
1193
+ dSBTZXJ0aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7ZrIFNl
1194
+ cnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIBIjANBgkqhkiG9w0B
1195
+ AQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4hgb46ezzb8R1Sf1n68yJMlaCQvEhO
1196
+ Eav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yKO7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1
1197
+ xnnRFDDtG1hba+818qEhTsXOfJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR
1198
+ 6Oqeyjh1jmKwlZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL
1199
+ hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQIDAQABo0IwQDAd
1200
+ BgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
1201
+ MAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmPNOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4
1202
+ N5EY3ATIZJkrGG2AA1nJrvhY0D7twyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLT
1203
+ y9LQQfMmNkqblWwM7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYh
1204
+ LBOhgLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5noN+J1q2M
1205
+ dqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUsyZyQ2uypQjyttgI=
1206
+ -----END CERTIFICATE-----
1207
+
1208
+ certSIGN ROOT CA
1209
+ ================
1210
+ -----BEGIN CERTIFICATE-----
1211
+ MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYTAlJPMREwDwYD
1212
+ VQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTAeFw0wNjA3MDQxNzIwMDRa
1213
+ Fw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UE
1214
+ CxMQY2VydFNJR04gUk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7I
1215
+ JUqOtdu0KBuqV5Do0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHH
1216
+ rfAQUySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5dRdY4zTW2
1217
+ ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQOA7+j0xbm0bqQfWwCHTD
1218
+ 0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwvJoIQ4uNllAoEwF73XVv4EOLQunpL+943
1219
+ AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B
1220
+ Af8EBAMCAcYwHQYDVR0OBBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IB
1221
+ AQA+0hyJLjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecYMnQ8
1222
+ SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ44gx+FkagQnIl6Z0
1223
+ x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6IJd1hJyMctTEHBDa0GpC9oHRxUIlt
1224
+ vBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNwi/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7Nz
1225
+ TogVZ96edhBiIL5VaZVDADlN9u6wWk5JRFRYX0KD
1226
+ -----END CERTIFICATE-----
1227
+
1228
+ GeoTrust Primary Certification Authority - G3
1229
+ =============================================
1230
+ -----BEGIN CERTIFICATE-----
1231
+ MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UE
1232
+ BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA4IEdlb1RydXN0
1233
+ IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFy
1234
+ eSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIz
1235
+ NTk1OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAo
1236
+ YykgMjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMT
1237
+ LUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMzCCASIwDQYJKoZI
1238
+ hvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz+uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5j
1239
+ K/BGvESyiaHAKAxJcCGVn2TAppMSAmUmhsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdE
1240
+ c5IiaacDiGydY8hS2pgn5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3C
1241
+ IShwiP/WJmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exALDmKu
1242
+ dlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZChuOl1UcCAwEAAaNC
1243
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMR5yo6hTgMdHNxr
1244
+ 2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IBAQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9
1245
+ cr5HqQ6XErhK8WTTOd8lNNTBzU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbE
1246
+ Ap7aDHdlDkQNkv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD
1247
+ AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUHSJsMC8tJP33s
1248
+ t/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2Gspki4cErx5z481+oghLrGREt
1249
+ -----END CERTIFICATE-----
1250
+
1251
+ thawte Primary Root CA - G2
1252
+ ===========================
1253
+ -----BEGIN CERTIFICATE-----
1254
+ MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDELMAkGA1UEBhMC
1255
+ VVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMpIDIwMDcgdGhhd3RlLCBJbmMu
1256
+ IC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3Qg
1257
+ Q0EgLSBHMjAeFw0wNzExMDUwMDAwMDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEV
1258
+ MBMGA1UEChMMdGhhd3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBG
1259
+ b3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAt
1260
+ IEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/BebfowJPDQfGAFG6DAJS
1261
+ LSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6papu+7qzcMBniKI11KOasf2twu8x+qi5
1262
+ 8/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQU
1263
+ mtgAMADna3+FGO6Lts6KDPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUN
1264
+ G4k8VIZ3KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41oxXZ3K
1265
+ rr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg==
1266
+ -----END CERTIFICATE-----
1267
+
1268
+ thawte Primary Root CA - G3
1269
+ ===========================
1270
+ -----BEGIN CERTIFICATE-----
1271
+ MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCBrjELMAkGA1UE
1272
+ BhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2
1273
+ aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIwMDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhv
1274
+ cml6ZWQgdXNlIG9ubHkxJDAiBgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0w
1275
+ ODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh
1276
+ d3RlLCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9uMTgwNgYD
1277
+ VQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTEkMCIG
1278
+ A1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
1279
+ MIIBCgKCAQEAsr8nLPvb2FvdeHsbnndmgcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2At
1280
+ P0LMqmsywCPLLEHd5N/8YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC
1281
+ +BsUa0Lfb1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS99irY
1282
+ 7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2SzhkGcuYMXDhpxwTW
1283
+ vGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUkOQIDAQABo0IwQDAPBgNVHRMBAf8E
1284
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJ
1285
+ KoZIhvcNAQELBQADggEBABpA2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweK
1286
+ A3rD6z8KLFIWoCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu
1287
+ t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7cKUGRIjxpp7sC
1288
+ 8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fMm7v/OeZWYdMKp8RcTGB7BXcm
1289
+ er/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZuMdRAGmI0Nj81Aa6sY6A=
1290
+ -----END CERTIFICATE-----
1291
+
1292
+ GeoTrust Primary Certification Authority - G2
1293
+ =============================================
1294
+ -----BEGIN CERTIFICATE-----
1295
+ MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDELMAkGA1UEBhMC
1296
+ VVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChjKSAyMDA3IEdlb1RydXN0IElu
1297
+ Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBD
1298
+ ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1
1299
+ OVowgZgxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg
1300
+ MjAwNyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNVBAMTLUdl
1301
+ b1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjB2MBAGByqGSM49AgEG
1302
+ BSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcLSo17VDs6bl8VAsBQps8lL33KSLjHUGMc
1303
+ KiEIfJo22Av+0SbFWDEwKCXzXV2juLaltJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYD
1304
+ VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+
1305
+ EVXVMAoGCCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGTqQ7m
1306
+ ndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBuczrD6ogRLQy7rQkgu2
1307
+ npaqBA+K
1308
+ -----END CERTIFICATE-----
1309
+
1310
+ VeriSign Universal Root Certification Authority
1311
+ ===============================================
1312
+ -----BEGIN CERTIFICATE-----
1313
+ MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCBvTELMAkGA1UE
1314
+ BhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBO
1315
+ ZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVk
1316
+ IHVzZSBvbmx5MTgwNgYDVQQDEy9WZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9u
1317
+ IEF1dGhvcml0eTAeFw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJV
1318
+ UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
1319
+ cmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
1320
+ IG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNhbCBSb290IENlcnRpZmljYXRpb24gQXV0
1321
+ aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj
1322
+ 1mCOkdeQmIN65lgZOIzF9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGP
1323
+ MiJhgsWHH26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+HLL72
1324
+ 9fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN/BMReYTtXlT2NJ8I
1325
+ AfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPTrJ9VAMf2CGqUuV/c4DPxhGD5WycR
1326
+ tPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0G
1327
+ CCsGAQUFBwEMBGEwX6FdoFswWTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2O
1328
+ a8PPgGrUSBgsexkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud
1329
+ DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4sAPmLGd75JR3
1330
+ Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+seQxIcaBlVZaDrHC1LGmWazx
1331
+ Y8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTx
1332
+ P/jgdFcrGJ2BtMQo2pSXpXDrrB2+BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+P
1333
+ wGZsY6rp2aQW9IHRlRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4
1334
+ mJO37M2CYfE45k+XmCpajQ==
1335
+ -----END CERTIFICATE-----
1336
+
1337
+ VeriSign Class 3 Public Primary Certification Authority - G4
1338
+ ============================================================
1339
+ -----BEGIN CERTIFICATE-----
1340
+ MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjELMAkGA1UEBhMC
1341
+ VVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3
1342
+ b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVz
1343
+ ZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmlj
1344
+ YXRpb24gQXV0aG9yaXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjEL
1345
+ MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJpU2lnbiBU
1346
+ cnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRo
1347
+ b3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5
1348
+ IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8
1349
+ Utpkmw4tXNherJI9/gHmGUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGz
1350
+ rl0Bp3vefLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUwAwEB
1351
+ /zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEw
1352
+ HzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVyaXNpZ24u
1353
+ Y29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMWkf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMD
1354
+ A2gAMGUCMGYhDBgmYFo4e1ZC4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIx
1355
+ AJw9SDkjOVgaFRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA==
1356
+ -----END CERTIFICATE-----
1357
+
1358
+ NetLock Arany (Class Gold) Főtanúsítvány
1359
+ ========================================
1360
+ -----BEGIN CERTIFICATE-----
1361
+ MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQGEwJIVTERMA8G
1362
+ A1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3MDUGA1UECwwuVGFuw7pzw610
1363
+ dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBB
1364
+ cmFueSAoQ2xhc3MgR29sZCkgRsWRdGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgx
1365
+ MjA2MTUwODIxWjCBpzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxO
1366
+ ZXRMb2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlmaWNhdGlv
1367
+ biBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNzIEdvbGQpIEbFkXRhbsO6
1368
+ c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxCRec75LbRTDofTjl5Bu
1369
+ 0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrTlF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw
1370
+ /HpYzY6b7cNGbIRwXdrzAZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAk
1371
+ H3B5r9s5VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRGILdw
1372
+ fzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2BJtr+UBdADTHLpl1
1373
+ neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAGAQH/AgEEMA4GA1UdDwEB/wQEAwIB
1374
+ BjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2MU9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwW
1375
+ qZw8UQCgwBEIBaeZ5m8BiFRhbvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTta
1376
+ YtOUZcTh5m2C+C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC
1377
+ bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2FuLjbvrW5Kfna
1378
+ NwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2XjG4Kvte9nHfRCaexOYNkbQu
1379
+ dZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E=
1380
+ -----END CERTIFICATE-----
1381
+
1382
+ Staat der Nederlanden Root CA - G2
1383
+ ==================================
1384
+ -----BEGIN CERTIFICATE-----
1385
+ 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
1411
+ 66+KAQ==
1412
+ -----END CERTIFICATE-----
1413
+
1414
+ Hongkong Post Root CA 1
1415
+ =======================
1416
+ -----BEGIN CERTIFICATE-----
1417
+ MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoT
1418
+ DUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMB4XDTAzMDUx
1419
+ NTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkGA1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25n
1420
+ IFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEF
1421
+ AAOCAQ8AMIIBCgKCAQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1
1422
+ ApzQjVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEnPzlTCeqr
1423
+ auh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjhZY4bXSNmO7ilMlHIhqqh
1424
+ qZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9nnV0ttgCXjqQesBCNnLsak3c78QA3xMY
1425
+ V18meMjWCnl3v/evt3a5pQuEF10Q6m/hq5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNV
1426
+ HRMBAf8ECDAGAQH/AgEDMA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7i
1427
+ h9legYsCmEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI37pio
1428
+ l7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clBoiMBdDhViw+5Lmei
1429
+ IAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJsEhTkYY2sEJCehFC78JZvRZ+K88ps
1430
+ T/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpOfMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilT
1431
+ c4afU9hDDl3WY4JxHYB0yvbiAmvZWg==
1432
+ -----END CERTIFICATE-----
1433
+
1434
+ SecureSign RootCA11
1435
+ ===================
1436
+ -----BEGIN CERTIFICATE-----
1437
+ MIIDbTCCAlWgAwIBAgIBATANBgkqhkiG9w0BAQUFADBYMQswCQYDVQQGEwJKUDErMCkGA1UEChMi
1438
+ SmFwYW4gQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcywgSW5jLjEcMBoGA1UEAxMTU2VjdXJlU2lnbiBS
1439
+ b290Q0ExMTAeFw0wOTA0MDgwNDU2NDdaFw0yOTA0MDgwNDU2NDdaMFgxCzAJBgNVBAYTAkpQMSsw
1440
+ KQYDVQQKEyJKYXBhbiBDZXJ0aWZpY2F0aW9uIFNlcnZpY2VzLCBJbmMuMRwwGgYDVQQDExNTZWN1
1441
+ cmVTaWduIFJvb3RDQTExMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA/XeqpRyQBTvL
1442
+ TJszi1oURaTnkBbR31fSIRCkF/3frNYfp+TbfPfs37gD2pRY/V1yfIw/XwFndBWW4wI8h9uuywGO
1443
+ wvNmxoVF9ALGOrVisq/6nL+k5tSAMJjzDbaTj6nU2DbysPyKyiyhFTOVMdrAG/LuYpmGYz+/3ZMq
1444
+ g6h2uRMft85OQoWPIucuGvKVCbIFtUROd6EgvanyTgp9UK31BQ1FT0Zx/Sg+U/sE2C3XZR1KG/rP
1445
+ O7AxmjVuyIsG0wCR8pQIZUyxNAYAeoni8McDWc/V1uinMrPmmECGxc0nEovMe863ETxiYAcjPitA
1446
+ bpSACW22s293bzUIUPsCh8U+iQIDAQABo0IwQDAdBgNVHQ4EFgQUW/hNT7KlhtQ60vFjmqC+CfZX
1447
+ t94wDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAKCh
1448
+ OBZmLqdWHyGcBvod7bkixTgm2E5P7KN/ed5GIaGHd48HCJqypMWvDzKYC3xmKbabfSVSSUOrTC4r
1449
+ bnpwrxYO4wJs+0LmGJ1F2FXI6Dvd5+H0LgscNFxsWEr7jIhQX5Ucv+2rIrVls4W6ng+4reV6G4pQ
1450
+ Oh29Dbx7VFALuUKvVaAYga1lme++5Jy/xIWrQbJUb9wlze144o4MjQlJ3WN7WmmWAiGovVJZ6X01
1451
+ y8hSyn+B/tlr0/cR7SXf+Of5pPpyl4RTDaXQMhhRdlkUbA/r7F+AjHVDg8OFmP9Mni0N5HeDk061
1452
+ lgeLKBObjBmNQSdJQO7e5iNEOdyhIta6A/I=
1453
+ -----END CERTIFICATE-----
1454
+
1455
+ ACEDICOM Root
1456
+ =============
1457
+ -----BEGIN CERTIFICATE-----
1458
+ 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
1484
+ -----END CERTIFICATE-----
1485
+
1486
+ Microsec e-Szigno Root CA 2009
1487
+ ==============================
1488
+ -----BEGIN CERTIFICATE-----
1489
+ MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYDVQQGEwJIVTER
1490
+ MA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jv
1491
+ c2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o
1492
+ dTAeFw0wOTA2MTYxMTMwMThaFw0yOTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UE
1493
+ BwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUt
1494
+ U3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTCCASIw
1495
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvPkd6mJviZpWNwrZuuyjNA
1496
+ fW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tccbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG
1497
+ 0IMZfcChEhyVbUr02MelTTMuhTlAdX4UfIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKA
1498
+ pxn1ntxVUwOXewdI/5n7N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm
1499
+ 1HxdrtbCxkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1+rUC
1500
+ AwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTLD8bf
1501
+ QkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAbBgNVHREE
1502
+ FDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqGSIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0o
1503
+ lZMEyL/azXm4Q5DwpL7v8u8hmLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfX
1504
+ I/OMn74dseGkddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775
1505
+ tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c2Pm2G2JwCz02
1506
+ yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5tHMN1Rq41Bab2XD0h7lbwyYIi
1507
+ LXpUq3DDfSJlgnCW
1508
+ -----END CERTIFICATE-----
1509
+
1510
+ GlobalSign Root CA - R3
1511
+ =======================
1512
+ -----BEGIN CERTIFICATE-----
1513
+ MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4GA1UECxMXR2xv
1514
+ YmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNpZ24xEzARBgNVBAMTCkdsb2Jh
1515
+ bFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxT
1516
+ aWduIFJvb3QgQ0EgLSBSMzETMBEGA1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2ln
1517
+ bjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWt
1518
+ iHL8RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsTgHeMCOFJ
1519
+ 0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmmKPZpO/bLyCiR5Z2KYVc3
1520
+ rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zdQQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjl
1521
+ OCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZXriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2
1522
+ xmmFghcCAwEAAaNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
1523
+ FI/wS3+oLkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZURUm7
1524
+ lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMpjjM5RcOO5LlXbKr8
1525
+ EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK6fBdRoyV3XpYKBovHd7NADdBj+1E
1526
+ bddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQXmcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18
1527
+ YIvDQVETI53O9zJrlAGomecsMx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7r
1528
+ kpeDMdmztcpHWD9f
1529
+ -----END CERTIFICATE-----
1530
+
1531
+ Autoridad de Certificacion Firmaprofesional CIF A62634068
1532
+ =========================================================
1533
+ -----BEGIN CERTIFICATE-----
1534
+ MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UEBhMCRVMxQjBA
1535
+ BgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
1536
+ MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEyMzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIw
1537
+ QAYDVQQDDDlBdXRvcmlkYWQgZGUgQ2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBB
1538
+ NjI2MzQwNjgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDD
1539
+ Utd9thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQMcas9UX4P
1540
+ B99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefGL9ItWY16Ck6WaVICqjaY
1541
+ 7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15iNA9wBj4gGFrO93IbJWyTdBSTo3OxDqqH
1542
+ ECNZXyAFGUftaI6SEspd/NYrspI8IM/hX68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyI
1543
+ plD9amML9ZMWGxmPsu2bm8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctX
1544
+ MbScyJCyZ/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirjaEbsX
1545
+ LZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/TKI8xWVvTyQKmtFLK
1546
+ bpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF6NkBiDkal4ZkQdU7hwxu+g/GvUgU
1547
+ vzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVhOSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1Ud
1548
+ EwEB/wQIMAYBAf8CAQEwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNH
1549
+ DhpkLzCBpgYDVR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp
1550
+ cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBvACAAZABlACAA
1551
+ bABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBlAGwAbwBuAGEAIAAwADgAMAAx
1552
+ ADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx
1553
+ 51tkljYyGOylMnfX40S2wBEqgLk9am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qk
1554
+ R71kMrv2JYSiJ0L1ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaP
1555
+ T481PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS3a/DTg4f
1556
+ Jl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5kSeTy36LssUzAKh3ntLFl
1557
+ osS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF3dvd6qJ2gHN99ZwExEWN57kci57q13XR
1558
+ crHedUTnQn3iV2t93Jm8PYMo6oCTjcVMZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoR
1559
+ saS8I8nkvof/uZS2+F0gStRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTD
1560
+ KCOM/iczQ0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQBjLMi
1561
+ 6Et8Vcad+qMUu2WFbm5PEn4KPJ2V
1562
+ -----END CERTIFICATE-----
1563
+
1564
+ Izenpe.com
1565
+ ==========
1566
+ -----BEGIN CERTIFICATE-----
1567
+ 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
1594
+ -----END CERTIFICATE-----
1595
+
1596
+ Chambers of Commerce Root - 2008
1597
+ ================================
1598
+ -----BEGIN CERTIFICATE-----
1599
+ MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYDVQQGEwJFVTFD
1600
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1601
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1602
+ QS4xKTAnBgNVBAMTIENoYW1iZXJzIG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEy
1603
+ Mjk1MFoXDTM4MDczMTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNl
1604
+ ZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQF
1605
+ EwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJl
1606
+ cnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
1607
+ AQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW928sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKA
1608
+ XuFixrYp4YFs8r/lfTJqVKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorj
1609
+ h40G072QDuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR5gN/
1610
+ ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfLZEFHcpOrUMPrCXZk
1611
+ NNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05aSd+pZgvMPMZ4fKecHePOjlO+Bd5g
1612
+ D2vlGts/4+EhySnB8esHnFIbAURRPHsl18TlUlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331
1613
+ lubKgdaX8ZSD6e2wsWsSaR6s+12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ
1614
+ 0wlf2eOKNcx5Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj
1615
+ ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAxhduub+84Mxh2
1616
+ EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNVHQ4EFgQU+SSsD7K1+HnA+mCI
1617
+ G8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1+HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJ
1618
+ BgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNh
1619
+ bWVyZmlybWEuY29tL2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENh
1620
+ bWVyZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDiC
1621
+ CQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUH
1622
+ AgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAJASryI1
1623
+ wqM58C7e6bXpeHxIvj99RZJe6dqxGfwWPJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH
1624
+ 3qLPaYRgM+gQDROpI9CF5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbU
1625
+ RWpGqOt1glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaHFoI6
1626
+ M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2pSB7+R5KBWIBpih1
1627
+ YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MDxvbxrN8y8NmBGuScvfaAFPDRLLmF
1628
+ 9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QGtjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcK
1629
+ zBIKinmwPQN/aUv0NCB9szTqjktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvG
1630
+ nrDQWzilm1DefhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg
1631
+ OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZd0jQ
1632
+ -----END CERTIFICATE-----
1633
+
1634
+ Global Chambersign Root - 2008
1635
+ ==============================
1636
+ -----BEGIN CERTIFICATE-----
1637
+ MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYDVQQGEwJFVTFD
1638
+ MEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNv
1639
+ bS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMu
1640
+ QS4xJzAlBgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMx
1641
+ NDBaFw0zODA3MzExMjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUg
1642
+ Y3VycmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJ
1643
+ QTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD
1644
+ aGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMDf
1645
+ VtPkOpt2RbQT2//BthmLN0EYlVJH6xedKYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXf
1646
+ XjaOcNFccUMd2drvXNL7G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0
1647
+ ZJJ0YPP2zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4ddPB
1648
+ /gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyGHoiMvvKRhI9lNNgA
1649
+ TH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2Id3UwD2ln58fQ1DJu7xsepeY7s2M
1650
+ H/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3VyJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfe
1651
+ Ox2YItaswTXbo6Al/3K1dh3ebeksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSF
1652
+ HTynyQbehP9r6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh
1653
+ wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsogzCtLkykPAgMB
1654
+ AAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQWBBS5CcqcHtvTbDprru1U8VuT
1655
+ BjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDprru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UE
1656
+ BhMCRVUxQzBBBgNVBAcTOk1hZHJpZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJm
1657
+ aXJtYS5jb20vYWRkcmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJm
1658
+ aXJtYSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiCCQDJzdPp
1659
+ 1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEWHGh0
1660
+ dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZIhvcNAQEFBQADggIBAICIf3DekijZBZRG
1661
+ /5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZUohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6
1662
+ ReAJ3spED8IXDneRRXozX1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/s
1663
+ dZ7LoR/xfxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVza2Mg
1664
+ 9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yydYhz2rXzdpjEetrHH
1665
+ foUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMdSqlapskD7+3056huirRXhOukP9Du
1666
+ qqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9OAP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETr
1667
+ P3iZ8ntxPjzxmKfFGBI/5rsoM0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVq
1668
+ c5iJWzouE4gev8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z
1669
+ 09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B
1670
+ -----END CERTIFICATE-----
1671
+
1672
+ Go Daddy Root Certificate Authority - G2
1673
+ ========================================
1674
+ -----BEGIN CERTIFICATE-----
1675
+ MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1676
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoTEUdvRGFkZHkuY29tLCBJbmMu
1677
+ MTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5
1678
+ MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6
1679
+ b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8G
1680
+ A1UEAxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI
1681
+ hvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKDE6bFIEMBO4Tx5oVJnyfq
1682
+ 9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD
1683
+ +qK+ihVqf94Lw7YZFAXK6sOoBJQ7RnwyDfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutd
1684
+ fMh8+7ArU6SSYmlRJQVhGkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMl
1685
+ NAJWJwGRtDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEAAaNC
1686
+ MEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFDqahQcQZyi27/a9
1687
+ BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmXWWcDYfF+OwYxdS2hII5PZYe096ac
1688
+ vNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r
1689
+ 5N9ss4UXnT3ZJE95kTXWXwTrgIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYV
1690
+ N8Gb5DKj7Tjo2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO
1691
+ LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI4uJEvlz36hz1
1692
+ -----END CERTIFICATE-----
1693
+
1694
+ Starfield Root Certificate Authority - G2
1695
+ =========================================
1696
+ -----BEGIN CERTIFICATE-----
1697
+ MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1698
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
1699
+ b2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVsZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0
1700
+ eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAw
1701
+ DgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQg
1702
+ VGVjaG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZpY2F0ZSBB
1703
+ dXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL3twQP89o/8ArFv
1704
+ W59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMgnLRJdzIpVv257IzdIvpy3Cdhl+72WoTs
1705
+ bhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNk
1706
+ N3mSwOxGXn/hbVNMYq/NHwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7Nf
1707
+ ZTD4p7dNdloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0HZbU
1708
+ JtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1709
+ AQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0GCSqGSIb3DQEBCwUAA4IBAQARWfol
1710
+ TwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjUsHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx
1711
+ 4mcujJUDJi5DnUox9g61DLu34jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUw
1712
+ F5okxBDgBPfg8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K
1713
+ pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1mMpYjn0q7pBZ
1714
+ c2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0
1715
+ -----END CERTIFICATE-----
1716
+
1717
+ Starfield Services Root Certificate Authority - G2
1718
+ ==================================================
1719
+ -----BEGIN CERTIFICATE-----
1720
+ MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
1721
+ B0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoTHFN0YXJmaWVsZCBUZWNobm9s
1722
+ b2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVsZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRl
1723
+ IEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNV
1724
+ BAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxT
1725
+ dGFyZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2VydmljZXMg
1726
+ Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
1727
+ AQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20pOsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2
1728
+ h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm28xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4Pa
1729
+ hHQUw2eeBGg6345AWh1KTs9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLP
1730
+ LJGmpufehRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk6mFB
1731
+ rMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAwDwYDVR0TAQH/BAUw
1732
+ AwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+qAdcwKziIorhtSpzyEZGDMA0GCSqG
1733
+ SIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMIbw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPP
1734
+ E95Dz+I0swSdHynVv/heyNXBve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTy
1735
+ xQGjhdByPq1zqwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd
1736
+ iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn0q23KXB56jza
1737
+ YyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCNsSi6
1738
+ -----END CERTIFICATE-----
1739
+
1740
+ AffirmTrust Commercial
1741
+ ======================
1742
+ -----BEGIN CERTIFICATE-----
1743
+ MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UEBhMCVVMxFDAS
1744
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMB4XDTEw
1745
+ MDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
1746
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEF
1747
+ AAOCAQ8AMIIBCgKCAQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6Eqdb
1748
+ DuKPHx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yrba0F8PrV
1749
+ C8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPALMeIrJmqbTFeurCA+ukV6
1750
+ BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1yHp52UKqK39c/s4mT6NmgTWvRLpUHhww
1751
+ MmWd5jyTXlBOeuM61G7MGvv50jeuJCqrVwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNV
1752
+ HQ4EFgQUnZPGU4teyq8/nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1753
+ AQYwDQYJKoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYGXUPG
1754
+ hi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNjvbz4YYCanrHOQnDi
1755
+ qX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivtZ8SOyUOyXGsViQK8YvxO8rUzqrJv
1756
+ 0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9gN53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0kh
1757
+ sUlHRUe072o0EclNmsxZt9YCnlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8=
1758
+ -----END CERTIFICATE-----
1759
+
1760
+ AffirmTrust Networking
1761
+ ======================
1762
+ -----BEGIN CERTIFICATE-----
1763
+ MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UEBhMCVVMxFDAS
1764
+ BgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMB4XDTEw
1765
+ MDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmly
1766
+ bVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEF
1767
+ AAOCAQ8AMIIBCgKCAQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SE
1768
+ Hi3yYJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbuakCNrmreI
1769
+ dIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRLQESxG9fhwoXA3hA/Pe24
1770
+ /PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gb
1771
+ h+0t+nvujArjqWaJGctB+d1ENmHP4ndGyH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNV
1772
+ HQ4EFgQUBx/S55zawm6iQLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC
1773
+ AQYwDQYJKoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfOtDIu
1774
+ UFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzuQY0x2+c06lkh1QF6
1775
+ 12S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZLgo/bNjR9eUJtGxUAArgFU2HdW23
1776
+ WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4uolu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9
1777
+ /ZFvgrG+CJPbFEfxojfHRZ48x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s=
1778
+ -----END CERTIFICATE-----
1779
+
1780
+ AffirmTrust Premium
1781
+ ===================
1782
+ -----BEGIN CERTIFICATE-----
1783
+ MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UEBhMCVVMxFDAS
1784
+ BgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMB4XDTEwMDEy
1785
+ OTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRy
1786
+ dXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
1787
+ MIICCgKCAgEAxBLfqV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtn
1788
+ BKAQJG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ+jjeRFcV
1789
+ 5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrSs8PhaJyJ+HoAVt70VZVs
1790
+ +7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmd
1791
+ GPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d770O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5R
1792
+ p9EixAqnOEhss/n/fauGV+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NI
1793
+ S+LI+H+SqHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S5u04
1794
+ 6uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4IaC1nEWTJ3s7xgaVY5
1795
+ /bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TXOwF0lkLgAOIua+rF7nKsu7/+6qqo
1796
+ +Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYEFJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB
1797
+ /wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByv
1798
+ MiPIs0laUZx2KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg
1799
+ Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B8OWycvpEgjNC
1800
+ 6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQMKSOyARiqcTtNd56l+0OOF6S
1801
+ L5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK
1802
+ +4w1IX2COPKpVJEZNZOUbWo6xbLQu4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmV
1803
+ BtWVyuEklut89pMFu+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFg
1804
+ IxpHYoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8GKa1qF60
1805
+ g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaORtGdFNrHF+QFlozEJLUb
1806
+ zxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6eKeC2uAloGRwYQw==
1807
+ -----END CERTIFICATE-----
1808
+
1809
+ AffirmTrust Premium ECC
1810
+ =======================
1811
+ -----BEGIN CERTIFICATE-----
1812
+ MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMCVVMxFDASBgNV
1813
+ BAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQcmVtaXVtIEVDQzAeFw0xMDAx
1814
+ MjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJBgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1U
1815
+ cnVzdDEgMB4GA1UEAwwXQWZmaXJtVHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQA
1816
+ IgNiAAQNMF4bFZ0D0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQ
1817
+ N8O9ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0GA1UdDgQW
1818
+ BBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAK
1819
+ BggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/VsaobgxCd05DhT1wV/GzTjxi+zygk8N53X
1820
+ 57hG8f2h4nECMEJZh0PUUd+60wkyWs6Iflc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKM
1821
+ eQ==
1822
+ -----END CERTIFICATE-----
1823
+
1824
+ Certum Trusted Network CA
1825
+ =========================
1826
+ -----BEGIN CERTIFICATE-----
1827
+ MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBMMSIwIAYDVQQK
1828
+ ExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5DZXJ0dW0gQ2VydGlmaWNhdGlv
1829
+ biBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBUcnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIy
1830
+ MTIwNzM3WhcNMjkxMjMxMTIwNzM3WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBU
1831
+ ZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5
1832
+ MSIwIAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0BAQEFAAOC
1833
+ AQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rHUV+rpDKmYYe2bg+G0jAC
1834
+ l/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LMTXPb865Px1bVWqeWifrzq2jUI4ZZJ88J
1835
+ J7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVUBBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4
1836
+ fOQtf/WsX+sWn7Et0brMkUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0
1837
+ cvW0QM8xAcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNVHRMB
1838
+ Af8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNVHQ8BAf8EBAMCAQYw
1839
+ DQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15ysHhE49wcrwn9I0j6vSrEuVUEtRCj
1840
+ jSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfLI9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1
1841
+ mS1FhIrlQgnXdAIv94nYmem8J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5aj
1842
+ Zt3hrvJBW8qYVoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI
1843
+ 03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw=
1844
+ -----END CERTIFICATE-----
1845
+
1846
+ Certinomis - Autorité Racine
1847
+ ============================
1848
+ -----BEGIN CERTIFICATE-----
1849
+ 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
1874
+ vgt2Fl43N+bYdJeimUV5
1875
+ -----END CERTIFICATE-----
1876
+
1877
+ TWCA Root Certification Authority
1878
+ =================================
1879
+ -----BEGIN CERTIFICATE-----
1880
+ MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJ
1881
+ VEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlmaWNh
1882
+ dGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMzWhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQG
1883
+ EwJUVzESMBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NB
1884
+ IFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK
1885
+ AoIBAQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFEAcK0HMMx
1886
+ QhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HHK3XLfJ+utdGdIzdjp9xC
1887
+ oi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeXRfwZVzsrb+RH9JlF/h3x+JejiB03HFyP
1888
+ 4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/zrX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1r
1889
+ y+UPizgN7gr8/g+YnzAx3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIB
1890
+ BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkqhkiG
1891
+ 9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeCMErJk/9q56YAf4lC
1892
+ mtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdlsXebQ79NqZp4VKIV66IIArB6nCWlW
1893
+ QtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62Dlhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVY
1894
+ T0bf+215WfKEIlKuD8z7fDvnaspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocny
1895
+ Yh0igzyXxfkZYiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw==
1896
+ -----END CERTIFICATE-----
1897
+
1898
+ Security Communication RootCA2
1899
+ ==============================
1900
+ -----BEGIN CERTIFICATE-----
1901
+ MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDElMCMGA1UEChMc
1902
+ U0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMeU2VjdXJpdHkgQ29tbXVuaWNh
1903
+ dGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoXDTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMC
1904
+ SlAxJTAjBgNVBAoTHFNFQ09NIFRydXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3Vy
1905
+ aXR5IENvbW11bmljYXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1906
+ ANAVOVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGrzbl+dp++
1907
+ +T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVMVAX3NuRFg3sUZdbcDE3R
1908
+ 3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQhNBqyjoGADdH5H5XTz+L62e4iKrFvlNV
1909
+ spHEfbmwhRkGeC7bYRr6hfVKkaHnFtWOojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1K
1910
+ EOtOghY6rCcMU/Gt1SSwawNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8
1911
+ QIH4D5csOPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEB
1912
+ CwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpFcoJxDjrSzG+ntKEj
1913
+ u/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXcokgfGT+Ok+vx+hfuzU7jBBJV1uXk
1914
+ 3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6q
1915
+ tnRGEmyR7jTV7JqR50S+kDFy1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29
1916
+ mvVXIwAHIRc/SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03
1917
+ -----END CERTIFICATE-----
1918
+
1919
+ EC-ACC
1920
+ ======
1921
+ -----BEGIN CERTIFICATE-----
1922
+ MIIFVjCCBD6gAwIBAgIQ7is969Qh3hSoYqwE893EATANBgkqhkiG9w0BAQUFADCB8zELMAkGA1UE
1923
+ BhMCRVMxOzA5BgNVBAoTMkFnZW5jaWEgQ2F0YWxhbmEgZGUgQ2VydGlmaWNhY2lvIChOSUYgUS0w
1924
+ ODAxMTc2LUkpMSgwJgYDVQQLEx9TZXJ2ZWlzIFB1YmxpY3MgZGUgQ2VydGlmaWNhY2lvMTUwMwYD
1925
+ VQQLEyxWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5ldC92ZXJhcnJlbCAoYykwMzE1MDMGA1UE
1926
+ CxMsSmVyYXJxdWlhIEVudGl0YXRzIGRlIENlcnRpZmljYWNpbyBDYXRhbGFuZXMxDzANBgNVBAMT
1927
+ BkVDLUFDQzAeFw0wMzAxMDcyMzAwMDBaFw0zMTAxMDcyMjU5NTlaMIHzMQswCQYDVQQGEwJFUzE7
1928
+ MDkGA1UEChMyQWdlbmNpYSBDYXRhbGFuYSBkZSBDZXJ0aWZpY2FjaW8gKE5JRiBRLTA4MDExNzYt
1929
+ SSkxKDAmBgNVBAsTH1NlcnZlaXMgUHVibGljcyBkZSBDZXJ0aWZpY2FjaW8xNTAzBgNVBAsTLFZl
1930
+ Z2V1IGh0dHBzOi8vd3d3LmNhdGNlcnQubmV0L3ZlcmFycmVsIChjKTAzMTUwMwYDVQQLEyxKZXJh
1931
+ cnF1aWEgRW50aXRhdHMgZGUgQ2VydGlmaWNhY2lvIENhdGFsYW5lczEPMA0GA1UEAxMGRUMtQUND
1932
+ MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsyLHT+KXQpWIR4NA9h0X84NzJB5R85iK
1933
+ w5K4/0CQBXCHYMkAqbWUZRkiFRfCQ2xmRJoNBD45b6VLeqpjt4pEndljkYRm4CgPukLjbo73FCeT
1934
+ ae6RDqNfDrHrZqJyTxIThmV6PttPB/SnCWDaOkKZx7J/sxaVHMf5NLWUhdWZXqBIoH7nF2W4onW4
1935
+ HvPlQn2v7fOKSGRdghST2MDk/7NQcvJ29rNdQlB50JQ+awwAvthrDk4q7D7SzIKiGGUzE3eeml0a
1936
+ E9jD2z3Il3rucO2n5nzbcc8tlGLfbdb1OL4/pYUKGbio2Al1QnDE6u/LDsg0qBIimAy4E5S2S+zw
1937
+ 0JDnJwIDAQABo4HjMIHgMB0GA1UdEQQWMBSBEmVjX2FjY0BjYXRjZXJ0Lm5ldDAPBgNVHRMBAf8E
1938
+ BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUoMOLRKo3pUW/l4Ba0fF4opvpXY0wfwYD
1939
+ VR0gBHgwdjB0BgsrBgEEAfV4AQMBCjBlMCwGCCsGAQUFBwIBFiBodHRwczovL3d3dy5jYXRjZXJ0
1940
+ Lm5ldC92ZXJhcnJlbDA1BggrBgEFBQcCAjApGidWZWdldSBodHRwczovL3d3dy5jYXRjZXJ0Lm5l
1941
+ dC92ZXJhcnJlbCAwDQYJKoZIhvcNAQEFBQADggEBAKBIW4IB9k1IuDlVNZyAelOZ1Vr/sXE7zDkJ
1942
+ lF7W2u++AVtd0x7Y/X1PzaBB4DSTv8vihpw3kpBWHNzrKQXlxJ7HNd+KDM3FIUPpqojlNcAZQmNa
1943
+ Al6kSBg6hW/cnbw/nZzBh7h6YQjpdwt/cKt63dmXLGQehb+8dJahw3oS7AwaboMMPOhyRp/7SNVe
1944
+ l+axofjk70YllJyJ22k4vuxcDlbHZVHlUIiIv0LVKz3l+bqeLrPK9HOSAgu+TGbrIP65y7WZf+a2
1945
+ E/rKS03Z7lNGBjvGTq2TWoF+bCpLagVFjPIhpDGQh2xlnJ2lYJU6Un/10asIbvPuW/mIPX64b24D
1946
+ 5EI=
1947
+ -----END CERTIFICATE-----
1948
+
1949
+ Hellenic Academic and Research Institutions RootCA 2011
1950
+ =======================================================
1951
+ -----BEGIN CERTIFICATE-----
1952
+ MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1IxRDBCBgNVBAoT
1953
+ O0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9y
1954
+ aXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1955
+ IFJvb3RDQSAyMDExMB4XDTExMTIwNjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYT
1956
+ AkdSMUQwQgYDVQQKEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25z
1957
+ IENlcnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNo
1958
+ IEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
1959
+ AKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPzdYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI
1960
+ 1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJfel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa
1961
+ 71HFK9+WXesyHgLacEnsbgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u
1962
+ 8yBRQlqD75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSPFEDH
1963
+ 3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNVHRMBAf8EBTADAQH/
1964
+ MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp5dgTBCPuQSUwRwYDVR0eBEAwPqA8
1965
+ MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQub3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQu
1966
+ b3JnMA0GCSqGSIb3DQEBBQUAA4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVt
1967
+ XdMiKahsog2p6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8
1968
+ TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7dIsXRSZMFpGD
1969
+ /md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8AcysNnq/onN694/BtZqhFLKPM58N
1970
+ 7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXIl7WdmplNsDz4SgCbZN2fOUvRJ9e4
1971
+ -----END CERTIFICATE-----
1972
+
1973
+ Actalis Authentication Root CA
1974
+ ==============================
1975
+ -----BEGIN CERTIFICATE-----
1976
+ MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UEBhMCSVQxDjAM
1977
+ BgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UE
1978
+ AwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDky
1979
+ MjExMjIwMlowazELMAkGA1UEBhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlz
1980
+ IFMucC5BLi8wMzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290
1981
+ IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNvUTufClrJ
1982
+ wkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX4ay8IMKx4INRimlNAJZa
1983
+ by/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9KK3giq0itFZljoZUj5NDKd45RnijMCO6
1984
+ zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1f
1985
+ YVEiVRvjRuPjPdA1YprbrxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2
1986
+ oxgkg4YQ51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2Fbe8l
1987
+ EfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxeKF+w6D9Fz8+vm2/7
1988
+ hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4Fv6MGn8i1zeQf1xcGDXqVdFUNaBr8
1989
+ EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbnfpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5
1990
+ jF66CyCU3nuDuP/jVo23Eek7jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLY
1991
+ iDrIn3hm7YnzezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt
1992
+ ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQALe3KHwGCmSUyI
1993
+ WOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70jsNjLiNmsGe+b7bAEzlgqqI0
1994
+ JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDzWochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKx
1995
+ K3JCaKygvU5a2hi/a5iB0P2avl4VSM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+
1996
+ Xlff1ANATIGk0k9jpwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC
1997
+ 4yyXX04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+OkfcvHlXHo
1998
+ 2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7RK4X9p2jIugErsWx0Hbhz
1999
+ lefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btUZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXem
2000
+ OR/qnuOf0GZvBeyqdn6/axag67XH/JJULysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9
2001
+ vwGYT7JZVEc+NHt4bVaTLnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg==
2002
+ -----END CERTIFICATE-----
2003
+
2004
+ Trustis FPS Root CA
2005
+ ===================
2006
+ -----BEGIN CERTIFICATE-----
2007
+ MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQG
2008
+ EwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQLExNUcnVzdGlzIEZQUyBSb290
2009
+ IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTExMzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNV
2010
+ BAoTD1RydXN0aXMgTGltaXRlZDEcMBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJ
2011
+ KoZIhvcNAQEBBQADggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQ
2012
+ RUN+AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihHiTHcDnlk
2013
+ H5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjjvSkCqPoc4Vu5g6hBSLwa
2014
+ cY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zt
2015
+ o3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlBOrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEA
2016
+ AaNTMFEwDwYDVR0TAQH/BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAd
2017
+ BgNVHQ4EFgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01GX2c
2018
+ GE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmWzaD+vkAMXBJV+JOC
2019
+ yinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP41BIy+Q7DsdwyhEQsb8tGD+pmQQ9P
2020
+ 8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZEf1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHV
2021
+ l/9D7S3B2l0pKoU/rGXuhg8FjZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYl
2022
+ iB6XzCGcKQENZetX2fNXlrtIzYE=
2023
+ -----END CERTIFICATE-----
2024
+
2025
+ StartCom Certification Authority
2026
+ ================================
2027
+ -----BEGIN CERTIFICATE-----
2028
+ MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMN
2029
+ U3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmlu
2030
+ ZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0
2031
+ NjM3WhcNMzYwOTE3MTk0NjM2WjB9MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRk
2032
+ LjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMg
2033
+ U3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAw
2034
+ ggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZkpMyONvg45iPwbm2xPN1y
2035
+ o4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rfOQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/
2036
+ Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/CJi/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/d
2037
+ eMotHweXMAEtcnn6RtYTKqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt
2038
+ 2PZE4XNiHzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMMAv+Z
2039
+ 6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w+2OqqGwaVLRcJXrJ
2040
+ osmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/
2041
+ untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVc
2042
+ UjyJthkqcwEKDwOzEmDyei+B26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT
2043
+ 37uMdBNSSwIDAQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
2044
+ VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFulF2mHMMo0aEPQ
2045
+ Qa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCCATgwLgYIKwYBBQUHAgEWImh0
2046
+ dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cu
2047
+ c3RhcnRzc2wuY29tL2ludGVybWVkaWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENv
2048
+ bW1lcmNpYWwgKFN0YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0
2049
+ aGUgc2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0aWZpY2F0
2050
+ aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93d3cuc3RhcnRzc2wuY29t
2051
+ L3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBG
2052
+ cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5
2053
+ fPGFf59Jb2vKXfuM/gTFwWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWm
2054
+ N3PH/UvSTa0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst0OcN
2055
+ Org+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNcpRJvkrKTlMeIFw6T
2056
+ tn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKlCcWw0bdT82AUuoVpaiF8H3VhFyAX
2057
+ e2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVFP0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA
2058
+ 2MFrLH9ZXF2RsXAiV+uKa0hK1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBs
2059
+ HvUwyKMQ5bLmKhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
2060
+ JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ8dCAWZvLMdib
2061
+ D4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnmfyWl8kgAwKQB2j8=
2062
+ -----END CERTIFICATE-----
2063
+
2064
+ StartCom Certification Authority G2
2065
+ ===================================
2066
+ -----BEGIN CERTIFICATE-----
2067
+ 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
2091
+ obp573PYtlNXLfbQ4ddI
2092
+ -----END CERTIFICATE-----
2093
+
2094
+ Buypass Class 2 Root CA
2095
+ =======================
2096
+ -----BEGIN CERTIFICATE-----
2097
+ MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEdMBsGA1UECgwU
2098
+ QnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3MgQ2xhc3MgMiBSb290IENBMB4X
2099
+ DTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1owTjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1
2100
+ eXBhc3MgQVMtOTgzMTYzMzI3MSAwHgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIw
2101
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1
2102
+ g1Lr6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPVL4O2fuPn
2103
+ 9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC911K2GScuVr1QGbNgGE41b
2104
+ /+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHxMlAQTn/0hpPshNOOvEu/XAFOBz3cFIqU
2105
+ CqTqc/sLUegTBxj6DvEr0VQVfTzh97QZQmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeff
2106
+ awrbD02TTqigzXsu8lkBarcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgI
2107
+ zRFo1clrUs3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLiFRhn
2108
+ Bkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRSP/TizPJhk9H9Z2vX
2109
+ Uq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN9SG9dKpN6nIDSdvHXx1iY8f93ZHs
2110
+ M+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxPAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYD
2111
+ VR0OBBYEFMmAd+BikoL1RpzzuvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsF
2112
+ AAOCAgEAU18h9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s
2113
+ A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3tOluwlN5E40EI
2114
+ osHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo+fsicdl9sz1Gv7SEr5AcD48S
2115
+ aq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYd
2116
+ DnkM/crqJIByw5c/8nerQyIKx+u2DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWD
2117
+ LfJ6v9r9jv6ly0UsH8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0
2118
+ oyLQI+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK75t98biGC
2119
+ wWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h3PFaTWwyI0PurKju7koS
2120
+ CTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPzY11aWOIv4x3kqdbQCtCev9eBCfHJxyYN
2121
+ rJgWVqA=
2122
+ -----END CERTIFICATE-----
2123
+
2124
+ Buypass Class 3 Root CA
2125
+ =======================
2126
+ -----BEGIN CERTIFICATE-----
2127
+ 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
2151
+ Cp/HuZc=
2152
+ -----END CERTIFICATE-----
2153
+
2154
+ T-TeleSec GlobalRoot Class 3
2155
+ ============================
2156
+ -----BEGIN CERTIFICATE-----
2157
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
2158
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
2159
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgx
2160
+ MDAxMTAyOTU2WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
2161
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
2162
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0GCSqGSIb3
2163
+ DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN8ELg63iIVl6bmlQdTQyK
2164
+ 9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/RLyTPWGrTs0NvvAgJ1gORH8EGoel15YU
2165
+ NpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZF
2166
+ iP0Zf3WHHx+xGwpzJFu5ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W
2167
+ 0eDrXltMEnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGjQjBA
2168
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1A/d2O2GCahKqGFPr
2169
+ AyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOyWL6ukK2YJ5f+AbGwUgC4TeQbIXQb
2170
+ fsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzT
2171
+ ucpH9sry9uetuUg/vBa3wW306gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7h
2172
+ P0HHRwA11fXT91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml
2173
+ e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4pTpPDpFQUWw==
2174
+ -----END CERTIFICATE-----
2175
+
2176
+ EE Certification Centre Root CA
2177
+ ===============================
2178
+ -----BEGIN CERTIFICATE-----
2179
+ MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQG
2180
+ EwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEoMCYGA1UEAwwfRUUgQ2Vy
2181
+ dGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIw
2182
+ MTAxMDMwMTAxMDMwWhgPMjAzMDEyMTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlB
2183
+ UyBTZXJ0aWZpdHNlZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRy
2184
+ ZSBSb290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEBAQUAA4IB
2185
+ DwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUyeuuOF0+W2Ap7kaJjbMeM
2186
+ TC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvObntl8jixwKIy72KyaOBhU8E2lf/slLo2
2187
+ rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIwWFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw
2188
+ 93X2PaRka9ZP585ArQ/dMtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtN
2189
+ P2MbRMNE1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYDVR0T
2190
+ AQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/zQas8fElyalL1BSZ
2191
+ MEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEF
2192
+ BQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEFBQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+Rj
2193
+ xY6hUFaTlrg4wCQiZrxTFGGVv9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqM
2194
+ lIpPnTX/dqQGE5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u
2195
+ uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIWiAYLtqZLICjU
2196
+ 3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/vGVCJYMzpJJUPwssd8m92kMfM
2197
+ dcGWxZ0=
2198
+ -----END CERTIFICATE-----
2199
+
2200
+ TURKTRUST Certificate Services Provider Root 2007
2201
+ =================================================
2202
+ -----BEGIN CERTIFICATE-----
2203
+ MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOcUktUUlVTVCBF
2204
+ bGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJUUjEP
2205
+ MA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUg
2206
+ QmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4X
2207
+ DTA3MTIyNTE4MzcxOVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxl
2208
+ a3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMCVFIxDzAN
2209
+ BgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
2210
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4gKGMpIEFyYWzEsWsgMjAwNzCCASIw
2211
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9N
2212
+ YvDdE3ePYakqtdTyuTFYKTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQv
2213
+ KUmi8wUG+7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveGHtya
2214
+ KhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6PIzdezKKqdfcYbwnT
2215
+ rqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M733WB2+Y8a+xwXrXgTW4qhe04MsC
2216
+ AwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHkYb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAP
2217
+ BgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/s
2218
+ Px+EnWVUXKgWAkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I
2219
+ aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5mxRZNTZPz/OO
2220
+ Xl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsaXRik7r4EW5nVcV9VZWRi1aKb
2221
+ BFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZqxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAK
2222
+ poRq0Tl9
2223
+ -----END CERTIFICATE-----
2224
+
2225
+ D-TRUST Root Class 3 CA 2 2009
2226
+ ==============================
2227
+ -----BEGIN CERTIFICATE-----
2228
+ MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2229
+ DAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTAe
2230
+ Fw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NThaME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxE
2231
+ LVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIw
2232
+ DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOAD
2233
+ ER03UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42tSHKXzlA
2234
+ BF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9RySPocq60vFYJfxLLHLGv
2235
+ KZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsMlFqVlNpQmvH/pStmMaTJOKDfHR+4CS7z
2236
+ p+hnUquVH+BGPtikw8paxTGA6Eian5Rp/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUC
2237
+ AwEAAaOCARowggEWMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ
2238
+ 4PGEMA4GA1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVjdG9y
2239
+ eS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUyMENBJTIwMiUyMDIw
2240
+ MDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRlcmV2b2NhdGlvbmxpc3QwQ6BBoD+G
2241
+ PWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3JsL2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAw
2242
+ OS5jcmwwDQYJKoZIhvcNAQELBQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm
2243
+ 2H6NMLVwMeniacfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0
2244
+ o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4KzCUqNQT4YJEV
2245
+ dT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8PIWmawomDeCTmGCufsYkl4ph
2246
+ X5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3YJohw1+qRzT65ysCQblrGXnRl11z+o+I=
2247
+ -----END CERTIFICATE-----
2248
+
2249
+ D-TRUST Root Class 3 CA 2 EV 2009
2250
+ =================================
2251
+ -----BEGIN CERTIFICATE-----
2252
+ MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2253
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
2254
+ OTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUwNDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQK
2255
+ DAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAw
2256
+ OTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfS
2257
+ egpnljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM03TP1YtHh
2258
+ zRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6ZqQTMFexgaDbtCHu39b+T
2259
+ 7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lRp75mpoo6Kr3HGrHhFPC+Oh25z1uxav60
2260
+ sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure35
2261
+ 11H3a6UCAwEAAaOCASQwggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyv
2262
+ cop9NteaHNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFwOi8v
2263
+ ZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xhc3MlMjAzJTIwQ0El
2264
+ MjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1ERT9jZXJ0aWZpY2F0ZXJldm9jYXRp
2265
+ b25saXN0MEagRKBChkBodHRwOi8vd3d3LmQtdHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xh
2266
+ c3NfM19jYV8yX2V2XzIwMDkuY3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+
2267
+ PPoeUSbrh/Yp3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05
2268
+ nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNFCSuGdXzfX2lX
2269
+ ANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7naxpeG0ILD5EJt/rDiZE4OJudA
2270
+ NCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqXKVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVv
2271
+ w9y4AyHqnxbxLFS1
2272
+ -----END CERTIFICATE-----
2273
+
2274
+ PSCProcert
2275
+ ==========
2276
+ -----BEGIN CERTIFICATE-----
2277
+ MIIJhjCCB26gAwIBAgIBCzANBgkqhkiG9w0BAQsFADCCAR4xPjA8BgNVBAMTNUF1dG9yaWRhZCBk
2278
+ ZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9sYW5vMQswCQYDVQQGEwJWRTEQ
2279
+ MA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlzdHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lz
2280
+ dGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBl
2281
+ cmludGVuZGVuY2lhIGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUw
2282
+ IwYJKoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyODE2NTEwMFoXDTIw
2283
+ MTIyNTIzNTk1OVowgdExJjAkBgkqhkiG9w0BCQEWF2NvbnRhY3RvQHByb2NlcnQubmV0LnZlMQ8w
2284
+ DQYDVQQHEwZDaGFjYW8xEDAOBgNVBAgTB01pcmFuZGExKjAoBgNVBAsTIVByb3ZlZWRvciBkZSBD
2285
+ ZXJ0aWZpY2Fkb3MgUFJPQ0VSVDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0aWZp
2286
+ Y2FjaW9uIEVsZWN0cm9uaWNhMQswCQYDVQQGEwJWRTETMBEGA1UEAxMKUFNDUHJvY2VydDCCAiIw
2287
+ DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANW39KOUM6FGqVVhSQ2oh3NekS1wwQYalNo97BVC
2288
+ wfWMrmoX8Yqt/ICV6oNEolt6Vc5Pp6XVurgfoCfAUFM+jbnADrgV3NZs+J74BCXfgI8Qhd19L3uA
2289
+ 3VcAZCP4bsm+lU/hdezgfl6VzbHvvnpC2Mks0+saGiKLt38GieU89RLAu9MLmV+QfI4tL3czkkoh
2290
+ RqipCKzx9hEC2ZUWno0vluYC3XXCFCpa1sl9JcLB/KpnheLsvtF8PPqv1W7/U0HU9TI4seJfxPmO
2291
+ EO8GqQKJ/+MMbpfg353bIdD0PghpbNjU5Db4g7ayNo+c7zo3Fn2/omnXO1ty0K+qP1xmk6wKImG2
2292
+ 0qCZyFSTXai20b1dCl53lKItwIKOvMoDKjSuc/HUtQy9vmebVOvh+qBa7Dh+PsHMosdEMXXqP+UH
2293
+ 0quhJZb25uSgXTcYOWEAM11G1ADEtMo88aKjPvM6/2kwLkDd9p+cJsmWN63nOaK/6mnbVSKVUyqU
2294
+ td+tFjiBdWbjxywbk5yqjKPK2Ww8F22c3HxT4CAnQzb5EuE8XL1mv6JpIzi4mWCZDlZTOpx+FIyw
2295
+ Bm/xhnaQr/2v/pDGj59/i5IjnOcVdo/Vi5QTcmn7K2FjiO/mpF7moxdqWEfLcU8UC17IAggmosvp
2296
+ r2uKGcfLFFb14dq12fy/czja+eevbqQ34gcnAgMBAAGjggMXMIIDEzASBgNVHRMBAf8ECDAGAQH/
2297
+ AgEBMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAz
2298
+ Ni0wMB0GA1UdDgQWBBRBDxk4qpl/Qguk1yeYVKIXTC1RVDCCAVAGA1UdIwSCAUcwggFDgBStuyId
2299
+ xuDSAaj9dlBSk+2YwU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRp
2300
+ ZmljYWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAwDgYDVQQH
2301
+ EwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYDVQQKEy1TaXN0ZW1hIE5h
2302
+ Y2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5k
2303
+ ZW5jaWEgZGUgU2VydmljaW9zIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG
2304
+ 9w0BCQEWFmFjcmFpekBzdXNjZXJ0ZS5nb2IudmWCAQowDgYDVR0PAQH/BAQDAgEGME0GA1UdEQRG
2305
+ MESCDnByb2NlcnQubmV0LnZloBUGBWCGXgIBoAwMClBTQy0wMDAwMDKgGwYFYIZeAgKgEgwQUklG
2306
+ LUotMzE2MzUzNzMtNzB2BgNVHR8EbzBtMEagRKBChkBodHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52
2307
+ ZS9sY3IvQ0VSVElGSUNBRE8tUkFJWi1TSEEzODRDUkxERVIuY3JsMCOgIaAfhh1sZGFwOi8vYWNy
2308
+ YWl6LnN1c2NlcnRlLmdvYi52ZTA3BggrBgEFBQcBAQQrMCkwJwYIKwYBBQUHMAGGG2h0dHA6Ly9v
2309
+ Y3NwLnN1c2NlcnRlLmdvYi52ZTBBBgNVHSAEOjA4MDYGBmCGXgMBAjAsMCoGCCsGAQUFBwIBFh5o
2310
+ dHRwOi8vd3d3LnN1c2NlcnRlLmdvYi52ZS9kcGMwDQYJKoZIhvcNAQELBQADggIBACtZ6yKZu4Sq
2311
+ T96QxtGGcSOeSwORR3C7wJJg7ODU523G0+1ng3dS1fLld6c2suNUvtm7CpsR72H0xpkzmfWvADmN
2312
+ g7+mvTV+LFwxNG9s2/NkAZiqlCxB3RWGymspThbASfzXg0gTB1GEMVKIu4YXx2sviiCtxQuPcD4q
2313
+ uxtxj7mkoP3YldmvWb8lK5jpY5MvYB7Eqvh39YtsL+1+LrVPQA3uvFd359m21D+VJzog1eWuq2w1
2314
+ n8GhHVnchIHuTQfiSLaeS5UtQbHh6N5+LwUeaO6/u5BlOsju6rEYNxxik6SgMexxbJHmpHmJWhSn
2315
+ FFAFTKQAVzAswbVhltw+HoSvOULP5dAssSS830DD7X9jSr3hTxJkhpXzsOfIt+FTvZLm8wyWuevo
2316
+ 5pLtp4EJFAv8lXrPj9Y0TzYS3F7RNHXGRoAvlQSMx4bEqCaJqD8Zm4G7UaRKhqsLEQ+xrmNTbSjq
2317
+ 3TNWOByyrYDT13K9mmyZY+gAu0F2BbdbmRiKw7gSXFbPVgx96OLP7bx0R/vu0xdOIk9W/1DzLuY5
2318
+ poLWccret9W6aAjtmcz9opLLabid+Qqkpj5PkygqYWwHJgD/ll9ohri4zspV4KuxPX+Y1zMOWj3Y
2319
+ eMLEYC/HYvBhkdI4sPaeVdtAgAUSM84dkpvRabP/v/GSCmE1P93+hvS84Bpxs2Km
2320
+ -----END CERTIFICATE-----
2321
+
2322
+ CA Disig Root R1
2323
+ ================
2324
+ -----BEGIN CERTIFICATE-----
2325
+ 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
2349
+ a7+h89n07eLw4+1knj0vllJPgFOL
2350
+ -----END CERTIFICATE-----
2351
+
2352
+ CA Disig Root R2
2353
+ ================
2354
+ -----BEGIN CERTIFICATE-----
2355
+ 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
2379
+ 7+ZtsH8tZ/3zbBt1RqPlShfppNcL
2380
+ -----END CERTIFICATE-----
2381
+
2382
+ ACCVRAIZ1
2383
+ =========
2384
+ -----BEGIN CERTIFICATE-----
2385
+ MIIH0zCCBbugAwIBAgIIXsO3pkN/pOAwDQYJKoZIhvcNAQEFBQAwQjESMBAGA1UEAwwJQUNDVlJB
2386
+ SVoxMRAwDgYDVQQLDAdQS0lBQ0NWMQ0wCwYDVQQKDARBQ0NWMQswCQYDVQQGEwJFUzAeFw0xMTA1
2387
+ MDUwOTM3MzdaFw0zMDEyMzEwOTM3MzdaMEIxEjAQBgNVBAMMCUFDQ1ZSQUlaMTEQMA4GA1UECwwH
2388
+ UEtJQUNDVjENMAsGA1UECgwEQUNDVjELMAkGA1UEBhMCRVMwggIiMA0GCSqGSIb3DQEBAQUAA4IC
2389
+ DwAwggIKAoICAQCbqau/YUqXry+XZpp0X9DZlv3P4uRm7x8fRzPCRKPfmt4ftVTdFXxpNRFvu8gM
2390
+ jmoYHtiP2Ra8EEg2XPBjs5BaXCQ316PWywlxufEBcoSwfdtNgM3802/J+Nq2DoLSRYWoG2ioPej0
2391
+ RGy9ocLLA76MPhMAhN9KSMDjIgro6TenGEyxCQ0jVn8ETdkXhBilyNpAlHPrzg5XPAOBOp0KoVdD
2392
+ aaxXbXmQeOW1tDvYvEyNKKGno6e6Ak4l0Squ7a4DIrhrIA8wKFSVf+DuzgpmndFALW4ir50awQUZ
2393
+ 0m/A8p/4e7MCQvtQqR0tkw8jq8bBD5L/0KIV9VMJcRz/RROE5iZe+OCIHAr8Fraocwa48GOEAqDG
2394
+ WuzndN9wrqODJerWx5eHk6fGioozl2A3ED6XPm4pFdahD9GILBKfb6qkxkLrQaLjlUPTAYVtjrs7
2395
+ 8yM2x/474KElB0iryYl0/wiPgL/AlmXz7uxLaL2diMMxs0Dx6M/2OLuc5NF/1OVYm3z61PMOm3WR
2396
+ 5LpSLhl+0fXNWhn8ugb2+1KoS5kE3fj5tItQo05iifCHJPqDQsGH+tUtKSpacXpkatcnYGMN285J
2397
+ 9Y0fkIkyF/hzQ7jSWpOGYdbhdQrqeWZ2iE9x6wQl1gpaepPluUsXQA+xtrn13k/c4LOsOxFwYIRK
2398
+ Q26ZIMApcQrAZQIDAQABo4ICyzCCAscwfQYIKwYBBQUHAQEEcTBvMEwGCCsGAQUFBzAChkBodHRw
2399
+ Oi8vd3d3LmFjY3YuZXMvZmlsZWFkbWluL0FyY2hpdm9zL2NlcnRpZmljYWRvcy9yYWl6YWNjdjEu
2400
+ Y3J0MB8GCCsGAQUFBzABhhNodHRwOi8vb2NzcC5hY2N2LmVzMB0GA1UdDgQWBBTSh7Tj3zcnk1X2
2401
+ VuqB5TbMjB4/vTAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFNKHtOPfNyeTVfZW6oHlNsyM
2402
+ Hj+9MIIBcwYDVR0gBIIBajCCAWYwggFiBgRVHSAAMIIBWDCCASIGCCsGAQUFBwICMIIBFB6CARAA
2403
+ QQB1AHQAbwByAGkAZABhAGQAIABkAGUAIABDAGUAcgB0AGkAZgBpAGMAYQBjAGkA8wBuACAAUgBh
2404
+ AO0AegAgAGQAZQAgAGwAYQAgAEEAQwBDAFYAIAAoAEEAZwBlAG4AYwBpAGEAIABkAGUAIABUAGUA
2405
+ YwBuAG8AbABvAGcA7QBhACAAeQAgAEMAZQByAHQAaQBmAGkAYwBhAGMAaQDzAG4AIABFAGwAZQBj
2406
+ AHQAcgDzAG4AaQBjAGEALAAgAEMASQBGACAAUQA0ADYAMAAxADEANQA2AEUAKQAuACAAQwBQAFMA
2407
+ IABlAG4AIABoAHQAdABwADoALwAvAHcAdwB3AC4AYQBjAGMAdgAuAGUAczAwBggrBgEFBQcCARYk
2408
+ aHR0cDovL3d3dy5hY2N2LmVzL2xlZ2lzbGFjaW9uX2MuaHRtMFUGA1UdHwROMEwwSqBIoEaGRGh0
2409
+ dHA6Ly93d3cuYWNjdi5lcy9maWxlYWRtaW4vQXJjaGl2b3MvY2VydGlmaWNhZG9zL3JhaXphY2N2
2410
+ MV9kZXIuY3JsMA4GA1UdDwEB/wQEAwIBBjAXBgNVHREEEDAOgQxhY2N2QGFjY3YuZXMwDQYJKoZI
2411
+ hvcNAQEFBQADggIBAJcxAp/n/UNnSEQU5CmH7UwoZtCPNdpNYbdKl02125DgBS4OxnnQ8pdpD70E
2412
+ R9m+27Up2pvZrqmZ1dM8MJP1jaGo/AaNRPTKFpV8M9xii6g3+CfYCS0b78gUJyCpZET/LtZ1qmxN
2413
+ YEAZSUNUY9rizLpm5U9EelvZaoErQNV/+QEnWCzI7UiRfD+mAM/EKXMRNt6GGT6d7hmKG9Ww7Y49
2414
+ nCrADdg9ZuM8Db3VlFzi4qc1GwQA9j9ajepDvV+JHanBsMyZ4k0ACtrJJ1vnE5Bc5PUzolVt3OAJ
2415
+ TS+xJlsndQAJxGJ3KQhfnlmstn6tn1QwIgPBHnFk/vk4CpYY3QIUrCPLBhwepH2NDd4nQeit2hW3
2416
+ sCPdK6jT2iWH7ehVRE2I9DZ+hJp4rPcOVkkO1jMl1oRQQmwgEh0q1b688nCBpHBgvgW1m54ERL5h
2417
+ I6zppSSMEYCUWqKiuUnSwdzRp+0xESyeGabu4VXhwOrPDYTkF7eifKXeVSUG7szAh1xA2syVP1Xg
2418
+ Nce4hL60Xc16gwFy7ofmXx2utYXGJt/mwZrpHgJHnyqobalbz+xFd3+YJ5oyXSrjhO7FmGYvliAd
2419
+ 3djDJ9ew+f7Zfc3Qn48LFFhRny+Lwzgt3uiP1o2HpPVWQxaZLPSkVrQ0uGE3ycJYgBugl6H8WY3p
2420
+ EfbRD0tVNEYqi4Y7
2421
+ -----END CERTIFICATE-----
2422
+
2423
+ TWCA Global Root CA
2424
+ ===================
2425
+ -----BEGIN CERTIFICATE-----
2426
+ MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcxEjAQBgNVBAoT
2427
+ CVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMTVFdDQSBHbG9iYWwgUm9vdCBD
2428
+ QTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQK
2429
+ EwlUQUlXQU4tQ0ExEDAOBgNVBAsTB1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3Qg
2430
+ Q0EwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2C
2431
+ nJfF10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz0ALfUPZV
2432
+ r2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfChMBwqoJimFb3u/Rk28OKR
2433
+ Q4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbHzIh1HrtsBv+baz4X7GGqcXzGHaL3SekV
2434
+ tTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1W
2435
+ KKD+u4ZqyPpcC1jcxkt2yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99
2436
+ sy2sbZCilaLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYPoA/p
2437
+ yJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQABDzfuBSO6N+pjWxn
2438
+ kjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcEqYSjMq+u7msXi7Kx/mzhkIyIqJdI
2439
+ zshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMC
2440
+ AQYwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6g
2441
+ cFGn90xHNcgL1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn
2442
+ LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WFH6vPNOw/KP4M
2443
+ 8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNoRI2T9GRwoD2dKAXDOXC4Ynsg
2444
+ /eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlg
2445
+ lPx4mI88k1HtQJAH32RjJMtOcQWh15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryP
2446
+ A9gK8kxkRr05YuWW6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3m
2447
+ i4TWnsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5jwa19hAM8
2448
+ EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWzaGHQRiapIVJpLesux+t3
2449
+ zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmyKwbQBM0=
2450
+ -----END CERTIFICATE-----
2451
+
2452
+ TeliaSonera Root CA v1
2453
+ ======================
2454
+ -----BEGIN CERTIFICATE-----
2455
+ MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAwNzEUMBIGA1UE
2456
+ CgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJvb3QgQ0EgdjEwHhcNMDcxMDE4
2457
+ MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYDVQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwW
2458
+ VGVsaWFTb25lcmEgUm9vdCBDQSB2MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+
2459
+ 6yfwIaPzaSZVfp3FVRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA
2460
+ 3GV17CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+XZ75Ljo1k
2461
+ B1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+/jXh7VB7qTCNGdMJjmhn
2462
+ Xb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxH
2463
+ oLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkmdtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3
2464
+ F0fUTPHSiXk+TT2YqGHeOh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJ
2465
+ oWjiUIMusDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4pgd7
2466
+ gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fsslESl1MpWtTwEhDc
2467
+ TwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQarMCpgKIv7NHfirZ1fpoeDVNAgMB
2468
+ AAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qW
2469
+ DNXr+nuqF+gTEjANBgkqhkiG9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNm
2470
+ zqjMDfz1mgbldxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx
2471
+ 0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1TjTQpgcmLNkQfW
2472
+ pb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBedY2gea+zDTYa4EzAvXUYNR0PV
2473
+ G6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpc
2474
+ c41teyWRyu5FrgZLAMzTsVlQ2jqIOylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOT
2475
+ JsjrDNYmiLbAJM+7vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2
2476
+ qReWt88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcnHL/EVlP6
2477
+ Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVxSK236thZiNSQvxaz2ems
2478
+ WWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY=
2479
+ -----END CERTIFICATE-----
2480
+
2481
+ E-Tugra Certification Authority
2482
+ ===============================
2483
+ -----BEGIN CERTIFICATE-----
2484
+ MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNVBAYTAlRSMQ8w
2485
+ DQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamls
2486
+ ZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN
2487
+ ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMw
2488
+ NTEyMDk0OFoXDTIzMDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmEx
2489
+ QDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxl
2490
+ cmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQD
2491
+ DB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
2492
+ MIICCgKCAgEA4vU/kwVRHoViVF56C/UYB4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vd
2493
+ hQd2h8y/L5VMzH2nPbxHD5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5K
2494
+ CKpbknSFQ9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEoq1+g
2495
+ ElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3Dk14opz8n8Y4e0ypQ
2496
+ BaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcHfC425lAcP9tDJMW/hkd5s3kc91r0
2497
+ E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsutdEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gz
2498
+ rt48Ue7LE3wBf4QOXVGUnhMMti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAq
2499
+ jqFGOjGY5RH8zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn
2500
+ rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUXU8u3Zg5mTPj5
2501
+ dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6Jyr+zE7S6E5UMA8GA1UdEwEB
2502
+ /wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEG
2503
+ MA0GCSqGSIb3DQEBCwUAA4ICAQAFNzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAK
2504
+ kEh47U6YA5n+KGCRHTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jO
2505
+ XKqYGwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c77NCR807
2506
+ VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3+GbHeJAAFS6LrVE1Uweo
2507
+ a2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WKvJUawSg5TB9D0pH0clmKuVb8P7Sd2nCc
2508
+ dlqMQ1DujjByTd//SffGqWfZbawCEeI6FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEV
2509
+ KV0jq9BgoRJP3vQXzTLlyb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gT
2510
+ Dx4JnW2PAJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpDy4Q0
2511
+ 8ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8dNL/+I5c30jn6PQ0G
2512
+ C7TbO6Orb1wdtn7os4I07QZcJA==
2513
+ -----END CERTIFICATE-----
2514
+
2515
+ T-TeleSec GlobalRoot Class 2
2516
+ ============================
2517
+ -----BEGIN CERTIFICATE-----
2518
+ MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoM
2519
+ IlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBU
2520
+ cnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgx
2521
+ MDAxMTA0MDE0WhcNMzMxMDAxMjM1OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lz
2522
+ dGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBD
2523
+ ZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0GCSqGSIb3
2524
+ DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUdAqSzm1nzHoqvNK38DcLZ
2525
+ SBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiCFoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/F
2526
+ vudocP05l03Sx5iRUKrERLMjfTlH6VJi1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx970
2527
+ 2cu+fjOlbpSD8DT6IavqjnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGV
2528
+ WOHAD3bZwI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGjQjBA
2529
+ MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/WSA2AHmgoCJrjNXy
2530
+ YdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhyNsZt+U2e+iKo4YFWz827n+qrkRk4
2531
+ r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPACuvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNf
2532
+ vNoBYimipidx5joifsFvHZVwIEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR
2533
+ 3p1m0IvVVGb6g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN
2534
+ 9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlPBSeOE6Fuwg==
2535
+ -----END CERTIFICATE-----
2536
+
2537
+ Atos TrustedRoot 2011
2538
+ =====================
2539
+ -----BEGIN CERTIFICATE-----
2540
+ MIIDdzCCAl+gAwIBAgIIXDPLYixfszIwDQYJKoZIhvcNAQELBQAwPDEeMBwGA1UEAwwVQXRvcyBU
2541
+ cnVzdGVkUm9vdCAyMDExMQ0wCwYDVQQKDARBdG9zMQswCQYDVQQGEwJERTAeFw0xMTA3MDcxNDU4
2542
+ MzBaFw0zMDEyMzEyMzU5NTlaMDwxHjAcBgNVBAMMFUF0b3MgVHJ1c3RlZFJvb3QgMjAxMTENMAsG
2543
+ A1UECgwEQXRvczELMAkGA1UEBhMCREUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCV
2544
+ hTuXbyo7LjvPpvMpNb7PGKw+qtn4TaA+Gke5vJrf8v7MPkfoepbCJI419KkM/IL9bcFyYie96mvr
2545
+ 54rMVD6QUM+A1JX76LWC1BTFtqlVJVfbsVD2sGBkWXppzwO3bw2+yj5vdHLqqjAqc2K+SZFhyBH+
2546
+ DgMq92og3AIVDV4VavzjgsG1xZ1kCWyjWZgHJ8cblithdHFsQ/H3NYkQ4J7sVaE3IqKHBAUsR320
2547
+ HLliKWYoyrfhk/WklAOZuXCFteZI6o1Q/NnezG8HDt0Lcp2AMBYHlT8oDv3FdU9T1nSatCQujgKR
2548
+ z3bFmx5VdJx4IbHwLfELn8LVlhgf8FQieowHAgMBAAGjfTB7MB0GA1UdDgQWBBSnpQaxLKYJYO7R
2549
+ l+lwrrw7GWzbITAPBgNVHRMBAf8EBTADAQH/MB8GA1UdIwQYMBaAFKelBrEspglg7tGX6XCuvDsZ
2550
+ bNshMBgGA1UdIAQRMA8wDQYLKwYBBAGwLQMEAQEwDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
2551
+ CwUAA4IBAQAmdzTblEiGKkGdLD4GkGDEjKwLVLgfuXvTBznk+j57sj1O7Z8jvZfza1zv7v1Apt+h
2552
+ k6EKhqzvINB5Ab149xnYJDE0BAGmuhWawyfc2E8PzBhj/5kPDpFrdRbhIfzYJsdHt6bPWHJxfrrh
2553
+ TZVHO8mvbaG0weyJ9rQPOLXiZNwlz6bb65pcmaHFCN795trV1lpFDMS3wrUU77QR/w4VtfX128a9
2554
+ 61qn8FYiqTxlVMYVqL2Gns2Dlmh6cYGJ4Qvh6hEbaAjMaZ7snkGeRDImeuKHCnE96+RapNLbxc3G
2555
+ 3mB/ufNPRJLvKrcYPqcZ2Qt9sTdBQrC6YB3y/gkRsPCHe6ed
2556
+ -----END CERTIFICATE-----
2557
+
2558
+ QuoVadis Root CA 1 G3
2559
+ =====================
2560
+ -----BEGIN CERTIFICATE-----
2561
+ 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
2585
+ hMJKzRwuJIczYOXD
2586
+ -----END CERTIFICATE-----
2587
+
2588
+ QuoVadis Root CA 2 G3
2589
+ =====================
2590
+ -----BEGIN CERTIFICATE-----
2591
+ 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
2615
+ O3jtZsSOeWmD3n+M
2616
+ -----END CERTIFICATE-----
2617
+
2618
+ QuoVadis Root CA 3 G3
2619
+ =====================
2620
+ -----BEGIN CERTIFICATE-----
2621
+ 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
2645
+ PpxxVJkES/1Y+Zj0
2646
+ -----END CERTIFICATE-----
2647
+
2648
+ DigiCert Assured ID Root G2
2649
+ ===========================
2650
+ -----BEGIN CERTIFICATE-----
2651
+ MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBlMQswCQYDVQQG
2652
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQw
2653
+ IgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgw
2654
+ MTE1MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQL
2655
+ ExB3d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIw
2656
+ ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSAn61UQbVH
2657
+ 35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4HteccbiJVMWWXvdMX0h5i89vq
2658
+ bFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9HpEgjAALAcKxHad3A2m67OeYfcgnDmCXRw
2659
+ VWmvo2ifv922ebPynXApVfSr/5Vh88lAbx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OP
2660
+ YLfykqGxvYmJHzDNw6YuYjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+Rn
2661
+ lTGNAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTO
2662
+ w0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPIQW5pJ6d1Ee88hjZv
2663
+ 0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I0jJmwYrA8y8678Dj1JGG0VDjA9tz
2664
+ d29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4GnilmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAW
2665
+ hsI6yLETcDbYz+70CjTVW0z9B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0M
2666
+ jomZmWzwPDCvON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo
2667
+ IhNzbM8m9Yop5w==
2668
+ -----END CERTIFICATE-----
2669
+
2670
+ DigiCert Assured ID Root G3
2671
+ ===========================
2672
+ -----BEGIN CERTIFICATE-----
2673
+ MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQswCQYDVQQGEwJV
2674
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSQwIgYD
2675
+ VQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1
2676
+ MTIwMDAwWjBlMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
2677
+ d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQ
2678
+ BgcqhkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJfZn4f5dwb
2679
+ RXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17QRSAPWXYQ1qAk8C3eNvJs
2680
+ KTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgF
2681
+ UaFNN6KDec6NHSrkhDAKBggqhkjOPQQDAwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5Fy
2682
+ YZ5eEJJZVrmDxxDnOOlYJjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy
2683
+ 1vUhZscv6pZjamVFkpUBtA==
2684
+ -----END CERTIFICATE-----
2685
+
2686
+ DigiCert Global Root G2
2687
+ =======================
2688
+ -----BEGIN CERTIFICATE-----
2689
+ MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQG
2690
+ EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAw
2691
+ HgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUx
2692
+ MjAwMDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3
2693
+ dy5kaWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkq
2694
+ hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI2/Ou8jqJ
2695
+ kTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx1x7e/dfgy5SDN67sH0NO
2696
+ 3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQq2EGnI/yuum06ZIya7XzV+hdG82MHauV
2697
+ BJVJ8zUtluNJbd134/tJS7SsVQepj5WztCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyM
2698
+ UNGPHgm+F6HmIcr9g+UQvIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQAB
2699
+ o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV5uNu
2700
+ 5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY1Yl9PMWLSn/pvtsr
2701
+ F9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4NeF22d+mQrvHRAiGfzZ0JFrabA0U
2702
+ WTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NGFdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBH
2703
+ QRFXGU7Aj64GxJUTFy8bJZ918rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/
2704
+ iyK5S9kJRaTepLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl
2705
+ MrY=
2706
+ -----END CERTIFICATE-----
2707
+
2708
+ DigiCert Global Root G3
2709
+ =======================
2710
+ -----BEGIN CERTIFICATE-----
2711
+ MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQswCQYDVQQGEwJV
2712
+ UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQuY29tMSAwHgYD
2713
+ VQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAw
2714
+ MDBaMGExCzAJBgNVBAYTAlVTMRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5k
2715
+ aWdpY2VydC5jb20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0C
2716
+ AQYFK4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FGfp4tn+6O
2717
+ YwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPOZ9wj/wMco+I+o0IwQDAP
2718
+ BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNp
2719
+ Yim8S8YwCgYIKoZIzj0EAwMDaAAwZQIxAK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y
2720
+ 3maTD/HMsQmP3Wyr+mt/oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34
2721
+ VOKa5Vt8sycX
2722
+ -----END CERTIFICATE-----
2723
+
2724
+ DigiCert Trusted Root G4
2725
+ ========================
2726
+ -----BEGIN CERTIFICATE-----
2727
+ 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
2752
+ 82Z+
2753
+ -----END CERTIFICATE-----
2754
+
2755
+ WoSign
2756
+ ======
2757
+ -----BEGIN CERTIFICATE-----
2758
+ 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
2783
+ -----END CERTIFICATE-----
2784
+
2785
+ WoSign China
2786
+ ============
2787
+ -----BEGIN CERTIFICATE-----
2788
+ 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
2812
+ kI26oQ==
2813
+ -----END CERTIFICATE-----
2814
+
2815
+ COMODO RSA Certification Authority
2816
+ ==================================
2817
+ -----BEGIN CERTIFICATE-----
2818
+ MIIF2DCCA8CgAwIBAgIQTKr5yttjb+Af907YWwOGnTANBgkqhkiG9w0BAQwFADCBhTELMAkGA1UE
2819
+ BhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgG
2820
+ A1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlv
2821
+ biBBdXRob3JpdHkwHhcNMTAwMTE5MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMC
2822
+ R0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UE
2823
+ ChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBSU0EgQ2VydGlmaWNhdGlvbiBB
2824
+ dXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCR6FSS0gpWsawNJN3Fz0Rn
2825
+ dJkrN6N9I3AAcbxT38T6KhKPS38QVr2fcHK3YX/JSw8Xpz3jsARh7v8Rl8f0hj4K+j5c+ZPmNHrZ
2826
+ FGvnnLOFoIJ6dq9xkNfs/Q36nGz637CC9BR++b7Epi9Pf5l/tfxnQ3K9DADWietrLNPtj5gcFKt+
2827
+ 5eNu/Nio5JIk2kNrYrhV/erBvGy2i/MOjZrkm2xpmfh4SDBF1a3hDTxFYPwyllEnvGfDyi62a+pG
2828
+ x8cgoLEfZd5ICLqkTqnyg0Y3hOvozIFIQ2dOciqbXL1MGyiKXCJ7tKuY2e7gUYPDCUZObT6Z+pUX
2829
+ 2nwzV0E8jVHtC7ZcryxjGt9XyD+86V3Em69FmeKjWiS0uqlWPc9vqv9JWL7wqP/0uK3pN/u6uPQL
2830
+ OvnoQ0IeidiEyxPx2bvhiWC4jChWrBQdnArncevPDt09qZahSL0896+1DSJMwBGB7FY79tOi4lu3
2831
+ sgQiUpWAk2nojkxl8ZEDLXB0AuqLZxUpaVICu9ffUGpVRr+goyhhf3DQw6KqLCGqR84onAZFdr+C
2832
+ GCe01a60y1Dma/RMhnEw6abfFobg2P9A3fvQQoh/ozM6LlweQRGBY84YcWsr7KaKtzFcOmpH4MN5
2833
+ WdYgGq/yapiqcrxXStJLnbsQ/LBMQeXtHT1eKJ2czL+zUdqnR+WEUwIDAQABo0IwQDAdBgNVHQ4E
2834
+ FgQUu69+Aj36pvE8hI6t7jiY7NkyMtQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8w
2835
+ DQYJKoZIhvcNAQEMBQADggIBAArx1UaEt65Ru2yyTUEUAJNMnMvlwFTPoCWOAvn9sKIN9SCYPBMt
2836
+ rFaisNZ+EZLpLrqeLppysb0ZRGxhNaKatBYSaVqM4dc+pBroLwP0rmEdEBsqpIt6xf4FpuHA1sj+
2837
+ nq6PK7o9mfjYcwlYRm6mnPTXJ9OV2jeDchzTc+CiR5kDOF3VSXkAKRzH7JsgHAckaVd4sjn8OoSg
2838
+ tZx8jb8uk2IntznaFxiuvTwJaP+EmzzV1gsD41eeFPfR60/IvYcjt7ZJQ3mFXLrrkguhxuhoqEwW
2839
+ sRqZCuhTLJK7oQkYdQxlqHvLI7cawiiFwxv/0Cti76R7CZGYZ4wUAc1oBmpjIXUDgIiKboHGhfKp
2840
+ pC3n9KUkEEeDys30jXlYsQab5xoq2Z0B15R97QNKyvDb6KkBPvVWmckejkk9u+UJueBPSZI9FoJA
2841
+ zMxZxuY67RIuaTxslbH9qh17f4a+Hg4yRvv7E491f0yLS0Zj/gA0QHDBw7mh3aZw4gSzQbzpgJHq
2842
+ ZJx64SIDqZxubw5lT2yHh17zbqD5daWbQOhTsiedSrnAdyGN/4fy3ryM7xfft0kL0fJuMAsaDk52
2843
+ 7RH89elWsn2/x20Kk4yl0MC2Hb46TpSi125sC8KKfPog88Tk5c0NqMuRkrF8hey1FGlmDoLnzc7I
2844
+ LaZRfyHBNVOFBkpdn627G190
2845
+ -----END CERTIFICATE-----
2846
+
2847
+ USERTrust RSA Certification Authority
2848
+ =====================================
2849
+ -----BEGIN CERTIFICATE-----
2850
+ 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
2876
+ Q+6IHdfGjjxDah2nGN59PRbxYvnKkKj9
2877
+ -----END CERTIFICATE-----
2878
+
2879
+ USERTrust ECC Certification Authority
2880
+ =====================================
2881
+ -----BEGIN CERTIFICATE-----
2882
+ MIICjzCCAhWgAwIBAgIQXIuZxVqUxdJxVt7NiYDMJjAKBggqhkjOPQQDAzCBiDELMAkGA1UEBhMC
2883
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
2884
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
2885
+ biBBdXRob3JpdHkwHhcNMTAwMjAxMDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBiDELMAkGA1UEBhMC
2886
+ VVMxEzARBgNVBAgTCk5ldyBKZXJzZXkxFDASBgNVBAcTC0plcnNleSBDaXR5MR4wHAYDVQQKExVU
2887
+ aGUgVVNFUlRSVVNUIE5ldHdvcmsxLjAsBgNVBAMTJVVTRVJUcnVzdCBFQ0MgQ2VydGlmaWNhdGlv
2888
+ biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQarFRaqfloI+d61SRvU8Za2EurxtW2
2889
+ 0eZzca7dnNYMYf3boIkDuAUU7FfO7l0/4iGzzvfUinngo4N+LZfQYcTxmdwlkWOrfzCjtHDix6Ez
2890
+ nPO/LlxTsV+zfTJ/ijTjeXmjQjBAMB0GA1UdDgQWBBQ64QmG1M8ZwpZ2dEl23OA1xmNjmjAOBgNV
2891
+ HQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjA2Z6EWCNzklwBB
2892
+ HU6+4WMBzzuqQhFkoJ2UOQIReVx7Hfpkue4WQrO/isIJxOzksU0CMQDpKmFHjFJKS04YcPbWRNZu
2893
+ 9YO6bVi9JNlWSOrvxKJGgYhqOkbRqZtNyWHa0V1Xahg=
2894
+ -----END CERTIFICATE-----
2895
+
2896
+ GlobalSign ECC Root CA - R4
2897
+ ===========================
2898
+ -----BEGIN CERTIFICATE-----
2899
+ MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEkMCIGA1UECxMb
2900
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
2901
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
2902
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
2903
+ EwpHbG9iYWxTaWduMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprl
2904
+ OQcJFspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAwDgYDVR0P
2905
+ AQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61FuOJAf/sKbvu+M8k8o4TV
2906
+ MAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGXkPoUVy0D7O48027KqGx2vKLeuwIgJ6iF
2907
+ JzWbVsaj8kfSt24bAgAXqmemFZHe+pTsewv4n4Q=
2908
+ -----END CERTIFICATE-----
2909
+
2910
+ GlobalSign ECC Root CA - R5
2911
+ ===========================
2912
+ -----BEGIN CERTIFICATE-----
2913
+ MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEkMCIGA1UECxMb
2914
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
2915
+ EwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoXDTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMb
2916
+ R2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQD
2917
+ EwpHbG9iYWxTaWduMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6
2918
+ SFkc8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8kehOvRnkmS
2919
+ h5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd
2920
+ BgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYIKoZIzj0EAwMDaAAwZQIxAOVpEslu28Yx
2921
+ uglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7
2922
+ yFz9SO8NdCKoCOJuxUnOxwy8p2Fp8fc74SrL+SvzZpA3
2923
+ -----END CERTIFICATE-----
2924
+
2925
+ Staat der Nederlanden Root CA - G3
2926
+ ==================================
2927
+ -----BEGIN CERTIFICATE-----
2928
+ MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJOTDEeMBwGA1UE
2929
+ CgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFhdCBkZXIgTmVkZXJsYW5kZW4g
2930
+ Um9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloXDTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMC
2931
+ TkwxHjAcBgNVBAoMFVN0YWF0IGRlciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5l
2932
+ ZGVybGFuZGVuIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4y
2933
+ olQPcPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WWIkYFsO2t
2934
+ x1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqXxz8ecAgwoNzFs21v0IJy
2935
+ EavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFyKJLZWyNtZrVtB0LrpjPOktvA9mxjeM3K
2936
+ Tj215VKb8b475lRgsGYeCasH/lSJEULR9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUur
2937
+ mkVLoR9BvUhTFXFkC4az5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU5
2938
+ 1nus6+N86U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7Ngzp
2939
+ 07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHPbMk7ccHViLVlvMDo
2940
+ FxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXtBznaqB16nzaeErAMZRKQFWDZJkBE
2941
+ 41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTtXUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMB
2942
+ AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleu
2943
+ yjWcLhL75LpdINyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD
2944
+ U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwpLiniyMMB8jPq
2945
+ KqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8Ipf3YF3qKS9Ysr1YvY2WTxB1
2946
+ v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixpgZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA
2947
+ 8KCWAg8zxXHzniN9lLf9OtMJgwYh/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b
2948
+ 8KKaa8MFSu1BYBQw0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0r
2949
+ mj1AfsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq4BZ+Extq
2950
+ 1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR1VmiiXTTn74eS9fGbbeI
2951
+ JG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/QFH1T/U67cjF68IeHRaVesd+QnGTbksV
2952
+ tzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM94B7IWcnMFk=
2953
+ -----END CERTIFICATE-----
2954
+
2955
+ Staat der Nederlanden EV Root CA
2956
+ ================================
2957
+ -----BEGIN CERTIFICATE-----
2958
+ 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
2982
+ eUN51q1veieQA6TqJIc/2b3Z6fJfUEkc7uzXLg==
2983
+ -----END CERTIFICATE-----
2984
+
2985
+ IdenTrust Commercial Root CA 1
2986
+ ==============================
2987
+ -----BEGIN CERTIFICATE-----
2988
+ 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
3012
+ cGzM7vRX+Bi6hG6H
3013
+ -----END CERTIFICATE-----
3014
+
3015
+ IdenTrust Public Sector Root CA 1
3016
+ =================================
3017
+ -----BEGIN CERTIFICATE-----
3018
+ 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
3042
+ 3Wl9af0AVqW3rLatt8o+Ae+c
3043
+ -----END CERTIFICATE-----
3044
+
3045
+ Entrust Root Certification Authority - G2
3046
+ =========================================
3047
+ -----BEGIN CERTIFICATE-----
3048
+ MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMCVVMxFjAUBgNV
3049
+ BAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVy
3050
+ bXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ug
3051
+ b25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIw
3052
+ HhcNMDkwNzA3MTcyNTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoT
3053
+ DUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMx
3054
+ OTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25s
3055
+ eTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwggEi
3056
+ MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP
3057
+ /vaCeb9zYQYKpSfYs1/TRU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXz
3058
+ HHfV1IWNcCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hWwcKU
3059
+ s/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1U1+cPvQXLOZprE4y
3060
+ TGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0jaWvYkxN4FisZDQSA/i2jZRjJKRx
3061
+ AgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ6
3062
+ 0B7vfec7aVHUbI2fkBJmqzANBgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5Z
3063
+ iXMRrEPR9RP/jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ
3064
+ Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v1fN2D807iDgi
3065
+ nWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4RnAuknZoh8/CbCzB428Hch0P+
3066
+ vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmHVHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xO
3067
+ e4pIb4tF9g==
3068
+ -----END CERTIFICATE-----
3069
+
3070
+ Entrust Root Certification Authority - EC1
3071
+ ==========================================
3072
+ -----BEGIN CERTIFICATE-----
3073
+ MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkGA1UEBhMCVVMx
3074
+ FjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVn
3075
+ YWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXpl
3076
+ ZCB1c2Ugb25seTEzMDEGA1UEAxMqRW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
3077
+ IC0gRUMxMB4XDTEyMTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYw
3078
+ FAYDVQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0L2xlZ2Fs
3079
+ LXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0gZm9yIGF1dGhvcml6ZWQg
3080
+ dXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
3081
+ IEVDMTB2MBAGByqGSM49AgEGBSuBBAAiA2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHy
3082
+ AsWfoPZb1YsGGYZPUxBtByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef
3083
+ 9eNi1KlHBz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
3084
+ FLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVCR98crlOZF7ZvHH3h
3085
+ vxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nXhTcGtXsI/esni0qU+eH6p44mCOh8
3086
+ kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G
3087
+ -----END CERTIFICATE-----
3088
+
3089
+ CFCA EV ROOT
3090
+ ============
3091
+ -----BEGIN CERTIFICATE-----
3092
+ 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
3117
+ -----END CERTIFICATE-----
3118
+
3119
+ TÜRKTRUST Elektronik Sertifika Hizmet Sağlayıcısı H5
3120
+ ====================================================
3121
+ -----BEGIN CERTIFICATE-----
3122
+ MIIEJzCCAw+gAwIBAgIHAI4X/iQggTANBgkqhkiG9w0BAQsFADCBsTELMAkGA1UEBhMCVFIxDzAN
3123
+ BgNVBAcMBkFua2FyYTFNMEsGA1UECgxEVMOcUktUUlVTVCBCaWxnaSDEsGxldGnFn2ltIHZlIEJp
3124
+ bGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7Fni4xQjBABgNVBAMMOVTDnFJLVFJVU1Qg
3125
+ RWxla3Ryb25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSBINTAeFw0xMzA0MzAw
3126
+ ODA3MDFaFw0yMzA0MjgwODA3MDFaMIGxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMU0w
3127
+ SwYDVQQKDERUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnE
3128
+ n2kgSGl6bWV0bGVyaSBBLsWeLjFCMEAGA1UEAww5VMOcUktUUlVTVCBFbGVrdHJvbmlrIFNlcnRp
3129
+ ZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIEg1MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3130
+ CgKCAQEApCUZ4WWe60ghUEoI5RHwWrom/4NZzkQqL/7hzmAD/I0Dpe3/a6i6zDQGn1k19uwsu537
3131
+ jVJp45wnEFPzpALFp/kRGml1bsMdi9GYjZOHp3GXDSHHmflS0yxjXVW86B8BSLlg/kJK9siArs1m
3132
+ ep5Fimh34khon6La8eHBEJ/rPCmBp+EyCNSgBbGM+42WAA4+Jd9ThiI7/PS98wl+d+yG6w8z5UNP
3133
+ 9FR1bSmZLmZaQ9/LXMrI5Tjxfjs1nQ/0xVqhzPMggCTTV+wVunUlm+hkS7M0hO8EuPbJbKoCPrZV
3134
+ 4jI3X/xml1/N1p7HIL9Nxqw/dV8c7TKcfGkAaZHjIxhT6QIDAQABo0IwQDAdBgNVHQ4EFgQUVpkH
3135
+ HtOsDGlktAxQR95DLL4gwPswDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZI
3136
+ hvcNAQELBQADggEBAJ5FdnsXSDLyOIspve6WSk6BGLFRRyDN0GSxDsnZAdkJzsiZ3GglE9Rc8qPo
3137
+ BP5yCccLqh0lVX6Wmle3usURehnmp349hQ71+S4pL+f5bFgWV1Al9j4uPqrtd3GqqpmWRgqujuwq
3138
+ URawXs3qZwQcWDD1YIq9pr1N5Za0/EKJAWv2cMhQOQwt1WbZyNKzMrcbGW3LM/nfpeYVhDfwwvJl
3139
+ lpKQd/Ct9JDpEXjXk4nAPQu6KfTomZ1yju2dL+6SfaHx/126M2CFYv4HAqGEVka+lgqaE9chTLd8
3140
+ B59OTj+RdPsnnRHM3eaxynFNExc5JsUpISuTKWqW+qtB4Uu2NQvAmxU=
3141
+ -----END CERTIFICATE-----
3142
+
3143
+ Certinomis - Root CA
3144
+ ====================
3145
+ -----BEGIN CERTIFICATE-----
3146
+ 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
3171
+ hkIGuUE=
3172
+ -----END CERTIFICATE-----
3173
+
3174
+ OISTE WISeKey Global Root GB CA
3175
+ ===============================
3176
+ -----BEGIN CERTIFICATE-----
3177
+ MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBtMQswCQYDVQQG
3178
+ EwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl
3179
+ ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAw
3180
+ MzJaFw0zOTEyMDExNTEwMzFaMG0xCzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYD
3181
+ VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEds
3182
+ b2JhbCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3HEokKtaX
3183
+ scriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGxWuR51jIjK+FTzJlFXHtP
3184
+ rby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk
3185
+ 9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNku7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4o
3186
+ Qnc/nSMbsrY9gBQHTC5P99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvg
3187
+ GUpuuy9rM2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
3188
+ /zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZI
3189
+ hvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrghcViXfa43FK8+5/ea4n32cZiZBKpD
3190
+ dHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0
3191
+ VQreUGdNZtGn//3ZwLWoo4rOZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEui
3192
+ HZeeevJuQHHfaPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic
3193
+ Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM=
3194
+ -----END CERTIFICATE-----
3195
+
3196
+ Certification Authority of WoSign G2
3197
+ ====================================
3198
+ -----BEGIN CERTIFICATE-----
3199
+ MIIDfDCCAmSgAwIBAgIQayXaioidfLwPBbOxemFFRDANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQG
3200
+ EwJDTjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxLTArBgNVBAMTJENlcnRpZmljYXRpb24g
3201
+ QXV0aG9yaXR5IG9mIFdvU2lnbiBHMjAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMFgx
3202
+ CzAJBgNVBAYTAkNOMRowGAYDVQQKExFXb1NpZ24gQ0EgTGltaXRlZDEtMCsGA1UEAxMkQ2VydGlm
3203
+ aWNhdGlvbiBBdXRob3JpdHkgb2YgV29TaWduIEcyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
3204
+ CgKCAQEAvsXEoCKASU+/2YcRxlPhuw+9YH+v9oIOH9ywjj2X4FA8jzrvZjtFB5sg+OPXJYY1kBai
3205
+ XW8wGQiHC38Gsp1ij96vkqVg1CuAmlI/9ZqD6TRay9nVYlzmDuDfBpgOgHzKtB0TiGsOqCR3A9Du
3206
+ W/PKaZE1OVbFbeP3PU9ekzgkyhjpJMuSA93MHD0JcOQg5PGurLtzaaNjOg9FD6FKmsLRY6zLEPg9
3207
+ 5k4ot+vElbGs/V6r+kHLXZ1L3PR8du9nfwB6jdKgGlxNIuG12t12s9R23164i5jIFFTMaxeSt+BK
3208
+ v0mUYQs4kI9dJGwlezt52eJ+na2fmKEG/HgUYFf47oB3sQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMC
3209
+ AQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU+mCp62XF3RYUCE4MD42b4Pdkr2cwDQYJKoZI
3210
+ hvcNAQELBQADggEBAFfDejaCnI2Y4qtAqkePx6db7XznPWZaOzG73/MWM5H8fHulwqZm46qwtyeY
3211
+ P0nXYGdnPzZPSsvxFPpahygc7Y9BMsaV+X3avXtbwrAh449G3CE4Q3RM+zD4F3LBMvzIkRfEzFg3
3212
+ TgvMWvchNSiDbGAtROtSjFA9tWwS1/oJu2yySrHFieT801LYYRf+epSEj3m2M1m6D8QL4nCgS3gu
3213
+ +sif/a+RZQp4OBXllxcU3fngLDT4ONCEIgDAFFEYKwLcMFrw6AF8NTojrwjkr6qOKEJJLvD1mTS+
3214
+ 7Q9LGOHSJDy7XUe3IfKN0QqZjuNuPq1w4I+5ysxugTH2e5x6eeRncRg=
3215
+ -----END CERTIFICATE-----
3216
+
3217
+ CA WoSign ECC Root
3218
+ ==================
3219
+ -----BEGIN CERTIFICATE-----
3220
+ MIICCTCCAY+gAwIBAgIQaEpYcIBr8I8C+vbe6LCQkDAKBggqhkjOPQQDAzBGMQswCQYDVQQGEwJD
3221
+ TjEaMBgGA1UEChMRV29TaWduIENBIExpbWl0ZWQxGzAZBgNVBAMTEkNBIFdvU2lnbiBFQ0MgUm9v
3222
+ dDAeFw0xNDExMDgwMDU4NThaFw00NDExMDgwMDU4NThaMEYxCzAJBgNVBAYTAkNOMRowGAYDVQQK
3223
+ ExFXb1NpZ24gQ0EgTGltaXRlZDEbMBkGA1UEAxMSQ0EgV29TaWduIEVDQyBSb290MHYwEAYHKoZI
3224
+ zj0CAQYFK4EEACIDYgAE4f2OuEMkq5Z7hcK6C62N4DrjJLnSsb6IOsq/Srj57ywvr1FQPEd1bPiU
3225
+ t5v8KB7FVMxjnRZLU8HnIKvNrCXSf4/CwVqCXjCLelTOA7WRf6qU0NGKSMyCBSah1VES1ns2o0Iw
3226
+ QDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUqv3VWqP2h4syhf3R
3227
+ MluARZPzA7gwCgYIKoZIzj0EAwMDaAAwZQIxAOSkhLCB1T2wdKyUpOgOPQB0TKGXa/kNUTyh2Tv0
3228
+ Daupn75OcsqF1NnstTJFGG+rrQIwfcf3aWMvoeGY7xMQ0Xk/0f7qO3/eVvSQsRUR2LIiFdAvwyYu
3229
+ a/GRspBl9JrmkO5K
3230
+ -----END CERTIFICATE-----
3231
+
3232
+ SZAFIR ROOT CA2
3233
+ ===============
3234
+ -----BEGIN CERTIFICATE-----
3235
+ MIIDcjCCAlqgAwIBAgIUPopdB+xV0jLVt+O2XwHrLdzk1uQwDQYJKoZIhvcNAQELBQAwUTELMAkG
3236
+ A1UEBhMCUEwxKDAmBgNVBAoMH0tyYWpvd2EgSXpiYSBSb3psaWN6ZW5pb3dhIFMuQS4xGDAWBgNV
3237
+ BAMMD1NaQUZJUiBST09UIENBMjAeFw0xNTEwMTkwNzQzMzBaFw0zNTEwMTkwNzQzMzBaMFExCzAJ
3238
+ BgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRgwFgYD
3239
+ VQQDDA9TWkFGSVIgUk9PVCBDQTIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC3vD5Q
3240
+ qEvNQLXOYeeWyrSh2gwisPq1e3YAd4wLz32ohswmUeQgPYUM1ljj5/QqGJ3a0a4m7utT3PSQ1hNK
3241
+ DJA8w/Ta0o4NkjrcsbH/ON7Dui1fgLkCvUqdGw+0w8LBZwPd3BucPbOw3gAeqDRHu5rr/gsUvTaE
3242
+ 2g0gv/pby6kWIK05YO4vdbbnl5z5Pv1+TW9NL++IDWr63fE9biCloBK0TXC5ztdyO4mTp4CEHCdJ
3243
+ ckm1/zuVnsHMyAHs6A6KCpbns6aH5db5BSsNl0BwPLqsdVqc1U2dAgrSS5tmS0YHF2Wtn2yIANwi
3244
+ ieDhZNRnvDF5YTy7ykHNXGoAyDw4jlivAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
3245
+ AQH/BAQDAgEGMB0GA1UdDgQWBBQuFqlKGLXLzPVvUPMjX/hd56zwyDANBgkqhkiG9w0BAQsFAAOC
3246
+ AQEAtXP4A9xZWx126aMqe5Aosk3AM0+qmrHUuOQn/6mWmc5G4G18TKI4pAZw8PRBEew/R40/cof5
3247
+ O/2kbytTAOD/OblqBw7rHRz2onKQy4I9EYKL0rufKq8h5mOGnXkZ7/e7DDWQw4rtTw/1zBLZpD67
3248
+ oPwglV9PJi8RI4NOdQcPv5vRtB3pEAT+ymCPoky4rc/hkA/NrgrHXXu3UNLUYfrVFdvXn4dRVOul
3249
+ 4+vJhaAlIDf7js4MNIThPIGyd05DpYhfhmehPea0XGG2Ptv+tyjFogeutcrKjSoS75ftwjCkySp6
3250
+ +/NNIxuZMzSgLvWpCz/UXeHPhJ/iGcJfitYgHuNztw==
3251
+ -----END CERTIFICATE-----
3252
+
3253
+ Certum Trusted Network CA 2
3254
+ ===========================
3255
+ -----BEGIN CERTIFICATE-----
3256
+ MIIF0jCCA7qgAwIBAgIQIdbQSk8lD8kyN/yqXhKN6TANBgkqhkiG9w0BAQ0FADCBgDELMAkGA1UE
3257
+ BhMCUEwxIjAgBgNVBAoTGVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1
3258
+ bSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0d29y
3259
+ ayBDQSAyMCIYDzIwMTExMDA2MDgzOTU2WhgPMjA0NjEwMDYwODM5NTZaMIGAMQswCQYDVQQGEwJQ
3260
+ TDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENl
3261
+ cnRpZmljYXRpb24gQXV0aG9yaXR5MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENB
3262
+ IDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC9+Xj45tWADGSdhhuWZGc/IjoedQF9
3263
+ 7/tcZ4zJzFxrqZHmuULlIEub2pt7uZld2ZuAS9eEQCsn0+i6MLs+CRqnSZXvK0AkwpfHp+6bJe+o
3264
+ CgCXhVqqndwpyeI1B+twTUrWwbNWuKFBOJvR+zF/j+Bf4bE/D44WSWDXBo0Y+aomEKsq09DRZ40b
3265
+ Rr5HMNUuctHFY9rnY3lEfktjJImGLjQ/KUxSiyqnwOKRKIm5wFv5HdnnJ63/mgKXwcZQkpsCLL2p
3266
+ uTRZCr+ESv/f/rOf69me4Jgj7KZrdxYq28ytOxykh9xGc14ZYmhFV+SQgkK7QtbwYeDBoz1mo130
3267
+ GO6IyY0XRSmZMnUCMe4pJshrAua1YkV/NxVaI2iJ1D7eTiew8EAMvE0Xy02isx7QBlrd9pPPV3WZ
3268
+ 9fqGGmd4s7+W/jTcvedSVuWz5XV710GRBdxdaeOVDUO5/IOWOZV7bIBaTxNyxtd9KXpEulKkKtVB
3269
+ Rgkg/iKgtlswjbyJDNXXcPiHUv3a76xRLgezTv7QCdpw75j6VuZt27VXS9zlLCUVyJ4ueE742pye
3270
+ hizKV/Ma5ciSixqClnrDvFASadgOWkaLOusm+iPJtrCBvkIApPjW/jAux9JG9uWOdf3yzLnQh1vM
3271
+ BhBgu4M1t15n3kfsmUjxpKEV/q2MYo45VU85FrmxY53/twIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3272
+ AQH/MB0GA1UdDgQWBBS2oVQ5AsOgP46KvPrU+Bym0ToO/TAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZI
3273
+ hvcNAQENBQADggIBAHGlDs7k6b8/ONWJWsQCYftMxRQXLYtPU2sQF/xlhMcQSZDe28cmk4gmb3DW
3274
+ Al45oPePq5a1pRNcgRRtDoGCERuKTsZPpd1iHkTfCVn0W3cLN+mLIMb4Ck4uWBzrM9DPhmDJ2vuA
3275
+ L55MYIR4PSFk1vtBHxgP58l1cb29XN40hz5BsA72udY/CROWFC/emh1auVbONTqwX3BNXuMp8SMo
3276
+ clm2q8KMZiYcdywmdjWLKKdpoPk79SPdhRB0yZADVpHnr7pH1BKXESLjokmUbOe3lEu6LaTaM4tM
3277
+ pkT/WjzGHWTYtTHkpjx6qFcL2+1hGsvxznN3Y6SHb0xRONbkX8eftoEq5IVIeVheO/jbAoJnwTnb
3278
+ w3RLPTYe+SmTiGhbqEQZIfCn6IENLOiTNrQ3ssqwGyZ6miUfmpqAnksqP/ujmv5zMnHCnsZy4Ypo
3279
+ J/HkD7TETKVhk/iXEAcqMCWpuchxuO9ozC1+9eB+D4Kob7a6bINDd82Kkhehnlt4Fj1F4jNy3eFm
3280
+ ypnTycUm/Q1oBEauttmbjL4ZvrHG8hnjXALKLNhvSgfZyTXaQHXyxKcZb55CEJh15pWLYLztxRLX
3281
+ is7VmFxWlgPF7ncGNf/P5O4/E2Hu29othfDNrp2yGAlFw5Khchf8R7agCyzxxN5DaAhqXzvwdmP7
3282
+ zAYspsbiDrW5viSP
3283
+ -----END CERTIFICATE-----
3284
+
3285
+ Hellenic Academic and Research Institutions RootCA 2015
3286
+ =======================================================
3287
+ -----BEGIN CERTIFICATE-----
3288
+ MIIGCzCCA/OgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcT
3289
+ BkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0
3290
+ aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNVBAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNl
3291
+ YXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIwMTUwHhcNMTUwNzA3MTAxMTIxWhcNNDAwNjMwMTAx
3292
+ MTIxWjCBpjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0aGVuczFEMEIGA1UEChM7SGVsbGVuaWMg
3293
+ QWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9ucyBDZXJ0LiBBdXRob3JpdHkxQDA+BgNV
3294
+ BAMTN0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgUm9vdENBIDIw
3295
+ MTUwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDC+Kk/G4n8PDwEXT2QNrCROnk8Zlrv
3296
+ bTkBSRq0t89/TSNTt5AA4xMqKKYx8ZEA4yjsriFBzh/a/X0SWwGDD7mwX5nh8hKDgE0GPt+sr+eh
3297
+ iGsxr/CL0BgzuNtFajT0AoAkKAoCFZVedioNmToUW/bLy1O8E00BiDeUJRtCvCLYjqOWXjrZMts+
3298
+ 6PAQZe104S+nfK8nNLspfZu2zwnI5dMK/IhlZXQK3HMcXM1AsRzUtoSMTFDPaI6oWa7CJ06CojXd
3299
+ FPQf/7J31Ycvqm59JCfnxssm5uX+Zwdj2EUN3TpZZTlYepKZcj2chF6IIbjV9Cz82XBST3i4vTwr
3300
+ i5WY9bPRaM8gFH5MXF/ni+X1NYEZN9cRCLdmvtNKzoNXADrDgfgXy5I2XdGj2HUb4Ysn6npIQf1F
3301
+ GQatJ5lOwXBH3bWfgVMS5bGMSF0xQxfjjMZ6Y5ZLKTBOhE5iGV48zpeQpX8B653g+IuJ3SWYPZK2
3302
+ fu/Z8VFRfS0myGlZYeCsargqNhEEelC9MoS+L9xy1dcdFkfkR2YgP/SWxa+OAXqlD3pk9Q0Yh9mu
3303
+ iNX6hME6wGkoLfINaFGq46V3xqSQDqE3izEjR8EJCOtu93ib14L8hCCZSRm2Ekax+0VVFqmjZayc
3304
+ Bw/qa9wfLgZy7IaIEuQt218FL+TwA9MmM+eAws1CoRc0CwIDAQABo0IwQDAPBgNVHRMBAf8EBTAD
3305
+ AQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUcRVnyMjJvXVdctA4GGqd83EkVAswDQYJKoZI
3306
+ hvcNAQELBQADggIBAHW7bVRLqhBYRjTyYtcWNl0IXtVsyIe9tC5G8jH4fOpCtZMWVdyhDBKg2mF+
3307
+ D1hYc2Ryx+hFjtyp8iY/xnmMsVMIM4GwVhO+5lFc2JsKT0ucVlMC6U/2DWDqTUJV6HwbISHTGzrM
3308
+ d/K4kPFox/la/vot9L/J9UUbzjgQKjeKeaO04wlshYaT/4mWJ3iBj2fjRnRUjtkNaeJK9E10A/+y
3309
+ d+2VZ5fkscWrv2oj6NSU4kQoYsRL4vDY4ilrGnB+JGGTe08DMiUNRSQrlrRGar9KC/eaj8GsGsVn
3310
+ 82800vpzY4zvFrCopEYq+OsS7HK07/grfoxSwIuEVPkvPuNVqNxmsdnhX9izjFk0WaSrT2y7Hxjb
3311
+ davYy5LNlDhhDgcGH0tGEPEVvo2FXDtKK4F5D7Rpn0lQl033DlZdwJVqwjbDG2jJ9SrcR5q+ss7F
3312
+ Jej6A7na+RZukYT1HCjI/CbM1xyQVqdfbzoEvM14iQuODy+jqk+iGxI9FghAD/FGTNeqewjBCvVt
3313
+ J94Cj8rDtSvK6evIIVM4pcw72Hc3MKJP2W/R8kCtQXoXxdZKNYm3QdV8hn9VTYNKpXMgwDqvkPGa
3314
+ JI7ZjnHKe7iG2rKPmT4dEw0SEe7Uq/DpFXYC5ODfqiAeW2GFZECpkJcNrVPSWh2HagCXZWK0vm9q
3315
+ p/UsQu0yrbYhnr68
3316
+ -----END CERTIFICATE-----
3317
+
3318
+ Hellenic Academic and Research Institutions ECC RootCA 2015
3319
+ ===========================================================
3320
+ -----BEGIN CERTIFICATE-----
3321
+ MIICwzCCAkqgAwIBAgIBADAKBggqhkjOPQQDAjCBqjELMAkGA1UEBhMCR1IxDzANBgNVBAcTBkF0
3322
+ aGVuczFEMEIGA1UEChM7SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJlc2VhcmNoIEluc3RpdHV0aW9u
3323
+ cyBDZXJ0LiBBdXRob3JpdHkxRDBCBgNVBAMTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJj
3324
+ aCBJbnN0aXR1dGlvbnMgRUNDIFJvb3RDQSAyMDE1MB4XDTE1MDcwNzEwMzcxMloXDTQwMDYzMDEw
3325
+ MzcxMlowgaoxCzAJBgNVBAYTAkdSMQ8wDQYDVQQHEwZBdGhlbnMxRDBCBgNVBAoTO0hlbGxlbmlj
3326
+ IEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUQwQgYD
3327
+ VQQDEztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIEVDQyBSb290
3328
+ Q0EgMjAxNTB2MBAGByqGSM49AgEGBSuBBAAiA2IABJKgQehLgoRc4vgxEZmGZE4JJS+dQS8KrjVP
3329
+ dJWyUWRrjWvmP3CV8AVER6ZyOFB2lQJajq4onvktTpnvLEhvTCUp6NFxW98dwXU3tNf6e3pCnGoK
3330
+ Vlp8aQuqgAkkbH7BRqNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0O
3331
+ BBYEFLQiC4KZJAEOnLvkDv2/+5cgk5kqMAoGCCqGSM49BAMCA2cAMGQCMGfOFmI4oqxiRaeplSTA
3332
+ GiecMjvAwNW6qef4BENThe5SId6d9SWDPp5YSy/XZxMOIQIwBeF1Ad5o7SofTUwJCA3sS61kFyjn
3333
+ dc5FZXIhF8siQQ6ME5g4mlRtm8rifOoCWCKR
3334
+ -----END CERTIFICATE-----
3335
+
3336
+ Certplus Root CA G1
3337
+ ===================
3338
+ -----BEGIN CERTIFICATE-----
3339
+ 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
3363
+ qsOR0C5CB8AMTVPNJLFMWx5R9N/pkvo=
3364
+ -----END CERTIFICATE-----
3365
+
3366
+ Certplus Root CA G2
3367
+ ===================
3368
+ -----BEGIN CERTIFICATE-----
3369
+ MIICHDCCAaKgAwIBAgISESDZkc6uo+jF5//pAq/Pc7xVMAoGCCqGSM49BAMDMD4xCzAJBgNVBAYT
3370
+ AkZSMREwDwYDVQQKDAhDZXJ0cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjAeFw0x
3371
+ NDA1MjYwMDAwMDBaFw0zODAxMTUwMDAwMDBaMD4xCzAJBgNVBAYTAkZSMREwDwYDVQQKDAhDZXJ0
3372
+ cGx1czEcMBoGA1UEAwwTQ2VydHBsdXMgUm9vdCBDQSBHMjB2MBAGByqGSM49AgEGBSuBBAAiA2IA
3373
+ BM0PW1aC3/BFGtat93nwHcmsltaeTpwftEIRyoa/bfuFo8XlGVzX7qY/aWfYeOKmycTbLXku54uN
3374
+ Am8xIk0G42ByRZ0OQneezs/lf4WbGOT8zC5y0xaTTsqZY1yhBSpsBqNjMGEwDgYDVR0PAQH/BAQD
3375
+ AgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMB8GA1Ud
3376
+ IwQYMBaAFNqDYwJ5jtpMxjwjFNiPwyCrKGBZMAoGCCqGSM49BAMDA2gAMGUCMHD+sAvZ94OX7PNV
3377
+ HdTcswYO/jOYnYs5kGuUIe22113WTNchp+e/IQ8rzfcq3IUHnQIxAIYUFuXcsGXCwI4Un78kFmjl
3378
+ vPl5adytRSv3tjFzzAalU5ORGpOucGpnutee5WEaXw==
3379
+ -----END CERTIFICATE-----
3380
+
3381
+ OpenTrust Root CA G1
3382
+ ====================
3383
+ -----BEGIN CERTIFICATE-----
3384
+ MIIFbzCCA1egAwIBAgISESCzkFU5fX82bWTCp59rY45nMA0GCSqGSIb3DQEBCwUAMEAxCzAJBgNV
3385
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcx
3386
+ MB4XDTE0MDUyNjA4NDU1MFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
3387
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzEwggIiMA0GCSqGSIb3DQEB
3388
+ AQUAA4ICDwAwggIKAoICAQD4eUbalsUwXopxAy1wpLuwxQjczeY1wICkES3d5oeuXT2R0odsN7fa
3389
+ Yp6bwiTXj/HbpqbfRm9RpnHLPhsxZ2L3EVs0J9V5ToybWL0iEA1cJwzdMOWo010hOHQX/uMftk87
3390
+ ay3bfWAfjH1MBcLrARYVmBSO0ZB3Ij/swjm4eTrwSSTilZHcYTSSjFR077F9jAHiOH3BX2pfJLKO
3391
+ YheteSCtqx234LSWSE9mQxAGFiQD4eCcjsZGT44ameGPuY4zbGneWK2gDqdkVBFpRGZPTBKnjix9
3392
+ xNRbxQA0MMHZmf4yzgeEtE7NCv82TWLxp2NX5Ntqp66/K7nJ5rInieV+mhxNaMbBGN4zK1FGSxyO
3393
+ 9z0M+Yo0FMT7MzUj8czxKselu7Cizv5Ta01BG2Yospb6p64KTrk5M0ScdMGTHPjgniQlQ/GbI4Kq
3394
+ 3ywgsNw2TgOzfALU5nsaqocTvz6hdLubDuHAk5/XpGbKuxs74zD0M1mKB3IDVedzagMxbm+WG+Oi
3395
+ n6+Sx+31QrclTDsTBM8clq8cIqPQqwWyTBIjUtz9GVsnnB47ev1CI9sjgBPwvFEVVJSmdz7QdFG9
3396
+ URQIOTfLHzSpMJ1ShC5VkLG631UAC9hWLbFJSXKAqWLXwPYYEQRVzXR7z2FwefR7LFxckvzluFqr
3397
+ TJOVoSfupb7PcSNCupt2LQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
3398
+ /zAdBgNVHQ4EFgQUl0YhVyE12jZVx/PxN3DlCPaTKbYwHwYDVR0jBBgwFoAUl0YhVyE12jZVx/Px
3399
+ N3DlCPaTKbYwDQYJKoZIhvcNAQELBQADggIBAB3dAmB84DWn5ph76kTOZ0BP8pNuZtQ5iSas000E
3400
+ PLuHIT839HEl2ku6q5aCgZG27dmxpGWX4m9kWaSW7mDKHyP7Rbr/jyTwyqkxf3kfgLMtMrpkZ2Cv
3401
+ uVnN35pJ06iCsfmYlIrM4LvgBBuZYLFGZdwIorJGnkSI6pN+VxbSFXJfLkur1J1juONI5f6ELlgK
3402
+ n0Md/rcYkoZDSw6cMoYsYPXpSOqV7XAp8dUv/TW0V8/bhUiZucJvbI/NeJWsZCj9VrDDb8O+WVLh
3403
+ X4SPgPL0DTatdrOjteFkdjpY3H1PXlZs5VVZV6Xf8YpmMIzUUmI4d7S+KNfKNsSbBfD4Fdvb8e80
3404
+ nR14SohWZ25g/4/Ii+GOvUKpMwpZQhISKvqxnUOOBZuZ2mKtVzazHbYNeS2WuOvyDEsMpZTGMKcm
3405
+ GS3tTAZQMPH9WD25SxdfGbRqhFS0OE85og2WaMMolP3tLR9Ka0OWLpABEPs4poEL0L9109S5zvE/
3406
+ bw4cHjdx5RiHdRk/ULlepEU0rbDK5uUTdg8xFKmOLZTW1YVNcxVPS/KyPu1svf0OnWZzsD2097+o
3407
+ 4BGkxK51CUpjAEggpsadCwmKtODmzj7HPiY46SvepghJAwSQiumPv+i2tCqjI40cHLI5kqiPAlxA
3408
+ OXXUc0ECd97N4EOH1uS6SsNsEn/+KuYj1oxx
3409
+ -----END CERTIFICATE-----
3410
+
3411
+ OpenTrust Root CA G2
3412
+ ====================
3413
+ -----BEGIN CERTIFICATE-----
3414
+ MIIFbzCCA1egAwIBAgISESChaRu/vbm9UpaPI+hIvyYRMA0GCSqGSIb3DQEBDQUAMEAxCzAJBgNV
3415
+ BAYTAkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEcy
3416
+ MB4XDTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoM
3417
+ CU9wZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzIwggIiMA0GCSqGSIb3DQEB
3418
+ AQUAA4ICDwAwggIKAoICAQDMtlelM5QQgTJT32F+D3Y5z1zCU3UdSXqWON2ic2rxb95eolq5cSG+
3419
+ Ntmh/LzubKh8NBpxGuga2F8ORAbtp+Dz0mEL4DKiltE48MLaARf85KxP6O6JHnSrT78eCbY2albz
3420
+ 4e6WiWYkBuTNQjpK3eCasMSCRbP+yatcfD7J6xcvDH1urqWPyKwlCm/61UWY0jUJ9gNDlP7ZvyCV
3421
+ eYCYitmJNbtRG6Q3ffyZO6v/v6wNj0OxmXsWEH4db0fEFY8ElggGQgT4hNYdvJGmQr5J1WqIP7wt
3422
+ UdGejeBSzFfdNTVY27SPJIjki9/ca1TSgSuyzpJLHB9G+h3Ykst2Z7UJmQnlrBcUVXDGPKBWCgOz
3423
+ 3GIZ38i1MH/1PCZ1Eb3XG7OHngevZXHloM8apwkQHZOJZlvoPGIytbU6bumFAYueQ4xncyhZW+vj
3424
+ 3CzMpSZyYhK05pyDRPZRpOLAeiRXyg6lPzq1O4vldu5w5pLeFlwoW5cZJ5L+epJUzpM5ChaHvGOz
3425
+ 9bGTXOBut9Dq+WIyiET7vycotjCVXRIouZW+j1MY5aIYFuJWpLIsEPUdN6b4t/bQWVyJ98LVtZR0
3426
+ 0dX+G7bw5tYee9I8y6jj9RjzIR9u701oBnstXW5DiabA+aC/gh7PU3+06yzbXfZqfUAkBXKJOAGT
3427
+ y3HCOV0GEfZvePg3DTmEJwIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB
3428
+ /zAdBgNVHQ4EFgQUajn6QiL35okATV59M4PLuG53hq8wHwYDVR0jBBgwFoAUajn6QiL35okATV59
3429
+ M4PLuG53hq8wDQYJKoZIhvcNAQENBQADggIBAJjLq0A85TMCl38th6aP1F5Kr7ge57tx+4BkJamz
3430
+ Gj5oXScmp7oq4fBXgwpkTx4idBvpkF/wrM//T2h6OKQQbA2xx6R3gBi2oihEdqc0nXGEL8pZ0keI
3431
+ mUEiyTCYYW49qKgFbdEfwFFEVn8nNQLdXpgKQuswv42hm1GqO+qTRmTFAHneIWv2V6CG1wZy7HBG
3432
+ S4tz3aAhdT7cHcCP009zHIXZ/n9iyJVvttN7jLpTwm+bREx50B1ws9efAvSyB7DH5fitIw6mVskp
3433
+ EndI2S9G/Tvw/HRwkqWOOAgfZDC2t0v7NqwQjqBSM2OdAzVWxWm9xiNaJ5T2pBL4LTM8oValX9YZ
3434
+ 6e18CL13zSdkzJTaTkZQh+D5wVOAHrut+0dSixv9ovneDiK3PTNZbNTe9ZUGMg1RGUFcPk8G97kr
3435
+ gCf2o6p6fAbhQ8MTOWIaNr3gKC6UAuQpLmBVrkA9sHSSXvAgZJY/X0VdiLWK2gKgW0VU3jg9CcCo
3436
+ SmVGFvyqv1ROTVu+OEO3KMqLM6oaJbolXCkvW0pujOotnCr2BXbgd5eAiN1nE28daCSLT7d0geX0
3437
+ YJ96Vdc+N9oWaz53rK4YcJUIeSkDiv7BO7M/Gg+kO14fWKGVyasvc0rQLW6aWQ9VGHgtPFGml4vm
3438
+ u7JwqkwR3v98KzfUetF3NI/n+UL3PIEMS1IK
3439
+ -----END CERTIFICATE-----
3440
+
3441
+ OpenTrust Root CA G3
3442
+ ====================
3443
+ -----BEGIN CERTIFICATE-----
3444
+ MIICITCCAaagAwIBAgISESDm+Ez8JLC+BUCs2oMbNGA/MAoGCCqGSM49BAMDMEAxCzAJBgNVBAYT
3445
+ AkZSMRIwEAYDVQQKDAlPcGVuVHJ1c3QxHTAbBgNVBAMMFE9wZW5UcnVzdCBSb290IENBIEczMB4X
3446
+ DTE0MDUyNjAwMDAwMFoXDTM4MDExNTAwMDAwMFowQDELMAkGA1UEBhMCRlIxEjAQBgNVBAoMCU9w
3447
+ ZW5UcnVzdDEdMBsGA1UEAwwUT3BlblRydXN0IFJvb3QgQ0EgRzMwdjAQBgcqhkjOPQIBBgUrgQQA
3448
+ IgNiAARK7liuTcpm3gY6oxH84Bjwbhy6LTAMidnW7ptzg6kjFYwvWYpa3RTqnVkrQ7cG7DK2uu5B
3449
+ ta1doYXM6h0UZqNnfkbilPPntlahFVmhTzeXuSIevRHr9LIfXsMUmuXZl5mjYzBhMA4GA1UdDwEB
3450
+ /wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAf
3451
+ BgNVHSMEGDAWgBRHd8MUi2I5DMlv4VBN0BBY3JWIbTAKBggqhkjOPQQDAwNpADBmAjEAj6jcnboM
3452
+ BBf6Fek9LykBl7+BFjNAk2z8+e2AcG+qj9uEwov1NcoG3GRvaBbhj5G5AjEA2Euly8LQCGzpGPta
3453
+ 3U1fJAuwACEl74+nBCZx4nxp5V2a+EEfOzmTk51V6s2N8fvB
3454
+ -----END CERTIFICATE-----
3455
+
3456
+ ISRG Root X1
3457
+ ============
3458
+ -----BEGIN CERTIFICATE-----
3459
+ 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
3483
+ m+kXQ99b21/+jh5Xos1AnX5iItreGCc=
3484
+ -----END CERTIFICATE-----
3485
+
3486
+ AC RAIZ FNMT-RCM
3487
+ ================
3488
+ -----BEGIN CERTIFICATE-----
3489
+ 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
3514
+ -----END CERTIFICATE-----
3515
+
3516
+ Amazon Root CA 1
3517
+ ================
3518
+ -----BEGIN CERTIFICATE-----
3519
+ MIIDQTCCAimgAwIBAgITBmyfz5m/jAo54vB4ikPmljZbyjANBgkqhkiG9w0BAQsFADA5MQswCQYD
3520
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAxMB4XDTE1
3521
+ MDUyNjAwMDAwMFoXDTM4MDExNzAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3522
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC
3523
+ ggEBALJ4gHHKeNXjca9HgFB0fW7Y14h29Jlo91ghYPl0hAEvrAIthtOgQ3pOsqTQNroBvo3bSMgH
3524
+ FzZM9O6II8c+6zf1tRn4SWiw3te5djgdYZ6k/oI2peVKVuRF4fn9tBb6dNqcmzU5L/qwIFAGbHrQ
3525
+ gLKm+a/sRxmPUDgH3KKHOVj4utWp+UhnMJbulHheb4mjUcAwhmahRWa6VOujw5H5SNz/0egwLX0t
3526
+ dHA114gk957EWW67c4cX8jJGKLhD+rcdqsq08p8kDi1L93FcXmn/6pUCyziKrlA4b9v7LWIbxcce
3527
+ VOF34GfID5yHI9Y/QCB/IIDEgEw+OyQmjgSubJrIqg0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB
3528
+ /zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFIQYzIU07LwMlJQuCFmcx7IQTgoIMA0GCSqGSIb3
3529
+ DQEBCwUAA4IBAQCY8jdaQZChGsV2USggNiMOruYou6r4lK5IpDB/G/wkjUu0yKGX9rbxenDIU5PM
3530
+ CCjjmCXPI6T53iHTfIUJrU6adTrCC2qJeHZERxhlbI1Bjjt/msv0tadQ1wUsN+gDS63pYaACbvXy
3531
+ 8MWy7Vu33PqUXHeeE6V/Uq2V8viTO96LXFvKWlJbYK8U90vvo/ufQJVtMVT8QtPHRh8jrdkPSHCa
3532
+ 2XV4cdFyQzR1bldZwgJcJmApzyMZFo6IQ6XU5MsI+yMRQ+hDKXJioaldXgjUkK642M4UwtBV8ob2
3533
+ xJNDd2ZhwLnoQdeXeGADbkpyrqXRfboQnoZsG4q5WTP468SQvvG5
3534
+ -----END CERTIFICATE-----
3535
+
3536
+ Amazon Root CA 2
3537
+ ================
3538
+ -----BEGIN CERTIFICATE-----
3539
+ MIIFQTCCAymgAwIBAgITBmyf0pY1hp8KD+WGePhbJruKNzANBgkqhkiG9w0BAQwFADA5MQswCQYD
3540
+ VQQGEwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAyMB4XDTE1
3541
+ MDUyNjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpv
3542
+ bjEZMBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC
3543
+ ggIBAK2Wny2cSkxKgXlRmeyKy2tgURO8TW0G/LAIjd0ZEGrHJgw12MBvIITplLGbhQPDW9tK6Mj4
3544
+ kHbZW0/jTOgGNk3Mmqw9DJArktQGGWCsN0R5hYGCrVo34A3MnaZMUnbqQ523BNFQ9lXg1dKmSYXp
3545
+ N+nKfq5clU1Imj+uIFptiJXZNLhSGkOQsL9sBbm2eLfq0OQ6PBJTYv9K8nu+NQWpEjTj82R0Yiw9
3546
+ AElaKP4yRLuH3WUnAnE72kr3H9rN9yFVkE8P7K6C4Z9r2UXTu/Bfh+08LDmG2j/e7HJV63mjrdvd
3547
+ fLC6HM783k81ds8P+HgfajZRRidhW+mez/CiVX18JYpvL7TFz4QuK/0NURBs+18bvBt+xa47mAEx
3548
+ kv8LV/SasrlX6avvDXbR8O70zoan4G7ptGmh32n2M8ZpLpcTnqWHsFcQgTfJU7O7f/aS0ZzQGPSS
3549
+ btqDT6ZjmUyl+17vIWR6IF9sZIUVyzfpYgwLKhbcAS4y2j5L9Z469hdAlO+ekQiG+r5jqFoz7Mt0
3550
+ Q5X5bGlSNscpb/xVA1wf+5+9R+vnSUeVC06JIglJ4PVhHvG/LopyboBZ/1c6+XUyo05f7O0oYtlN
3551
+ c/LMgRdg7c3r3NunysV+Ar3yVAhU/bQtCSwXVEqY0VThUWcI0u1ufm8/0i2BWSlmy5A5lREedCf+
3552
+ 3euvAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSw
3553
+ DPBMMPQFWAJI/TPlUq9LhONmUjANBgkqhkiG9w0BAQwFAAOCAgEAqqiAjw54o+Ci1M3m9Zh6O+oA
3554
+ A7CXDpO8Wqj2LIxyh6mx/H9z/WNxeKWHWc8w4Q0QshNabYL1auaAn6AFC2jkR2vHat+2/XcycuUY
3555
+ +gn0oJMsXdKMdYV2ZZAMA3m3MSNjrXiDCYZohMr/+c8mmpJ5581LxedhpxfL86kSk5Nrp+gvU5LE
3556
+ YFiwzAJRGFuFjWJZY7attN6a+yb3ACfAXVU3dJnJUH/jWS5E4ywl7uxMMne0nxrpS10gxdr9HIcW
3557
+ xkPo1LsmmkVwXqkLN1PiRnsn/eBG8om3zEK2yygmbtmlyTrIQRNg91CMFa6ybRoVGld45pIq2WWQ
3558
+ gj9sAq+uEjonljYE1x2igGOpm/HlurR8FLBOybEfdF849lHqm/osohHUqS0nGkWxr7JOcQ3AWEbW
3559
+ aQbLU8uz/mtBzUF+fUwPfHJ5elnNXkoOrJupmHN5fLT0zLm4BwyydFy4x2+IoZCn9Kr5v2c69BoV
3560
+ Yh63n749sSmvZ6ES8lgQGVMDMBu4Gon2nL2XA46jCfMdiyHxtN/kHNGfZQIG6lzWE7OE76KlXIx3
3561
+ KadowGuuQNKotOrN8I1LOJwZmhsoVLiJkO/KdYE+HvJkJMcYr07/R54H9jVlpNMKVv/1F2Rs76gi
3562
+ JUmTtt8AF9pYfl3uxRuw0dFfIRDH+fO6AgonB8Xx1sfT4PsJYGw=
3563
+ -----END CERTIFICATE-----
3564
+
3565
+ Amazon Root CA 3
3566
+ ================
3567
+ -----BEGIN CERTIFICATE-----
3568
+ MIIBtjCCAVugAwIBAgITBmyf1XSXNmY/Owua2eiedgPySjAKBggqhkjOPQQDAjA5MQswCQYDVQQG
3569
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSAzMB4XDTE1MDUy
3570
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
3571
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgMzBZMBMGByqGSM49AgEGCCqGSM49AwEHA0IABCmXp8ZB
3572
+ f8ANm+gBG1bG8lKlui2yEujSLtf6ycXYqm0fc4E7O5hrOXwzpcVOho6AF2hiRVd9RFgdszflZwjr
3573
+ Zt6jQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBSrttvXBp43
3574
+ rDCGB5Fwx5zEGbF4wDAKBggqhkjOPQQDAgNJADBGAiEA4IWSoxe3jfkrBqWTrBqYaGFy+uGh0Psc
3575
+ eGCmQ5nFuMQCIQCcAu/xlJyzlvnrxir4tiz+OpAUFteMYyRIHN8wfdVoOw==
3576
+ -----END CERTIFICATE-----
3577
+
3578
+ Amazon Root CA 4
3579
+ ================
3580
+ -----BEGIN CERTIFICATE-----
3581
+ MIIB8jCCAXigAwIBAgITBmyf18G7EEwpQ+Vxe3ssyBrBDjAKBggqhkjOPQQDAzA5MQswCQYDVQQG
3582
+ EwJVUzEPMA0GA1UEChMGQW1hem9uMRkwFwYDVQQDExBBbWF6b24gUm9vdCBDQSA0MB4XDTE1MDUy
3583
+ NjAwMDAwMFoXDTQwMDUyNjAwMDAwMFowOTELMAkGA1UEBhMCVVMxDzANBgNVBAoTBkFtYXpvbjEZ
3584
+ MBcGA1UEAxMQQW1hem9uIFJvb3QgQ0EgNDB2MBAGByqGSM49AgEGBSuBBAAiA2IABNKrijdPo1MN
3585
+ /sGKe0uoe0ZLY7Bi9i0b2whxIdIA6GO9mif78DluXeo9pcmBqqNbIJhFXRbb/egQbeOc4OO9X4Ri
3586
+ 83BkM6DLJC9wuoihKqB1+IGuYgbEgds5bimwHvouXKNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
3587
+ HQ8BAf8EBAMCAYYwHQYDVR0OBBYEFNPsxzplbszh2naaVvuc84ZtV+WBMAoGCCqGSM49BAMDA2gA
3588
+ MGUCMDqLIfG9fhGt0O9Yli/W651+kI0rz2ZVwyzjKKlwCkcO8DdZEv8tmZQoTipPNU0zWgIxAOp1
3589
+ AE47xDqUEpHJWEadIRNyp4iciuRMStuW1KyLa2tJElMzrdfkviT8tQp21KW8EA==
3590
+ -----END CERTIFICATE-----
3591
+
3592
+ LuxTrust Global Root 2
3593
+ ======================
3594
+ -----BEGIN CERTIFICATE-----
3595
+ MIIFwzCCA6ugAwIBAgIUCn6m30tEntpqJIWe5rgV0xZ/u7EwDQYJKoZIhvcNAQELBQAwRjELMAkG
3596
+ A1UEBhMCTFUxFjAUBgNVBAoMDUx1eFRydXN0IFMuQS4xHzAdBgNVBAMMFkx1eFRydXN0IEdsb2Jh
3597
+ bCBSb290IDIwHhcNMTUwMzA1MTMyMTU3WhcNMzUwMzA1MTMyMTU3WjBGMQswCQYDVQQGEwJMVTEW
3598
+ MBQGA1UECgwNTHV4VHJ1c3QgUy5BLjEfMB0GA1UEAwwWTHV4VHJ1c3QgR2xvYmFsIFJvb3QgMjCC
3599
+ AiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANeFl78RmOnwYoNMPIf5U2o3C/IPPIfOb9wm
3600
+ Kb3FibrJgz337spbxm1Jc7TJRqMbNBM/wYlFV/TZsfs2ZUv7COJIcRHIbjuend+JZTemhfY7RBi2
3601
+ xjcwYkSSl2l9QjAk5A0MiWtj3sXh306pFGxT4GHO9hcvHTy95iJMHZP1EMShduxq3sVs35a0VkBC
3602
+ wGKSMKEtFZSg0iAGCW5qbeXrt77U8PEVfIvmTroTzEsnXpk8F12PgX8zPU/TPxvsXD/wPEx1bvKm
3603
+ 1Z3aLQdjAsZy6ZS8TEmVT4hSyNvoaYL4zDRbIvCGp4m9SAptZoFtyMhk+wHh9OHe2Z7d21vUKpkm
3604
+ FRseTJIpgp7VkoGSQXAZ96Tlk0u8d2cx3Rz9MXANF5kM+Qw5GSoXtTBxVdUPrljhPS80m8+f9niF
3605
+ wpN6cj5mj5wWEWCPnolvZ77gR1o7DJpni89Gxq44o/KnvObWhWszJHAiS8sIm7vI+AIpHb4gDEa/
3606
+ a4ebsypmQjVGbKq6rfmYe+lQVRQxv7HaLe2ArWgk+2mr2HETMOZns4dA/Yl+8kPREd8vZS9kzl8U
3607
+ ubG/Mb2HeFpZZYiq/FkySIbWTLkpS5XTdvN3JW1CHDiDTf2jX5t/Lax5Gw5CMZdjpPuKadUiDTSQ
3608
+ MC6otOBttpSsvItO13D8xTiOZCXhTTmQzsmHhFhxAgMBAAGjgagwgaUwDwYDVR0TAQH/BAUwAwEB
3609
+ /zBCBgNVHSAEOzA5MDcGByuBKwEBAQowLDAqBggrBgEFBQcCARYeaHR0cHM6Ly9yZXBvc2l0b3J5
3610
+ Lmx1eHRydXN0Lmx1MA4GA1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBT/GCh2+UgFLKGu8SsbK7JT
3611
+ +Et8szAdBgNVHQ4EFgQU/xgodvlIBSyhrvErGyuyU/hLfLMwDQYJKoZIhvcNAQELBQADggIBAGoZ
3612
+ FO1uecEsh9QNcH7X9njJCwROxLHOk3D+sFTAMs2ZMGQXvw/l4jP9BzZAcg4atmpZ1gDlaCDdLnIN
3613
+ H2pkMSCEfUmmWjfrRcmF9dTHF5kH5ptV5AzoqbTOjFu1EVzPig4N1qx3gf4ynCSecs5U89BvolbW
3614
+ 7MM3LGVYvlcAGvI1+ut7MV3CwRI9loGIlonBWVx65n9wNOeD4rHh4bhY79SV5GCc8JaXcozrhAIu
3615
+ ZY+kt9J/Z93I055cqqmkoCUUBpvsT34tC38ddfEz2O3OuHVtPlu5mB0xDVbYQw8wkbIEa91WvpWA
3616
+ VWe+2M2D2RjuLg+GLZKecBPs3lHJQ3gCpU3I+V/EkVhGFndadKpAvAefMLmx9xIX3eP/JEAdemrR
3617
+ TxgKqpAd60Ae36EeRJIQmvKN4dFLRp7oRUKX6kWZ8+xm1QL68qZKJKrezrnK+T+Tb/mjuuqlPpmt
3618
+ /f97mfVl7vBZKGfXkJWkE4SphMHozs51k2MavDzq1WQfLSoSOcbDWjLtR5EWDrw4wVDej8oqkDQc
3619
+ 7kGUnF4ZLvhFSZl0kbAEb+MEWrGrKqv+x9CWttrhSmQGbmBNvUJO/3jaJMobtNeWOWyu8Q6qp31I
3620
+ iyBMz2TWuJdGsE7RKlY6oJO9r4Ak4Ap+58rVyuiFVdw2KuGUaJPHZnJED4AhMmwlxyOAgwrr
3621
+ -----END CERTIFICATE-----
3622
+
3623
+ TUBITAK Kamu SM SSL Kok Sertifikasi - Surum 1
3624
+ =============================================
3625
+ -----BEGIN CERTIFICATE-----
3626
+ MIIEYzCCA0ugAwIBAgIBATANBgkqhkiG9w0BAQsFADCB0jELMAkGA1UEBhMCVFIxGDAWBgNVBAcT
3627
+ D0dlYnplIC0gS29jYWVsaTFCMEAGA1UEChM5VHVya2l5ZSBCaWxpbXNlbCB2ZSBUZWtub2xvamlr
3628
+ IEFyYXN0aXJtYSBLdXJ1bXUgLSBUVUJJVEFLMS0wKwYDVQQLEyRLYW11IFNlcnRpZmlrYXN5b24g
3629
+ TWVya2V6aSAtIEthbXUgU00xNjA0BgNVBAMTLVRVQklUQUsgS2FtdSBTTSBTU0wgS29rIFNlcnRp
3630
+ ZmlrYXNpIC0gU3VydW0gMTAeFw0xMzExMjUwODI1NTVaFw00MzEwMjUwODI1NTVaMIHSMQswCQYD
3631
+ VQQGEwJUUjEYMBYGA1UEBxMPR2ViemUgLSBLb2NhZWxpMUIwQAYDVQQKEzlUdXJraXllIEJpbGlt
3632
+ c2VsIHZlIFRla25vbG9qaWsgQXJhc3Rpcm1hIEt1cnVtdSAtIFRVQklUQUsxLTArBgNVBAsTJEth
3633
+ bXUgU2VydGlmaWthc3lvbiBNZXJrZXppIC0gS2FtdSBTTTE2MDQGA1UEAxMtVFVCSVRBSyBLYW11
3634
+ IFNNIFNTTCBLb2sgU2VydGlmaWthc2kgLSBTdXJ1bSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
3635
+ MIIBCgKCAQEAr3UwM6q7a9OZLBI3hNmNe5eA027n/5tQlT6QlVZC1xl8JoSNkvoBHToP4mQ4t4y8
3636
+ 6Ij5iySrLqP1N+RAjhgleYN1Hzv/bKjFxlb4tO2KRKOrbEz8HdDc72i9z+SqzvBV96I01INrN3wc
3637
+ wv61A+xXzry0tcXtAA9TNypN9E8Mg/uGz8v+jE69h/mniyFXnHrfA2eJLJ2XYacQuFWQfw4tJzh0
3638
+ 3+f92k4S400VIgLI4OD8D62K18lUUMw7D8oWgITQUVbDjlZ/iSIzL+aFCr2lqBs23tPcLG07xxO9
3639
+ WSMs5uWk99gL7eqQQESolbuT1dCANLZGeA4fAJNG4e7p+exPFwIDAQABo0IwQDAdBgNVHQ4EFgQU
3640
+ ZT/HiobGPN08VFw1+DrtUgxHV8gwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
3641
+ KoZIhvcNAQELBQADggEBACo/4fEyjq7hmFxLXs9rHmoJ0iKpEsdeV31zVmSAhHqT5Am5EM2fKifh
3642
+ AHe+SMg1qIGf5LgsyX8OsNJLN13qudULXjS99HMpw+0mFZx+CFOKWI3QSyjfwbPfIPP54+M638yc
3643
+ lNhOT8NrF7f3cuitZjO1JVOr4PhMqZ398g26rrnZqsZr+ZO7rqu4lzwDGrpDxpa5RXI4s6ehlj2R
3644
+ e37AIVNMh+3yC1SVUZPVIqUNivGTDj5UDrDYyU7c8jEyVupk+eq1nRZmQnLzf9OxMUP8pI4X8W0j
3645
+ q5Rm+K37DwhuJi1/FwcJsoz7UMCflo3Ptv0AnVoUmr8CRPXBwp8iXqIPoeM=
3646
+ -----END CERTIFICATE-----
stripe-php-6.40.0/init.php ADDED
@@ -0,0 +1,145 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ // Stripe singleton
4
+ require(dirname(__FILE__) . '/lib/Stripe.php');
5
+
6
+ // Utilities
7
+ require(dirname(__FILE__) . '/lib/Util/AutoPagingIterator.php');
8
+ require(dirname(__FILE__) . '/lib/Util/CaseInsensitiveArray.php');
9
+ require(dirname(__FILE__) . '/lib/Util/LoggerInterface.php');
10
+ require(dirname(__FILE__) . '/lib/Util/DefaultLogger.php');
11
+ require(dirname(__FILE__) . '/lib/Util/RandomGenerator.php');
12
+ require(dirname(__FILE__) . '/lib/Util/RequestOptions.php');
13
+ require(dirname(__FILE__) . '/lib/Util/Set.php');
14
+ require(dirname(__FILE__) . '/lib/Util/Util.php');
15
+
16
+ // HttpClient
17
+ require(dirname(__FILE__) . '/lib/HttpClient/ClientInterface.php');
18
+ require(dirname(__FILE__) . '/lib/HttpClient/CurlClient.php');
19
+
20
+ // Errors
21
+ require(dirname(__FILE__) . '/lib/Error/Base.php');
22
+ require(dirname(__FILE__) . '/lib/Error/Api.php');
23
+ require(dirname(__FILE__) . '/lib/Error/ApiConnection.php');
24
+ require(dirname(__FILE__) . '/lib/Error/Authentication.php');
25
+ require(dirname(__FILE__) . '/lib/Error/Card.php');
26
+ require(dirname(__FILE__) . '/lib/Error/Idempotency.php');
27
+ require(dirname(__FILE__) . '/lib/Error/InvalidRequest.php');
28
+ require(dirname(__FILE__) . '/lib/Error/Permission.php');
29
+ require(dirname(__FILE__) . '/lib/Error/RateLimit.php');
30
+ require(dirname(__FILE__) . '/lib/Error/SignatureVerification.php');
31
+
32
+ // OAuth errors
33
+ require(dirname(__FILE__) . '/lib/Error/OAuth/OAuthBase.php');
34
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidClient.php');
35
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidGrant.php');
36
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidRequest.php');
37
+ require(dirname(__FILE__) . '/lib/Error/OAuth/InvalidScope.php');
38
+ require(dirname(__FILE__) . '/lib/Error/OAuth/UnsupportedGrantType.php');
39
+ require(dirname(__FILE__) . '/lib/Error/OAuth/UnsupportedResponseType.php');
40
+
41
+ // API operations
42
+ require(dirname(__FILE__) . '/lib/ApiOperations/All.php');
43
+ require(dirname(__FILE__) . '/lib/ApiOperations/Create.php');
44
+ require(dirname(__FILE__) . '/lib/ApiOperations/Delete.php');
45
+ require(dirname(__FILE__) . '/lib/ApiOperations/NestedResource.php');
46
+ require(dirname(__FILE__) . '/lib/ApiOperations/Request.php');
47
+ require(dirname(__FILE__) . '/lib/ApiOperations/Retrieve.php');
48
+ require(dirname(__FILE__) . '/lib/ApiOperations/Update.php');
49
+
50
+ // Plumbing
51
+ require(dirname(__FILE__) . '/lib/ApiResponse.php');
52
+ require(dirname(__FILE__) . '/lib/RequestTelemetry.php');
53
+ require(dirname(__FILE__) . '/lib/StripeObject.php');
54
+ require(dirname(__FILE__) . '/lib/ApiRequestor.php');
55
+ require(dirname(__FILE__) . '/lib/ApiResource.php');
56
+ require(dirname(__FILE__) . '/lib/SingletonApiResource.php');
57
+
58
+ // Stripe API Resources
59
+ require(dirname(__FILE__) . '/lib/Account.php');
60
+ require(dirname(__FILE__) . '/lib/AccountLink.php');
61
+ require(dirname(__FILE__) . '/lib/AlipayAccount.php');
62
+ require(dirname(__FILE__) . '/lib/ApplePayDomain.php');
63
+ require(dirname(__FILE__) . '/lib/ApplicationFee.php');
64
+ require(dirname(__FILE__) . '/lib/ApplicationFeeRefund.php');
65
+ require(dirname(__FILE__) . '/lib/Balance.php');
66
+ require(dirname(__FILE__) . '/lib/BalanceTransaction.php');
67
+ require(dirname(__FILE__) . '/lib/BankAccount.php');
68
+ require(dirname(__FILE__) . '/lib/BitcoinReceiver.php');
69
+ require(dirname(__FILE__) . '/lib/BitcoinTransaction.php');
70
+ require(dirname(__FILE__) . '/lib/Capability.php');
71
+ require(dirname(__FILE__) . '/lib/Card.php');
72
+ require(dirname(__FILE__) . '/lib/Charge.php');
73
+ require(dirname(__FILE__) . '/lib/Checkout/Session.php');
74
+ require(dirname(__FILE__) . '/lib/Collection.php');
75
+ require(dirname(__FILE__) . '/lib/CountrySpec.php');
76
+ require(dirname(__FILE__) . '/lib/Coupon.php');
77
+ require(dirname(__FILE__) . '/lib/CreditNote.php');
78
+ require(dirname(__FILE__) . '/lib/Customer.php');
79
+ require(dirname(__FILE__) . '/lib/CustomerBalanceTransaction.php');
80
+ require(dirname(__FILE__) . '/lib/Discount.php');
81
+ require(dirname(__FILE__) . '/lib/Dispute.php');
82
+ require(dirname(__FILE__) . '/lib/EphemeralKey.php');
83
+ require(dirname(__FILE__) . '/lib/Event.php');
84
+ require(dirname(__FILE__) . '/lib/ExchangeRate.php');
85
+ require(dirname(__FILE__) . '/lib/File.php');
86
+ require(dirname(__FILE__) . '/lib/FileLink.php');
87
+ require(dirname(__FILE__) . '/lib/FileUpload.php');
88
+ require(dirname(__FILE__) . '/lib/Invoice.php');
89
+ require(dirname(__FILE__) . '/lib/InvoiceItem.php');
90
+ require(dirname(__FILE__) . '/lib/InvoiceLineItem.php');
91
+ require(dirname(__FILE__) . '/lib/IssuerFraudRecord.php');
92
+ require(dirname(__FILE__) . '/lib/Issuing/Authorization.php');
93
+ require(dirname(__FILE__) . '/lib/Issuing/Card.php');
94
+ require(dirname(__FILE__) . '/lib/Issuing/CardDetails.php');
95
+ require(dirname(__FILE__) . '/lib/Issuing/Cardholder.php');
96
+ require(dirname(__FILE__) . '/lib/Issuing/Dispute.php');
97
+ require(dirname(__FILE__) . '/lib/Issuing/Transaction.php');
98
+ require(dirname(__FILE__) . '/lib/LoginLink.php');
99
+ require(dirname(__FILE__) . '/lib/Order.php');
100
+ require(dirname(__FILE__) . '/lib/OrderItem.php');
101
+ require(dirname(__FILE__) . '/lib/OrderReturn.php');
102
+ require(dirname(__FILE__) . '/lib/PaymentIntent.php');
103
+ require(dirname(__FILE__) . '/lib/PaymentMethod.php');
104
+ require(dirname(__FILE__) . '/lib/Payout.php');
105
+ require(dirname(__FILE__) . '/lib/Person.php');
106
+ require(dirname(__FILE__) . '/lib/Plan.php');
107
+ require(dirname(__FILE__) . '/lib/Product.php');
108
+ require(dirname(__FILE__) . '/lib/Radar/EarlyFraudWarning.php');
109
+ require(dirname(__FILE__) . '/lib/Radar/ValueList.php');
110
+ require(dirname(__FILE__) . '/lib/Radar/ValueListItem.php');
111
+ require(dirname(__FILE__) . '/lib/Recipient.php');
112
+ require(dirname(__FILE__) . '/lib/RecipientTransfer.php');
113
+ require(dirname(__FILE__) . '/lib/Refund.php');
114
+ require(dirname(__FILE__) . '/lib/Reporting/ReportRun.php');
115
+ require(dirname(__FILE__) . '/lib/Reporting/ReportType.php');
116
+ require(dirname(__FILE__) . '/lib/Review.php');
117
+ require(dirname(__FILE__) . '/lib/SetupIntent.php');
118
+ require(dirname(__FILE__) . '/lib/SKU.php');
119
+ require(dirname(__FILE__) . '/lib/Sigma/ScheduledQueryRun.php');
120
+ require(dirname(__FILE__) . '/lib/Source.php');
121
+ require(dirname(__FILE__) . '/lib/SourceTransaction.php');
122
+ require(dirname(__FILE__) . '/lib/Subscription.php');
123
+ require(dirname(__FILE__) . '/lib/SubscriptionItem.php');
124
+ require(dirname(__FILE__) . '/lib/SubscriptionSchedule.php');
125
+ require(dirname(__FILE__) . '/lib/SubscriptionScheduleRevision.php');
126
+ require(dirname(__FILE__) . '/lib/TaxId.php');
127
+ require(dirname(__FILE__) . '/lib/TaxRate.php');
128
+ require(dirname(__FILE__) . '/lib/Terminal/ConnectionToken.php');
129
+ require(dirname(__FILE__) . '/lib/Terminal/Location.php');
130
+ require(dirname(__FILE__) . '/lib/Terminal/Reader.php');
131
+ require(dirname(__FILE__) . '/lib/ThreeDSecure.php');
132
+ require(dirname(__FILE__) . '/lib/Token.php');
133
+ require(dirname(__FILE__) . '/lib/Topup.php');
134
+ require(dirname(__FILE__) . '/lib/Transfer.php');
135
+ require(dirname(__FILE__) . '/lib/TransferReversal.php');
136
+ require(dirname(__FILE__) . '/lib/UsageRecord.php');
137
+ require(dirname(__FILE__) . '/lib/UsageRecordSummary.php');
138
+
139
+ // OAuth
140
+ require(dirname(__FILE__) . '/lib/OAuth.php');
141
+
142
+ // Webhooks
143
+ require(dirname(__FILE__) . '/lib/Webhook.php');
144
+ require(dirname(__FILE__) . '/lib/WebhookEndpoint.php');
145
+ require(dirname(__FILE__) . '/lib/WebhookSignature.php');
stripe-php-6.40.0/lib/Account.php ADDED
@@ -0,0 +1,393 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Account
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $business_profile
11
+ * @property string $business_type
12
+ * @property mixed $capabilities
13
+ * @property bool $charges_enabled
14
+ * @property mixed $company
15
+ * @property string $country
16
+ * @property int $created
17
+ * @property string $default_currency
18
+ * @property bool $details_submitted
19
+ * @property string $email
20
+ * @property Collection $external_accounts
21
+ * @property mixed $individual
22
+ * @property StripeObject $metadata
23
+ * @property bool $payouts_enabled
24
+ * @property mixed $requirements
25
+ * @property mixed $settings
26
+ * @property mixed $tos_acceptance
27
+ * @property string $type
28
+ *
29
+ * @package Stripe
30
+ */
31
+ class Account extends ApiResource
32
+ {
33
+
34
+ const OBJECT_NAME = "account";
35
+
36
+ use ApiOperations\All;
37
+ use ApiOperations\Create;
38
+ use ApiOperations\Delete;
39
+ use ApiOperations\NestedResource;
40
+ use ApiOperations\Retrieve {
41
+ retrieve as protected _retrieve;
42
+ }
43
+ use ApiOperations\Update;
44
+
45
+ /**
46
+ * Possible string representations of an account's business type.
47
+ * @link https://stripe.com/docs/api/accounts/object#account_object-business_type
48
+ */
49
+ const BUSINESS_TYPE_COMPANY = 'company';
50
+ const BUSINESS_TYPE_INDIVIDUAL = 'individual';
51
+
52
+ /**
53
+ * Possible string representations of an account's capabilities.
54
+ * @link https://stripe.com/docs/api/accounts/object#account_object-capabilities
55
+ */
56
+ const CAPABILITY_CARD_PAYMENTS = 'card_payments';
57
+ const CAPABILITY_LEGACY_PAYMENTS = 'legacy_payments';
58
+ const CAPABILITY_PLATFORM_PAYMENTS = 'platform_payments';
59
+
60
+ /**
61
+ * Possible string representations of an account's capability status.
62
+ * @link https://stripe.com/docs/api/accounts/object#account_object-capabilities
63
+ */
64
+ const CAPABILITY_STATUS_ACTIVE = 'active';
65
+ const CAPABILITY_STATUS_INACTIVE = 'inactive';
66
+ const CAPABILITY_STATUS_PENDING = 'pending';
67
+
68
+ /**
69
+ * Possible string representations of an account's type.
70
+ * @link https://stripe.com/docs/api/accounts/object#account_object-type
71
+ */
72
+ const TYPE_CUSTOM = 'custom';
73
+ const TYPE_EXPRESS = 'express';
74
+ const TYPE_STANDARD = 'standard';
75
+
76
+ public static function getSavedNestedResources()
77
+ {
78
+ static $savedNestedResources = null;
79
+ if ($savedNestedResources === null) {
80
+ $savedNestedResources = new Util\Set([
81
+ 'external_account',
82
+ 'bank_account',
83
+ ]);
84
+ }
85
+ return $savedNestedResources;
86
+ }
87
+
88
+ const PATH_CAPABILITIES = '/capabilities';
89
+ const PATH_EXTERNAL_ACCOUNTS = '/external_accounts';
90
+ const PATH_LOGIN_LINKS = '/login_links';
91
+ const PATH_PERSONS = '/persons';
92
+
93
+ public function instanceUrl()
94
+ {
95
+ if ($this['id'] === null) {
96
+ return '/v1/account';
97
+ } else {
98
+ return parent::instanceUrl();
99
+ }
100
+ }
101
+
102
+ /**
103
+ * @param array|string|null $id The ID of the account to retrieve, or an
104
+ * options array containing an `id` key.
105
+ * @param array|string|null $opts
106
+ *
107
+ * @return Account
108
+ */
109
+ public static function retrieve($id = null, $opts = null)
110
+ {
111
+ if (!$opts && is_string($id) && substr($id, 0, 3) === 'sk_') {
112
+ $opts = $id;
113
+ $id = null;
114
+ }
115
+ return self::_retrieve($id, $opts);
116
+ }
117
+
118
+ /**
119
+ * @param array|null $params
120
+ * @param array|string|null $opts
121
+ *
122
+ * @return Account The rejected account.
123
+ */
124
+ public function reject($params = null, $opts = null)
125
+ {
126
+ $url = $this->instanceUrl() . '/reject';
127
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
128
+ $this->refreshFrom($response, $opts);
129
+ return $this;
130
+ }
131
+
132
+ /**
133
+ * @param array|null $clientId
134
+ * @param array|string|null $opts
135
+ *
136
+ * @return StripeObject Object containing the response from the API.
137
+ */
138
+ public function deauthorize($clientId = null, $opts = null)
139
+ {
140
+ $params = [
141
+ 'client_id' => $clientId,
142
+ 'stripe_user_id' => $this->id,
143
+ ];
144
+ return OAuth::deauthorize($params, $opts);
145
+ }
146
+
147
+ /*
148
+ * Capabilities methods
149
+ * We can not add the capabilities() method today as the Account object already has a
150
+ * capabilities property which is a hash and not the sub-list of capabilities.
151
+ */
152
+
153
+
154
+ /**
155
+ * @param string $id The ID of the account to which the capability belongs.
156
+ * @param string $capabilityId The ID of the capability to retrieve.
157
+ * @param array|null $params
158
+ * @param array|string|null $opts
159
+ *
160
+ * @return Capability
161
+ */
162
+ public static function retrieveCapability($id, $capabilityId, $params = null, $opts = null)
163
+ {
164
+ return self::_retrieveNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
165
+ }
166
+
167
+ /**
168
+ * @param string $id The ID of the account to which the capability belongs.
169
+ * @param string $capabilityId The ID of the capability to update.
170
+ * @param array|null $params
171
+ * @param array|string|null $opts
172
+ *
173
+ * @return Capability
174
+ */
175
+ public static function updateCapability($id, $capabilityId, $params = null, $opts = null)
176
+ {
177
+ return self::_updateNestedResource($id, static::PATH_CAPABILITIES, $capabilityId, $params, $opts);
178
+ }
179
+
180
+ /**
181
+ * @param string $id The ID of the account on which to retrieve the capabilities.
182
+ * @param array|null $params
183
+ * @param array|string|null $opts
184
+ *
185
+ * @return Collection The list of capabilities.
186
+ */
187
+ public static function allCapabilities($id, $params = null, $opts = null)
188
+ {
189
+ return self::_allNestedResources($id, static::PATH_CAPABILITIES, $params, $opts);
190
+ }
191
+
192
+ /**
193
+ * @param string $id The ID of the account on which to create the external account.
194
+ * @param array|null $params
195
+ * @param array|string|null $opts
196
+ *
197
+ * @return BankAccount|Card
198
+ */
199
+ public static function createExternalAccount($id, $params = null, $opts = null)
200
+ {
201
+ return self::_createNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
202
+ }
203
+
204
+ /**
205
+ * @param string $id The ID of the account to which the external account belongs.
206
+ * @param string $externalAccountId The ID of the external account to retrieve.
207
+ * @param array|null $params
208
+ * @param array|string|null $opts
209
+ *
210
+ * @return BankAccount|Card
211
+ */
212
+ public static function retrieveExternalAccount($id, $externalAccountId, $params = null, $opts = null)
213
+ {
214
+ return self::_retrieveNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
215
+ }
216
+
217
+ /**
218
+ * @param string $id The ID of the account to which the external account belongs.
219
+ * @param string $externalAccountId The ID of the external account to update.
220
+ * @param array|null $params
221
+ * @param array|string|null $opts
222
+ *
223
+ * @return BankAccount|Card
224
+ */
225
+ public static function updateExternalAccount($id, $externalAccountId, $params = null, $opts = null)
226
+ {
227
+ return self::_updateNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
228
+ }
229
+
230
+ /**
231
+ * @param string $id The ID of the account to which the external account belongs.
232
+ * @param string $externalAccountId The ID of the external account to delete.
233
+ * @param array|null $params
234
+ * @param array|string|null $opts
235
+ *
236
+ * @return BankAccount|Card
237
+ */
238
+ public static function deleteExternalAccount($id, $externalAccountId, $params = null, $opts = null)
239
+ {
240
+ return self::_deleteNestedResource($id, static::PATH_EXTERNAL_ACCOUNTS, $externalAccountId, $params, $opts);
241
+ }
242
+
243
+ /**
244
+ * @param string $id The ID of the account on which to retrieve the external accounts.
245
+ * @param array|null $params
246
+ * @param array|string|null $opts
247
+ *
248
+ * @return Collection The list of external accounts (BankAccount or Card).
249
+ */
250
+ public static function allExternalAccounts($id, $params = null, $opts = null)
251
+ {
252
+ return self::_allNestedResources($id, static::PATH_EXTERNAL_ACCOUNTS, $params, $opts);
253
+ }
254
+
255
+ /**
256
+ * @param string $id The ID of the account on which to create the login link.
257
+ * @param array|null $params
258
+ * @param array|string|null $opts
259
+ *
260
+ * @return LoginLink
261
+ */
262
+ public static function createLoginLink($id, $params = null, $opts = null)
263
+ {
264
+ return self::_createNestedResource($id, static::PATH_LOGIN_LINKS, $params, $opts);
265
+ }
266
+
267
+ /**
268
+ * @param array|null $params
269
+ * @param array|string|null $options
270
+ *
271
+ * @return Collection The list of persons.
272
+ */
273
+ public function persons($params = null, $options = null)
274
+ {
275
+ $url = $this->instanceUrl() . '/persons';
276
+ list($response, $opts) = $this->_request('get', $url, $params, $options);
277
+ $obj = Util\Util::convertToStripeObject($response, $opts);
278
+ $obj->setLastResponse($response);
279
+ return $obj;
280
+ }
281
+
282
+ /**
283
+ * @param string $id The ID of the account on which to create the person.
284
+ * @param array|null $params
285
+ * @param array|string|null $opts
286
+ *
287
+ * @return Person
288
+ */
289
+ public static function createPerson($id, $params = null, $opts = null)
290
+ {
291
+ return self::_createNestedResource($id, static::PATH_PERSONS, $params, $opts);
292
+ }
293
+
294
+ /**
295
+ * @param string $id The ID of the account to which the person belongs.
296
+ * @param string $personId The ID of the person to retrieve.
297
+ * @param array|null $params
298
+ * @param array|string|null $opts
299
+ *
300
+ * @return Person
301
+ */
302
+ public static function retrievePerson($id, $personId, $params = null, $opts = null)
303
+ {
304
+ return self::_retrieveNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
305
+ }
306
+
307
+ /**
308
+ * @param string $id The ID of the account to which the person belongs.
309
+ * @param string $personId The ID of the person to update.
310
+ * @param array|null $params
311
+ * @param array|string|null $opts
312
+ *
313
+ * @return Person
314
+ */
315
+ public static function updatePerson($id, $personId, $params = null, $opts = null)
316
+ {
317
+ return self::_updateNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
318
+ }
319
+
320
+ /**
321
+ * @param string $id The ID of the account to which the person belongs.
322
+ * @param string $personId The ID of the person to delete.
323
+ * @param array|null $params
324
+ * @param array|string|null $opts
325
+ *
326
+ * @return Person
327
+ */
328
+ public static function deletePerson($id, $personId, $params = null, $opts = null)
329
+ {
330
+ return self::_deleteNestedResource($id, static::PATH_PERSONS, $personId, $params, $opts);
331
+ }
332
+
333
+ /**
334
+ * @param string $id The ID of the account on which to retrieve the persons.
335
+ * @param array|null $params
336
+ * @param array|string|null $opts
337
+ *
338
+ * @return Collection The list of persons.
339
+ */
340
+ public static function allPersons($id, $params = null, $opts = null)
341
+ {
342
+ return self::_allNestedResources($id, static::PATH_PERSONS, $params, $opts);
343
+ }
344
+
345
+ public function serializeParameters($force = false)
346
+ {
347
+ $update = parent::serializeParameters($force);
348
+ if (isset($this->_values['legal_entity'])) {
349
+ $entity = $this['legal_entity'];
350
+ if (isset($entity->_values['additional_owners'])) {
351
+ $owners = $entity['additional_owners'];
352
+ $entityUpdate = isset($update['legal_entity']) ? $update['legal_entity'] : [];
353
+ $entityUpdate['additional_owners'] = $this->serializeAdditionalOwners($entity, $owners);
354
+ $update['legal_entity'] = $entityUpdate;
355
+ }
356
+ }
357
+ if (isset($this->_values['individual'])) {
358
+ $individual = $this['individual'];
359
+ if (($individual instanceof Person) && !isset($update['individual'])) {
360
+ $update['individual'] = $individual->serializeParameters($force);
361
+ }
362
+ }
363
+ return $update;
364
+ }
365
+
366
+ private function serializeAdditionalOwners($legalEntity, $additionalOwners)
367
+ {
368
+ if (isset($legalEntity->_originalValues['additional_owners'])) {
369
+ $originalValue = $legalEntity->_originalValues['additional_owners'];
370
+ } else {
371
+ $originalValue = [];
372
+ }
373
+ if (($originalValue) && (count($originalValue) > count($additionalOwners))) {
374
+ throw new \InvalidArgumentException(
375
+ "You cannot delete an item from an array, you must instead set a new array"
376
+ );
377
+ }
378
+
379
+ $updateArr = [];
380
+ foreach ($additionalOwners as $i => $v) {
381
+ $update = ($v instanceof StripeObject) ? $v->serializeParameters() : $v;
382
+
383
+ if ($update !== []) {
384
+ if (!$originalValue ||
385
+ !array_key_exists($i, $originalValue) ||
386
+ ($update != $legalEntity->serializeParamsValue($originalValue[$i], null, false, true))) {
387
+ $updateArr[$i] = $update;
388
+ }
389
+ }
390
+ }
391
+ return $updateArr;
392
+ }
393
+ }
stripe-php-6.40.0/lib/AccountLink.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class AccountLink
7
+ *
8
+ * @property string $object
9
+ * @property int $created
10
+ * @property int $expires_at
11
+ * @property string $url
12
+ *
13
+ * @package Stripe
14
+ */
15
+ class AccountLink extends ApiResource
16
+ {
17
+
18
+ const OBJECT_NAME = "account_link";
19
+
20
+ use ApiOperations\Create;
21
+ }
stripe-php-6.40.0/lib/AlipayAccount.php ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class AlipayAccount
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
11
+ * @link https://stripe.com/docs/sources/alipay
12
+ */
13
+ class AlipayAccount extends ApiResource
14
+ {
15
+
16
+ const OBJECT_NAME = "alipay_account";
17
+
18
+ use ApiOperations\Delete;
19
+ use ApiOperations\Update;
20
+
21
+ /**
22
+ * @return string The instance URL for this resource. It needs to be special
23
+ * cased because it doesn't fit into the standard resource pattern.
24
+ */
25
+ public function instanceUrl()
26
+ {
27
+ if ($this['customer']) {
28
+ $base = Customer::classUrl();
29
+ $parent = $this['customer'];
30
+ $path = 'sources';
31
+ } else {
32
+ $msg = "Alipay accounts cannot be accessed without a customer ID.";
33
+ throw new Error\InvalidRequest($msg, null);
34
+ }
35
+ $parentExtn = urlencode(Util\Util::utf8($parent));
36
+ $extn = urlencode(Util\Util::utf8($this['id']));
37
+ return "$base/$parentExtn/$path/$extn";
38
+ }
39
+
40
+ /**
41
+ * @param array|string $_id
42
+ * @param array|string|null $_opts
43
+ *
44
+ * @throws \Stripe\Error\InvalidRequest
45
+ *
46
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
47
+ * @link https://stripe.com/docs/sources/alipay
48
+ */
49
+ public static function retrieve($_id, $_opts = null)
50
+ {
51
+ $msg = "Alipay accounts cannot be accessed without a customer ID. " .
52
+ "Retrieve an Alipay account using \$customer->sources->retrieve('alipay_account_id') instead.";
53
+ throw new Error\InvalidRequest($msg, null);
54
+ }
55
+
56
+ /**
57
+ * @param string $_id
58
+ * @param array|null $_params
59
+ * @param array|string|null $_options
60
+ *
61
+ * @throws \Stripe\Error\InvalidRequest
62
+ *
63
+ * @deprecated Alipay accounts are deprecated. Please use the sources API instead.
64
+ * @link https://stripe.com/docs/sources/alipay
65
+ */
66
+ public static function update($_id, $_params = null, $_options = null)
67
+ {
68
+ $msg = "Alipay accounts cannot be accessed without a customer ID. " .
69
+ "Call save() on \$customer->sources->retrieve('alipay_account_id') instead.";
70
+ throw new Error\InvalidRequest($msg, null);
71
+ }
72
+ }
stripe-php-6.40.0/lib/ApiOperations/All.php ADDED
@@ -0,0 +1,34 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for listable resources. Adds a `all()` static method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait All
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return \Stripe\Collection of ApiResources
17
+ */
18
+ public static function all($params = null, $opts = null)
19
+ {
20
+ self::_validateParams($params);
21
+ $url = static::classUrl();
22
+
23
+ list($response, $opts) = static::_staticRequest('get', $url, $params, $opts);
24
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
25
+ if (!is_a($obj, 'Stripe\\Collection')) {
26
+ $class = get_class($obj);
27
+ $message = "Expected type \"Stripe\\Collection\", got \"$class\" instead";
28
+ throw new \Stripe\Error\Api($message);
29
+ }
30
+ $obj->setLastResponse($response);
31
+ $obj->setRequestParams($params);
32
+ return $obj;
33
+ }
34
+ }
stripe-php-6.40.0/lib/ApiOperations/Create.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for creatable resources. Adds a `create()` static method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Create
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $options
15
+ *
16
+ * @return static The created resource.
17
+ */
18
+ public static function create($params = null, $options = null)
19
+ {
20
+ self::_validateParams($params);
21
+ $url = static::classUrl();
22
+
23
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $options);
24
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
25
+ $obj->setLastResponse($response);
26
+ return $obj;
27
+ }
28
+ }
stripe-php-6.40.0/lib/ApiOperations/Delete.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for deletable resources. Adds a `delete()` method to the class.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Delete
11
+ {
12
+ /**
13
+ * @param array|null $params
14
+ * @param array|string|null $opts
15
+ *
16
+ * @return static The deleted resource.
17
+ */
18
+ public function delete($params = null, $opts = null)
19
+ {
20
+ self::_validateParams($params);
21
+
22
+ $url = $this->instanceUrl();
23
+ list($response, $opts) = $this->_request('delete', $url, $params, $opts);
24
+ $this->refreshFrom($response, $opts);
25
+ return $this;
26
+ }
27
+ }
stripe-php-6.40.0/lib/ApiOperations/NestedResource.php ADDED
@@ -0,0 +1,118 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for resources that have nested resources.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait NestedResource
11
+ {
12
+ /**
13
+ * @param string $method
14
+ * @param string $url
15
+ * @param array|null $params
16
+ * @param array|string|null $options
17
+ *
18
+ * @return \Stripe\StripeObject
19
+ */
20
+ protected static function _nestedResourceOperation($method, $url, $params = null, $options = null)
21
+ {
22
+ self::_validateParams($params);
23
+
24
+ list($response, $opts) = static::_staticRequest($method, $url, $params, $options);
25
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
26
+ $obj->setLastResponse($response);
27
+ return $obj;
28
+ }
29
+
30
+ /**
31
+ * @param string $id
32
+ * @param string $nestedPath
33
+ * @param string|null $nestedId
34
+ *
35
+ * @return string
36
+ */
37
+ protected static function _nestedResourceUrl($id, $nestedPath, $nestedId = null)
38
+ {
39
+ $url = static::resourceUrl($id) . $nestedPath;
40
+ if ($nestedId !== null) {
41
+ $url .= "/$nestedId";
42
+ }
43
+ return $url;
44
+ }
45
+
46
+ /**
47
+ * @param string $id
48
+ * @param string $nestedPath
49
+ * @param array|null $params
50
+ * @param array|string|null $options
51
+ *
52
+ * @return \Stripe\StripeObject
53
+ */
54
+ protected static function _createNestedResource($id, $nestedPath, $params = null, $options = null)
55
+ {
56
+ $url = static::_nestedResourceUrl($id, $nestedPath);
57
+ return self::_nestedResourceOperation('post', $url, $params, $options);
58
+ }
59
+
60
+ /**
61
+ * @param string $id
62
+ * @param string $nestedPath
63
+ * @param string|null $nestedId
64
+ * @param array|null $params
65
+ * @param array|string|null $options
66
+ *
67
+ * @return \Stripe\StripeObject
68
+ */
69
+ protected static function _retrieveNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
70
+ {
71
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
72
+ return self::_nestedResourceOperation('get', $url, $params, $options);
73
+ }
74
+
75
+ /**
76
+ * @param string $id
77
+ * @param string $nestedPath
78
+ * @param string|null $nestedId
79
+ * @param array|null $params
80
+ * @param array|string|null $options
81
+ *
82
+ * @return \Stripe\StripeObject
83
+ */
84
+ protected static function _updateNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
85
+ {
86
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
87
+ return self::_nestedResourceOperation('post', $url, $params, $options);
88
+ }
89
+
90
+ /**
91
+ * @param string $id
92
+ * @param string $nestedPath
93
+ * @param string|null $nestedId
94
+ * @param array|null $params
95
+ * @param array|string|null $options
96
+ *
97
+ * @return \Stripe\StripeObject
98
+ */
99
+ protected static function _deleteNestedResource($id, $nestedPath, $nestedId, $params = null, $options = null)
100
+ {
101
+ $url = static::_nestedResourceUrl($id, $nestedPath, $nestedId);
102
+ return self::_nestedResourceOperation('delete', $url, $params, $options);
103
+ }
104
+
105
+ /**
106
+ * @param string $id
107
+ * @param string $nestedPath
108
+ * @param array|null $params
109
+ * @param array|string|null $options
110
+ *
111
+ * @return \Stripe\StripeObject
112
+ */
113
+ protected static function _allNestedResources($id, $nestedPath, $params = null, $options = null)
114
+ {
115
+ $url = static::_nestedResourceUrl($id, $nestedPath);
116
+ return self::_nestedResourceOperation('get', $url, $params, $options);
117
+ }
118
+ }
stripe-php-6.40.0/lib/ApiOperations/Request.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for resources that need to make API requests.
7
+ *
8
+ * This trait should only be applied to classes that derive from StripeObject.
9
+ */
10
+ trait Request
11
+ {
12
+ /**
13
+ * @param array|null|mixed $params The list of parameters to validate
14
+ *
15
+ * @throws \Stripe\Error\Api if $params exists and is not an array
16
+ */
17
+ protected static function _validateParams($params = null)
18
+ {
19
+ if ($params && !is_array($params)) {
20
+ $message = "You must pass an array as the first argument to Stripe API "
21
+ . "method calls. (HINT: an example call to create a charge "
22
+ . "would be: \"Stripe\\Charge::create(['amount' => 100, "
23
+ . "'currency' => 'usd', 'source' => 'tok_1234'])\")";
24
+ throw new \Stripe\Error\Api($message);
25
+ }
26
+ }
27
+
28
+ /**
29
+ * @param string $method HTTP method ('get', 'post', etc.)
30
+ * @param string $url URL for the request
31
+ * @param array $params list of parameters for the request
32
+ * @param array|string|null $options
33
+ *
34
+ * @return array tuple containing (the JSON response, $options)
35
+ */
36
+ protected function _request($method, $url, $params = [], $options = null)
37
+ {
38
+ $opts = $this->_opts->merge($options);
39
+ list($resp, $options) = static::_staticRequest($method, $url, $params, $opts);
40
+ $this->setLastResponse($resp);
41
+ return [$resp->json, $options];
42
+ }
43
+
44
+ /**
45
+ * @param string $method HTTP method ('get', 'post', etc.)
46
+ * @param string $url URL for the request
47
+ * @param array $params list of parameters for the request
48
+ * @param array|string|null $options
49
+ *
50
+ * @return array tuple containing (the JSON response, $options)
51
+ */
52
+ protected static function _staticRequest($method, $url, $params, $options)
53
+ {
54
+ $opts = \Stripe\Util\RequestOptions::parse($options);
55
+ $baseUrl = isset($opts->apiBase) ? $opts->apiBase : static::baseUrl();
56
+ $requestor = new \Stripe\ApiRequestor($opts->apiKey, $baseUrl);
57
+ list($response, $opts->apiKey) = $requestor->request($method, $url, $params, $opts->headers);
58
+ $opts->discardNonPersistentHeaders();
59
+ return [$response, $opts];
60
+ }
61
+ }
stripe-php-6.40.0/lib/ApiOperations/Retrieve.php ADDED
@@ -0,0 +1,27 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for retrievable resources. Adds a `retrieve()` static method to the
7
+ * class.
8
+ *
9
+ * This trait should only be applied to classes that derive from StripeObject.
10
+ */
11
+ trait Retrieve
12
+ {
13
+ /**
14
+ * @param array|string $id The ID of the API resource to retrieve,
15
+ * or an options array containing an `id` key.
16
+ * @param array|string|null $opts
17
+ *
18
+ * @return static
19
+ */
20
+ public static function retrieve($id, $opts = null)
21
+ {
22
+ $opts = \Stripe\Util\RequestOptions::parse($opts);
23
+ $instance = new static($id, $opts);
24
+ $instance->refresh();
25
+ return $instance;
26
+ }
27
+ }
stripe-php-6.40.0/lib/ApiOperations/Update.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\ApiOperations;
4
+
5
+ /**
6
+ * Trait for updatable resources. Adds an `update()` static method and a
7
+ * `save()` method to the class.
8
+ *
9
+ * This trait should only be applied to classes that derive from StripeObject.
10
+ */
11
+ trait Update
12
+ {
13
+ /**
14
+ * @param string $id The ID of the resource to update.
15
+ * @param array|null $params
16
+ * @param array|string|null $opts
17
+ *
18
+ * @return static The updated resource.
19
+ */
20
+ public static function update($id, $params = null, $opts = null)
21
+ {
22
+ self::_validateParams($params);
23
+ $url = static::resourceUrl($id);
24
+
25
+ list($response, $opts) = static::_staticRequest('post', $url, $params, $opts);
26
+ $obj = \Stripe\Util\Util::convertToStripeObject($response->json, $opts);
27
+ $obj->setLastResponse($response);
28
+ return $obj;
29
+ }
30
+
31
+ /**
32
+ * @param array|string|null $opts
33
+ *
34
+ * @return static The saved resource.
35
+ */
36
+ public function save($opts = null)
37
+ {
38
+ $params = $this->serializeParameters();
39
+ if (count($params) > 0) {
40
+ $url = $this->instanceUrl();
41
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
42
+ $this->refreshFrom($response, $opts);
43
+ }
44
+ return $this;
45
+ }
46
+ }
stripe-php-6.40.0/lib/ApiRequestor.php ADDED
@@ -0,0 +1,508 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApiRequestor
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class ApiRequestor
11
+ {
12
+ /**
13
+ * @var string|null
14
+ */
15
+ private $_apiKey;
16
+
17
+ /**
18
+ * @var string
19
+ */
20
+ private $_apiBase;
21
+
22
+ /**
23
+ * @var HttpClient\ClientInterface
24
+ */
25
+ private static $_httpClient;
26
+
27
+ /**
28
+ * @var RequestTelemetry
29
+ */
30
+ private static $requestTelemetry;
31
+
32
+ /**
33
+ * ApiRequestor constructor.
34
+ *
35
+ * @param string|null $apiKey
36
+ * @param string|null $apiBase
37
+ */
38
+ public function __construct($apiKey = null, $apiBase = null)
39
+ {
40
+ $this->_apiKey = $apiKey;
41
+ if (!$apiBase) {
42
+ $apiBase = Stripe::$apiBase;
43
+ }
44
+ $this->_apiBase = $apiBase;
45
+ }
46
+
47
+ /**
48
+ * Creates a telemetry json blob for use in 'X-Stripe-Client-Telemetry' headers
49
+ * @static
50
+ *
51
+ * @param RequestTelemetry $requestTelemetry
52
+ * @return string
53
+ */
54
+ private static function _telemetryJson($requestTelemetry)
55
+ {
56
+ $payload = array(
57
+ 'last_request_metrics' => array(
58
+ 'request_id' => $requestTelemetry->requestId,
59
+ 'request_duration_ms' => $requestTelemetry->requestDuration,
60
+ ));
61
+
62
+ $result = json_encode($payload);
63
+ if ($result != false) {
64
+ return $result;
65
+ } else {
66
+ Stripe::getLogger()->error("Serializing telemetry payload failed!");
67
+ return "{}";
68
+ }
69
+ }
70
+
71
+ /**
72
+ * @static
73
+ *
74
+ * @param ApiResource|bool|array|mixed $d
75
+ *
76
+ * @return ApiResource|array|string|mixed
77
+ */
78
+ private static function _encodeObjects($d)
79
+ {
80
+ if ($d instanceof ApiResource) {
81
+ return Util\Util::utf8($d->id);
82
+ } elseif ($d === true) {
83
+ return 'true';
84
+ } elseif ($d === false) {
85
+ return 'false';
86
+ } elseif (is_array($d)) {
87
+ $res = [];
88
+ foreach ($d as $k => $v) {
89
+ $res[$k] = self::_encodeObjects($v);
90
+ }
91
+ return $res;
92
+ } else {
93
+ return Util\Util::utf8($d);
94
+ }
95
+ }
96
+
97
+ /**
98
+ * @param string $method
99
+ * @param string $url
100
+ * @param array|null $params
101
+ * @param array|null $headers
102
+ *
103
+ * @return array An array whose first element is an API response and second
104
+ * element is the API key used to make the request.
105
+ * @throws Error\Api
106
+ * @throws Error\Authentication
107
+ * @throws Error\Card
108
+ * @throws Error\InvalidRequest
109
+ * @throws Error\OAuth\InvalidClient
110
+ * @throws Error\OAuth\InvalidGrant
111
+ * @throws Error\OAuth\InvalidRequest
112
+ * @throws Error\OAuth\InvalidScope
113
+ * @throws Error\OAuth\UnsupportedGrantType
114
+ * @throws Error\OAuth\UnsupportedResponseType
115
+ * @throws Error\Permission
116
+ * @throws Error\RateLimit
117
+ * @throws Error\Idempotency
118
+ * @throws Error\ApiConnection
119
+ */
120
+ public function request($method, $url, $params = null, $headers = null)
121
+ {
122
+ $params = $params ?: [];
123
+ $headers = $headers ?: [];
124
+ list($rbody, $rcode, $rheaders, $myApiKey) =
125
+ $this->_requestRaw($method, $url, $params, $headers);
126
+ $json = $this->_interpretResponse($rbody, $rcode, $rheaders);
127
+ $resp = new ApiResponse($rbody, $rcode, $rheaders, $json);
128
+ return [$resp, $myApiKey];
129
+ }
130
+
131
+ /**
132
+ * @param string $rbody A JSON string.
133
+ * @param int $rcode
134
+ * @param array $rheaders
135
+ * @param array $resp
136
+ *
137
+ * @throws Error\InvalidRequest if the error is caused by the user.
138
+ * @throws Error\Authentication if the error is caused by a lack of
139
+ * permissions.
140
+ * @throws Error\Permission if the error is caused by insufficient
141
+ * permissions.
142
+ * @throws Error\Card if the error is the error code is 402 (payment
143
+ * required)
144
+ * @throws Error\InvalidRequest if the error is caused by the user.
145
+ * @throws Error\Idempotency if the error is caused by an idempotency key.
146
+ * @throws Error\OAuth\InvalidClient
147
+ * @throws Error\OAuth\InvalidGrant
148
+ * @throws Error\OAuth\InvalidRequest
149
+ * @throws Error\OAuth\InvalidScope
150
+ * @throws Error\OAuth\UnsupportedGrantType
151
+ * @throws Error\OAuth\UnsupportedResponseType
152
+ * @throws Error\Permission if the error is caused by insufficient
153
+ * permissions.
154
+ * @throws Error\RateLimit if the error is caused by too many requests
155
+ * hitting the API.
156
+ * @throws Error\Api otherwise.
157
+ */
158
+ public function handleErrorResponse($rbody, $rcode, $rheaders, $resp)
159
+ {
160
+ if (!is_array($resp) || !isset($resp['error'])) {
161
+ $msg = "Invalid response object from API: $rbody "
162
+ . "(HTTP response code was $rcode)";
163
+ throw new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
164
+ }
165
+
166
+ $errorData = $resp['error'];
167
+
168
+ $error = null;
169
+ if (is_string($errorData)) {
170
+ $error = self::_specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorData);
171
+ }
172
+ if (!$error) {
173
+ $error = self::_specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData);
174
+ }
175
+
176
+ throw $error;
177
+ }
178
+
179
+ /**
180
+ * @static
181
+ *
182
+ * @param string $rbody
183
+ * @param int $rcode
184
+ * @param array $rheaders
185
+ * @param array $resp
186
+ * @param array $errorData
187
+ *
188
+ * @return Error\RateLimit|Error\Idempotency|Error\InvalidRequest|Error\Authentication|Error\Card|Error\Permission|Error\Api
189
+ */
190
+ private static function _specificAPIError($rbody, $rcode, $rheaders, $resp, $errorData)
191
+ {
192
+ $msg = isset($errorData['message']) ? $errorData['message'] : null;
193
+ $param = isset($errorData['param']) ? $errorData['param'] : null;
194
+ $code = isset($errorData['code']) ? $errorData['code'] : null;
195
+ $type = isset($errorData['type']) ? $errorData['type'] : null;
196
+
197
+ switch ($rcode) {
198
+ case 400:
199
+ // 'rate_limit' code is deprecated, but left here for backwards compatibility
200
+ // for API versions earlier than 2015-09-08
201
+ if ($code == 'rate_limit') {
202
+ return new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
203
+ }
204
+ if ($type == 'idempotency_error') {
205
+ return new Error\Idempotency($msg, $rcode, $rbody, $resp, $rheaders);
206
+ }
207
+
208
+ // intentional fall-through
209
+ case 404:
210
+ return new Error\InvalidRequest($msg, $param, $rcode, $rbody, $resp, $rheaders);
211
+ case 401:
212
+ return new Error\Authentication($msg, $rcode, $rbody, $resp, $rheaders);
213
+ case 402:
214
+ return new Error\Card($msg, $param, $code, $rcode, $rbody, $resp, $rheaders);
215
+ case 403:
216
+ return new Error\Permission($msg, $rcode, $rbody, $resp, $rheaders);
217
+ case 429:
218
+ return new Error\RateLimit($msg, $param, $rcode, $rbody, $resp, $rheaders);
219
+ default:
220
+ return new Error\Api($msg, $rcode, $rbody, $resp, $rheaders);
221
+ }
222
+ }
223
+
224
+ /**
225
+ * @static
226
+ *
227
+ * @param string|bool $rbody
228
+ * @param int $rcode
229
+ * @param array $rheaders
230
+ * @param array $resp
231
+ * @param string $errorCode
232
+ *
233
+ * @return null|Error\OAuth\InvalidClient|Error\OAuth\InvalidGrant|Error\OAuth\InvalidRequest|Error\OAuth\InvalidScope|Error\OAuth\UnsupportedGrantType|Error\OAuth\UnsupportedResponseType
234
+ */
235
+ private static function _specificOAuthError($rbody, $rcode, $rheaders, $resp, $errorCode)
236
+ {
237
+ $description = isset($resp['error_description']) ? $resp['error_description'] : $errorCode;
238
+
239
+ switch ($errorCode) {
240
+ case 'invalid_client':
241
+ return new Error\OAuth\InvalidClient($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
242
+ case 'invalid_grant':
243
+ return new Error\OAuth\InvalidGrant($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
244
+ case 'invalid_request':
245
+ return new Error\OAuth\InvalidRequest($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
246
+ case 'invalid_scope':
247
+ return new Error\OAuth\InvalidScope($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
248
+ case 'unsupported_grant_type':
249
+ return new Error\OAuth\UnsupportedGrantType($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
250
+ case 'unsupported_response_type':
251
+ return new Error\OAuth\UnsupportedResponseType($errorCode, $description, $rcode, $rbody, $resp, $rheaders);
252
+ }
253
+
254
+ return null;
255
+ }
256
+
257
+ /**
258
+ * @static
259
+ *
260
+ * @param null|array $appInfo
261
+ *
262
+ * @return null|string
263
+ */
264
+ private static function _formatAppInfo($appInfo)
265
+ {
266
+ if ($appInfo !== null) {
267
+ $string = $appInfo['name'];
268
+ if ($appInfo['version'] !== null) {
269
+ $string .= '/' . $appInfo['version'];
270
+ }
271
+ if ($appInfo['url'] !== null) {
272
+ $string .= ' (' . $appInfo['url'] . ')';
273
+ }
274
+ return $string;
275
+ } else {
276
+ return null;
277
+ }
278
+ }
279
+
280
+ /**
281
+ * @static
282
+ *
283
+ * @param string $apiKey
284
+ * @param null $clientInfo
285
+ *
286
+ * @return array
287
+ */
288
+ private static function _defaultHeaders($apiKey, $clientInfo = null)
289
+ {
290
+ $uaString = 'Stripe/v1 PhpBindings/' . Stripe::VERSION;
291
+
292
+ $langVersion = phpversion();
293
+ $uname = php_uname();
294
+
295
+ $appInfo = Stripe::getAppInfo();
296
+ $ua = [
297
+ 'bindings_version' => Stripe::VERSION,
298
+ 'lang' => 'php',
299
+ 'lang_version' => $langVersion,
300
+ 'publisher' => 'stripe',
301
+ 'uname' => $uname,
302
+ ];
303
+ if ($clientInfo) {
304
+ $ua = array_merge($clientInfo, $ua);
305
+ }
306
+ if ($appInfo !== null) {
307
+ $uaString .= ' ' . self::_formatAppInfo($appInfo);
308
+ $ua['application'] = $appInfo;
309
+ }
310
+
311
+ $defaultHeaders = [
312
+ 'X-Stripe-Client-User-Agent' => json_encode($ua),
313
+ 'User-Agent' => $uaString,
314
+ 'Authorization' => 'Bearer ' . $apiKey,
315
+ ];
316
+ return $defaultHeaders;
317
+ }
318
+
319
+ /**
320
+ * @param string $method
321
+ * @param string $url
322
+ * @param array $params
323
+ * @param array $headers
324
+ *
325
+ * @return array
326
+ * @throws Error\Api
327
+ * @throws Error\ApiConnection
328
+ * @throws Error\Authentication
329
+ */
330
+ private function _requestRaw($method, $url, $params, $headers)
331
+ {
332
+ $myApiKey = $this->_apiKey;
333
+ if (!$myApiKey) {
334
+ $myApiKey = Stripe::$apiKey;
335
+ }
336
+
337
+ if (!$myApiKey) {
338
+ $msg = 'No API key provided. (HINT: set your API key using '
339
+ . '"Stripe::setApiKey(<API-KEY>)". You can generate API keys from '
340
+ . 'the Stripe web interface. See https://stripe.com/api for '
341
+ . 'details, or email support@stripe.com if you have any questions.';
342
+ throw new Error\Authentication($msg);
343
+ }
344
+
345
+ // Clients can supply arbitrary additional keys to be included in the
346
+ // X-Stripe-Client-User-Agent header via the optional getUserAgentInfo()
347
+ // method
348
+ $clientUAInfo = null;
349
+ if (method_exists($this->httpClient(), 'getUserAgentInfo')) {
350
+ $clientUAInfo = $this->httpClient()->getUserAgentInfo();
351
+ }
352
+
353
+ $absUrl = $this->_apiBase.$url;
354
+ $params = self::_encodeObjects($params);
355
+ $defaultHeaders = $this->_defaultHeaders($myApiKey, $clientUAInfo);
356
+ if (Stripe::$apiVersion) {
357
+ $defaultHeaders['Stripe-Version'] = Stripe::$apiVersion;
358
+ }
359
+
360
+ if (Stripe::$accountId) {
361
+ $defaultHeaders['Stripe-Account'] = Stripe::$accountId;
362
+ }
363
+
364
+ if (Stripe::$enableTelemetry && self::$requestTelemetry != null) {
365
+ $defaultHeaders["X-Stripe-Client-Telemetry"] = self::_telemetryJson(self::$requestTelemetry);
366
+ }
367
+
368
+ $hasFile = false;
369
+ $hasCurlFile = class_exists('\CURLFile', false);
370
+ foreach ($params as $k => $v) {
371
+ if (is_resource($v)) {
372
+ $hasFile = true;
373
+ $params[$k] = self::_processResourceParam($v, $hasCurlFile);
374
+ } elseif ($hasCurlFile && $v instanceof \CURLFile) {
375
+ $hasFile = true;
376
+ }
377
+ }
378
+
379
+ if ($hasFile) {
380
+ $defaultHeaders['Content-Type'] = 'multipart/form-data';
381
+ } else {
382
+ $defaultHeaders['Content-Type'] = 'application/x-www-form-urlencoded';
383
+ }
384
+
385
+ $combinedHeaders = array_merge($defaultHeaders, $headers);
386
+ $rawHeaders = [];
387
+
388
+ foreach ($combinedHeaders as $header => $value) {
389
+ $rawHeaders[] = $header . ': ' . $value;
390
+ }
391
+
392
+ $requestStartMs = Util\Util::currentTimeMillis();
393
+
394
+ list($rbody, $rcode, $rheaders) = $this->httpClient()->request(
395
+ $method,
396
+ $absUrl,
397
+ $rawHeaders,
398
+ $params,
399
+ $hasFile
400
+ );
401
+
402
+ if (array_key_exists('request-id', $rheaders)) {
403
+ self::$requestTelemetry = new RequestTelemetry(
404
+ $rheaders['request-id'],
405
+ Util\Util::currentTimeMillis() - $requestStartMs
406
+ );
407
+ }
408
+
409
+ return [$rbody, $rcode, $rheaders, $myApiKey];
410
+ }
411
+
412
+ /**
413
+ * @param resource $resource
414
+ * @param bool $hasCurlFile
415
+ *
416
+ * @return \CURLFile|string
417
+ * @throws Error\Api
418
+ */
419
+ private function _processResourceParam($resource, $hasCurlFile)
420
+ {
421
+ if (get_resource_type($resource) !== 'stream') {
422
+ throw new Error\Api(
423
+ 'Attempted to upload a resource that is not a stream'
424
+ );
425
+ }
426
+
427
+ $metaData = stream_get_meta_data($resource);
428
+ if ($metaData['wrapper_type'] !== 'plainfile') {
429
+ throw new Error\Api(
430
+ 'Only plainfile resource streams are supported'
431
+ );
432
+ }
433
+
434
+ if ($hasCurlFile) {
435
+ // We don't have the filename or mimetype, but the API doesn't care
436
+ return new \CURLFile($metaData['uri']);
437
+ } else {
438
+ return '@'.$metaData['uri'];
439
+ }
440
+ }
441
+
442
+ /**
443
+ * @param string $rbody
444
+ * @param int $rcode
445
+ * @param array $rheaders
446
+ *
447
+ * @return mixed
448
+ * @throws Error\Api
449
+ * @throws Error\Authentication
450
+ * @throws Error\Card
451
+ * @throws Error\InvalidRequest
452
+ * @throws Error\OAuth\InvalidClient
453
+ * @throws Error\OAuth\InvalidGrant
454
+ * @throws Error\OAuth\InvalidRequest
455
+ * @throws Error\OAuth\InvalidScope
456
+ * @throws Error\OAuth\UnsupportedGrantType
457
+ * @throws Error\OAuth\UnsupportedResponseType
458
+ * @throws Error\Permission
459
+ * @throws Error\RateLimit
460
+ * @throws Error\Idempotency
461
+ */
462
+ private function _interpretResponse($rbody, $rcode, $rheaders)
463
+ {
464
+ $resp = json_decode($rbody, true);
465
+ $jsonError = json_last_error();
466
+ if ($resp === null && $jsonError !== JSON_ERROR_NONE) {
467
+ $msg = "Invalid response body from API: $rbody "
468
+ . "(HTTP response code was $rcode, json_last_error() was $jsonError)";
469
+ throw new Error\Api($msg, $rcode, $rbody);
470
+ }
471
+
472
+ if ($rcode < 200 || $rcode >= 300) {
473
+ $this->handleErrorResponse($rbody, $rcode, $rheaders, $resp);
474
+ }
475
+ return $resp;
476
+ }
477
+
478
+ /**
479
+ * @static
480
+ *
481
+ * @param HttpClient\ClientInterface $client
482
+ */
483
+ public static function setHttpClient($client)
484
+ {
485
+ self::$_httpClient = $client;
486
+ }
487
+
488
+ /**
489
+ * @static
490
+ *
491
+ * Resets any stateful telemetry data
492
+ */
493
+ public static function resetTelemetry()
494
+ {
495
+ self::$requestTelemetry = null;
496
+ }
497
+
498
+ /**
499
+ * @return HttpClient\ClientInterface
500
+ */
501
+ private function httpClient()
502
+ {
503
+ if (!self::$_httpClient) {
504
+ self::$_httpClient = HttpClient\CurlClient::instance();
505
+ }
506
+ return self::$_httpClient;
507
+ }
508
+ }
stripe-php-6.40.0/lib/ApiResource.php ADDED
@@ -0,0 +1,112 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApiResource
7
+ *
8
+ * @package Stripe
9
+ */
10
+ abstract class ApiResource extends StripeObject
11
+ {
12
+ use ApiOperations\Request;
13
+
14
+ /**
15
+ * @return \Stripe\Util\Set A list of fields that can be their own type of
16
+ * API resource (say a nested card under an account for example), and if
17
+ * that resource is set, it should be transmitted to the API on a create or
18
+ * update. Doing so is not the default behavior because API resources
19
+ * should normally be persisted on their own RESTful endpoints.
20
+ */
21
+ public static function getSavedNestedResources()
22
+ {
23
+ static $savedNestedResources = null;
24
+ if ($savedNestedResources === null) {
25
+ $savedNestedResources = new Util\Set();
26
+ }
27
+ return $savedNestedResources;
28
+ }
29
+
30
+ /**
31
+ * @var boolean A flag that can be set a behavior that will cause this
32
+ * resource to be encoded and sent up along with an update of its parent
33
+ * resource. This is usually not desirable because resources are updated
34
+ * individually on their own endpoints, but there are certain cases,
35
+ * replacing a customer's source for example, where this is allowed.
36
+ */
37
+ public $saveWithParent = false;
38
+
39
+ public function __set($k, $v)
40
+ {
41
+ parent::__set($k, $v);
42
+ $v = $this->$k;
43
+ if ((static::getSavedNestedResources()->includes($k)) &&
44
+ ($v instanceof ApiResource)) {
45
+ $v->saveWithParent = true;
46
+ }
47
+ return $v;
48
+ }
49
+
50
+ /**
51
+ * @return ApiResource The refreshed resource.
52
+ */
53
+ public function refresh()
54
+ {
55
+ $requestor = new ApiRequestor($this->_opts->apiKey, static::baseUrl());
56
+ $url = $this->instanceUrl();
57
+
58
+ list($response, $this->_opts->apiKey) = $requestor->request(
59
+ 'get',
60
+ $url,
61
+ $this->_retrieveOptions,
62
+ $this->_opts->headers
63
+ );
64
+ $this->setLastResponse($response);
65
+ $this->refreshFrom($response->json, $this->_opts);
66
+ return $this;
67
+ }
68
+
69
+ /**
70
+ * @return string The base URL for the given class.
71
+ */
72
+ public static function baseUrl()
73
+ {
74
+ return Stripe::$apiBase;
75
+ }
76
+
77
+ /**
78
+ * @return string The endpoint URL for the given class.
79
+ */
80
+ public static function classUrl()
81
+ {
82
+ // Replace dots with slashes for namespaced resources, e.g. if the object's name is
83
+ // "foo.bar", then its URL will be "/v1/foo/bars".
84
+ $base = str_replace('.', '/', static::OBJECT_NAME);
85
+ return "/v1/${base}s";
86
+ }
87
+
88
+ /**
89
+ * @return string The instance endpoint URL for the given class.
90
+ */
91
+ public static function resourceUrl($id)
92
+ {
93
+ if ($id === null) {
94
+ $class = get_called_class();
95
+ $message = "Could not determine which URL to request: "
96
+ . "$class instance has invalid ID: $id";
97
+ throw new Error\InvalidRequest($message, null);
98
+ }
99
+ $id = Util\Util::utf8($id);
100
+ $base = static::classUrl();
101
+ $extn = urlencode($id);
102
+ return "$base/$extn";
103
+ }
104
+
105
+ /**
106
+ * @return string The full API URL for this API resource.
107
+ */
108
+ public function instanceUrl()
109
+ {
110
+ return static::resourceUrl($this['id']);
111
+ }
112
+ }
stripe-php-6.40.0/lib/ApiResponse.php ADDED
@@ -0,0 +1,32 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApiResponse
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class ApiResponse
11
+ {
12
+ public $headers;
13
+ public $body;
14
+ public $json;
15
+ public $code;
16
+
17
+ /**
18
+ * @param string $body
19
+ * @param integer $code
20
+ * @param array|null $headers
21
+ * @param array|null $json
22
+ *
23
+ * @return obj An APIResponse
24
+ */
25
+ public function __construct($body, $code, $headers, $json)
26
+ {
27
+ $this->body = $body;
28
+ $this->code = $code;
29
+ $this->headers = $headers;
30
+ $this->json = $json;
31
+ }
32
+ }
stripe-php-6.40.0/lib/ApplePayDomain.php ADDED
@@ -0,0 +1,28 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApplePayDomain
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class ApplePayDomain extends ApiResource
11
+ {
12
+
13
+ const OBJECT_NAME = "apple_pay_domain";
14
+
15
+ use ApiOperations\All;
16
+ use ApiOperations\Create;
17
+ use ApiOperations\Delete;
18
+ use ApiOperations\Retrieve;
19
+
20
+ /**
21
+ * @return string The class URL for this resource. It needs to be special
22
+ * cased because it doesn't fit into the standard resource pattern.
23
+ */
24
+ public static function classUrl()
25
+ {
26
+ return '/v1/apple_pay/domains';
27
+ }
28
+ }
stripe-php-6.40.0/lib/ApplicationFee.php ADDED
@@ -0,0 +1,98 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApplicationFee
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property int $amount
12
+ * @property int $amount_refunded
13
+ * @property string $application
14
+ * @property string $balance_transaction
15
+ * @property string $charge
16
+ * @property int $created
17
+ * @property string $currency
18
+ * @property bool $livemode
19
+ * @property string $originating_transaction
20
+ * @property bool $refunded
21
+ * @property Collection $refunds
22
+ *
23
+ * @package Stripe
24
+ */
25
+ class ApplicationFee extends ApiResource
26
+ {
27
+
28
+ const OBJECT_NAME = "application_fee";
29
+
30
+ use ApiOperations\All;
31
+ use ApiOperations\NestedResource;
32
+ use ApiOperations\Retrieve;
33
+
34
+ const PATH_REFUNDS = '/refunds';
35
+
36
+ /**
37
+ * @param array|null $params
38
+ * @param array|string|null $opts
39
+ *
40
+ * @return ApplicationFee The refunded application fee.
41
+ */
42
+ public function refund($params = null, $opts = null)
43
+ {
44
+ $this->refunds->create($params, $opts);
45
+ $this->refresh();
46
+ return $this;
47
+ }
48
+
49
+ /**
50
+ * @param string|null $id The ID of the application fee on which to create the refund.
51
+ * @param array|null $params
52
+ * @param array|string|null $opts
53
+ *
54
+ * @return ApplicationFeeRefund
55
+ */
56
+ public static function createRefund($id, $params = null, $opts = null)
57
+ {
58
+ return self::_createNestedResource($id, static::PATH_REFUNDS, $params, $opts);
59
+ }
60
+
61
+ /**
62
+ * @param string|null $id The ID of the application fee to which the refund belongs.
63
+ * @param array|null $refundId The ID of the refund to retrieve.
64
+ * @param array|null $params
65
+ * @param array|string|null $opts
66
+ *
67
+ * @return ApplicationFeeRefund
68
+ */
69
+ public static function retrieveRefund($id, $refundId, $params = null, $opts = null)
70
+ {
71
+ return self::_retrieveNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
72
+ }
73
+
74
+ /**
75
+ * @param string|null $id The ID of the application fee to which the refund belongs.
76
+ * @param array|null $refundId The ID of the refund to update.
77
+ * @param array|null $params
78
+ * @param array|string|null $opts
79
+ *
80
+ * @return ApplicationFeeRefund
81
+ */
82
+ public static function updateRefund($id, $refundId, $params = null, $opts = null)
83
+ {
84
+ return self::_updateNestedResource($id, static::PATH_REFUNDS, $refundId, $params, $opts);
85
+ }
86
+
87
+ /**
88
+ * @param string|null $id The ID of the application fee on which to retrieve the refunds.
89
+ * @param array|null $params
90
+ * @param array|string|null $opts
91
+ *
92
+ * @return Collection The list of refunds.
93
+ */
94
+ public static function allRefunds($id, $params = null, $opts = null)
95
+ {
96
+ return self::_allNestedResources($id, static::PATH_REFUNDS, $params, $opts);
97
+ }
98
+ }
stripe-php-6.40.0/lib/ApplicationFeeRefund.php ADDED
@@ -0,0 +1,60 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class ApplicationFeeRefund
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $balance_transaction
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $fee
15
+ * @property StripeObject $metadata
16
+ *
17
+ * @package Stripe
18
+ */
19
+ class ApplicationFeeRefund extends ApiResource
20
+ {
21
+
22
+ const OBJECT_NAME = "fee_refund";
23
+
24
+ use ApiOperations\Update {
25
+ save as protected _save;
26
+ }
27
+
28
+ /**
29
+ * @return string The API URL for this Stripe refund.
30
+ */
31
+ public function instanceUrl()
32
+ {
33
+ $id = $this['id'];
34
+ $fee = $this['fee'];
35
+ if (!$id) {
36
+ throw new Error\InvalidRequest(
37
+ "Could not determine which URL to request: " .
38
+ "class instance has invalid ID: $id",
39
+ null
40
+ );
41
+ }
42
+ $id = Util\Util::utf8($id);
43
+ $fee = Util\Util::utf8($fee);
44
+
45
+ $base = ApplicationFee::classUrl();
46
+ $feeExtn = urlencode($fee);
47
+ $extn = urlencode($id);
48
+ return "$base/$feeExtn/refunds/$extn";
49
+ }
50
+
51
+ /**
52
+ * @param array|string|null $opts
53
+ *
54
+ * @return ApplicationFeeRefund The saved refund.
55
+ */
56
+ public function save($opts = null)
57
+ {
58
+ return $this->_save($opts);
59
+ }
60
+ }
stripe-php-6.40.0/lib/Balance.php ADDED
@@ -0,0 +1,30 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Balance
7
+ *
8
+ * @property string $object
9
+ * @property array $available
10
+ * @property array $connect_reserved
11
+ * @property bool $livemode
12
+ * @property array $pending
13
+ *
14
+ * @package Stripe
15
+ */
16
+ class Balance extends SingletonApiResource
17
+ {
18
+
19
+ const OBJECT_NAME = "balance";
20
+
21
+ /**
22
+ * @param array|string|null $opts
23
+ *
24
+ * @return Balance
25
+ */
26
+ public static function retrieve($opts = null)
27
+ {
28
+ return self::_singletonRetrieve($opts);
29
+ }
30
+ }
stripe-php-6.40.0/lib/BalanceTransaction.php ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class BalanceTransaction
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $available_on
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $description
15
+ * @property float $exchange_rate
16
+ * @property int $fee
17
+ * @property mixed $fee_details
18
+ * @property int $net
19
+ * @property string $source
20
+ * @property string $status
21
+ * @property string $type
22
+ *
23
+ * @package Stripe
24
+ */
25
+ class BalanceTransaction extends ApiResource
26
+ {
27
+
28
+ const OBJECT_NAME = "balance_transaction";
29
+
30
+ use ApiOperations\All;
31
+ use ApiOperations\Retrieve;
32
+
33
+ /**
34
+ * Possible string representations of the type of balance transaction.
35
+ * @link https://stripe.com/docs/api/balance/balance_transaction#balance_transaction_object-type
36
+ */
37
+ const TYPE_ADJUSTMENT = 'adjustment';
38
+ const TYPE_ADVANCE = 'advance';
39
+ const TYPE_ADVANCE_FUNDING = 'advance_funding';
40
+ const TYPE_APPLICATION_FEE = 'application_fee';
41
+ const TYPE_APPLICATION_FEE_REFUND = 'application_fee_refund';
42
+ const TYPE_CHARGE = 'charge';
43
+ const TYPE_CONNECT_COLLECTION_TRANSFER = 'connect_collection_transfer';
44
+ const TYPE_ISSUING_AUTHORIZATION_HOLD = 'issuing_authorization_hold';
45
+ const TYPE_ISSUING_AUTHORIZATION_RELEASE = 'issuing_authorization_release';
46
+ const TYPE_ISSUING_TRANSACTION = 'issuing_transaction';
47
+ const TYPE_PAYMENT = 'payment';
48
+ const TYPE_PAYMENT_FAILURE_REFUND = 'payment_failure_refund';
49
+ const TYPE_PAYMENT_REFUND = 'payment_refund';
50
+ const TYPE_PAYOUT = 'payout';
51
+ const TYPE_PAYOUT_CANCEL = 'payout_cancel';
52
+ const TYPE_PAYOUT_FAILURE = 'payout_failure';
53
+ const TYPE_REFUND = 'refund';
54
+ const TYPE_REFUND_FAILURE = 'refund_failure';
55
+ const TYPE_RESERVE_TRANSACTION = 'reserve_transaction';
56
+ const TYPE_RESERVED_FUNDS = 'reserved_funds';
57
+ const TYPE_STRIPE_FEE = 'stripe_fee';
58
+ const TYPE_STRIPE_FX_FEE = 'stripe_fx_fee';
59
+ const TYPE_TAX_FEE = 'tax_fee';
60
+ const TYPE_TOPUP = 'topup';
61
+ const TYPE_TOPUP_REVERSAL = 'topup_reversal';
62
+ const TYPE_TRANSFER = 'transfer';
63
+ const TYPE_TRANSFER_CANCEL = 'transfer_cancel';
64
+ const TYPE_TRANSFER_FAILURE = 'transfer_failure';
65
+ const TYPE_TRANSFER_REFUND = 'transfer_refund';
66
+
67
+ /**
68
+ * @return string The class URL for this resource. It needs to be special
69
+ * cased because it doesn't fit into the standard resource pattern.
70
+ */
71
+ public static function classUrl()
72
+ {
73
+ return "/v1/balance/history";
74
+ }
75
+ }
stripe-php-6.40.0/lib/BankAccount.php ADDED
@@ -0,0 +1,109 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class BankAccount
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property string $account_holder_name
12
+ * @property string $account_holder_type
13
+ * @property string $bank_name
14
+ * @property string $country
15
+ * @property string $currency
16
+ * @property string $customer
17
+ * @property bool $default_for_currency
18
+ * @property string $fingerprint
19
+ * @property string $last4
20
+ * @property StripeObject $metadata
21
+ * @property string $routing_number
22
+ * @property string $status
23
+ *
24
+ * @package Stripe
25
+ */
26
+ class BankAccount extends ApiResource
27
+ {
28
+
29
+ const OBJECT_NAME = "bank_account";
30
+
31
+ use ApiOperations\Delete;
32
+ use ApiOperations\Update;
33
+
34
+ /**
35
+ * Possible string representations of the bank verification status.
36
+ * @link https://stripe.com/docs/api/external_account_bank_accounts/object#account_bank_account_object-status
37
+ */
38
+ const STATUS_NEW = 'new';
39
+ const STATUS_VALIDATED = 'validated';
40
+ const STATUS_VERIFIED = 'verified';
41
+ const STATUS_VERIFICATION_FAILED = 'verification_failed';
42
+ const STATUS_ERRORED = 'errored';
43
+
44
+ /**
45
+ * @return string The instance URL for this resource. It needs to be special
46
+ * cased because it doesn't fit into the standard resource pattern.
47
+ */
48
+ public function instanceUrl()
49
+ {
50
+ if ($this['customer']) {
51
+ $base = Customer::classUrl();
52
+ $parent = $this['customer'];
53
+ $path = 'sources';
54
+ } elseif ($this['account']) {
55
+ $base = Account::classUrl();
56
+ $parent = $this['account'];
57
+ $path = 'external_accounts';
58
+ } else {
59
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID.";
60
+ throw new Error\InvalidRequest($msg, null);
61
+ }
62
+ $parentExtn = urlencode(Util\Util::utf8($parent));
63
+ $extn = urlencode(Util\Util::utf8($this['id']));
64
+ return "$base/$parentExtn/$path/$extn";
65
+ }
66
+
67
+ /**
68
+ * @param array|string $_id
69
+ * @param array|string|null $_opts
70
+ *
71
+ * @throws \Stripe\Error\InvalidRequest
72
+ */
73
+ public static function retrieve($_id, $_opts = null)
74
+ {
75
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID. " .
76
+ "Retrieve a bank account using \$customer->sources->retrieve('bank_account_id') or " .
77
+ "\$account->external_accounts->retrieve('bank_account_id') instead.";
78
+ throw new Error\InvalidRequest($msg, null);
79
+ }
80
+
81
+ /**
82
+ * @param string $_id
83
+ * @param array|null $_params
84
+ * @param array|string|null $_options
85
+ *
86
+ * @throws \Stripe\Error\InvalidRequest
87
+ */
88
+ public static function update($_id, $_params = null, $_options = null)
89
+ {
90
+ $msg = "Bank accounts cannot be accessed without a customer ID or account ID. " .
91
+ "Call save() on \$customer->sources->retrieve('bank_account_id') or " .
92
+ "\$account->external_accounts->retrieve('bank_account_id') instead.";
93
+ throw new Error\InvalidRequest($msg, null);
94
+ }
95
+
96
+ /**
97
+ * @param array|null $params
98
+ * @param array|string|null $options
99
+ *
100
+ * @return BankAccount The verified bank account.
101
+ */
102
+ public function verify($params = null, $options = null)
103
+ {
104
+ $url = $this->instanceUrl() . '/verify';
105
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
106
+ $this->refreshFrom($response, $opts);
107
+ return $this;
108
+ }
109
+ }
stripe-php-6.40.0/lib/BitcoinReceiver.php ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class BitcoinReceiver
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @deprecated Bitcoin receivers are deprecated. Please use the sources API instead.
11
+ * @link https://stripe.com/docs/sources/bitcoin
12
+ */
13
+ class BitcoinReceiver extends ApiResource
14
+ {
15
+
16
+ const OBJECT_NAME = "bitcoin_receiver";
17
+
18
+ use ApiOperations\All;
19
+ use ApiOperations\Retrieve;
20
+
21
+ /**
22
+ * @return string The class URL for this resource. It needs to be special
23
+ * cased because it doesn't fit into the standard resource pattern.
24
+ */
25
+ public static function classUrl()
26
+ {
27
+ return "/v1/bitcoin/receivers";
28
+ }
29
+
30
+ /**
31
+ * @return string The instance URL for this resource. It needs to be special
32
+ * cased because it doesn't fit into the standard resource pattern.
33
+ */
34
+ public function instanceUrl()
35
+ {
36
+ if ($this['customer']) {
37
+ $base = Customer::classUrl();
38
+ $parent = $this['customer'];
39
+ $path = 'sources';
40
+ $parentExtn = urlencode(Util\Util::utf8($parent));
41
+ $extn = urlencode(Util\Util::utf8($this['id']));
42
+ return "$base/$parentExtn/$path/$extn";
43
+ } else {
44
+ $base = BitcoinReceiver::classUrl();
45
+ $extn = urlencode(Util\Util::utf8($this['id']));
46
+ return "$base/$extn";
47
+ }
48
+ }
49
+ }
stripe-php-6.40.0/lib/BitcoinTransaction.php ADDED
@@ -0,0 +1,14 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class BitcoinTransaction
7
+ *
8
+ * @package Stripe
9
+ */
10
+ class BitcoinTransaction extends ApiResource
11
+ {
12
+
13
+ const OBJECT_NAME = "bitcoin_transaction";
14
+ }
stripe-php-6.40.0/lib/Capability.php ADDED
@@ -0,0 +1,83 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Capability
7
+ *
8
+ * @package Stripe
9
+ *
10
+ * @property string $id
11
+ * @property string $object
12
+ * @property string $account
13
+ * @property bool $requested
14
+ * @property int $requested_at
15
+ * @property mixed $requirements
16
+ * @property string $status
17
+ */
18
+ class Capability extends ApiResource
19
+ {
20
+
21
+ const OBJECT_NAME = "capability";
22
+
23
+ use ApiOperations\Update;
24
+
25
+ /**
26
+ * Possible string representations of a capability's status.
27
+ * @link https://stripe.com/docs/api/capabilities/object#capability_object-status
28
+ */
29
+ const STATUS_ACTIVE = 'active';
30
+ const STATUS_INACTIVE = 'inactive';
31
+ const STATUS_PENDING = 'pending';
32
+ const STATUS_UNREQUESTED = 'unrequested';
33
+
34
+ /**
35
+ * @return string The API URL for this Stripe account reversal.
36
+ */
37
+ public function instanceUrl()
38
+ {
39
+ $id = $this['id'];
40
+ $account = $this['account'];
41
+ if (!$id) {
42
+ throw new Error\InvalidRequest(
43
+ "Could not determine which URL to request: " .
44
+ "class instance has invalid ID: $id",
45
+ null
46
+ );
47
+ }
48
+ $id = Util\Util::utf8($id);
49
+ $account = Util\Util::utf8($account);
50
+
51
+ $base = Account::classUrl();
52
+ $accountExtn = urlencode($account);
53
+ $extn = urlencode($id);
54
+ return "$base/$accountExtn/capabilities/$extn";
55
+ }
56
+
57
+ /**
58
+ * @param array|string $_id
59
+ * @param array|string|null $_opts
60
+ *
61
+ * @throws \Stripe\Error\InvalidRequest
62
+ */
63
+ public static function retrieve($_id, $_opts = null)
64
+ {
65
+ $msg = "Capabilities cannot be accessed without an account ID. " .
66
+ "Retrieve a Capability using \$account->retrieveCapability('acap_123') instead.";
67
+ throw new Error\InvalidRequest($msg, null);
68
+ }
69
+
70
+ /**
71
+ * @param string $_id
72
+ * @param array|null $_params
73
+ * @param array|string|null $_options
74
+ *
75
+ * @throws \Stripe\Error\InvalidRequest
76
+ */
77
+ public static function update($_id, $_params = null, $_options = null)
78
+ {
79
+ $msg = "Capabilities cannot be accessed without an account ID. " .
80
+ "Update a Capability using \$account->updateCapability('acap_123') instead.";
81
+ throw new Error\InvalidRequest($msg, null);
82
+ }
83
+ }
stripe-php-6.40.0/lib/Card.php ADDED
@@ -0,0 +1,130 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Card
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $account
11
+ * @property string $address_city
12
+ * @property string $address_country
13
+ * @property string $address_line1
14
+ * @property string $address_line1_check
15
+ * @property string $address_line2
16
+ * @property string $address_state
17
+ * @property string $address_zip
18
+ * @property string $address_zip_check
19
+ * @property string[] $available_payout_methods
20
+ * @property string $brand
21
+ * @property string $country
22
+ * @property string $currency
23
+ * @property string $customer
24
+ * @property string $cvc_check
25
+ * @property bool $default_for_currency
26
+ * @property string $dynamic_last4
27
+ * @property int $exp_month
28
+ * @property int $exp_year
29
+ * @property string $fingerprint
30
+ * @property string $funding
31
+ * @property string $last4
32
+ * @property StripeObject $metadata
33
+ * @property string $name
34
+ * @property string $recipient
35
+ * @property string $tokenization_method
36
+ *
37
+ * @package Stripe
38
+ */
39
+ class Card extends ApiResource
40
+ {
41
+
42
+ const OBJECT_NAME = "card";
43
+
44
+ use ApiOperations\Delete;
45
+ use ApiOperations\Update;
46
+
47
+ /**
48
+ * Possible string representations of the CVC check status.
49
+ * @link https://stripe.com/docs/api/cards/object#card_object-cvc_check
50
+ */
51
+ const CVC_CHECK_FAIL = 'fail';
52
+ const CVC_CHECK_PASS = 'pass';
53
+ const CVC_CHECK_UNAVAILABLE = 'unavailable';
54
+ const CVC_CHECK_UNCHECKED = 'unchecked';
55
+
56
+ /**
57
+ * Possible string representations of the funding of the card.
58
+ * @link https://stripe.com/docs/api/cards/object#card_object-funding
59
+ */
60
+ const FUNDING_CREDIT = 'credit';
61
+ const FUNDING_DEBIT = 'debit';
62
+ const FUNDING_PREPAID = 'prepaid';
63
+ const FUNDING_UNKNOWN = 'unknown';
64
+
65
+ /**
66
+ * Possible string representations of the tokenization method when using Apple Pay or Google Pay.
67
+ * @link https://stripe.com/docs/api/cards/object#card_object-tokenization_method
68
+ */
69
+ const TOKENIZATION_METHOD_APPLE_PAY = 'apple_pay';
70
+ const TOKENIZATION_METHOD_GOOGLE_PAY = 'google_pay';
71
+
72
+ /**
73
+ * @return string The instance URL for this resource. It needs to be special
74
+ * cased because cards are nested resources that may belong to different
75
+ * top-level resources.
76
+ */
77
+ public function instanceUrl()
78
+ {
79
+ if ($this['customer']) {
80
+ $base = Customer::classUrl();
81
+ $parent = $this['customer'];
82
+ $path = 'sources';
83
+ } elseif ($this['account']) {
84
+ $base = Account::classUrl();
85
+ $parent = $this['account'];
86
+ $path = 'external_accounts';
87
+ } elseif ($this['recipient']) {
88
+ $base = Recipient::classUrl();
89
+ $parent = $this['recipient'];
90
+ $path = 'cards';
91
+ } else {
92
+ $msg = "Cards cannot be accessed without a customer ID, account ID or recipient ID.";
93
+ throw new Error\InvalidRequest($msg, null);
94
+ }
95
+ $parentExtn = urlencode(Util\Util::utf8($parent));
96
+ $extn = urlencode(Util\Util::utf8($this['id']));
97
+ return "$base/$parentExtn/$path/$extn";
98
+ }
99
+
100
+ /**
101
+ * @param array|string $_id
102
+ * @param array|string|null $_opts
103
+ *
104
+ * @throws \Stripe\Error\InvalidRequest
105
+ */
106
+ public static function retrieve($_id, $_opts = null)
107
+ {
108
+ $msg = "Cards cannot be accessed without a customer, recipient or account ID. " .
109
+ "Retrieve a card using \$customer->sources->retrieve('card_id'), " .
110
+ "\$recipient->cards->retrieve('card_id'), or " .
111
+ "\$account->external_accounts->retrieve('card_id') instead.";
112
+ throw new Error\InvalidRequest($msg, null);
113
+ }
114
+
115
+ /**
116
+ * @param string $_id
117
+ * @param array|null $_params
118
+ * @param array|string|null $_options
119
+ *
120
+ * @throws \Stripe\Error\InvalidRequest
121
+ */
122
+ public static function update($_id, $_params = null, $_options = null)
123
+ {
124
+ $msg = "Cards cannot be accessed without a customer, recipient or account ID. " .
125
+ "Call save() on \$customer->sources->retrieve('card_id'), " .
126
+ "\$recipient->cards->retrieve('card_id'), or " .
127
+ "\$account->external_accounts->retrieve('card_id') instead.";
128
+ throw new Error\InvalidRequest($msg, null);
129
+ }
130
+ }
stripe-php-6.40.0/lib/Charge.php ADDED
@@ -0,0 +1,207 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Charge
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property int $amount_refunded
12
+ * @property string $application
13
+ * @property string $application_fee
14
+ * @property int $application_fee_amount
15
+ * @property string $balance_transaction
16
+ * @property mixed $billing_details
17
+ * @property bool $captured
18
+ * @property int $created
19
+ * @property string $currency
20
+ * @property string $customer
21
+ * @property string $description
22
+ * @property string $destination
23
+ * @property string $dispute
24
+ * @property string $failure_code
25
+ * @property string $failure_message
26
+ * @property mixed $fraud_details
27
+ * @property string $invoice
28
+ * @property bool $livemode
29
+ * @property StripeObject $metadata
30
+ * @property string $on_behalf_of
31
+ * @property string $order
32
+ * @property mixed $outcome
33
+ * @property bool $paid
34
+ * @property string $payment_intent
35
+ * @property string $payment_method
36
+ * @property mixed $payment_method_details
37
+ * @property string $receipt_email
38
+ * @property string $receipt_number
39
+ * @property string $receipt_url
40
+ * @property bool $refunded
41
+ * @property Collection $refunds
42
+ * @property string $review
43
+ * @property mixed $shipping
44
+ * @property mixed $source
45
+ * @property string $source_transfer
46
+ * @property string $statement_descriptor
47
+ * @property string $status
48
+ * @property string $transfer
49
+ * @property mixed $transfer_data
50
+ * @property string $transfer_group
51
+ *
52
+ * @package Stripe
53
+ */
54
+ class Charge extends ApiResource
55
+ {
56
+
57
+ const OBJECT_NAME = "charge";
58
+
59
+ use ApiOperations\All;
60
+ use ApiOperations\Create;
61
+ use ApiOperations\Retrieve;
62
+ use ApiOperations\Update;
63
+
64
+ /**
65
+ * Possible string representations of decline codes.
66
+ * These strings are applicable to the decline_code property of the \Stripe\Error\Card exception.
67
+ * @link https://stripe.com/docs/declines/codes
68
+ */
69
+ const DECLINED_APPROVE_WITH_ID = 'approve_with_id';
70
+ const DECLINED_CALL_ISSUER = 'call_issuer';
71
+ const DECLINED_CARD_NOT_SUPPORTED = 'card_not_supported';
72
+ const DECLINED_CARD_VELOCITY_EXCEEDED = 'card_velocity_exceeded';
73
+ const DECLINED_CURRENCY_NOT_SUPPORTED = 'currency_not_supported';
74
+ const DECLINED_DO_NOT_HONOR = 'do_not_honor';
75
+ const DECLINED_DO_NOT_TRY_AGAIN = 'do_not_try_again';
76
+ const DECLINED_DUPLICATED_TRANSACTION = 'duplicate_transaction';
77
+ const DECLINED_EXPIRED_CARD = 'expired_card';
78
+ const DECLINED_FRAUDULENT = 'fraudulent';
79
+ const DECLINED_GENERIC_DECLINE = 'generic_decline';
80
+ const DECLINED_INCORRECT_NUMBER = 'incorrect_number';
81
+ const DECLINED_INCORRECT_CVC = 'incorrect_cvc';
82
+ const DECLINED_INCORRECT_PIN = 'incorrect_pin';
83
+ const DECLINED_INCORRECT_ZIP = 'incorrect_zip';
84
+ const DECLINED_INSUFFICIENT_FUNDS = 'insufficient_funds';
85
+ const DECLINED_INVALID_ACCOUNT = 'invalid_account';
86
+ const DECLINED_INVALID_AMOUNT = 'invalid_amount';
87
+ const DECLINED_INVALID_CVC = 'invalid_cvc';
88
+ const DECLINED_INVALID_EXPIRY_YEAR = 'invalid_expiry_year';
89
+ const DECLINED_INVALID_NUMBER = 'invalid_number';
90
+ const DECLINED_INVALID_PIN = 'invalid_pin';
91
+ const DECLINED_ISSUER_NOT_AVAILABLE = 'issuer_not_available';
92
+ const DECLINED_LOST_CARD = 'lost_card';
93
+ const DECLINED_MERCHANT_BLACKLIST = 'merchant_blacklist';
94
+ const DECLINED_NEW_ACCOUNT_INFORMATION_AVAILABLE = 'new_account_information_available';
95
+ const DECLINED_NO_ACTION_TAKEN = 'no_action_taken';
96
+ const DECLINED_NOT_PERMITTED = 'not_permitted';
97
+ const DECLINED_PICKUP_CARD = 'pickup_card';
98
+ const DECLINED_PIN_TRY_EXCEEDED = 'pin_try_exceeded';
99
+ const DECLINED_PROCESSING_ERROR = 'processing_error';
100
+ const DECLINED_REENTER_TRANSACTION = 'reenter_transaction';
101
+ const DECLINED_RESTRICTED_CARD = 'restricted_card';
102
+ const DECLINED_REVOCATION_OF_ALL_AUTHORIZATIONS = 'revocation_of_all_authorizations';
103
+ const DECLINED_REVOCATION_OF_AUTHORIZATION = 'revocation_of_authorization';
104
+ const DECLINED_SECURITY_VIOLATION = 'security_violation';
105
+ const DECLINED_SERVICE_NOT_ALLOWED = 'service_not_allowed';
106
+ const DECLINED_STOLEN_CARD = 'stolen_card';
107
+ const DECLINED_STOP_PAYMENT_ORDER = 'stop_payment_order';
108
+ const DECLINED_TESTMODE_DECLINE = 'testmode_decline';
109
+ const DECLINED_TRANSACTION_NOT_ALLOWED = 'transaction_not_allowed';
110
+ const DECLINED_TRY_AGAIN_LATER = 'try_again_later';
111
+ const DECLINED_WITHDRAWAL_COUNT_LIMIT_EXCEEDED = 'withdrawal_count_limit_exceeded';
112
+
113
+ /**
114
+ * Possible string representations of the status of the charge.
115
+ * @link https://stripe.com/docs/api/charges/object#charge_object-status
116
+ */
117
+ const STATUS_FAILED = 'failed';
118
+ const STATUS_PENDING = 'pending';
119
+ const STATUS_SUCCEEDED = 'succeeded';
120
+
121
+ /**
122
+ * @param array|null $params
123
+ * @param array|string|null $options
124
+ *
125
+ * @return Charge The refunded charge.
126
+ */
127
+ public function refund($params = null, $options = null)
128
+ {
129
+ $url = $this->instanceUrl() . '/refund';
130
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
131
+ $this->refreshFrom($response, $opts);
132
+ return $this;
133
+ }
134
+
135
+ /**
136
+ * @param array|null $params
137
+ * @param array|string|null $options
138
+ *
139
+ * @return Charge The captured charge.
140
+ */
141
+ public function capture($params = null, $options = null)
142
+ {
143
+ $url = $this->instanceUrl() . '/capture';
144
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
145
+ $this->refreshFrom($response, $opts);
146
+ return $this;
147
+ }
148
+
149
+ /**
150
+ * @param array|null $params
151
+ * @param array|string|null $options
152
+ *
153
+ * @deprecated Use the `save` method on the Dispute object
154
+ *
155
+ * @return array The updated dispute.
156
+ */
157
+ public function updateDispute($params = null, $options = null)
158
+ {
159
+ $url = $this->instanceUrl() . '/dispute';
160
+ list($response, $opts) = $this->_request('post', $url, $params, $options);
161
+ $this->refreshFrom(['dispute' => $response], $opts, true);
162
+ return $this->dispute;
163
+ }
164
+
165
+ /**
166
+ * @param array|string|null $options
167
+ *
168
+ * @deprecated Use the `close` method on the Dispute object
169
+ *
170
+ * @return Charge The updated charge.
171
+ */
172
+ public function closeDispute($options = null)
173
+ {
174
+ $url = $this->instanceUrl() . '/dispute/close';
175
+ list($response, $opts) = $this->_request('post', $url, null, $options);
176
+ $this->refreshFrom($response, $opts);
177
+ return $this;
178
+ }
179
+
180
+ /**
181
+ * @param array|string|null $opts
182
+ *
183
+ * @return Charge The updated charge.
184
+ */
185
+ public function markAsFraudulent($opts = null)
186
+ {
187
+ $params = ['fraud_details' => ['user_report' => 'fraudulent']];
188
+ $url = $this->instanceUrl();
189
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
190
+ $this->refreshFrom($response, $opts);
191
+ return $this;
192
+ }
193
+
194
+ /**
195
+ * @param array|string|null $opts
196
+ *
197
+ * @return Charge The updated charge.
198
+ */
199
+ public function markAsSafe($opts = null)
200
+ {
201
+ $params = ['fraud_details' => ['user_report' => 'safe']];
202
+ $url = $this->instanceUrl();
203
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
204
+ $this->refreshFrom($response, $opts);
205
+ return $this;
206
+ }
207
+ }
stripe-php-6.40.0/lib/Checkout/Session.php ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe\Checkout;
4
+
5
+ /**
6
+ * Class Session
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $cancel_url
11
+ * @property string $client_reference_id
12
+ * @property string $customer
13
+ * @property string $customer_email
14
+ * @property mixed $display_items
15
+ * @property bool $livemode
16
+ * @property string $payment_intent
17
+ * @property string[] $payment_method_types
18
+ * @property string $submit_type
19
+ * @property string $subscription
20
+ * @property string $success_url
21
+ *
22
+ * @package Stripe
23
+ */
24
+ class Session extends \Stripe\ApiResource
25
+ {
26
+
27
+ const OBJECT_NAME = "checkout.session";
28
+
29
+ use \Stripe\ApiOperations\Create;
30
+ use \Stripe\ApiOperations\Retrieve;
31
+
32
+ /**
33
+ * Possible string representations of submit type.
34
+ * @link https://stripe.com/docs/api/checkout/sessions/create#create_checkout_session-submit_type
35
+ */
36
+ const SUBMIT_TYPE_AUTO = 'auto';
37
+ const SUBMIT_TYPE_BOOK = 'book';
38
+ const SUBMIT_TYPE_DONATE = 'donate';
39
+ const SUBMIT_TYPE_PAY = 'pay';
40
+ }
stripe-php-6.40.0/lib/Collection.php ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Collection
7
+ *
8
+ * @property string $object
9
+ * @property string $url
10
+ * @property bool $has_more
11
+ * @property mixed $data
12
+ *
13
+ * @package Stripe
14
+ */
15
+ class Collection extends StripeObject implements \IteratorAggregate
16
+ {
17
+
18
+ const OBJECT_NAME = "list";
19
+
20
+ use ApiOperations\Request;
21
+
22
+ protected $_requestParams = [];
23
+
24
+ /**
25
+ * @return string The base URL for the given class.
26
+ */
27
+ public static function baseUrl()
28
+ {
29
+ return Stripe::$apiBase;
30
+ }
31
+
32
+ public function setRequestParams($params)
33
+ {
34
+ $this->_requestParams = $params;
35
+ }
36
+
37
+ public function all($params = null, $opts = null)
38
+ {
39
+ list($url, $params) = $this->extractPathAndUpdateParams($params);
40
+
41
+ list($response, $opts) = $this->_request('get', $url, $params, $opts);
42
+ $this->_requestParams = $params;
43
+ return Util\Util::convertToStripeObject($response, $opts);
44
+ }
45
+
46
+ public function create($params = null, $opts = null)
47
+ {
48
+ list($url, $params) = $this->extractPathAndUpdateParams($params);
49
+
50
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
51
+ $this->_requestParams = $params;
52
+ return Util\Util::convertToStripeObject($response, $opts);
53
+ }
54
+
55
+ public function retrieve($id, $params = null, $opts = null)
56
+ {
57
+ list($url, $params) = $this->extractPathAndUpdateParams($params);
58
+
59
+ $id = Util\Util::utf8($id);
60
+ $extn = urlencode($id);
61
+ list($response, $opts) = $this->_request(
62
+ 'get',
63
+ "$url/$extn",
64
+ $params,
65
+ $opts
66
+ );
67
+ $this->_requestParams = $params;
68
+ return Util\Util::convertToStripeObject($response, $opts);
69
+ }
70
+
71
+ /**
72
+ * @return \ArrayIterator An iterator that can be used to iterate
73
+ * across objects in the current page.
74
+ */
75
+ public function getIterator()
76
+ {
77
+ return new \ArrayIterator($this->data);
78
+ }
79
+
80
+ /**
81
+ * @return Util\AutoPagingIterator An iterator that can be used to iterate
82
+ * across all objects across all pages. As page boundaries are
83
+ * encountered, the next page will be fetched automatically for
84
+ * continued iteration.
85
+ */
86
+ public function autoPagingIterator()
87
+ {
88
+ return new Util\AutoPagingIterator($this, $this->_requestParams);
89
+ }
90
+
91
+ private function extractPathAndUpdateParams($params)
92
+ {
93
+ $url = parse_url($this->url);
94
+ if (!isset($url['path'])) {
95
+ throw new Error\Api("Could not parse list url into parts: $url");
96
+ }
97
+
98
+ if (isset($url['query'])) {
99
+ // If the URL contains a query param, parse it out into $params so they
100
+ // don't interact weirdly with each other.
101
+ $query = [];
102
+ parse_str($url['query'], $query);
103
+ $params = array_merge($params ?: [], $query);
104
+ }
105
+
106
+ return [$url['path'], $params];
107
+ }
108
+ }
stripe-php-6.40.0/lib/CountrySpec.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class CountrySpec
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property string $default_currency
11
+ * @property mixed $supported_bank_account_currencies
12
+ * @property string[] $supported_payment_currencies
13
+ * @property string[] $supported_payment_methods
14
+ * @property string[] $supported_transfer_countries
15
+ * @property mixed $verification_fields
16
+ *
17
+ * @package Stripe
18
+ */
19
+ class CountrySpec extends ApiResource
20
+ {
21
+
22
+ const OBJECT_NAME = "country_spec";
23
+
24
+ use ApiOperations\All;
25
+ use ApiOperations\Retrieve;
26
+ }
stripe-php-6.40.0/lib/Coupon.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Coupon
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount_off
11
+ * @property int $created
12
+ * @property string $currency
13
+ * @property string $duration
14
+ * @property int $duration_in_months
15
+ * @property bool $livemode
16
+ * @property int $max_redemptions
17
+ * @property StripeObject $metadata
18
+ * @property string $name
19
+ * @property float $percent_off
20
+ * @property int $redeem_by
21
+ * @property int $times_redeemed
22
+ * @property bool $valid
23
+ *
24
+ * @package Stripe
25
+ */
26
+ class Coupon extends ApiResource
27
+ {
28
+
29
+ const OBJECT_NAME = "coupon";
30
+
31
+ use ApiOperations\All;
32
+ use ApiOperations\Create;
33
+ use ApiOperations\Delete;
34
+ use ApiOperations\Retrieve;
35
+ use ApiOperations\Update;
36
+ }
stripe-php-6.40.0/lib/CreditNote.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class CreditNote
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property int $amount
11
+ * @property string $customer_balance_transaction
12
+ * @property int $created
13
+ * @property string $currency
14
+ * @property string $customer
15
+ * @property string $invoice
16
+ * @property bool $livemode
17
+ * @property string $memo
18
+ * @property StripeObject $metadata
19
+ * @property string $number
20
+ * @property string $pdf
21
+ * @property string $reason
22
+ * @property string $refund
23
+ * @property string $status
24
+ * @property string $type
25
+ *
26
+ * @package Stripe
27
+ */
28
+ class CreditNote extends ApiResource
29
+ {
30
+
31
+ const OBJECT_NAME = "credit_note";
32
+
33
+ use ApiOperations\All;
34
+ use ApiOperations\Create;
35
+ use ApiOperations\Retrieve;
36
+ use ApiOperations\Update;
37
+
38
+ /**
39
+ * Possible string representations of the credit note reason.
40
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-reason
41
+ */
42
+ const REASON_DUPLICATE = 'duplicate';
43
+ const REASON_FRAUDULENT = 'fraudulent';
44
+ const REASON_ORDER_CHANGE = 'order_change';
45
+ const REASON_PRODUCT_UNSATISFACTORY = 'product_unsatisfactory';
46
+
47
+ /**
48
+ * Possible string representations of the credit note status.
49
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-status
50
+ */
51
+ const STATUS_ISSUED = 'issued';
52
+ const STATUS_VOID = 'void';
53
+
54
+ /**
55
+ * Possible string representations of the credit note type.
56
+ * @link https://stripe.com/docs/api/credit_notes/object#credit_note_object-status
57
+ */
58
+ const TYPE_POST_PAYMENT = 'post_payment';
59
+ const TYPE_PRE_PAYMENT = 'pre_payment';
60
+
61
+ /**
62
+ * @param array|null $params
63
+ * @param array|string|null $opts
64
+ *
65
+ * @return CreditNote The voided credit note.
66
+ */
67
+ public function voidCreditNote($params = null, $opts = null)
68
+ {
69
+ $url = $this->instanceUrl() . '/void';
70
+ list($response, $opts) = $this->_request('post', $url, $params, $opts);
71
+ $this->refreshFrom($response, $opts);
72
+ return $this;
73
+ }
74
+ }
stripe-php-6.40.0/lib/Customer.php ADDED
@@ -0,0 +1,320 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Stripe;
4
+
5
+ /**
6
+ * Class Customer
7
+ *
8
+ * @property string $id
9
+ * @property string $object
10
+ * @property mixed $address
11
+ * @property int $balance
12
+ * @property string $created
13
+ * @property string $currency
14
+ * @property string $default_source
15
+ * @property bool $delinquent
16
+ * @property string $description
17
+ * @property Discount $discount
18
+ * @property string $email
19
+ * @property string $invoice_prefix
20
+ * @property mixed $invoice_settings
21
+ * @property bool $livemode
22
+ * @property StripeObject $metadata
23
+ * @property string $name
24
+ * @property string $phone
25
+ * @property string[] preferred_locales
26
+ * @property mixed $shipping
27
+ * @property Collection $sources
28
+ * @property Collection $subscriptions
29
+ * @property string $tax_exempt
30
+ * @property Collection $tax_ids
31
+ *
32
+ * @package Stripe
33
+ */
34
+ class Customer extends ApiResource
35
+ {
36
+
37
+ const OBJECT_NAME = "customer";
38
+
39
+ use ApiOperations\All;
40
+ use ApiOperations\Create;
41
+ use ApiOperations\Delete;
42
+ use ApiOperations\NestedResource;
43
+ use ApiOperations\Retrieve;
44
+ use ApiOperations\Update;
45
+
46
+ /**
47
+ * Possible string representations of the customer's type of tax exemption.
48
+ * @link https://stripe.com/docs/api/customers/object#customer_object-tax_exempt
49
+ */
50
+ const TAX_EXEMPT_NONE = 'none';
51
+ const TAX_EXEMPT_EXEMPT = 'exempt';
52
+ const TAX_EXEMPT_REVERSE = 'reverse';
53
+
54
+ public static function getSavedNestedResources()
55
+ {
56
+ static $savedNestedResources = null;
57
+ if ($savedNestedResources === null) {
58
+ $savedNestedResources = new Util\Set([
59
+ 'source',
60
+ ]);
61
+ }
62
+ return $savedNestedResources;
63
+ }
64
+
65
+ const PATH_BALANCE_TRANSACTIONS = '/balance_transactions';
66
+ const PATH_SOURCES = '/sources';
67
+ const PATH_TAX_IDS = '/tax_ids';
68
+
69
+ /**
70
+ * @param array|null $params
71
+ *
72
+ * @return InvoiceItem The resulting invoice item.
73
+ */
74
+ public function addInvoiceItem($params = null)
75
+ {
76
+ $params = $params ?: [];
77
+ $params['customer'] = $this->id;
78
+ $ii = InvoiceItem::create($params, $this->_opts);
79
+ return $ii;
80
+ }
81
+
82
+ /**
83
+ * @param array|null $params
84
+ *
85
+ * @return array An array of the customer's Invoices.
86
+ */
87
+ public function invoices($params = null)
88
+ {
89
+ $params = $params ?: [];
90
+ $params['customer'] = $this->id;
91
+ $invoices = Invoice::all($params, $this->_opts);
92
+ return $invoices;
93
+ }
94
+
95
+ /**
96
+ * @param array|null $params
97
+ *
98
+ * @return array An array of the customer's InvoiceItems.
99
+ */
100
+ public function invoiceItems($params = null)
101
+ {
102
+ $params = $params ?: [];
103
+ $params['customer'] = $this->id;
104
+ $iis = InvoiceItem::all($params, $this->_opts);
105
+ return $iis;
106
+ }
107
+
108
+ /**
109
+ * @param array|null $params
110
+ *
111
+ * @return array An array of the customer's Charges.
112
+ */
113
+ public function charges($params = null)
114
+ {
115
+ $params = $params ?: [];
116
+ $params['customer'] = $this->id;
117
+ $charges = Charge::all($params, $this->_opts);
118
+ return $charges;
119
+ }
120
+
121
+ /**
122
+ * @param array|null $params
123
+ *
124
+ * @return Subscription The updated subscription.
125
+ */
126
+ public function updateSubscription($params = null)
127
+ {
128
+ $url = $this->instanceUrl() . '/subscription';
129
+ list($response, $opts) = $this->_request('post', $url, $params);
130
+ $this->refreshFrom(['subscription' => $response], $opts, true);
131
+ return $this->subscription;
132
+ }
133
+
134
+ /**
135
+ * @param array|null $params
136
+ *
137
+ * @return Subscription The cancelled subscription.
138
+ */
139
+ public function cancelSubscription($params = null)
140
+ {
141
+ $url = $this->instanceUrl() . '/subscription';
142
+ list($response, $opts) = $this->_request('delete', $url, $params);
143
+ $this->refreshFrom(['subscription' => $response], $opts, true);
144
+ return $this->subscription;
145
+ }
146
+
147
+ /**
148
+ * @return Customer The updated customer.
149
+ */
150
+ public function deleteDiscount()
151
+ {
152
+ $url = $this->instanceUrl() . '/discount';
153
+ list($response, $opts) = $this->_request('delete', $url);
154
+ $this->refreshFrom(['discount' => null], $opts, true);
155
+ }
156
+
157
+ /**
158
+ * @param string|null $id The ID of the customer on which to create the source.
159
+ * @param array|null $params
160
+ * @param array|string|null $opts
161
+ *
162
+ * @return ApiResource
163
+ */
164
+ public static function createSource($id, $params = null, $opts = null)
165
+ {
166
+ return self::_createNestedResource($id, static::PATH_SOURCES, $params, $opts);
167
+ }
168
+
169
+ /**
170
+ * @param string|null $id The ID of the customer to which the source belongs.
171
+ * @param string|null $sourceId The ID of the source to retrieve.
172
+ * @param array|null $params
173
+ * @param array|string|null $opts
174
+ *
175
+ * @return ApiResource
176
+ */
177
+ public static function retrieveSource($id, $sourceId, $params = null, $opts = null)
178
+ {
179
+ return self::_retrieveNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
180
+ }
181
+
182
+ /**
183
+ * @param string|null $id The ID of the customer to which the source belongs.
184
+ * @param string|null $sourceId The ID of the source to update.
185
+ * @param array|null $params
186
+ * @param array|string|null $opts
187
+ *
188
+ * @return ApiResource
189
+ */
190
+ public static function updateSource($id, $sourceId, $params = null, $opts = null)
191
+ {
192
+ return self::_updateNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
193
+ }
194
+
195
+ /**
196
+ * @param string|null $id The ID of the customer to which the source belongs.
197
+ * @param string|null $sourceId The ID of the source to delete.
198
+ * @param array|null $params
199
+ * @param array|string|null $opts
200
+ *
201
+ * @return ApiResource
202
+ */
203
+ public static function deleteSource($id, $sourceId, $params = null, $opts = null)
204
+ {
205
+ return self::_deleteNestedResource($id, static::PATH_SOURCES, $sourceId, $params, $opts);
206
+ }
207
+
208
+ /**
209
+ * @param string|null $id The ID of the customer on which to retrieve the sources.
210
+ * @param array|null $params
211
+ * @param array|string|null $opts
212
+ *
213
+ * @return Collection The list of sources.
214
+ */
215
+ public static function allSources($id, $params = null, $opts = null)
216
+ {
217
+ return self::_allNestedResources($id, static::PATH_SOURCES, $params, $opts);
218
+ }
219
+
220
+ /**
221
+ * @param string|null $id The ID of the customer on which to create the tax id.
222
+ * @param array|null $params
223
+ * @param array|string|null $opts
224
+ *
225
+ * @return ApiResource
226
+ */
227
+ public static function createTaxId($id, $params = null, $opts = null)
228
+ {
229
+ return self::_createNestedResource($id, static::PATH_TAX_IDS, $params, $opts);
230
+ }
231
+
232
+ /**
233
+ * @param string|null $id The ID of the customer to which the tax id belongs.
234
+ * @param string|null $taxIdId The ID of the tax id to retrieve.
235
+ * @param array|null $params