From e277116e2a1a1553ad026828a22fdc71e6043e2b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 06:02:44 +0000 Subject: [PATCH 001/386] Bump fakerphp/faker from 1.23.0 to 1.23.1 Bumps [fakerphp/faker](https://github.com/FakerPHP/Faker) from 1.23.0 to 1.23.1. - [Release notes](https://github.com/FakerPHP/Faker/releases) - [Changelog](https://github.com/FakerPHP/Faker/blob/v1.23.1/CHANGELOG.md) - [Commits](https://github.com/FakerPHP/Faker/compare/v1.23.0...v1.23.1) --- updated-dependencies: - dependency-name: fakerphp/faker dependency-type: direct:development update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] --- composer.lock | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/composer.lock b/composer.lock index 66872dc8a..c9783092b 100644 --- a/composer.lock +++ b/composer.lock @@ -10648,16 +10648,16 @@ }, { "name": "fakerphp/faker", - "version": "v1.23.0", + "version": "v1.23.1", "source": { "type": "git", "url": "https://github.com/FakerPHP/Faker.git", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01" + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", - "reference": "e3daa170d00fde61ea7719ef47bb09bb8f1d9b01", + "url": "https://api.github.com/repos/FakerPHP/Faker/zipball/bfb4fe148adbf78eff521199619b93a52ae3554b", + "reference": "bfb4fe148adbf78eff521199619b93a52ae3554b", "shasum": "" }, "require": { @@ -10683,11 +10683,6 @@ "ext-mbstring": "Required for multibyte Unicode string functionality." }, "type": "library", - "extra": { - "branch-alias": { - "dev-main": "v1.21-dev" - } - }, "autoload": { "psr-4": { "Faker\\": "src/Faker/" @@ -10710,9 +10705,9 @@ ], "support": { "issues": "https://github.com/FakerPHP/Faker/issues", - "source": "https://github.com/FakerPHP/Faker/tree/v1.23.0" + "source": "https://github.com/FakerPHP/Faker/tree/v1.23.1" }, - "time": "2023-06-12T08:44:38+00:00" + "time": "2024-01-02T13:46:09+00:00" }, { "name": "fidry/cpu-core-counter", @@ -13674,5 +13669,5 @@ "ext-tokenizer": "*" }, "platform-dev": [], - "plugin-api-version": "2.2.0" + "plugin-api-version": "2.6.0" } From 45b1de1569fc9baeacf717fcbfea4a0f1ba66a69 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 15 Jan 2024 03:38:10 +0000 Subject: [PATCH 002/386] fix the call back --- .../views/checkout-success.blade.php | 24 +++++++++++++++++++ .../Resources/views/product-detail.blade.php | 21 +--------------- 2 files changed, 25 insertions(+), 20 deletions(-) diff --git a/packages/Webkul/OneBuy/src/Resources/views/checkout-success.blade.php b/packages/Webkul/OneBuy/src/Resources/views/checkout-success.blade.php index 2153ed316..a2f0b45f6 100644 --- a/packages/Webkul/OneBuy/src/Resources/views/checkout-success.blade.php +++ b/packages/Webkul/OneBuy/src/Resources/views/checkout-success.blade.php @@ -558,6 +558,27 @@ function updataDom(input) { setProductHtml(order_param.products, order_param.produt_amount_base); showPaySuccess(); getRecommendedData(order_param.payment_cancel_url); + + try { + function getCookie(name) + { + var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); + + if(arr=document.cookie.match(reg)) + + return unescape(arr[2]); + else + return null; + } + var refercode = getCookie('refer'); + var pricetrue= order_param.total; + + + function getUclick_c(){var e=document.cookie.match(new RegExp("(?:^|; )"+"uclick"+"=([^;]*)"));return e?decodeURIComponent(e[1]):void 0} + + function cnv_pixel(value){var e="https://track.heomai2021.com/",n=document.createElement("img");n.src=e+"click.php?cnv_id="+value+"&payout="+pricetrue;} + cnv_pixel(refercode); + } catch(e){ } } @@ -616,6 +637,9 @@ function getQueryString(name) { return null; } + + + + + + + + + + + + + + - - -
-
-
-
- 4.9 -
- + + + + + + +
+
+ +
+ +
+ +
+ + What customers are saying about Hatmeo
- Average Rating -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+ +
+ +
+ $comment) { + $comment = json_decode($comment); + //var_dump($comment);exit; + ?> +
+
+
+

name, 0, 1);?>

+

name;?>

+

+ Verified Buyer +

+
+
+
+ +
+
+
+ +
+ title;?> + +

content;?>

+ +
+ + +
-
- 89% - 11% - 0% - 0% - 0% -
-
-
+ -
-
-
-

Emma Thompson

- -

- "Listen up ladies, you need this in your life! I have been hated the way my bra would pop out my "fat" under the bra band, until I bought Hatmeo. No embarrassing armpit fats! No back straps or wires dig into the skin. Thank you!" -

-
-
-
-
-

Ava Williams

- -

- "Excellent! I've been searching for a bra like this forever. This bra gives me a push-up effect & is comfortable on my shoulders and back. I'll buy another color now! My bra size is 38 D which is impossible to find in most places." -

-
-
-
-
-

Sophia Davis

- -

- "I was looking at reviews for other brands and none of them fully convinced me. Finally came across this brand and this product and saw that almost everything was positive. Best ever!." -

-
-
+ +
+ +
+ + Frequently Asked Questions + +
+ +
+ + $item) { + $item = json_decode($item); + ?> + +
+ +

+ + + +

+ +
+ +
+ + a;?> +
-
+ +
+ +
-
- - -
-

-
-
+ +
+
+
+ +
+
-Place Order
+ @lang('onebuy::app.product.step.Place Order') @@ -298,7 +298,7 @@ function getQueryParameterTop(param) {
-Secure Checkout
+ @lang('onebuy::app.product.order.Secure Checkout')
@@ -309,7 +309,7 @@ function getQueryParameterTop(param) {
- RECOMMENDED DEAL
+ @lang('onebuy::app.product.order.RECOMMENDED DEAL')
@@ -357,7 +357,7 @@ function getQueryParameterTop(param) { -->
- Express Checkout
+ @lang('onebuy::app.product.order.Express Checkout')
@@ -371,7 +371,7 @@ function getQueryParameterTop(param) {
@@ -390,7 +390,7 @@ function getQueryParameterTop(param) {
-Credit Card Information:
+@lang('onebuy::app.product.order.Credit Card Information'):
-Your Card Info is invaild
+ @lang('onebuy::app.product.order.Your Card Info is invaild')
-GUARANTEED -SAFE -CHECKOUT
+ @lang('onebuy::app.product.order.GUARANTEED') + @lang('onebuy::app.product.order.SAFE') + @lang('onebuy::app.product.order.CHECKOUT')
-Shipping
+@lang('onebuy::app.product.order.Shipping')
-Enter your contact information: +@lang('onebuy::app.product.order.Enter your contact information'):
@@ -448,35 +448,35 @@ function getQueryParameterTop(param) { +@lang('onebuy::app.product.order.Email')
+@lang('onebuy::app.product.order.First Name')
+@lang('onebuy::app.product.order.Last Name')
+@lang('onebuy::app.product.order.Phone Number')
+@lang('onebuy::app.product.order.Street Address')
- - - - - +@include('onebuy::footer-container')
@@ -1063,7 +1013,7 @@ function getQueryParameterTop(param) { product name
-JUST NOW
+ @lang('onebuy::app.product.order.JUST NOW')
@@ -1104,7 +1054,7 @@ function getQueryParameterTop(param) {
+ @lang('onebuy::app.product.order.COMPLETE SECURE PURCHASE')
@@ -1574,8 +1524,8 @@ function GotoNotRequest(url) { window.product_attributes = ; var is_more_attribute = 1; - setAttributeTemplate('SELECT YOUR', '', '23', is_more_attribute ? true : false, 'common15', 'Sold out, please select another Attributes'); - showAttributeSelecet('Item'); + setAttributeTemplate('@lang('onebuy::app.product.order.SELECT YOUR')', '', '23', is_more_attribute ? true : false, 'common15', 'Sold out, please select another Attributes'); + showAttributeSelecet('@lang('onebuy::app.product.order.Item')'); From 6ac1e469ec2fcee1122f4aa14463c55a1a2753d1 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 25 Jan 2024 08:47:05 +0000 Subject: [PATCH 063/386] fix upgrade --- .../Http/Controllers/ProductController.php | 11 + .../src/Resources/views/cms/page.blade.php | 190 ++++++++++++++++++ .../views/footer-container.blade.php | 44 ++++ .../views/product-detail-de.blade.php | 11 +- 4 files changed, 254 insertions(+), 2 deletions(-) create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 89133b0b4..526b73195 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -21,6 +21,7 @@ use Illuminate\Support\Facades\Cache; use Webkul\Payment\Facades\Payment; use Illuminate\Support\Facades\Redis; +use Webkul\CMS\Repositories\CmsRepository; class ProductController extends Controller @@ -45,6 +46,7 @@ public function __construct( protected OrderRepository $orderRepository, protected InvoiceRepository $invoiceRepository, protected Airwallex $airwallex, + protected CmsRepository $cmsRepository, protected ThemeCustomizationRepository $themeCustomizationRepository ) { @@ -294,6 +296,15 @@ public function detail($slug, Request $request) { return view('onebuy::product-detail-'.config('app.locale'), compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method')); } + public function cms($slug, Request $request) { + \Debugbar::disable(); /* 开启后容易出现前端JS报错的情况 */ + + $page = $this->cmsRepository->findByUrlKeyOrFail($slug); + + return view('onebuy::cms.page')->with('page', $page); + + } + // 完成订单生成动作 public function order_add_sync(Request $request) { //var_dump($request->all()); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php new file mode 100644 index 000000000..18d323a84 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php @@ -0,0 +1,190 @@ + + + + <?php echo $page->meta_title;?> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

meta_title;?>

+ html_content;?> +
+
+@include('onebuy::footer-container') +
+ \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php new file mode 100644 index 000000000..25871239c --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php @@ -0,0 +1,44 @@ + \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php index 0a175030b..ffc9bc301 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php @@ -699,11 +699,12 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.payment.creditCard.title') - +
+
@@ -773,6 +774,9 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.payment.paypal.title') +
+ +
@@ -799,6 +803,9 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.payment.klarna.title') +
+ +
@@ -825,7 +832,7 @@ function getQueryParameterTop(param) {
-
@lang('onebuy::app.product.payment.complete_secure_purchase')
+
@lang('onebuy::app.product.payment.complete_secure_purchase')
From 56f111b8d9846f13e956a60d02e09337cec1ccf2 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 25 Jan 2024 09:58:41 +0000 Subject: [PATCH 064/386] fix airwallex --- .../src/Console/Commands/Order/Refund.php | 101 ++++++++++++++++++ .../src/Controllers/AirwallexController.php | 7 ++ .../Providers/AirwallexServiceProvider.php | 1 + .../Resources/views/payment-success.blade.php | 22 ++++ 4 files changed, 131 insertions(+) create mode 100644 packages/Webkul/Airwallex/src/Console/Commands/Order/Refund.php create mode 100644 packages/Webkul/Airwallex/src/Resources/views/payment-success.blade.php diff --git a/packages/Webkul/Airwallex/src/Console/Commands/Order/Refund.php b/packages/Webkul/Airwallex/src/Console/Commands/Order/Refund.php new file mode 100644 index 000000000..291e9c9aa --- /dev/null +++ b/packages/Webkul/Airwallex/src/Console/Commands/Order/Refund.php @@ -0,0 +1,101 @@ +apiKey = core()->getConfigData('sales.payment_methods.airwallex.apikey'); + + $this->clientId = core()->getConfigData('sales.payment_methods.airwallex.clientId'); + //$this->clientEmail = core()->getConfigData('sales.payment_methods.airwallex.clientEmail'); + //$this->clientPassword = core()->getConfigData('sales.payment_methods.airwallex.clientPassword'); + //$this->accountId = core()->getConfigData('sales.payment_methods.airwallex.accountId'); + //$this->paDC = core()->getConfigData('sales.payment_methods.airwallex.paDC'); + //$this->accountDC = core()->getConfigData('sales.payment_methods.airwallex.accountDC'); + $this->productionMode = core()->getConfigData('sales.payment_methods.airwallex.production'); + + + $this->paymentConfig = [ + 'clientId' => $this->clientId, + 'apiKey' => $this->apiKey + ]; + + $sdk = new AirwallexSdk($this->paymentConfig, $this->productionMode); + + //@link https://www.airwallex.com/docs/api#/Payment_Acceptance/Customers/_api_v1_pa_customers__id__generate_client_secret/get + + + + + + + + } +} diff --git a/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php b/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php index dd3f33b97..4d8e8e2ca 100644 --- a/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php +++ b/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php @@ -8,6 +8,8 @@ use Illuminate\Routing\Controller; use Illuminate\Support\Facades\Log; +use Webkul\Checkout\Facades\Cart; + use Webkul\Sales\Repositories\InvoiceRepository; use Webkul\Sales\Repositories\OrderRepository; use Webkul\Sales\Repositories\OrderTransactionRepository; @@ -173,6 +175,11 @@ public function webhook(Request $request) public function paymentSuccess(Request $request) { Log::info("airwallex payment success". json_encode($request->all())); + $awx_return_result = $request->input("awx_return_result"); + if($awx_return_result=='success') { + return view("airwallex::payment-success"); + } + } /** diff --git a/packages/Webkul/Airwallex/src/Providers/AirwallexServiceProvider.php b/packages/Webkul/Airwallex/src/Providers/AirwallexServiceProvider.php index 51619ce86..c28992da1 100644 --- a/packages/Webkul/Airwallex/src/Providers/AirwallexServiceProvider.php +++ b/packages/Webkul/Airwallex/src/Providers/AirwallexServiceProvider.php @@ -78,6 +78,7 @@ protected function registerCommands(): void if ($this->app->runningInConsole()) { $this->commands([ \Nicelizhi\Airwallex\Console\Commands\Webhook\CreateaWebhook::class, + \Nicelizhi\Airwallex\Console\Commands\Order\Refund::class, ]); } } diff --git a/packages/Webkul/Airwallex/src/Resources/views/payment-success.blade.php b/packages/Webkul/Airwallex/src/Resources/views/payment-success.blade.php new file mode 100644 index 000000000..6d22a0581 --- /dev/null +++ b/packages/Webkul/Airwallex/src/Resources/views/payment-success.blade.php @@ -0,0 +1,22 @@ + \ No newline at end of file From 48e2545f649b6ab3f287fcee17967d5fb1c110ce Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 25 Jan 2024 09:59:16 +0000 Subject: [PATCH 065/386] fix onebuy --- .../OneBuy/src/Http/Controllers/ProductController.php | 4 ++-- .../OneBuy/src/Resources/views/product-detail-de.blade.php | 6 ++++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 526b73195..f756cbb1c 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -432,8 +432,8 @@ public function order_add_sync(Request $request) { $this->validateOrder(); $cart = Cart::getCart(); $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - Cart::deActivateCart(); - Cart::activateCartIfSessionHasDeactivatedCartId(); + //Cart::deActivateCart(); + //Cart::activateCartIfSessionHasDeactivatedCartId(); // 跳转到支付 $data['result'] = 200; $data['order'] = $order; diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php index ffc9bc301..69921d6e3 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php @@ -1954,6 +1954,12 @@ function createOrder(token, token_field="checkout_frames_token", pay_type="check } if(window.is_airwallex_klarna) { + + document.cookie="voluum_payout="+ order_info.grand_total + order_info.order_currency_code + "; path=/"; + document.cookie="order_id="+ order_info.id + "; path=/"; + localStorage.setItem("order_id", order_info.id); + localStorage.setItem("order_params", JSON.stringify(params)); + url = "/onebuy/order/confirm?_token={{ csrf_token() }}&payment_intent_id="+data.payment_intent_id+"&order_id="+data.order.id; fetch(url, { method: 'GET', From c34688f383dca99677690dfae757fd05a608e87c Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jan 2024 02:03:02 +0000 Subject: [PATCH 066/386] fix --- .../OneBuy/src/Resources/lang/de/app.php | 3 +- .../views/product-detail-de.blade.php | 60 ++++++++++++++++--- 2 files changed, 54 insertions(+), 9 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index ba4d83d04..d15f83f5a 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -9,7 +9,7 @@ 'cvc' => 'Lebenslauf', ], 'paypal' => [ - 'title' => 'PayPal Standard', + 'title' => 'PayPal', 'description' => 'Nachdem du auf "Mit PayPal bezahlen" geklickt hast, wirst du zu PayPal weitergeleitet, um deinen Einkauf sicher abzuschließen.' ], 'klarna' => [ @@ -62,6 +62,7 @@ 'COMPLETE SECURE PURCHASE' => 'VOLLSTÄNDIG SICHERER KAUF', 'Item' => 'Artikel', 'SELECT YOUR' => 'WÄHLE DEINE', + 'All transactions are secure and encrypted' => 'Alle Transaktionen sind sicher und verschlüsselt', ] ], 'order-success' => [ diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php index 69921d6e3..4ce8f44b7 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php @@ -435,7 +435,7 @@ function getQueryParameterTop(param) { -
+
@lang('onebuy::app.product.order.Shipping')
@@ -609,6 +609,29 @@ function getQueryParameterTop(param) {
- +
+@lang('onebuy::app.product.step.Payment')
+
+@lang('onebuy::app.product.order.All transactions are secure and encrypted'): +
+
@@ -724,6 +765,7 @@ function getQueryParameterTop(param) { font-family: Arial, sans-serif; font-weight: 400; box-sizing: border-box; + background-color: #fff; -webkit-box-sizing: border-box;height: calc(3.5rem + 2px); line-height: 1.25;padding: 1rem 0.75rem ">
@@ -741,6 +783,7 @@ function getQueryParameterTop(param) { font-family: Arial, sans-serif; font-weight: 400; box-sizing: border-box; + background-color: #fff; -webkit-box-sizing: border-box;height: calc(3.5rem + 2px); line-height: 1.25;padding: 1rem 0.75rem ">
@@ -758,6 +801,7 @@ function getQueryParameterTop(param) { font-family: Arial, sans-serif; font-weight: 400; box-sizing: border-box; + background-color: #fff; -webkit-box-sizing: border-box;height: calc(3.5rem + 2px); line-height: 1.25;padding: 1rem 0.75rem ">
@@ -775,7 +819,7 @@ function getQueryParameterTop(param) {
- +
@@ -804,14 +848,14 @@ function getQueryParameterTop(param) {
- +
-
+

From e5a094532458930dec9ff9689825bd6020ed3eba Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 26 Jan 2024 05:03:54 +0000 Subject: [PATCH 067/386] fix lang --- .../OneBuy/src/Resources/lang/de/app.php | 7 +++++ .../views/footer-container.blade.php | 10 +++---- .../views/product-detail-de.blade.php | 30 +++++++++++++++---- 3 files changed, 37 insertions(+), 10 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index d15f83f5a..c2dc846a7 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -63,6 +63,13 @@ 'Item' => 'Artikel', 'SELECT YOUR' => 'WÄHLE DEINE', 'All transactions are secure and encrypted' => 'Alle Transaktionen sind sicher und verschlüsselt', + ], + 'footer' => [ + 'Shipping Delivery' => 'Versand & Lieferung', + 'Refund policy' => 'Rückgaberecht', + 'About US' => 'Über uns', + 'Privacy Policy' => 'Datenschutzrichtlinie', + 'Contact Us' => 'Kontaktiere uns', ] ], 'order-success' => [ diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php index 25871239c..c3c79f785 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php @@ -24,15 +24,15 @@
- Shipping & Delivery + @lang('onebuy::app.product.footer.Shipping Delivery') - Refund policy + @lang('onebuy::app.product.footer.Refund policy') - About US + @lang('onebuy::app.product.footer.About US') - Privacy Policy + @lang('onebuy::app.product.footer.Privacy Policy') - Contact Us + @lang('onebuy::app.product.footer.Contact Us')
From edb2673a8d0a2ff3786742e963a19e0c310e3b81 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 16 Feb 2024 06:47:15 +0000 Subject: [PATCH 090/386] fix cms --- .../src/Resources/views/cms/page.blade.php | 33 ++----------------- .../views/footer-container.blade.php | 17 ++++++---- .../views/product-detail-de.blade.php | 2 ++ 3 files changed, 16 insertions(+), 36 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php index 4828dcda8..41f8a7dd2 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php @@ -13,28 +13,10 @@ - - - - - - + + - - -
-
-

meta_title;?>

+

meta_title;?>

html_content;?>
-@include('onebuy::footer-container')
\ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php index 904ec56d4..9e36e4322 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container.blade.php @@ -20,20 +20,25 @@ font-weight:blod; } +
@@ -364,7 +263,7 @@ function fetchCheckoutError(params) {
-Payment
+ @lang('onebuy::app.product.step.Payment')
@@ -376,7 +275,7 @@ function fetchCheckoutError(params) {
-Shipping Information
+ @lang('onebuy::app.product.step.Shipping Information')
@@ -388,7 +287,7 @@ function fetchCheckoutError(params) {
-Place Order
+ @lang('onebuy::app.product.step.Place Order') @@ -399,7 +298,7 @@ function fetchCheckoutError(params) {
-Secure Checkout
+ @lang('onebuy::app.product.order.Secure Checkout')
@@ -410,7 +309,7 @@ function fetchCheckoutError(params) {
- RECOMMENDED DEAL
+ @lang('onebuy::app.product.order.RECOMMENDED DEAL')
@@ -458,7 +357,7 @@ function fetchCheckoutError(params) { -->
- Express Checkout
+ @lang('onebuy::app.product.order.Express Checkout')
@@ -472,7 +371,7 @@ function fetchCheckoutError(params) {
@@ -481,17 +380,17 @@ function fetchCheckoutError(params) { CHECKOUT --> +$('#checkout-block-up').on('click', function() { + document.querySelector(".shipping_information_block").scrollIntoView({ + behavior: "smooth" + }) +}) +
-Credit Card Information:
+@lang('onebuy::app.product.order.Credit Card Information'):
-Your Card Info is invaild
+ @lang('onebuy::app.product.order.Your Card Info is invaild')
-GUARANTEED -SAFE -CHECKOUT
+ @lang('onebuy::app.product.order.GUARANTEED') + @lang('onebuy::app.product.order.SAFE') + @lang('onebuy::app.product.order.CHECKOUT')
-
+
-Shipping
+@lang('onebuy::app.product.order.Shipping')
-Enter your contact information: +@lang('onebuy::app.product.order.Enter your contact information'):
@@ -549,35 +448,35 @@ function fetchCheckoutError(params) { +@lang('onebuy::app.product.order.Email')
+@lang('onebuy::app.product.order.First Name')
+@lang('onebuy::app.product.order.Last Name')
+@lang('onebuy::app.product.order.Phone Number')
+@lang('onebuy::app.product.order.Street Address')
-
- -
-
- - -
- - + @lang('onebuy::app.product.order.Hatmeo offers 30')
+
+
+ + + + + + + + + +
+@lang('onebuy::app.product.step.Payment')
+
+@lang('onebuy::app.product.order.All transactions are secure and encrypted'): +
+
+ + +
+
+
+
+ + +
+ +
+
+

+

+ @lang('onebuy::app.product.payment.klarna.description') +
+

+
+
+
+ +
+ +
+
+

+

+ @lang('onebuy::app.product.payment.paypal.description') +
+

+
+
+
+ + +
+
+

+
+
+ + +
+ +
+

+
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.card_number')
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.Expiry')
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.cvc')
+
+
+
+
+
+ + + + + + +
+
+
+
+ +
+ +
+
+ +
@lang('onebuy::app.product.payment.complete_secure_purchase')
+
-
- -
-
-

+
@@ -1161,7 +1068,7 @@ function fetchCheckoutError(params) { product name
-JUST NOW
+ @lang('onebuy::app.product.order.JUST NOW')
@@ -1202,7 +1109,7 @@ function fetchCheckoutError(params) {
+ @lang('onebuy::app.product.order.COMPLETE SECURE PURCHASE')
@@ -1496,7 +1403,7 @@ function setAttributeTemplate(select_language, select_language_after, has_img_at product_template += '
'+select_language+' ' + (product_attribute.name || '') + select_language_after; if(product_attribute.tip) { - product_template += ' '+product_attribute.tip+'' + product_template += ' '+product_attribute.tip+'' } product_template += '
'; @@ -1564,10 +1471,6 @@ function showAttributeSelecet(article_str) { } function attributeChange(target, is_img_attribute, template) { - console.log("attribute change") - console.log(target); - console.log(is_img_attribute); - console.log(template); if(template == 'common5') { changeHtmlShow(); } @@ -1676,8 +1579,8 @@ function GotoNotRequest(url) { window.product_attributes = ; var is_more_attribute = 1; - setAttributeTemplate('SELECT YOUR', '', '23', is_more_attribute ? true : false, 'common15', 'Sold out, please select another Attributes'); - showAttributeSelecet('Item'); + setAttributeTemplate('@lang('onebuy::app.product.order.SELECT YOUR')', '', '23', is_more_attribute ? true : false, 'common15', 'Sold out, please select another Attributes'); + showAttributeSelecet('@lang('onebuy::app.product.order.Item')'); @@ -1702,6 +1605,7 @@ function gtag(){dataLayer.push(arguments);} window.is_airwallex = pay_type == 'airwallex' ? true : false; window.is_stripe_pay = pay_type == 'stripe' ? true : false; window.is_stripe_local = pay_type == 'stripe_local' ? true : false; + window.is_airwallex_klarna = pay_type =="airwallex_klarna" ? true : false; var currency = '{{ core()->getCurrentCurrencyCode() }}'; var paypal_pay_acc = ""; // test @@ -1876,31 +1780,6 @@ function creatPaypalCardButton() { }) } - if(window.is_checkout_pay) { - getPublickKey(); - - Frames.addEventHandler(Frames.Events.CARD_TOKENIZED, onCardTokenized); - Frames.addEventHandler(Frames.Events.CARD_VALIDATION_CHANGED, onCardValidationChange); - } else if (window.is_wintopay) { - window.cc_form_is_valid = true; - var cc_form_obj = vgsInit({validCallback: function() { - $('#checkout-card-error').hide(); - }}); - var cc_form = cc_form_obj.cc_form; - } else { - if(window.is_stripe_pay) { - if(typeof changeStripeAcc == 'function') { - changeStripeAcc('viusd') - } - stripeInit(); - } - } - - function onCardValidationChange() { - if(Frames.isCardValid()) { - $('#checkout-card-error').hide(); - } - } function onCardTokenized(event) { $('#loading').hide(); @@ -1915,48 +1794,7 @@ function onCardTokenized(event) { } } - function initPayoneerPaymentPage(listId) { - document.querySelector('.payoneer-card-container').innerHTML = '
'; - - checkoutList('payoneerPaymentNetworks', { - payButton: 'payoneerSubmitBtn', - payButtonContainer: 'payoneerSubmitBtnContainer', - baseUrl: 'https://api.live.oscato.com/pci/v1/', - // baseUrl: 'https://api.sandbox.oscato.com/pci/v1/', - listId: listId, - // listUrl: listURL, - widgetCssUrl: 'https://boutiquesgift.com/css/widget.min.css', - proceedFunction: function(res) { - console.log("payoneer response:"); - console.log(res); - switch (res.interaction.code) { - case 'PROCEED': - // 当交互代码是'PROCEED'时,代码在此处 - // 支付成功 - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); - break; - - case 'ABORT': - // 当交互代码是'ABORT'时,代码在此处 - case 'TRY_OTHER_ACCOUNT': - case 'RETRY': - // 当交互代码是'TRY_OTHER_ACCOUNT'或'RETRY'时,代码在此处 - case 'TRY_OTHER_NETWORK': - case 'RELOAD': - // 当交互代码是'TRY_OTHER_NETWORK'或'RELOAD'时,代码在此处 - case 'VERIFY': - // 当交互代码是'VERIFY'时,代码在此处 - hidePayoneerPopup(); - var payoneer_err_info ="Please double check your information and try again"; - $('#checkout-error').html(payoneer_err_info); - $('#checkout-error').show(); - postOrderPayFailed('payoneer'); - break; - } - } - }); - document.querySelector('.payoneer-popup').style.display = 'block'; - } + function postOrderPayFailed(pay_type) { var order_id = localStorage.getItem('order_id'); @@ -2032,30 +1870,7 @@ function addToCart(pay_type) { } }); - // 实现 paypal standar payment - $(".pay-width-paypal-standard").on("click", function(){ - - gtag('event', 'initiate_paypal_standard_checkout', { - 'event_label': 'Initiate paypal_standard Checkout', - 'event_category': 'ecommerce' - }); - //fbq('track', 'InitiateCheckout'); - - window.pay_type = "paypal_standard"; - window.is_paypal_standard = true; - console.log("paypal standard payment"+window.pay_type); - console.log("paypal standard payment"+window.is_paypal_standard); - checkout(); - }); - - // airwallex - $(".airwallex-pay").on("click", function(){ - gtag('event', 'initiate_airwallex_checkout', { - 'event_label': 'Initiate airwallex Checkout', - 'event_category': 'ecommerce' - }); - checkout(); - }) + function checkout() { sendInitiateCheckoutEvent(); @@ -2076,10 +1891,7 @@ function checkout() { $('#loading').show(); $('#checkout-error').hide(); - if(window.is_payoneer_pay) { - createOrder('', '', 'payoneer'); - return; - } + if(window.is_checkout_pay) { Frames.submitCard(); @@ -2098,7 +1910,9 @@ function checkout() { createOrder('', '', 'worldpay'); }else if(window.is_paypal_standard) { createOrder('', '', 'paypal_standard'); - } else if(window.is_airwallex){ + }else if(window.is_airwallex_klarna) { + createOrder('', '', 'airwallex_klarna'); + }else if(window.is_airwallex){ $('#airwallex-warpper').hide(); createOrder('', '', 'airwallex'); } else if(window.is_stripe_local){ @@ -2144,6 +1958,7 @@ function createOrder(token, token_field="checkout_frames_token", pay_type="check params['pay_type'] = pay_type; console.log(JSON.stringify(params)); + //return false; var url = '/onebuy/order/add/sync?_token={{ csrf_token() }}&time=' + new Date().getTime(); @@ -2166,14 +1981,12 @@ function createOrder(token, token_field="checkout_frames_token", pay_type="check if(data.result === 200){ var order_info = data.order; + console.log(order_info); + console.log(window.is_airwallex_klarna); if(window.is_paypal_standard) { - var paypal_form = '
'; - - console.log(data.form); - $.each(data.form, function(k, v) { if(k=='cancel_return') v = window.location.href; @@ -2183,199 +1996,107 @@ function createOrder(token, token_field="checkout_frames_token", pay_type="check }); // paypal_form += '
'; - console.log(paypal_form); - $(paypal_form).appendTo('body').submit(); - return false; + } + if(window.is_airwallex_klarna) { - } + document.cookie="voluum_payout="+ order_info.grand_total + order_info.order_currency_code + "; path=/"; + document.cookie="order_id="+ order_info.id + "; path=/"; + localStorage.setItem("order_id", order_info.id); + localStorage.setItem("order_params", JSON.stringify(params)); + + url = "/onebuy/order/confirm?_token={{ csrf_token() }}&payment_intent_id="+data.payment_intent_id+"&order_id="+data.order.id; + fetch(url, { + method: 'GET', + headers: { + 'content-type': 'application/json' + } + }).then(function(res){return res.json()}) + .then(function(res) { + + console.log(res); + console.log(res.payment.next_action.url); + Goto(res.payment.next_action.url); + + }); + + + + + + + return false; + + + } document.cookie="voluum_payout="+ order_info.grand_total + order_info.order_currency_code + "; path=/"; document.cookie="order_id="+ order_info.id + "; path=/"; localStorage.setItem("order_id", order_info.id); localStorage.setItem("order_params", JSON.stringify(params)); - if(window.is_payoneer_pay) { - $('#loading').hide(); - initPayoneerPaymentPage(order_info.client_secret); - return; - } - if(window.is_checkout_pay) { - if(order_info.payment_3ds) { - if(order_info.payment_3ds.redirect_url) { - GotoNotRequest(order_info.payment_3ds.redirect_url); - } - } else { - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); - } - } else if (window.is_wintopay) { - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); - } else if (window.is_pacypay) { - if(order_info.client_secret) { - Goto(order_info.client_secret, true); - } - } else if (window.is_worldpay){ - console.log(data) - $('#loading').hide(); - document.querySelector(".submit-button").scrollIntoView({ - behavior: "smooth" - }) - worldpayInit({ - helper_html: window.location.protocol + '//' + window.location.host + '/worldpay/helper.html', - redirect_url: data.client_secret, - target: 'worldpay-warpper', - language: 'en', - country: order_info.order_currency_code, - resultCallback: function(responseData) { - var status = responseData.order.status; - if("success" == status) { - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); - } else { - var pay_error = responseData.error.messages; - - if(pay_error && pay_error.length) { - $('#checkout-error').html(pay_error.join('
')+'

'); - $('#checkout-error').show(); - } - } - } - }); - }else if (window.is_airwallex){ + + + if (window.is_airwallex){ document.querySelector(".submit-button").scrollIntoView({ behavior: "smooth" }) - $('#airwallex-warpper').show(); + //$('#airwallex-warpper').show(); console.log(order_info); - try { - // STEP #2: Initialize the Airwallex global context for event communication - Airwallex.init({ - env: '', // Setup which Airwallex env('staging' | 'demo' | 'prod') to integrate with - origin: window.location.origin, // Setup your event target to receive the browser events message - }); - - - // STEP #4: Create 'dropIn' element - const dropIn = Airwallex.createElement('dropIn', { - // Required, dropIn use intent Id, client_secret and currency to prepare checkout - intent_id: data.payment_intent_id, + Airwallex.confirmPaymentIntent({ + element: cardNumber, + id: data.payment_intent_id, client_secret: data.client_secret, - methods: , - currency: data.currency, - // customer_id:"cus_hkdm6lm7hglgq1tsh22", - googlePayRequestOptions: { - countryCode: data.country, - merchantInfo: { - merchantName: "Example Merchant", - }, - buttonType: 'buy', // Indicate the type of button you want displayed on your payments form. Like 'buy' - }, - applePayRequestOptions: { - buttonType: 'buy', // Indicate the type of button you want displayed on your payments form. Like 'buy' - countryCode: data.country, // The merchant's two-letter ISO 3166 country code. Like 'HK' - totalPriceLabel: 'COMPANY, INC.' // Provide a business name for the label field. - }, - // components:['card'], - withBilling:true, - //requiredBillingContactFields: ['name','email','address'] - //country_code:'', + }).then((response) => { + // STEP #6b: Listen to the request response + /* handle confirm response in your business flow */ + //window.alert(JSON.stringify(response)); + $('#loading').hide(); + console.log('success'); + console.log(JSON.stringify(response)) + //cb.errorHandler("Success"); + //alert("Success"); + + gtag('event', 'initiate_pay_success', { + 'event_label': "Initiate cc success"+data.order.id, + 'event_category': 'ecommerce' }); - // STEP #5: Mount 'dropIn' element - dropIn.mount('dropIn'); // This 'dropIn' id MUST MATCH the id on your empty container created in Step 3 - } catch (error) { - document.getElementById('loading').style.display = 'none'; // Example: hide loading state - document.getElementById('error').style.display = 'block'; // Example: show error - document.getElementById('error').innerHTML = error.message; // Example: set error message - console.error('There was an error', error); - } - - // STEP #6: Add an event listener to handle events when the element is mounted - window.addEventListener('onReady', (event) => { - $('#loading').hide(); - /* - ... Handle event - */ - document.getElementById('dropIn').style.display = 'block'; // Example: show element when mounted - document.getElementById('loading').style.display = 'none'; // Example: hide loading tag when element is mounted - console.log('Element is ready', event.detail); - }); + window.location.href="/checkout/v1/success/"+data.order.id; - // STEP #7: Add an event listener to handle events when the payment is successful. - window.addEventListener('onSuccess', (event) => { + }).catch((response) => { $('#loading').hide(); - /* - ... Handle event on success - */ - //document.getElementById('success').style.display = 'block'; // Example: show success block + console.log("catch"); + console.log(JSON.stringify(response)) - console.log("success"); - console.log(event.detail); + //cb.errorHandler(response.message); + //alert(response.message); - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); + //$("#checkout-error").val(response.message); - // window.alert(JSON.stringify(event.detail)); - }); - - // STEP #8: Add an event listener to handle events when the payment has failed. - window.addEventListener('onError', (event) => { - /* - ... Handle event on error - */ - const { error } = event.detail; - document.getElementById('error').style.display = 'block'; // Example: show error block - document.getElementById('error').innerHTML = error.message; // Example: set error message - console.error('There was an error', error); - }); - - + $('#checkout-error').html(response.message+'

'); + $('#checkout-error').show(); + // var cbErrors = new Array(); + // cbErrors.push(response.message); + // cb.errorHandler(cbErrors); - + gtag('event', 'initiate_pay_error', { + 'event_label': response.message, + 'event_category': 'ecommerce' + }); + // cb.errorHandler(response.message); + return false; - } else if (window.is_stripe_local){ - var client_secret = order_info.client_secret; - var stripe_init_data = { - name : params.first_name + ' ' + params.second_name, - email : params.email, - country : params.country, - state : params.province, - code : params.code, - address : params.address, - city : params.city - } - stripeElementsInit(client_secret, stripe_init_data); - $('#loading').hide(); - document.querySelector(".submit-button").scrollIntoView({ - behavior: "smooth" }); - $('.pay-after-submit-button').show(); - } else { - var client_secret = order_info.client_secret; - var need_3ds_stripe = order_info.stripe_extra_info.need_3ds; - if(need_3ds_stripe) { - window.removeEventListener('message', messageListener); - window.addEventListener('message', messageListener, false); - create3DSPopup(order_info.stripe_extra_info.next_action.redirect_to_url.url); - } else { - Goto('/onebuy/checkout/success?id='+localStorage.getItem('order_id')); - } - // stripe.handleCardPayment(client_secret, cardNumber).then(function(result) { - // if (result.error) { - // $('#checkout-error').html(result.error.message+'

'); - // $('#checkout-error').show(); - // $('#loading').hide(); - // } else { - // Goto('/template-common/en/thankyou1/?id='+localStorage.getItem('order_id')); - // } - // }); - } + } } else { $('#loading').hide(); var pay_error = data.error; @@ -2427,8 +2148,8 @@ function getOrderParams(pay_type, is_chain_payment, cancel_check_scroll = false) var products = getSubmitProducts(product_info.product_price,product_info.amount); - console.log("order products"); - console.log(products); + //console.log("order products"); + //console.log(products); var product_price = product_info.product_price; @@ -2606,12 +2327,12 @@ function checkOrderParams(params, is_chain_payment, cancel_check_scroll) { error_log.push('phone_full is empty'); } - var phone_format = /^[0-9\+\-\(\)\s]+$/; - if(!phone_format.test(params.phone_full)){ - has_error = true; - showError('phone_number-error', "Please enter valid phoneNumber"); - error_log.push('phone_full is Invaild'); - } + // var phone_format = /^[0-9\+\-\(\)\s]+$/; + // if(!phone_format.test(params.phone_full)){ + // has_error = true; + // showError('phone_number-error', "Please enter valid phoneNumber"); + // error_log.push('phone_full is Invaild'); + // } if(!params.country){ has_error = true; @@ -2672,7 +2393,7 @@ function checkOrderParams(params, is_chain_payment, cancel_check_scroll) { if(has_error) { error_log.push({params:params}); - fetchCheckoutError(error_log); + //fetchCheckoutError(error_log); } return has_error && show_error @@ -2691,20 +2412,17 @@ function getSubmitProducts(total, amount) { var attribute_item = $('.attribute-select .attribute-item'); var sku_maps = getSKuMaps(); - console.log("sku maps"); - console.log(sku_maps); + // console.log("sku maps"); + // console.log(sku_maps); - console.log("attribute_item"); - console.log(attribute_item); - console.log("attribute_item"); + // console.log("attribute_item"); + // console.log(attribute_item); + // console.log("attribute_item"); for(var i=0; i< attribute_item.length; i++) { var sku_key_arr = []; var img_key = ''; var attribute_select = $(attribute_item[i]).find('.attribute_select'); - console.log("attribute select 11111111 "); - console.log(attribute_select); - console.log("attribute select 111111112 "); for(var j=0; j + + + From 9c236c9403fd267faf0b889ecb8533596d04f5fe Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 16 Feb 2024 08:36:34 +0000 Subject: [PATCH 092/386] fix --- packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index 53197c61e..8fc631779 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -63,7 +63,7 @@ 'Item' => 'Artikel', 'SELECT YOUR' => 'WÄHLE DEINE', 'All transactions are secure and encrypted' => 'Alle Transaktionen sind sicher und verschlüsselt', - 'Hatmeo offers 30' => 'Hatmeo bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', + 'Hatmeo offers 30' => 'Hatme bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', ], 'footer' => [ 'Shipping Delivery' => 'Versand & Lieferung', From b969d617fa95e476b4c39738400940ae9de07532 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 00:47:05 +0000 Subject: [PATCH 093/386] fix --- .../src/Console/Commands/Order/Post.php | 26 ++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php index c278bbb3c..cc191cb51 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php @@ -69,6 +69,7 @@ public function handle() // 'status' => 'processing' // ]); $lists = Order::where(['status'=>'processing'])->orderBy("updated_at", "desc")->limit(10)->get(); + //var_dump($lists);exit; //$lists = Order::where(['id'=>'1093'])->orderBy("updated_at", "desc")->limit(10)->get(); //var_dump($lists);exit; @@ -76,11 +77,29 @@ public function handle() foreach($lists as $key=>$list) { $this->info("start post order " . $list->id); $this->postOrder($list->id, $shopifyStore); + $this->syncOrderPrice($list); // sync price to system //exit; } + } + + /** + * + * + * @param object orderitem + * + */ + public function syncOrderPrice($orderItem) { + if($orderItem->grand_total_invoiced=='0.0000') { + + $base_grand_total_invoiced = $orderItem->base_grand_total; + $grand_total_invoiced = $orderItem->grand_total; + Order::where(['id'=>$orderItem->id])->update(['grand_total_invoiced'=>$grand_total_invoiced, 'base_grand_total_invoiced'=>$base_grand_total_invoiced]); + + } + } public function postOrder($id, $shopifyStore) { @@ -429,11 +448,16 @@ public function postOrder($id, $shopifyStore) { $url = "https://track.heomai2021.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; $res = $this->get_content($url); Log::info("post to bm url ".$url." res ".json_encode($res)); - $res = $url = "https://binom.heomai.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; + $url = "https://binom.heomai.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; $res = $this->get_content($url); Log::info("post to bm url ".$url." res ".json_encode($res)); + $url = "http://45.79.79.208:8009/api/offers/callBack?refer=".$cnv_id[1]."&revenue=".$order->grand_total; + $res = $this->get_content($url); + Log::info("post to bm 2 url ".$url." res ".json_encode($res)); + + From 858b46b622f19be90561686207f21d03e0c459df Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 00:48:21 +0000 Subject: [PATCH 094/386] fix --- .../Airwallex/src/Controllers/AirwallexController.php | 2 +- packages/Webkul/Airwallex/src/Payment/Airwallex.php | 8 ++++++++ packages/Webkul/Airwallex/src/Sdk/Airwallex.php | 4 ++-- 3 files changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php b/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php index 4d8e8e2ca..0a5cd4f9d 100644 --- a/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php +++ b/packages/Webkul/Airwallex/src/Controllers/AirwallexController.php @@ -179,7 +179,7 @@ public function paymentSuccess(Request $request) { if($awx_return_result=='success') { return view("airwallex::payment-success"); } - + return view("airwallex::payment-success"); } /** diff --git a/packages/Webkul/Airwallex/src/Payment/Airwallex.php b/packages/Webkul/Airwallex/src/Payment/Airwallex.php index a4f064701..1b19b9c72 100644 --- a/packages/Webkul/Airwallex/src/Payment/Airwallex.php +++ b/packages/Webkul/Airwallex/src/Payment/Airwallex.php @@ -234,6 +234,14 @@ public function confirmPayment($payment_intents_id, $order) { $payment_method['klarna'] = $klarna; $buildRequestBody['payment_method'] = $payment_method; $buildRequestBody['request_id'] = $order->id."_".time(); + + + $payment_method_options = []; + $payment_method_options["klarna"]["auto_capture"] = true; + $buildRequestBody['payment_method_options'] = $payment_method_options; + + + //var_dump($order, $buildRequestBody);exit; //var_dump($buildRequestBody); $transactionManager = $sdk->confirm($payment_intents_id, json_encode($buildRequestBody, JSON_OBJECT_AS_ARRAY | JSON_UNESCAPED_UNICODE)); diff --git a/packages/Webkul/Airwallex/src/Sdk/Airwallex.php b/packages/Webkul/Airwallex/src/Sdk/Airwallex.php index d5f9e91db..05f7912d5 100644 --- a/packages/Webkul/Airwallex/src/Sdk/Airwallex.php +++ b/packages/Webkul/Airwallex/src/Sdk/Airwallex.php @@ -14,7 +14,7 @@ class Airwallex { protected $clientId; protected $apiKey; - protected $host = "https://api-demo.airwallex.com"; + protected $host = "https://api.airwallex.com"; protected $client; @@ -30,7 +30,7 @@ class Airwallex { * * */ - public function __construct($config=array(), $productionMode) { + public function __construct($config=array(), $productionMode="") { $this->clientId = $config['clientId']; $this->apiKey = $config['apiKey']; From 980ea16660242e2236b8075a7b3a4074bb7f139d Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 00:58:43 +0000 Subject: [PATCH 095/386] fix add countries de --- .../checkout1/state/countries_de.json | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 public/template-common/checkout1/state/countries_de.json diff --git a/public/template-common/checkout1/state/countries_de.json b/public/template-common/checkout1/state/countries_de.json new file mode 100644 index 000000000..a6a7d58f5 --- /dev/null +++ b/public/template-common/checkout1/state/countries_de.json @@ -0,0 +1,60 @@ +[ + { + "countryName": "Germany", + "countryNameLocalized": "Germany", + "countryCode": "DE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, +{ + "countryName": "Switzerland", + "countryNameLocalized": "Switzerland", + "countryCode": "CH", + "currencyCode": "CHF", + "currencyName": "Swiss Franc", + "currencySign": "CHF", + "region": "Europe", + "postalCodeRegex": "\\d{4}" +}, +{ + "countryName": "Austria", + "countryNameLocalized": "Austria", + "countryCode": "AT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" +}, + { + "countryName": "Sweden", + "countryNameLocalized": "Sweden", + "countryCode": "SE", + "currencyCode": "SEK", + "currencyName": "Swedish Krona", + "currencySign": "kr", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" +}, { + "countryName": "Greece", + "countryNameLocalized": "Greece", + "countryCode": "GR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" +},{ + "countryName": "France", + "countryNameLocalized": "France", + "countryCode": "FR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{2}[ ]?\\d{3}" +} +] \ No newline at end of file From f39ba634c4e83dcee81643150abb24e7fa826bcf Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 00:58:48 +0000 Subject: [PATCH 096/386] fix add countries de --- .../checkout1/state/countries.json | 81 ++++++++++++------- 1 file changed, 54 insertions(+), 27 deletions(-) diff --git a/public/template-common/checkout1/state/countries.json b/public/template-common/checkout1/state/countries.json index f9efec9fd..a6a7d58f5 100644 --- a/public/template-common/checkout1/state/countries.json +++ b/public/template-common/checkout1/state/countries.json @@ -1,33 +1,60 @@ -[{ - "countryName": "United States", - "countryNameLocalized": "United States", - "countryCode": "US", - "currencyCode": "USD", - "currencyName": "United States Dollar", - "currencySign": "US$", - "region": "Americas", - "codeFormat": "^\\d{5}([ \\-]\\d{4})?$", - "phonePrefix": "+1" -}, +[ + { + "countryName": "Germany", + "countryNameLocalized": "Germany", + "countryCode": "DE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, { - "countryName": "Australia", - "countryNameLocalized": "Australia", - "countryCode": "AU", - "currencyCode": "AUD", - "currencyName": "Australian Dollar", - "currencySign": "AU$", - "region": "Oceania", - "codeFormat": "^\\d{4}$", - "phonePrefix": "+61" + "countryName": "Switzerland", + "countryNameLocalized": "Switzerland", + "countryCode": "CH", + "currencyCode": "CHF", + "currencyName": "Swiss Franc", + "currencySign": "CHF", + "region": "Europe", + "postalCodeRegex": "\\d{4}" }, { - "countryName": "Canada", - "countryCode": "CA", - "phonePrefix": "+1" + "countryName": "Austria", + "countryNameLocalized": "Austria", + "countryCode": "AT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" }, -{ - "countryName": "United Kingdom", - "countryCode": "GB", - "phonePrefix": "+44" + { + "countryName": "Sweden", + "countryNameLocalized": "Sweden", + "countryCode": "SE", + "currencyCode": "SEK", + "currencyName": "Swedish Krona", + "currencySign": "kr", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" +}, { + "countryName": "Greece", + "countryNameLocalized": "Greece", + "countryCode": "GR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" +},{ + "countryName": "France", + "countryNameLocalized": "France", + "countryCode": "FR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{2}[ ]?\\d{3}" } ] \ No newline at end of file From 4d9cf6f1dc97e055c35f6c739d3944ba3300b5ef Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 01:00:03 +0000 Subject: [PATCH 097/386] fix counties --- .../template-common/checkout1/state/at.json | 47 ++ .../template-common/checkout1/state/ch.json | 132 +++++ .../template-common/checkout1/state/fr.json | 527 ++++++++++++++++++ .../template-common/checkout1/state/gr.json | 262 +++++++++ .../template-common/checkout1/state/se.json | 107 ++++ 5 files changed, 1075 insertions(+) create mode 100644 public/template-common/checkout1/state/at.json create mode 100644 public/template-common/checkout1/state/ch.json create mode 100644 public/template-common/checkout1/state/fr.json create mode 100644 public/template-common/checkout1/state/gr.json create mode 100644 public/template-common/checkout1/state/se.json diff --git a/public/template-common/checkout1/state/at.json b/public/template-common/checkout1/state/at.json new file mode 100644 index 000000000..9fa84857a --- /dev/null +++ b/public/template-common/checkout1/state/at.json @@ -0,0 +1,47 @@ +[ + { + "CountryCode":"AT", + "StateCode":"1", + "StateName":"Burgenland" + }, + { + "CountryCode":"AT", + "StateCode":"2", + "StateName":"Kärnten" + }, + { + "CountryCode":"AT", + "StateCode":"3", + "StateName":"Niederösterreich" + }, + { + "CountryCode":"AT", + "StateCode":"4", + "StateName":"Oberösterreich" + }, + { + "CountryCode":"AT", + "StateCode":"5", + "StateName":"Salzburg" + }, + { + "CountryCode":"AT", + "StateCode":"6", + "StateName":"Steiermark" + }, + { + "CountryCode":"AT", + "StateCode":"7", + "StateName":"Tirol" + }, + { + "CountryCode":"AT", + "StateCode":"8", + "StateName":"Vorarlberg" + }, + { + "CountryCode":"AT", + "StateCode":"9", + "StateName":"Wien" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ch.json b/public/template-common/checkout1/state/ch.json new file mode 100644 index 000000000..4be75f9b8 --- /dev/null +++ b/public/template-common/checkout1/state/ch.json @@ -0,0 +1,132 @@ +[ + { + "CountryCode":"CH", + "StateCode":"AG", + "StateName":"Aargau(de)" + }, + { + "CountryCode":"CH", + "StateCode":"AI", + "StateName":"Appenzell Innerrhoden(de)" + }, + { + "CountryCode":"CH", + "StateCode":"AR", + "StateName":"Appenzell Ausserrhoden(de)" + }, + { + "CountryCode":"CH", + "StateCode":"BE", + "StateName":"Bern(de)" + }, + { + "CountryCode":"CH", + "StateCode":"BL", + "StateName":"Basel-Landschaft(de)" + }, + { + "CountryCode":"CH", + "StateCode":"BS", + "StateName":"Basel-Stadt(de)" + }, + { + "CountryCode":"CH", + "StateCode":"FR", + "StateName":"Fribourg(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"GE", + "StateName":"Genève(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"GL", + "StateName":"Glarus(de)" + }, + { + "CountryCode":"CH", + "StateCode":"GR", + "StateName":"Graubünden(de)" + }, + { + "CountryCode":"CH", + "StateCode":"JU", + "StateName":"Jura(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"LU", + "StateName":"Luzern(de)" + }, + { + "CountryCode":"CH", + "StateCode":"NE", + "StateName":"Neuchâtel(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"NW", + "StateName":"Nidwalden(de)" + }, + { + "CountryCode":"CH", + "StateCode":"OW", + "StateName":"Obwalden(de)" + }, + { + "CountryCode":"CH", + "StateCode":"SG", + "StateName":"Sankt Gallen(de)" + }, + { + "CountryCode":"CH", + "StateCode":"SH", + "StateName":"Schaffhausen(de)" + }, + { + "CountryCode":"CH", + "StateCode":"SO", + "StateName":"Solothurn(de)" + }, + { + "CountryCode":"CH", + "StateCode":"SZ", + "StateName":"Schwyz(de)" + }, + { + "CountryCode":"CH", + "StateCode":"TG", + "StateName":"Thurgau(de)" + }, + { + "CountryCode":"CH", + "StateCode":"TI", + "StateName":"Ticino(it)" + }, + { + "CountryCode":"CH", + "StateCode":"UR", + "StateName":"Uri(de)" + }, + { + "CountryCode":"CH", + "StateCode":"VD", + "StateName":"Vaud(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"VS", + "StateName":"Valais(fr)" + }, + { + "CountryCode":"CH", + "StateCode":"ZG", + "StateName":"Zug(de)" + }, + { + "CountryCode":"CH", + "StateCode":"ZH", + "StateName":"Zürich(de)" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/fr.json b/public/template-common/checkout1/state/fr.json new file mode 100644 index 000000000..d714df19e --- /dev/null +++ b/public/template-common/checkout1/state/fr.json @@ -0,0 +1,527 @@ +[ + { + "CountryCode":"FR", + "StateCode":"01", + "StateName":"Ain" + }, + { + "CountryCode":"FR", + "StateCode":"02", + "StateName":"Aisne" + }, + { + "CountryCode":"FR", + "StateCode":"03", + "StateName":"Allier" + }, + { + "CountryCode":"FR", + "StateCode":"04", + "StateName":"Alpes-de-Haute-Provence" + }, + { + "CountryCode":"FR", + "StateCode":"05", + "StateName":"Hautes-Alpes" + }, + { + "CountryCode":"FR", + "StateCode":"06", + "StateName":"Alpes-Maritimes" + }, + { + "CountryCode":"FR", + "StateCode":"07", + "StateName":"Ardèche" + }, + { + "CountryCode":"FR", + "StateCode":"08", + "StateName":"Ardennes" + }, + { + "CountryCode":"FR", + "StateCode":"09", + "StateName":"Ariège" + }, + { + "CountryCode":"FR", + "StateCode":"10", + "StateName":"Aube" + }, + { + "CountryCode":"FR", + "StateCode":"11", + "StateName":"Aude" + }, + { + "CountryCode":"FR", + "StateCode":"12", + "StateName":"Aveyron" + }, + { + "CountryCode":"FR", + "StateCode":"13", + "StateName":"Bouches-du-Rhône" + }, + { + "CountryCode":"FR", + "StateCode":"14", + "StateName":"Calvados" + }, + { + "CountryCode":"FR", + "StateCode":"15", + "StateName":"Cantal" + }, + { + "CountryCode":"FR", + "StateCode":"16", + "StateName":"Charente" + }, + { + "CountryCode":"FR", + "StateCode":"17", + "StateName":"Charente-Maritime" + }, + { + "CountryCode":"FR", + "StateCode":"18", + "StateName":"Cher" + }, + { + "CountryCode":"FR", + "StateCode":"19", + "StateName":"Corrèze" + }, + { + "CountryCode":"FR", + "StateCode":"21", + "StateName":"Côte-d'Or" + }, + { + "CountryCode":"FR", + "StateCode":"22", + "StateName":"Côtes-d'Armor" + }, + { + "CountryCode":"FR", + "StateCode":"23", + "StateName":"Creuse" + }, + { + "CountryCode":"FR", + "StateCode":"24", + "StateName":"Dordogne" + }, + { + "CountryCode":"FR", + "StateCode":"25", + "StateName":"Doubs" + }, + { + "CountryCode":"FR", + "StateCode":"26", + "StateName":"Drôme" + }, + { + "CountryCode":"FR", + "StateCode":"27", + "StateName":"Eure" + }, + { + "CountryCode":"FR", + "StateCode":"28", + "StateName":"Eure-et-Loir" + }, + { + "CountryCode":"FR", + "StateCode":"29", + "StateName":"Finistère" + }, + { + "CountryCode":"FR", + "StateCode":"2A", + "StateName":"Corse-du-Sud" + }, + { + "CountryCode":"FR", + "StateCode":"2B", + "StateName":"Haute-Corse" + }, + { + "CountryCode":"FR", + "StateCode":"30", + "StateName":"Gard" + }, + { + "CountryCode":"FR", + "StateCode":"31", + "StateName":"Haute-Garonne" + }, + { + "CountryCode":"FR", + "StateCode":"32", + "StateName":"Gers" + }, + { + "CountryCode":"FR", + "StateCode":"33", + "StateName":"Gironde" + }, + { + "CountryCode":"FR", + "StateCode":"34", + "StateName":"Hérault" + }, + { + "CountryCode":"FR", + "StateCode":"35", + "StateName":"Ille-et-Vilaine" + }, + { + "CountryCode":"FR", + "StateCode":"36", + "StateName":"Indre" + }, + { + "CountryCode":"FR", + "StateCode":"37", + "StateName":"Indre-et-Loire" + }, + { + "CountryCode":"FR", + "StateCode":"38", + "StateName":"Isère" + }, + { + "CountryCode":"FR", + "StateCode":"39", + "StateName":"Jura" + }, + { + "CountryCode":"FR", + "StateCode":"40", + "StateName":"Landes" + }, + { + "CountryCode":"FR", + "StateCode":"41", + "StateName":"Loir-et-Cher" + }, + { + "CountryCode":"FR", + "StateCode":"42", + "StateName":"Loire" + }, + { + "CountryCode":"FR", + "StateCode":"43", + "StateName":"Haute-Loire" + }, + { + "CountryCode":"FR", + "StateCode":"44", + "StateName":"Loire-Atlantique" + }, + { + "CountryCode":"FR", + "StateCode":"45", + "StateName":"Loiret" + }, + { + "CountryCode":"FR", + "StateCode":"46", + "StateName":"Lot" + }, + { + "CountryCode":"FR", + "StateCode":"47", + "StateName":"Lot-et-Garonne" + }, + { + "CountryCode":"FR", + "StateCode":"48", + "StateName":"Lozère" + }, + { + "CountryCode":"FR", + "StateCode":"49", + "StateName":"Maine-et-Loire" + }, + { + "CountryCode":"FR", + "StateCode":"50", + "StateName":"Manche" + }, + { + "CountryCode":"FR", + "StateCode":"51", + "StateName":"Marne" + }, + { + "CountryCode":"FR", + "StateCode":"52", + "StateName":"Haute-Marne" + }, + { + "CountryCode":"FR", + "StateCode":"53", + "StateName":"Mayenne" + }, + { + "CountryCode":"FR", + "StateCode":"54", + "StateName":"Meurthe-et-Moselle" + }, + { + "CountryCode":"FR", + "StateCode":"55", + "StateName":"Meuse" + }, + { + "CountryCode":"FR", + "StateCode":"56", + "StateName":"Morbihan" + }, + { + "CountryCode":"FR", + "StateCode":"57", + "StateName":"Moselle" + }, + { + "CountryCode":"FR", + "StateCode":"58", + "StateName":"Nièvre" + }, + { + "CountryCode":"FR", + "StateCode":"59", + "StateName":"Nord" + }, + { + "CountryCode":"FR", + "StateCode":"60", + "StateName":"Oise" + }, + { + "CountryCode":"FR", + "StateCode":"61", + "StateName":"Orne" + }, + { + "CountryCode":"FR", + "StateCode":"62", + "StateName":"Pas-de-Calais" + }, + { + "CountryCode":"FR", + "StateCode":"63", + "StateName":"Puy-de-Dôme" + }, + { + "CountryCode":"FR", + "StateCode":"64", + "StateName":"Pyrénées-Atlantiques" + }, + { + "CountryCode":"FR", + "StateCode":"65", + "StateName":"Hautes-Pyrénées" + }, + { + "CountryCode":"FR", + "StateCode":"66", + "StateName":"Pyrénées-Orientales" + }, + { + "CountryCode":"FR", + "StateCode":"67", + "StateName":"Bas-Rhin" + }, + { + "CountryCode":"FR", + "StateCode":"68", + "StateName":"Haut-Rhin" + }, + { + "CountryCode":"FR", + "StateCode":"69", + "StateName":"Rhône" + }, + { + "CountryCode":"FR", + "StateCode":"70", + "StateName":"Haute-Saône" + }, + { + "CountryCode":"FR", + "StateCode":"71", + "StateName":"Saône-et-Loire" + }, + { + "CountryCode":"FR", + "StateCode":"72", + "StateName":"Sarthe" + }, + { + "CountryCode":"FR", + "StateCode":"73", + "StateName":"Savoie" + }, + { + "CountryCode":"FR", + "StateCode":"74", + "StateName":"Haute-Savoie" + }, + { + "CountryCode":"FR", + "StateCode":"75", + "StateName":"Paris" + }, + { + "CountryCode":"FR", + "StateCode":"76", + "StateName":"Seine-Maritime" + }, + { + "CountryCode":"FR", + "StateCode":"77", + "StateName":"Seine-et-Marne" + }, + { + "CountryCode":"FR", + "StateCode":"78", + "StateName":"Yvelines" + }, + { + "CountryCode":"FR", + "StateCode":"79", + "StateName":"Deux-Sèvres" + }, + { + "CountryCode":"FR", + "StateCode":"80", + "StateName":"Somme" + }, + { + "CountryCode":"FR", + "StateCode":"81", + "StateName":"Tarn" + }, + { + "CountryCode":"FR", + "StateCode":"82", + "StateName":"Tarn-et-Garonne" + }, + { + "CountryCode":"FR", + "StateCode":"83", + "StateName":"Var" + }, + { + "CountryCode":"FR", + "StateCode":"84", + "StateName":"Vaucluse" + }, + { + "CountryCode":"FR", + "StateCode":"85", + "StateName":"Vendée" + }, + { + "CountryCode":"FR", + "StateCode":"86", + "StateName":"Vienne" + }, + { + "CountryCode":"FR", + "StateCode":"87", + "StateName":"Haute-Vienne" + }, + { + "CountryCode":"FR", + "StateCode":"88", + "StateName":"Vosges" + }, + { + "CountryCode":"FR", + "StateCode":"89", + "StateName":"Yonne" + }, + { + "CountryCode":"FR", + "StateCode":"90", + "StateName":"Territoirede Belfort" + }, + { + "CountryCode":"FR", + "StateCode":"91", + "StateName":"Essonne" + }, + { + "CountryCode":"FR", + "StateCode":"92", + "StateName":"Hauts-de-Seine" + }, + { + "CountryCode":"FR", + "StateCode":"93", + "StateName":"Seine-Saint-Denis" + }, + { + "CountryCode":"FR", + "StateCode":"94", + "StateName":"Val-de-Marne" + }, + { + "CountryCode":"FR", + "StateCode":"95", + "StateName":"Val-d'Oise" + }, + { + "CountryCode":"FR", + "StateCode":"BL", + "StateName":"Saint-Barthélemy" + }, + { + "CountryCode":"FR", + "StateCode":"CP", + "StateName":"Clipperton" + }, + { + "CountryCode":"FR", + "StateCode":"MF", + "StateName":"Saint-Martin" + }, + { + "CountryCode":"FR", + "StateCode":"NC", + "StateName":"Nouvelle-Calédonie" + }, + { + "CountryCode":"FR", + "StateCode":"PF", + "StateName":"Polynésiefrançaise" + }, + { + "CountryCode":"FR", + "StateCode":"PM", + "StateName":"Saint-Pierre-et-Miquelon" + }, + { + "CountryCode":"FR", + "StateCode":"TF", + "StateName":"Terres Australes Françaises" + }, + { + "CountryCode":"FR", + "StateCode":"WF", + "StateName":"Walliset Futuna" + }, + { + "CountryCode":"FR", + "StateCode":"YT", + "StateName":"Mayotte" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/gr.json b/public/template-common/checkout1/state/gr.json new file mode 100644 index 000000000..94019732e --- /dev/null +++ b/public/template-common/checkout1/state/gr.json @@ -0,0 +1,262 @@ +[ + { + "CountryCode":"GR", + "StateCode":"01", + "StateName":"Aitoliakai Akarnania" + }, + { + "CountryCode":"GR", + "StateCode":"03", + "StateName":"Voiotia" + }, + { + "CountryCode":"GR", + "StateCode":"04", + "StateName":"Evvoia" + }, + { + "CountryCode":"GR", + "StateCode":"05", + "StateName":"Evrytania" + }, + { + "CountryCode":"GR", + "StateCode":"06", + "StateName":"Fthiotida" + }, + { + "CountryCode":"GR", + "StateCode":"07", + "StateName":"Fokida" + }, + { + "CountryCode":"GR", + "StateCode":"11", + "StateName":"Argolida" + }, + { + "CountryCode":"GR", + "StateCode":"12", + "StateName":"Arkadia" + }, + { + "CountryCode":"GR", + "StateCode":"13", + "StateName":"Achaïa" + }, + { + "CountryCode":"GR", + "StateCode":"14", + "StateName":"Ileia" + }, + { + "CountryCode":"GR", + "StateCode":"15", + "StateName":"Korinthia" + }, + { + "CountryCode":"GR", + "StateCode":"16", + "StateName":"Lakonia" + }, + { + "CountryCode":"GR", + "StateCode":"17", + "StateName":"Messinia" + }, + { + "CountryCode":"GR", + "StateCode":"21", + "StateName":"Zakynthos" + }, + { + "CountryCode":"GR", + "StateCode":"22", + "StateName":"Kerkyra" + }, + { + "CountryCode":"GR", + "StateCode":"23", + "StateName":"Kefallonia" + }, + { + "CountryCode":"GR", + "StateCode":"24", + "StateName":"Lefkada" + }, + { + "CountryCode":"GR", + "StateCode":"31", + "StateName":"Arta" + }, + { + "CountryCode":"GR", + "StateCode":"32", + "StateName":"Thesprotia" + }, + { + "CountryCode":"GR", + "StateCode":"33", + "StateName":"Ioannina" + }, + { + "CountryCode":"GR", + "StateCode":"34", + "StateName":"Preveza" + }, + { + "CountryCode":"GR", + "StateCode":"41", + "StateName":"Karditsa" + }, + { + "CountryCode":"GR", + "StateCode":"42", + "StateName":"Larisa" + }, + { + "CountryCode":"GR", + "StateCode":"43", + "StateName":"Magnisia" + }, + { + "CountryCode":"GR", + "StateCode":"44", + "StateName":"Trikala" + }, + { + "CountryCode":"GR", + "StateCode":"51", + "StateName":"Grevena" + }, + { + "CountryCode":"GR", + "StateCode":"52", + "StateName":"Drama" + }, + { + "CountryCode":"GR", + "StateCode":"53", + "StateName":"Imathia" + }, + { + "CountryCode":"GR", + "StateCode":"54", + "StateName":"Thessaloniki" + }, + { + "CountryCode":"GR", + "StateCode":"55", + "StateName":"Kavala" + }, + { + "CountryCode":"GR", + "StateCode":"56", + "StateName":"Kastoria" + }, + { + "CountryCode":"GR", + "StateCode":"57", + "StateName":"Kilkis" + }, + { + "CountryCode":"GR", + "StateCode":"58", + "StateName":"Kozani" + }, + { + "CountryCode":"GR", + "StateCode":"59", + "StateName":"Pella" + }, + { + "CountryCode":"GR", + "StateCode":"61", + "StateName":"Pieria" + }, + { + "CountryCode":"GR", + "StateCode":"62", + "StateName":"Serres" + }, + { + "CountryCode":"GR", + "StateCode":"63", + "StateName":"Florina" + }, + { + "CountryCode":"GR", + "StateCode":"64", + "StateName":"Chalkidiki" + }, + { + "CountryCode":"GR", + "StateCode":"69", + "StateName":"Agio Oros" + }, + { + "CountryCode":"GR", + "StateCode":"71", + "StateName":"Evros" + }, + { + "CountryCode":"GR", + "StateCode":"72", + "StateName":"Xanthi" + }, + { + "CountryCode":"GR", + "StateCode":"73", + "StateName":"Rodopi" + }, + { + "CountryCode":"GR", + "StateCode":"81", + "StateName":"Dodekanisos" + }, + { + "CountryCode":"GR", + "StateCode":"82", + "StateName":"Kyklades" + }, + { + "CountryCode":"GR", + "StateCode":"83", + "StateName":"Lesvos" + }, + { + "CountryCode":"GR", + "StateCode":"84", + "StateName":"Samos" + }, + { + "CountryCode":"GR", + "StateCode":"85", + "StateName":"Chios" + }, + { + "CountryCode":"GR", + "StateCode":"91", + "StateName":"Irakleio" + }, + { + "CountryCode":"GR", + "StateCode":"92", + "StateName":"Lasithi" + }, + { + "CountryCode":"GR", + "StateCode":"93", + "StateName":"Rethymno" + }, + { + "CountryCode":"GR", + "StateCode":"94", + "StateName":"Chania" + }, + { + "CountryCode":"GR", + "StateCode":"A1", + "StateName":"Attiki" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/se.json b/public/template-common/checkout1/state/se.json new file mode 100644 index 000000000..513f8267d --- /dev/null +++ b/public/template-common/checkout1/state/se.json @@ -0,0 +1,107 @@ +[ + { + "CountryCode":"SE", + "StateCode":"AB", + "StateName":"Stockholmslän" + }, + { + "CountryCode":"SE", + "StateCode":"AC", + "StateName":"Västerbottenslän" + }, + { + "CountryCode":"SE", + "StateCode":"BD", + "StateName":"Norrbottenslän" + }, + { + "CountryCode":"SE", + "StateCode":"C", + "StateName":"Uppsalalän" + }, + { + "CountryCode":"SE", + "StateCode":"D", + "StateName":"Södermanlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"E", + "StateName":"Östergötlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"F", + "StateName":"Jönköpingslän" + }, + { + "CountryCode":"SE", + "StateCode":"G", + "StateName":"Kronobergslän" + }, + { + "CountryCode":"SE", + "StateCode":"H", + "StateName":"Kalmarlän" + }, + { + "CountryCode":"SE", + "StateCode":"I", + "StateName":"Gotlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"K", + "StateName":"Blekingelän" + }, + { + "CountryCode":"SE", + "StateCode":"M", + "StateName":"Skånelän" + }, + { + "CountryCode":"SE", + "StateCode":"N", + "StateName":"Hallandslän" + }, + { + "CountryCode":"SE", + "StateCode":"O", + "StateName":"Västra Götalandslän" + }, + { + "CountryCode":"SE", + "StateCode":"S", + "StateName":"Värmlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"T", + "StateName":"Örebrolän" + }, + { + "CountryCode":"SE", + "StateCode":"U", + "StateName":"Västmanlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"W", + "StateName":"Dalarnaslän" + }, + { + "CountryCode":"SE", + "StateCode":"X", + "StateName":"Gävleborgslän" + }, + { + "CountryCode":"SE", + "StateCode":"Y", + "StateName":"Västernorrlandslän" + }, + { + "CountryCode":"SE", + "StateCode":"Z", + "StateName":"Jämtlandslän" + } +] \ No newline at end of file From 21ba03e3856151b08fcd2d6167f969d53ff66285 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 01:05:59 +0000 Subject: [PATCH 098/386] add counties json --- .../template-common/checkout1/state/ad.json | 37 ++++ .../template-common/checkout1/state/ae.json | 37 ++++ .../template-common/checkout1/state/al.json | 182 ++++++++++++++++++ .../template-common/checkout1/state/am.json | 57 ++++++ .../template-common/checkout1/state/ao.json | 92 +++++++++ .../template-common/checkout1/state/ar.json | 122 ++++++++++++ 6 files changed, 527 insertions(+) create mode 100644 public/template-common/checkout1/state/ad.json create mode 100644 public/template-common/checkout1/state/ae.json create mode 100644 public/template-common/checkout1/state/al.json create mode 100644 public/template-common/checkout1/state/am.json create mode 100644 public/template-common/checkout1/state/ao.json create mode 100644 public/template-common/checkout1/state/ar.json diff --git a/public/template-common/checkout1/state/ad.json b/public/template-common/checkout1/state/ad.json new file mode 100644 index 000000000..1b89ecdc8 --- /dev/null +++ b/public/template-common/checkout1/state/ad.json @@ -0,0 +1,37 @@ +[ + { + "CountryCode":"AD", + "StateCode":"02", + "StateName":"Canillo" + }, + { + "CountryCode":"AD", + "StateCode":"03", + "StateName":"Encamp" + }, + { + "CountryCode":"AD", + "StateCode":"04", + "StateName":"La Massana" + }, + { + "CountryCode":"AD", + "StateCode":"05", + "StateName":"Ordino" + }, + { + "CountryCode":"AD", + "StateCode":"06", + "StateName":"Sant Julia de Loria" + }, + { + "CountryCode":"AD", + "StateCode":"07", + "StateName":"Andorrala Vella" + }, + { + "CountryCode":"AD", + "StateCode":"08", + "StateName":"Escaldes-Engordany" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ae.json b/public/template-common/checkout1/state/ae.json new file mode 100644 index 000000000..a15ab1f09 --- /dev/null +++ b/public/template-common/checkout1/state/ae.json @@ -0,0 +1,37 @@ +[ + { + "CountryCode":"AE", + "StateCode":"AJ", + "StateName":"Ajman" + }, + { + "CountryCode":"AE", + "StateCode":"AZ", + "StateName":"Abu Z¸aby" + }, + { + "CountryCode":"AE", + "StateCode":"DU", + "StateName":"Dubai" + }, + { + "CountryCode":"AE", + "StateCode":"FU", + "StateName":"Al Fujayrah" + }, + { + "CountryCode":"AE", + "StateCode":"RK", + "StateName":"Ra'sal Khaymah" + }, + { + "CountryCode":"AE", + "StateCode":"SH", + "StateName":"Ash Sha" + }, + { + "CountryCode":"AE", + "StateCode":"UQ", + "StateName":"Ummal Qaywayn" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/al.json b/public/template-common/checkout1/state/al.json new file mode 100644 index 000000000..f25f3871f --- /dev/null +++ b/public/template-common/checkout1/state/al.json @@ -0,0 +1,182 @@ +[ + { + "CountryCode":"AL", + "StateCode":"BR", + "StateName":"Berat" + }, + { + "CountryCode":"AL", + "StateCode":"BU", + "StateName":"Bulqiz ë" + }, + { + "CountryCode":"AL", + "StateCode":"DI", + "StateName":"Dib ër" + }, + { + "CountryCode":"AL", + "StateCode":"DL", + "StateName":"Delvin ë" + }, + { + "CountryCode":"AL", + "StateCode":"DR", + "StateName":"Durr ës" + }, + { + "CountryCode":"AL", + "StateCode":"DV", + "StateName":"Devoll" + }, + { + "CountryCode":"AL", + "StateCode":"EL", + "StateName":"Elbasan" + }, + { + "CountryCode":"AL", + "StateCode":"ER", + "StateName":"Kolonj ë" + }, + { + "CountryCode":"AL", + "StateCode":"FR", + "StateName":"Fier" + }, + { + "CountryCode":"AL", + "StateCode":"GJ", + "StateName":"Gjirokast ër" + }, + { + "CountryCode":"AL", + "StateCode":"GR", + "StateName":"Gramsh" + }, + { + "CountryCode":"AL", + "StateCode":"HA", + "StateName":"Has" + }, + { + "CountryCode":"AL", + "StateCode":"KA", + "StateName":"Kavaj ë" + }, + { + "CountryCode":"AL", + "StateCode":"KB", + "StateName":"Kurbin" + }, + { + "CountryCode":"AL", + "StateCode":"KC", + "StateName":"Kuçov ë" + }, + { + "CountryCode":"AL", + "StateCode":"KO", + "StateName":"Kor çë" + }, + { + "CountryCode":"AL", + "StateCode":"KR", + "StateName":"Kruj ë" + }, + { + "CountryCode":"AL", + "StateCode":"KU", + "StateName":"Kuk ës" + }, + { + "CountryCode":"AL", + "StateCode":"LB", + "StateName":"Librazhd" + }, + { + "CountryCode":"AL", + "StateCode":"LE", + "StateName":"Lezh ë" + }, + { + "CountryCode":"AL", + "StateCode":"LU", + "StateName":"Lushnj ë" + }, + { + "CountryCode":"AL", + "StateCode":"MK", + "StateName":"Mallakast ër" + }, + { + "CountryCode":"AL", + "StateCode":"MM", + "StateName":"Mal ësie Madhe" + }, + { + "CountryCode":"AL", + "StateCode":"MR", + "StateName":"Mirdit ë" + }, + { + "CountryCode":"AL", + "StateCode":"MT", + "StateName":"Mat" + }, + { + "CountryCode":"AL", + "StateCode":"PG", + "StateName":"Pogradec" + }, + { + "CountryCode":"AL", + "StateCode":"PQ", + "StateName":"Peqin" + }, + { + "CountryCode":"AL", + "StateCode":"PR", + "StateName":"P ërmet" + }, + { + "CountryCode":"AL", + "StateCode":"PU", + "StateName":"Puk ë" + }, + { + "CountryCode":"AL", + "StateCode":"SH", + "StateName":"Shkod ër" + }, + { + "CountryCode":"AL", + "StateCode":"SK", + "StateName":"Skrapar" + }, + { + "CountryCode":"AL", + "StateCode":"SR", + "StateName":"Sarand ë" + }, + { + "CountryCode":"AL", + "StateCode":"TE", + "StateName":"Tepelen ë" + }, + { + "CountryCode":"AL", + "StateCode":"TP", + "StateName":"Tropoj ë" + }, + { + "CountryCode":"AL", + "StateCode":"TR", + "StateName":"Tiran ë" + }, + { + "CountryCode":"AL", + "StateCode":"VL", + "StateName":"Vlor ë" + } + ] \ No newline at end of file diff --git a/public/template-common/checkout1/state/am.json b/public/template-common/checkout1/state/am.json new file mode 100644 index 000000000..014f53fa1 --- /dev/null +++ b/public/template-common/checkout1/state/am.json @@ -0,0 +1,57 @@ +[ + { + "CountryCode":"AM", + "StateCode":"AG", + "StateName":"Aragatsotn" + }, + { + "CountryCode":"AM", + "StateCode":"AR", + "StateName":"Ararat" + }, + { + "CountryCode":"AM", + "StateCode":"AV", + "StateName":"Armavir" + }, + { + "CountryCode":"AM", + "StateCode":"ER", + "StateName":"Erevan" + }, + { + "CountryCode":"AM", + "StateCode":"GR", + "StateName":"Gegharkunik" + }, + { + "CountryCode":"AM", + "StateCode":"KT", + "StateName":"Kotayk" + }, + { + "CountryCode":"AM", + "StateCode":"LO", + "StateName":"Lori" + }, + { + "CountryCode":"AM", + "StateCode":"SH", + "StateName":"Shirak" + }, + { + "CountryCode":"AM", + "StateCode":"SU", + "StateName":"Syunik" + }, + { + "CountryCode":"AM", + "StateCode":"TV", + "StateName":"Tavush" + }, + { + "CountryCode":"AM", + "StateCode":"VD", + "StateName":"Vayots Dzor" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ao.json b/public/template-common/checkout1/state/ao.json new file mode 100644 index 000000000..f351ad55e --- /dev/null +++ b/public/template-common/checkout1/state/ao.json @@ -0,0 +1,92 @@ +[ + { + "CountryCode":"AO", + "StateCode":"BGO", + "StateName":"Bengo" + }, + { + "CountryCode":"AO", + "StateCode":"BGU", + "StateName":"Benguela" + }, + { + "CountryCode":"AO", + "StateCode":"BIE", + "StateName":"Bi é" + }, + { + "CountryCode":"AO", + "StateCode":"CAB", + "StateName":"Cabinda" + }, + { + "CountryCode":"AO", + "StateCode":"CCU", + "StateName":"Cuando-Cubango" + }, + { + "CountryCode":"AO", + "StateCode":"CNN", + "StateName":"Cunene" + }, + { + "CountryCode":"AO", + "StateCode":"CNO", + "StateName":"Cuanza Norte" + }, + { + "CountryCode":"AO", + "StateCode":"CUS", + "StateName":"Cuanza Sul" + }, + { + "CountryCode":"AO", + "StateCode":"HUA", + "StateName":"Huambo" + }, + { + "CountryCode":"AO", + "StateCode":"HUI", + "StateName":"Hu íla" + }, + { + "CountryCode":"AO", + "StateCode":"LNO", + "StateName":"Lunda Norte" + }, + { + "CountryCode":"AO", + "StateCode":"LSU", + "StateName":"Lunda Sul" + }, + { + "CountryCode":"AO", + "StateCode":"LUA", + "StateName":"Luanda" + }, + { + "CountryCode":"AO", + "StateCode":"MAL", + "StateName":"Malange" + }, + { + "CountryCode":"AO", + "StateCode":"MOX", + "StateName":"Moxico" + }, + { + "CountryCode":"AO", + "StateCode":"NAM", + "StateName":"Namibe" + }, + { + "CountryCode":"AO", + "StateCode":"UIG", + "StateName":"U íge" + }, + { + "CountryCode":"AO", + "StateCode":"ZAI", + "StateName":"Zaire" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ar.json b/public/template-common/checkout1/state/ar.json new file mode 100644 index 000000000..12408f6fb --- /dev/null +++ b/public/template-common/checkout1/state/ar.json @@ -0,0 +1,122 @@ +[ + { + "CountryCode":"AR", + "StateCode":"A", + "StateName":"Salta" + }, + { + "CountryCode":"AR", + "StateCode":"B", + "StateName":"Buenos Aires" + }, + { + "CountryCode":"AR", + "StateCode":"C", + "StateName":"Ciudad Autónomade Buenos Aires" + }, + { + "CountryCode":"AR", + "StateCode":"D", + "StateName":"San Luis" + }, + { + "CountryCode":"AR", + "StateCode":"E", + "StateName":"Entre Ríos" + }, + { + "CountryCode":"AR", + "StateCode":"F", + "StateName":"La Rioja" + }, + { + "CountryCode":"AR", + "StateCode":"G", + "StateName":"Santiagodel Estero" + }, + { + "CountryCode":"AR", + "StateCode":"H", + "StateName":"Chaco" + }, + { + "CountryCode":"AR", + "StateCode":"J", + "StateName":"San Juan" + }, + { + "CountryCode":"AR", + "StateCode":"K", + "StateName":"Catamarca" + }, + { + "CountryCode":"AR", + "StateCode":"L", + "StateName":"La Pampa" + }, + { + "CountryCode":"AR", + "StateCode":"M", + "StateName":"Mendoza" + }, + { + "CountryCode":"AR", + "StateCode":"N", + "StateName":"Misiones" + }, + { + "CountryCode":"AR", + "StateCode":"P", + "StateName":"Formosa" + }, + { + "CountryCode":"AR", + "StateCode":"Q", + "StateName":"Neuquén" + }, + { + "CountryCode":"AR", + "StateCode":"R", + "StateName":"Río Negro" + }, + { + "CountryCode":"AR", + "StateCode":"S", + "StateName":"Santa Fe" + }, + { + "CountryCode":"AR", + "StateCode":"T", + "StateName":"Tucumán" + }, + { + "CountryCode":"AR", + "StateCode":"U", + "StateName":"Chubut" + }, + { + "CountryCode":"AR", + "StateCode":"V", + "StateName":"Tierradel Fuego" + }, + { + "CountryCode":"AR", + "StateCode":"W", + "StateName":"Corrientes" + }, + { + "CountryCode":"AR", + "StateCode":"X", + "StateName":"Córdoba" + }, + { + "CountryCode":"AR", + "StateCode":"Y", + "StateName":"Jujuy" + }, + { + "CountryCode":"AR", + "StateCode":"Z", + "StateName":"Santa Cruz" + } +] \ No newline at end of file From bf644e9267462a98bf82a2be8874c65021a3ed44 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 01:10:25 +0000 Subject: [PATCH 099/386] fix counties --- .../template-common/checkout1/state/be.json | 57 +++++++ .../template-common/checkout1/state/bg.json | 142 ++++++++++++++++++ 2 files changed, 199 insertions(+) create mode 100644 public/template-common/checkout1/state/be.json create mode 100644 public/template-common/checkout1/state/bg.json diff --git a/public/template-common/checkout1/state/be.json b/public/template-common/checkout1/state/be.json new file mode 100644 index 000000000..d7adb5137 --- /dev/null +++ b/public/template-common/checkout1/state/be.json @@ -0,0 +1,57 @@ +[ + { + "CountryCode":"BE", + "StateCode":"BRU", + "StateName":"Brussels" + }, + { + "CountryCode":"BE", + "StateCode":"VAN", + "StateName":"Antwerpen" + }, + { + "CountryCode":"BE", + "StateCode":"VBR", + "StateName":"Vlaams Brabant" + }, + { + "CountryCode":"BE", + "StateCode":"VLI", + "StateName":"Limburg" + }, + { + "CountryCode":"BE", + "StateCode":"VOV", + "StateName":"Oost-Vlaanderen" + }, + { + "CountryCode":"BE", + "StateCode":"VWV", + "StateName":"West-Vlaanderen" + }, + { + "CountryCode":"BE", + "StateCode":"WBR", + "StateName":"Brabant Wallon" + }, + { + "CountryCode":"BE", + "StateCode":"WHT", + "StateName":"Hainaut" + }, + { + "CountryCode":"BE", + "StateCode":"WLG", + "StateName":"Liège" + }, + { + "CountryCode":"BE", + "StateCode":"WLX", + "StateName":"Luxembourg" + }, + { + "CountryCode":"BE", + "StateCode":"WNA", + "StateName":"Namur" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/bg.json b/public/template-common/checkout1/state/bg.json new file mode 100644 index 000000000..f86ce6770 --- /dev/null +++ b/public/template-common/checkout1/state/bg.json @@ -0,0 +1,142 @@ +[ + { + "CountryCode":"BG", + "StateCode":"01", + "StateName":"Blagoevgrad" + }, + { + "CountryCode":"BG", + "StateCode":"02", + "StateName":"Burgas" + }, + { + "CountryCode":"BG", + "StateCode":"03", + "StateName":"Varna" + }, + { + "CountryCode":"BG", + "StateCode":"04", + "StateName":"Veliko Tarnovo" + }, + { + "CountryCode":"BG", + "StateCode":"05", + "StateName":"Vidin" + }, + { + "CountryCode":"BG", + "StateCode":"06", + "StateName":"Vratsa" + }, + { + "CountryCode":"BG", + "StateCode":"07", + "StateName":"Gabrovo" + }, + { + "CountryCode":"BG", + "StateCode":"08", + "StateName":"Dobrich" + }, + { + "CountryCode":"BG", + "StateCode":"09", + "StateName":"Kardzhali" + }, + { + "CountryCode":"BG", + "StateCode":"10", + "StateName":"Kjustendil" + }, + { + "CountryCode":"BG", + "StateCode":"11", + "StateName":"Lovech" + }, + { + "CountryCode":"BG", + "StateCode":"12", + "StateName":"Montana" + }, + { + "CountryCode":"BG", + "StateCode":"13", + "StateName":"Pazardzhik" + }, + { + "CountryCode":"BG", + "StateCode":"14", + "StateName":"Pernik" + }, + { + "CountryCode":"BG", + "StateCode":"15", + "StateName":"Pleven" + }, + { + "CountryCode":"BG", + "StateCode":"16", + "StateName":"Plovdiv" + }, + { + "CountryCode":"BG", + "StateCode":"17", + "StateName":"Razgrad" + }, + { + "CountryCode":"BG", + "StateCode":"18", + "StateName":"Ruse" + }, + { + "CountryCode":"BG", + "StateCode":"19", + "StateName":"Silistra" + }, + { + "CountryCode":"BG", + "StateCode":"20", + "StateName":"Sliven" + }, + { + "CountryCode":"BG", + "StateCode":"21", + "StateName":"Smolyan" + }, + { + "CountryCode":"BG", + "StateCode":"22", + "StateName":"Sofia-Grad" + }, + { + "CountryCode":"BG", + "StateCode":"23", + "StateName":"Sofia" + }, + { + "CountryCode":"BG", + "StateCode":"24", + "StateName":"Stara Zagora" + }, + { + "CountryCode":"BG", + "StateCode":"25", + "StateName":"Targovishte" + }, + { + "CountryCode":"BG", + "StateCode":"26", + "StateName":"Haskovo" + }, + { + "CountryCode":"BG", + "StateCode":"27", + "StateName":"Shumen" + }, + { + "CountryCode":"BG", + "StateCode":"28", + "StateName":"Yambol" + } +] \ No newline at end of file From 43916b4dbdf50ed954227b4517366ce4f6212f99 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 01:16:34 +0000 Subject: [PATCH 100/386] fix counties --- .../template-common/checkout1/state/bh.json | 27 ++++++ .../template-common/checkout1/state/bi.json | 87 +++++++++++++++++ .../template-common/checkout1/state/cf.json | 87 +++++++++++++++++ .../template-common/checkout1/state/ci.json | 97 +++++++++++++++++++ 4 files changed, 298 insertions(+) create mode 100644 public/template-common/checkout1/state/bh.json create mode 100644 public/template-common/checkout1/state/bi.json create mode 100644 public/template-common/checkout1/state/cf.json create mode 100644 public/template-common/checkout1/state/ci.json diff --git a/public/template-common/checkout1/state/bh.json b/public/template-common/checkout1/state/bh.json new file mode 100644 index 000000000..78d4192ca --- /dev/null +++ b/public/template-common/checkout1/state/bh.json @@ -0,0 +1,27 @@ +[ + { + "CountryCode":"BH", + "StateCode":"13", + "StateName":"Al Manamah(Al Asimah)" + }, + { + "CountryCode":"BH", + "StateCode":"14", + "StateName":"Al Janubiyah" + }, + { + "CountryCode":"BH", + "StateCode":"15", + "StateName":"Al Muharraq" + }, + { + "CountryCode":"BH", + "StateCode":"16", + "StateName":"Al Wustá" + }, + { + "CountryCode":"BH", + "StateCode":"17", + "StateName":"Ash Shamaliyah" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/bi.json b/public/template-common/checkout1/state/bi.json new file mode 100644 index 000000000..d6f368ba3 --- /dev/null +++ b/public/template-common/checkout1/state/bi.json @@ -0,0 +1,87 @@ +[ + { + "CountryCode":"BI", + "StateCode":"BB", + "StateName":"Bubanza" + }, + { + "CountryCode":"BI", + "StateCode":"BL", + "StateName":"Bujumbura Rural" + }, + { + "CountryCode":"BI", + "StateCode":"BM", + "StateName":"Bujumbura Mairie" + }, + { + "CountryCode":"BI", + "StateCode":"BR", + "StateName":"Bururi" + }, + { + "CountryCode":"BI", + "StateCode":"CA", + "StateName":"Cankuzo" + }, + { + "CountryCode":"BI", + "StateCode":"CI", + "StateName":"Cibitoke" + }, + { + "CountryCode":"BI", + "StateCode":"GI", + "StateName":"Gitega" + }, + { + "CountryCode":"BI", + "StateCode":"KI", + "StateName":"Kirundo" + }, + { + "CountryCode":"BI", + "StateCode":"KR", + "StateName":"Karuzi" + }, + { + "CountryCode":"BI", + "StateCode":"KY", + "StateName":"Kayanza" + }, + { + "CountryCode":"BI", + "StateCode":"MA", + "StateName":"Makamba" + }, + { + "CountryCode":"BI", + "StateCode":"MU", + "StateName":"Muramvya" + }, + { + "CountryCode":"BI", + "StateCode":"MW", + "StateName":"Mwaro" + }, + { + "CountryCode":"BI", + "StateCode":"MY", + "StateName":"Muyinga" + }, + { + "CountryCode":"BI", + "StateCode":"NG", + "StateName":"Ngozi" + }, + { + "CountryCode":"BI", + "StateCode":"RT", + "StateName":"Rutana" + }, + { + "CountryCode":"BI", + "StateCode":"RY", + "StateName":"Ruyigi" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/cf.json b/public/template-common/checkout1/state/cf.json new file mode 100644 index 000000000..b0e9686f6 --- /dev/null +++ b/public/template-common/checkout1/state/cf.json @@ -0,0 +1,87 @@ +[ + { + "CountryCode":"CF", + "StateCode":"AC", + "StateName":"Ouham" + }, + { + "CountryCode":"CF", + "StateCode":"BB", + "StateName":"Bamingui-Bangoran" + }, + { + "CountryCode":"CF", + "StateCode":"BGF", + "StateName":"Bangui" + }, + { + "CountryCode":"CF", + "StateCode":"BK", + "StateName":"Basse-Kotto" + }, + { + "CountryCode":"CF", + "StateCode":"HK", + "StateName":"Haute-Kotto" + }, + { + "CountryCode":"CF", + "StateCode":"HM", + "StateName":"Haut-Mbomou" + }, + { + "CountryCode":"CF", + "StateCode":"HS", + "StateName":"Haute-Sangha \/ Mambéré-Kadéï" + }, + { + "CountryCode":"CF", + "StateCode":"KB", + "StateName":"Gribingui" + }, + { + "CountryCode":"CF", + "StateCode":"KG", + "StateName":"Kémo-Gribingui" + }, + { + "CountryCode":"CF", + "StateCode":"LB", + "StateName":"Lobaye" + }, + { + "CountryCode":"CF", + "StateCode":"MB", + "StateName":"Mbomou" + }, + { + "CountryCode":"CF", + "StateCode":"MP", + "StateName":"Ombella-Mpoko" + }, + { + "CountryCode":"CF", + "StateCode":"NM", + "StateName":"Nana-Mambéré" + }, + { + "CountryCode":"CF", + "StateCode":"OP", + "StateName":"Ouham-Pendé" + }, + { + "CountryCode":"CF", + "StateCode":"SE", + "StateName":"Sangha" + }, + { + "CountryCode":"CF", + "StateCode":"UK", + "StateName":"Ouaka" + }, + { + "CountryCode":"CF", + "StateCode":"VK", + "StateName":"Vakaga" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ci.json b/public/template-common/checkout1/state/ci.json new file mode 100644 index 000000000..84c4c958f --- /dev/null +++ b/public/template-common/checkout1/state/ci.json @@ -0,0 +1,97 @@ +[ + { + "CountryCode":"CI", + "StateCode":"01", + "StateName":"Lagunes" + }, + { + "CountryCode":"CI", + "StateCode":"02", + "StateName":"Haut-Sassandra" + }, + { + "CountryCode":"CI", + "StateCode":"03", + "StateName":"Savanes" + }, + { + "CountryCode":"CI", + "StateCode":"04", + "StateName":"Valléedu Bandama" + }, + { + "CountryCode":"CI", + "StateCode":"05", + "StateName":"Moyen-Comoé" + }, + { + "CountryCode":"CI", + "StateCode":"06", + "StateName":"18 Montagnes" + }, + { + "CountryCode":"CI", + "StateCode":"07", + "StateName":"Lacs" + }, + { + "CountryCode":"CI", + "StateCode":"08", + "StateName":"Zanzan" + }, + { + "CountryCode":"CI", + "StateCode":"09", + "StateName":"Bas-Sassandra" + }, + { + "CountryCode":"CI", + "StateCode":"10", + "StateName":"Denguélé" + }, + { + "CountryCode":"CI", + "StateCode":"11", + "StateName":"Nzi-Comoé" + }, + { + "CountryCode":"CI", + "StateCode":"12", + "StateName":"Marahoué" + }, + { + "CountryCode":"CI", + "StateCode":"13", + "StateName":"Sud-Comoé" + }, + { + "CountryCode":"CI", + "StateCode":"14", + "StateName":"Worodougou" + }, + { + "CountryCode":"CI", + "StateCode":"15", + "StateName":"Sud-Bandama" + }, + { + "CountryCode":"CI", + "StateCode":"16", + "StateName":"Agnébi" + }, + { + "CountryCode":"CI", + "StateCode":"17", + "StateName":"Bafing" + }, + { + "CountryCode":"CI", + "StateCode":"18", + "StateName":"Fromager" + }, + { + "CountryCode":"CI", + "StateCode":"19", + "StateName":"Moyen-Cavally" + } +] \ No newline at end of file From cd5bc91dab53b57ea3323bd0f79b2a4334884977 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 01:19:53 +0000 Subject: [PATCH 101/386] fix counties --- .../template-common/checkout1/state/cl.json | 77 +++++++++++++++++++ .../template-common/checkout1/state/cm.json | 52 +++++++++++++ 2 files changed, 129 insertions(+) create mode 100644 public/template-common/checkout1/state/cl.json create mode 100644 public/template-common/checkout1/state/cm.json diff --git a/public/template-common/checkout1/state/cl.json b/public/template-common/checkout1/state/cl.json new file mode 100644 index 000000000..ade80bae5 --- /dev/null +++ b/public/template-common/checkout1/state/cl.json @@ -0,0 +1,77 @@ +[ + { + "CountryCode":"CL", + "StateCode":"AI", + "StateName":"Aiséndel General Carlos Ibáñezdel Campo" + }, + { + "CountryCode":"CL", + "StateCode":"AN", + "StateName":"Antofagasta" + }, + { + "CountryCode":"CL", + "StateCode":"AP", + "StateName":"Aricay Parinacota" + }, + { + "CountryCode":"CL", + "StateCode":"AR", + "StateName":"Araucanía" + }, + { + "CountryCode":"CL", + "StateCode":"AT", + "StateName":"Atacama" + }, + { + "CountryCode":"CL", + "StateCode":"BI", + "StateName":"Bío-Bío" + }, + { + "CountryCode":"CL", + "StateCode":"CO", + "StateName":"Coquimbo" + }, + { + "CountryCode":"CL", + "StateCode":"LI", + "StateName":"Libertador General Bernardo O'Higgins" + }, + { + "CountryCode":"CL", + "StateCode":"LL", + "StateName":"Los Lagos" + }, + { + "CountryCode":"CL", + "StateCode":"LR", + "StateName":"Los Ríos" + }, + { + "CountryCode":"CL", + "StateCode":"MA", + "StateName":"Magallanes" + }, + { + "CountryCode":"CL", + "StateCode":"ML", + "StateName":"Maule" + }, + { + "CountryCode":"CL", + "StateCode":"RM", + "StateName":"Región Metropolitanade Santiago" + }, + { + "CountryCode":"CL", + "StateCode":"TA", + "StateName":"Tarapacá" + }, + { + "CountryCode":"CL", + "StateCode":"VS", + "StateName":"Valparaíso" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/cm.json b/public/template-common/checkout1/state/cm.json new file mode 100644 index 000000000..fd1da73e3 --- /dev/null +++ b/public/template-common/checkout1/state/cm.json @@ -0,0 +1,52 @@ +[ + { + "CountryCode":"CM", + "StateCode":"AD", + "StateName":"Adamaoua" + }, + { + "CountryCode":"CM", + "StateCode":"CE", + "StateName":"Centre" + }, + { + "CountryCode":"CM", + "StateCode":"EN", + "StateName":"Far North" + }, + { + "CountryCode":"CM", + "StateCode":"ES", + "StateName":"East" + }, + { + "CountryCode":"CM", + "StateCode":"LT", + "StateName":"Littoral" + }, + { + "CountryCode":"CM", + "StateCode":"NO", + "StateName":"North" + }, + { + "CountryCode":"CM", + "StateCode":"NW", + "StateName":"North-West" + }, + { + "CountryCode":"CM", + "StateCode":"OU", + "StateName":"West" + }, + { + "CountryCode":"CM", + "StateCode":"SU", + "StateName":"South" + }, + { + "CountryCode":"CM", + "StateCode":"SW", + "StateName":"South-West" + } +] \ No newline at end of file From ad57ea7dc534d3391fc6d25857aae6a72c54d08c Mon Sep 17 00:00:00 2001 From: xxl4 Date: Sat, 17 Feb 2024 10:08:21 +0800 Subject: [PATCH 102/386] fix add countries --- .../template-common/checkout1/state/co.json | 167 ++ .../checkout1/state/countries.json | 1248 +++++++++++++- .../template-common/checkout1/state/cy.json | 32 + .../template-common/checkout1/state/cz.json | 72 + .../template-common/checkout1/state/dk.json | 107 ++ .../template-common/checkout1/state/ee.json | 77 + .../template-common/checkout1/state/et.json | 57 + .../template-common/checkout1/state/fi.json | 32 + .../template-common/checkout1/state/gb.json | 1457 +++++++++++++++++ .../template-common/checkout1/state/gh.json | 52 + .../template-common/checkout1/state/gn.json | 172 ++ .../template-common/checkout1/state/gq.json | 47 + .../template-common/checkout1/state/hr.json | 107 ++ .../template-common/checkout1/state/hu.json | 217 +++ .../template-common/checkout1/state/id.json | 167 ++ .../template-common/checkout1/state/il.json | 32 + .../template-common/checkout1/state/in.json | 177 ++ .../template-common/checkout1/state/is.json | 47 + .../template-common/checkout1/state/ke.json | 42 + .../template-common/checkout1/state/kh.json | 122 ++ .../template-common/checkout1/state/km.json | 17 + .../template-common/checkout1/state/kw.json | 32 + .../template-common/checkout1/state/lb.json | 32 + .../template-common/checkout1/state/li.json | 57 + .../template-common/checkout1/state/lu.json | 17 + .../template-common/checkout1/state/ma.json | 237 +++ .../template-common/checkout1/state/mg.json | 32 + .../template-common/checkout1/state/mh.json | 122 ++ .../template-common/checkout1/state/mu.json | 87 + .../template-common/checkout1/state/mv.json | 107 ++ .../template-common/checkout1/state/mw.json | 157 ++ .../template-common/checkout1/state/my.json | 82 + .../template-common/checkout1/state/mz.json | 57 + .../template-common/checkout1/state/na.json | 67 + .../template-common/checkout1/state/ng.json | 187 +++ .../template-common/checkout1/state/nl.json | 62 + .../template-common/checkout1/state/no.json | 107 ++ .../template-common/checkout1/state/ph.json | 492 ++++++ .../template-common/checkout1/state/pl.json | 82 + .../template-common/checkout1/state/pt.json | 102 ++ .../template-common/checkout1/state/pw.json | 82 + .../template-common/checkout1/state/py.json | 92 ++ .../template-common/checkout1/state/qa.json | 52 + .../template-common/checkout1/state/ro.json | 212 +++ .../template-common/checkout1/state/rw.json | 27 + .../template-common/checkout1/state/sh.json | 17 + .../template-common/checkout1/state/tg.json | 27 + .../template-common/checkout1/state/th.json | 387 +++++ .../template-common/checkout1/state/tj.json | 17 + .../template-common/checkout1/state/tr.json | 407 +++++ .../template-common/checkout1/state/tz.json | 132 ++ .../template-common/checkout1/state/ua.json | 137 ++ .../template-common/checkout1/state/ug.json | 402 +++++ .../template-common/checkout1/state/uy.json | 82 + .../template-common/checkout1/state/vn.json | 322 ++++ .../template-common/checkout1/state/za.json | 47 + 56 files changed, 8960 insertions(+), 48 deletions(-) create mode 100644 public/template-common/checkout1/state/co.json create mode 100644 public/template-common/checkout1/state/cy.json create mode 100644 public/template-common/checkout1/state/cz.json create mode 100644 public/template-common/checkout1/state/dk.json create mode 100644 public/template-common/checkout1/state/ee.json create mode 100644 public/template-common/checkout1/state/et.json create mode 100644 public/template-common/checkout1/state/fi.json create mode 100644 public/template-common/checkout1/state/gb.json create mode 100644 public/template-common/checkout1/state/gh.json create mode 100644 public/template-common/checkout1/state/gn.json create mode 100644 public/template-common/checkout1/state/gq.json create mode 100644 public/template-common/checkout1/state/hr.json create mode 100644 public/template-common/checkout1/state/hu.json create mode 100644 public/template-common/checkout1/state/id.json create mode 100644 public/template-common/checkout1/state/il.json create mode 100644 public/template-common/checkout1/state/in.json create mode 100644 public/template-common/checkout1/state/is.json create mode 100644 public/template-common/checkout1/state/ke.json create mode 100644 public/template-common/checkout1/state/kh.json create mode 100644 public/template-common/checkout1/state/km.json create mode 100644 public/template-common/checkout1/state/kw.json create mode 100644 public/template-common/checkout1/state/lb.json create mode 100644 public/template-common/checkout1/state/li.json create mode 100644 public/template-common/checkout1/state/lu.json create mode 100644 public/template-common/checkout1/state/ma.json create mode 100644 public/template-common/checkout1/state/mg.json create mode 100644 public/template-common/checkout1/state/mh.json create mode 100644 public/template-common/checkout1/state/mu.json create mode 100644 public/template-common/checkout1/state/mv.json create mode 100644 public/template-common/checkout1/state/mw.json create mode 100644 public/template-common/checkout1/state/my.json create mode 100644 public/template-common/checkout1/state/mz.json create mode 100644 public/template-common/checkout1/state/na.json create mode 100644 public/template-common/checkout1/state/ng.json create mode 100644 public/template-common/checkout1/state/nl.json create mode 100644 public/template-common/checkout1/state/no.json create mode 100644 public/template-common/checkout1/state/ph.json create mode 100644 public/template-common/checkout1/state/pl.json create mode 100644 public/template-common/checkout1/state/pt.json create mode 100644 public/template-common/checkout1/state/pw.json create mode 100644 public/template-common/checkout1/state/py.json create mode 100644 public/template-common/checkout1/state/qa.json create mode 100644 public/template-common/checkout1/state/ro.json create mode 100644 public/template-common/checkout1/state/rw.json create mode 100644 public/template-common/checkout1/state/sh.json create mode 100644 public/template-common/checkout1/state/tg.json create mode 100644 public/template-common/checkout1/state/th.json create mode 100644 public/template-common/checkout1/state/tj.json create mode 100644 public/template-common/checkout1/state/tr.json create mode 100644 public/template-common/checkout1/state/tz.json create mode 100644 public/template-common/checkout1/state/ua.json create mode 100644 public/template-common/checkout1/state/ug.json create mode 100644 public/template-common/checkout1/state/uy.json create mode 100644 public/template-common/checkout1/state/vn.json create mode 100644 public/template-common/checkout1/state/za.json diff --git a/public/template-common/checkout1/state/co.json b/public/template-common/checkout1/state/co.json new file mode 100644 index 000000000..7b6d0a818 --- /dev/null +++ b/public/template-common/checkout1/state/co.json @@ -0,0 +1,167 @@ +[ + { + "CountryCode":"CO", + "StateCode":"AMA", + "StateName":"Amazonas" + }, + { + "CountryCode":"CO", + "StateCode":"ANT", + "StateName":"Antioquia" + }, + { + "CountryCode":"CO", + "StateCode":"ARA", + "StateName":"Arauca" + }, + { + "CountryCode":"CO", + "StateCode":"ATL", + "StateName":"Atlántico" + }, + { + "CountryCode":"CO", + "StateCode":"BOL", + "StateName":"Bolívar" + }, + { + "CountryCode":"CO", + "StateCode":"BOY", + "StateName":"Boyacá" + }, + { + "CountryCode":"CO", + "StateCode":"CAL", + "StateName":"Caldas" + }, + { + "CountryCode":"CO", + "StateCode":"CAQ", + "StateName":"Caquetá" + }, + { + "CountryCode":"CO", + "StateCode":"CAS", + "StateName":"Casanare" + }, + { + "CountryCode":"CO", + "StateCode":"CAU", + "StateName":"Cauca" + }, + { + "CountryCode":"CO", + "StateCode":"CES", + "StateName":"Cesar" + }, + { + "CountryCode":"CO", + "StateCode":"CHO", + "StateName":"Chocó" + }, + { + "CountryCode":"CO", + "StateCode":"COR", + "StateName":"Córdoba" + }, + { + "CountryCode":"CO", + "StateCode":"CUN", + "StateName":"Cundinamarca" + }, + { + "CountryCode":"CO", + "StateCode":"DC", + "StateName":"Distrito Capitalde Bogotá" + }, + { + "CountryCode":"CO", + "StateCode":"GUA", + "StateName":"Guainía" + }, + { + "CountryCode":"CO", + "StateCode":"GUV", + "StateName":"Guaviare" + }, + { + "CountryCode":"CO", + "StateCode":"HUI", + "StateName":"Huila" + }, + { + "CountryCode":"CO", + "StateCode":"LAG", + "StateName":"La Guajira" + }, + { + "CountryCode":"CO", + "StateCode":"MAG", + "StateName":"Magdalena" + }, + { + "CountryCode":"CO", + "StateCode":"MET", + "StateName":"Meta" + }, + { + "CountryCode":"CO", + "StateCode":"NAR", + "StateName":"Nariño" + }, + { + "CountryCode":"CO", + "StateCode":"NSA", + "StateName":"Nortede Santander" + }, + { + "CountryCode":"CO", + "StateCode":"PUT", + "StateName":"Putumayo" + }, + { + "CountryCode":"CO", + "StateCode":"QUI", + "StateName":"Quindío" + }, + { + "CountryCode":"CO", + "StateCode":"RIS", + "StateName":"Risaralda" + }, + { + "CountryCode":"CO", + "StateCode":"SAN", + "StateName":"Santander" + }, + { + "CountryCode":"CO", + "StateCode":"SAP", + "StateName":"San Andrés, Providenciay Santa Catalina" + }, + { + "CountryCode":"CO", + "StateCode":"SUC", + "StateName":"Sucre" + }, + { + "CountryCode":"CO", + "StateCode":"TOL", + "StateName":"Tolima" + }, + { + "CountryCode":"CO", + "StateCode":"VAC", + "StateName":"Valledel Cauca" + }, + { + "CountryCode":"CO", + "StateCode":"VAU", + "StateName":"Vaupés" + }, + { + "CountryCode":"CO", + "StateCode":"VID", + "StateName":"Vichada" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/countries.json b/public/template-common/checkout1/state/countries.json index a6a7d58f5..5a3b17277 100644 --- a/public/template-common/checkout1/state/countries.json +++ b/public/template-common/checkout1/state/countries.json @@ -1,4 +1,274 @@ [ + { + "countryName": "Andorra", + "countryNameLocalized": "Andorra", + "countryCode": "AD", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "AD\\d{3}" + }, + { + "countryName": "United Arab Emirates", + "countryNameLocalized": "United Arab Emirates", + "countryCode": "AE", + "currencyCode": "AED", + "currencyName": "United Arab Emirates Dirham", + "currencySign": "د.إ", + "region": "Asia", + "postalCodeRegex": null + }, + { + "countryName": "Anguilla", + "countryNameLocalized": "Anguilla", + "countryCode": "AI", + "currencyCode": "XCD", + "currencyName": "East Caribbean Dollar", + "currencySign": "EC$", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "Albania", + "countryNameLocalized": "Albania", + "countryCode": "AL", + "currencyCode": "ALL", + "currencyName": "Albanian Lek", + "currencySign": "ALL", + "region": "Europe", + "postalCodeRegex": null + }, + { + "countryName": "Armenia", + "countryNameLocalized": "Armenia", + "countryCode": "AM", + "currencyCode": "AMD", + "currencyName": "Armenian Dram", + "currencySign": "դր", + "region": "Asia", + "postalCodeRegex": "(37)?\\d{4}" + }, + { + "countryName": "Angola", + "countryNameLocalized": "Angola", + "countryCode": "AO", + "currencyCode": "AOA", + "currencyName": "Angolan Kwanza", + "currencySign": "Kz", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Argentina", + "countryNameLocalized": "Argentina", + "countryCode": "AR", + "currencyCode": "ARS", + "currencyName": "Argentine Peso", + "currencySign": "AR$", + "region": "Americas", + "postalCodeRegex": "([A-HJ-NP-Z])?\\d{4}([A-Z]{3})?" + }, + { + "countryName": "Austria", + "countryNameLocalized": "Austria", + "countryCode": "AT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Australia", + "countryNameLocalized": "Australia", + "countryCode": "AU", + "currencyCode": "AUD", + "currencyName": "Australian Dollar", + "currencySign": "AU$", + "region": "Oceania", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Aruba", + "countryNameLocalized": "Aruba", + "countryCode": "AW", + "currencyCode": "AWG", + "currencyName": "Aruban Florin", + "currencySign": "ƒ", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "Bosnia and Herzegovina", + "countryNameLocalized": "Bosnia and Herzegovina", + "countryCode": "BA", + "currencyCode": "BAM", + "currencyName": "Bosnia-Herzegovina Convertible Mark", + "currencySign": "KM", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Belgium", + "countryNameLocalized": "Belgium", + "countryCode": "BE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Bulgaria", + "countryNameLocalized": "Bulgaria", + "countryCode": "BG", + "currencyCode": "BGN", + "currencyName": "Bulgarian Lev", + "currencySign": "лв", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Bahrain", + "countryNameLocalized": "Bahrain", + "countryCode": "BH", + "currencyCode": "BHD", + "currencyName": "Bahraini Dinar", + "currencySign": "ب.د", + "region": "Asia", + "postalCodeRegex": "((1[0-2]|[2-9])\\d{2})?" + }, + { + "countryName": "Burundi", + "countryNameLocalized": "Burundi", + "countryCode": "BI", + "currencyCode": "BIF", + "currencyName": "Burundian Franc", + "currencySign": "FBu", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Brazil", + "countryNameLocalized": "Brazil", + "countryCode": "BR", + "currencyCode": "BRL", + "currencyName": "Brazilian Real", + "currencySign": "R$", + "region": "Americas", + "postalCodeRegex": "\\d{5}[\\-]?\\d{3}" + }, + { + "countryName": "Canada", + "countryNameLocalized": "Canada", + "countryCode": "CA", + "currencyCode": "CAD", + "currencyName": "Canada Dollar", + "currencySign": "CA$", + "region": "Americas", + "postalCodeRegex": "[ABCEGHJKLMNPRSTVXY]\\d[ABCEGHJ-NPRSTV-Z][ ]?\\d[ABCEGHJ-NPRSTV-Z]\\d" + }, + { + "countryName": "Central African Republic", + "countryNameLocalized": "Central African Republic", + "countryCode": "CF", + "currencyCode": "XAF", + "currencyName": "Central African CFA Franc ", + "currencySign": null, + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Switzerland", + "countryNameLocalized": "Switzerland", + "countryCode": "CH", + "currencyCode": "CHF", + "currencyName": "Swiss Franc", + "currencySign": "CHF", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Ivory Coast", + "countryNameLocalized": "Ivory Coast", + "countryCode": "CI", + "currencyCode": "XOF", + "currencyName": "CFA Franc", + "currencySign": null, + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Cook Islands", + "countryNameLocalized": "Cook Islands", + "countryCode": "CK", + "currencyCode": "NZD", + "currencyName": "New Zealand Dollar", + "currencySign": "NZ$", + "region": "Oceania", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Chile", + "countryNameLocalized": "Chile", + "countryCode": "CL", + "currencyCode": "CLP", + "currencyName": "Chilean Peso", + "currencySign": "CL$", + "region": "Americas", + "postalCodeRegex": "\\d{7}" + }, + { + "countryName": "Cameroon", + "countryNameLocalized": "Cameroon", + "countryCode": "CM", + "currencyCode": "XAF", + "currencyName": "Central African CFA Franc ", + "currencySign": null, + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Colombia", + "countryNameLocalized": "Colombia", + "countryCode": "CO", + "currencyCode": "COP", + "currencyName": "Colombian Peso", + "currencySign": "Col$", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "Curaçao", + "countryNameLocalized": "Curaçao", + "countryCode": "CW", + "currencyCode": "ANG", + "currencyName": "Netherlands Antillean Gulden", + "currencySign": "NAƒ", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "Cyprus", + "countryNameLocalized": "Cyprus", + "countryCode": "CY", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Czech Republic", + "countryNameLocalized": "Czech Republic", + "countryCode": "CZ", + "currencyCode": "CZK", + "currencyName": "Czech Koruna", + "currencySign": "Kč", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" + }, { "countryName": "Germany", "countryNameLocalized": "Germany", @@ -9,52 +279,934 @@ "region": "Europe", "postalCodeRegex": "\\d{5}" }, -{ - "countryName": "Switzerland", - "countryNameLocalized": "Switzerland", - "countryCode": "CH", - "currencyCode": "CHF", - "currencyName": "Swiss Franc", - "currencySign": "CHF", - "region": "Europe", - "postalCodeRegex": "\\d{4}" -}, -{ - "countryName": "Austria", - "countryNameLocalized": "Austria", - "countryCode": "AT", - "currencyCode": "EUR", - "currencyName": "European Euro", - "currencySign": "€", - "region": "Europe", - "postalCodeRegex": "\\d{4}" -}, - { - "countryName": "Sweden", - "countryNameLocalized": "Sweden", - "countryCode": "SE", - "currencyCode": "SEK", - "currencyName": "Swedish Krona", - "currencySign": "kr", - "region": "Europe", - "postalCodeRegex": "\\d{3}[ ]?\\d{2}" -}, { - "countryName": "Greece", - "countryNameLocalized": "Greece", - "countryCode": "GR", - "currencyCode": "EUR", - "currencyName": "European Euro", - "currencySign": "€", - "region": "Europe", - "postalCodeRegex": "\\d{3}[ ]?\\d{2}" -},{ - "countryName": "France", - "countryNameLocalized": "France", - "countryCode": "FR", - "currencyCode": "EUR", - "currencyName": "European Euro", - "currencySign": "€", - "region": "Europe", - "postalCodeRegex": "\\d{2}[ ]?\\d{3}" -} + { + "countryName": "Denmark", + "countryNameLocalized": "Denmark", + "countryCode": "DK", + "currencyCode": "DKK", + "currencyName": "Danish Krone", + "currencySign": "ø", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Estonia", + "countryNameLocalized": "Estonia", + "countryCode": "EE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Spain", + "countryNameLocalized": "Spain", + "countryCode": "ES", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Ethiopia", + "countryNameLocalized": "Ethiopia", + "countryCode": "ET", + "currencyCode": "ETB", + "currencyName": "Ethiopian Birr", + "currencySign": "Br", + "region": "Africa", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Finland", + "countryNameLocalized": "Finland", + "countryCode": "FI", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Faroe Islands", + "countryNameLocalized": "Faroe Islands", + "countryCode": "FO", + "currencyCode": "DKK", + "currencyName": "Danish Krone", + "currencySign": "ø", + "region": "Europe", + "postalCodeRegex": "\\d{3}" + }, + { + "countryName": "France", + "countryNameLocalized": "France", + "countryCode": "FR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{2}[ ]?\\d{3}" + }, + { + "countryName": "United Kingdom", + "countryNameLocalized": "United Kingdom", + "countryCode": "GB", + "currencyCode": "GBP", + "currencyName": "United Kingdom Pound Sterling", + "currencySign": "UK£", + "region": "Europe", + "postalCodeRegex": "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}" + }, + { + "countryName": "French Guiana", + "countryNameLocalized": "French Guiana", + "countryCode": "GF", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Americas", + "postalCodeRegex": "9[78]3\\d{2}" + }, + { + "countryName": "Ghana", + "countryNameLocalized": "Ghana", + "countryCode": "GH", + "currencyCode": "GHS", + "currencyName": "Ghanaian Cedi", + "currencySign": "GH₵", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Gibraltar", + "countryNameLocalized": "Gibraltar", + "countryCode": "GI", + "currencyCode": "GIP", + "currencyName": "Gibraltar Pound", + "currencySign": "GI£", + "region": "Europe", + "postalCodeRegex": null + }, + { + "countryName": "Guinea", + "countryNameLocalized": "Guinea", + "countryCode": "GN", + "currencyCode": "GNF", + "currencyName": "Guinean Franc", + "currencySign": "FG", + "region": "Africa", + "postalCodeRegex": "\\d{3}" + }, + { + "countryName": "Equatorial Guinea", + "countryNameLocalized": "Equatorial Guinea", + "countryCode": "GQ", + "currencyCode": "XAF", + "currencyName": "Central African CFA Franc ", + "currencySign": null, + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Greece", + "countryNameLocalized": "Greece", + "countryCode": "GR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" + }, + { + "countryName": "South Georgia", + "countryNameLocalized": "South Georgia", + "countryCode": "GS", + "currencyCode": "GBP", + "currencyName": "United Kingdom Pound Sterling", + "currencySign": "UK£", + "region": "Americas", + "postalCodeRegex": "SIQQ 1ZZ" + }, + { + "countryName": "Guam", + "countryNameLocalized": "Guam", + "countryCode": "GU", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Oceania", + "postalCodeRegex": "969[123]\\d([ \\-]\\d{4})?" + }, + { + "countryName": "Croatia", + "countryNameLocalized": "Croatia", + "countryCode": "HR", + "currencyCode": "HRK", + "currencyName": "Croatian Kuna", + "currencySign": "HRK", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Hungary", + "countryNameLocalized": "Hungary", + "countryCode": "HU", + "currencyCode": "HUF", + "currencyName": "Hungarian Forint", + "currencySign": "Ft", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Indonesia", + "countryNameLocalized": "Indonesia", + "countryCode": "ID", + "currencyCode": "IDR", + "currencyName": "Indonesian Rupiah", + "currencySign": "Rp", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Republic of Ireland", + "countryNameLocalized": "Republic of Ireland", + "countryCode": "IE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": null + }, + { + "countryName": "Israel", + "countryNameLocalized": "Israel", + "countryCode": "IL", + "currencyCode": "ILS", + "currencyName": "Israeli New Sheqel", + "currencySign": "₪", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "India", + "countryNameLocalized": "India", + "countryCode": "IN", + "currencyCode": "INR", + "currencyName": "Indian Rupee", + "currencySign": "IN₨", + "region": "Asia", + "postalCodeRegex": "\\d{6}" + }, + { + "countryName": "British Indian Ocean Territory", + "countryNameLocalized": "British Indian Ocean Territory", + "countryCode": "IO", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Africa", + "postalCodeRegex": "BBND 1ZZ" + }, + { + "countryName": "Iceland", + "countryNameLocalized": "Iceland", + "countryCode": "IS", + "currencyCode": "ISK", + "currencyName": "Icelandic Krona", + "currencySign": "ISK", + "region": "Europe", + "postalCodeRegex": "\\d{3}" + }, + { + "countryName": "Italy", + "countryNameLocalized": "Italy", + "countryCode": "IT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Jordan", + "countryNameLocalized": "Jordan", + "countryCode": "JO", + "currencyCode": "JOD", + "currencyName": "Jordanian Dinar", + "currencySign": "JD", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Japan", + "countryNameLocalized": "Japan", + "countryCode": "JP", + "currencyCode": "JPY", + "currencyName": "Japanese Yen", + "currencySign": "JP¥", + "region": "Asia", + "postalCodeRegex": "\\d{3}-\\d{4}" + }, + { + "countryName": "Kenya", + "countryNameLocalized": "Kenya", + "countryCode": "KE", + "currencyCode": "KES", + "currencyName": "Kenyan Shilling", + "currencySign": "KSh", + "region": "Africa", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Cambodia", + "countryNameLocalized": "Cambodia", + "countryCode": "KH", + "currencyCode": "KHR", + "currencyName": "Cambodian Riel", + "currencySign": "៛", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Comoros", + "countryNameLocalized": "Comoros", + "countryCode": "KM", + "currencyCode": "KMF", + "currencyName": "Comorian Franc", + "currencySign": "KMF", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Kuwait", + "countryNameLocalized": "Kuwait", + "countryCode": "KW", + "currencyCode": "KWD", + "currencyName": "Kuwaiti Dinar", + "currencySign": "د.ك", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Lebanon", + "countryNameLocalized": "Lebanon", + "countryCode": "LB", + "currencyCode": "LBP", + "currencyName": "Lebanese Pound", + "currencySign": "ل.ل", + "region": "Asia", + "postalCodeRegex": "(\\d{4}([ ]?\\d{4})?)?" + }, + { + "countryName": "Liechtenstein", + "countryNameLocalized": "Liechtenstein", + "countryCode": "LI", + "currencyCode": "CHF", + "currencyName": "Swiss Franc", + "currencySign": "CHF", + "region": "Europe", + "postalCodeRegex": "(948[5-9])|(949[0-7])" + }, + { + "countryName": "Sri Lanka", + "countryNameLocalized": "Sri Lanka", + "countryCode": "LK", + "currencyCode": "LKR", + "currencyName": "Sri Lankan Rupee", + "currencySign": "LK₨", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Lithuania", + "countryNameLocalized": "Lithuania", + "countryCode": "LT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Luxembourg", + "countryNameLocalized": "Luxembourg", + "countryCode": "LU", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Morocco", + "countryNameLocalized": "Morocco", + "countryCode": "MA", + "currencyCode": "MAD", + "currencyName": "Moroccan Dirham", + "currencySign": "د.م", + "region": "Africa", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Monaco", + "countryNameLocalized": "Monaco", + "countryCode": "MC", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "980\\d{2}" + }, + { + "countryName": "Moldova", + "countryNameLocalized": "Moldova", + "countryCode": "MD", + "currencyCode": "MDL", + "currencyName": "Moldovan Leu", + "currencySign": "MDL", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Montenegro", + "countryNameLocalized": "Montenegro", + "countryCode": "ME", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "8\\d{4}" + }, + { + "countryName": "Madagascar", + "countryNameLocalized": "Madagascar", + "countryCode": "MG", + "currencyCode": "MGA", + "currencyName": "Malagasy Ariary", + "currencySign": "MGA", + "region": "Africa", + "postalCodeRegex": "\\d{3}" + }, + { + "countryName": "Marshall Islands", + "countryNameLocalized": "Marshall Islands", + "countryCode": "MH", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Oceania", + "postalCodeRegex": "969[67]\\d([ \\-]\\d{4})?" + }, + { + "countryName": "Northern Mariana Islands", + "countryNameLocalized": "Northern Mariana Islands", + "countryCode": "MP", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Oceania", + "postalCodeRegex": "9695[012]([ \\-]\\d{4})?" + }, + { + "countryName": "Malta", + "countryNameLocalized": "Malta", + "countryCode": "MT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "[A-Z]{3}[ ]?\\d{2,4}" + }, + { + "countryName": "Mauritius", + "countryNameLocalized": "Mauritius", + "countryCode": "MU", + "currencyCode": "MUR", + "currencyName": "Mauritian Rupee", + "currencySign": "MU₨", + "region": "Africa", + "postalCodeRegex": "(\\d{3}[A-Z]{2}\\d{3})?" + }, + { + "countryName": "Maldives", + "countryNameLocalized": "Maldives", + "countryCode": "MV", + "currencyCode": "MVR", + "currencyName": "Maldives Rufiyaa", + "currencySign": "MRf", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Malawi", + "countryNameLocalized": "Malawi", + "countryCode": "MW", + "currencyCode": "MWK", + "currencyName": "Malawian Kwacha", + "currencySign": "MK", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Mexico", + "countryNameLocalized": "Mexico", + "countryCode": "MX", + "currencyCode": "MXN", + "currencyName": "Mexican Peso", + "currencySign": "Mex$", + "region": "Americas", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Malaysia", + "countryNameLocalized": "Malaysia", + "countryCode": "MY", + "currencyCode": "MYR", + "currencyName": "Malaysian Ringgit", + "currencySign": "RM", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Mozambique", + "countryNameLocalized": "Mozambique", + "countryCode": "MZ", + "currencyCode": "MZN", + "currencyName": "Mozambican Metical", + "currencySign": "MTn", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Namibia", + "countryNameLocalized": "Namibia", + "countryCode": "NA", + "currencyCode": "NAD", + "currencyName": "Namibian Dollar", + "currencySign": "N$", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Norfolk Island", + "countryNameLocalized": "Norfolk Island", + "countryCode": "NF", + "currencyCode": "AUD", + "currencyName": "Australian Dollar", + "currencySign": "AU$", + "region": "Oceania", + "postalCodeRegex": "2899" + }, + { + "countryName": "Nigeria", + "countryNameLocalized": "Nigeria", + "countryCode": "NG", + "currencyCode": "NGN", + "currencyName": "Nigerian Naira", + "currencySign": "₦", + "region": "Africa", + "postalCodeRegex": "(\\d{6})?" + }, + { + "countryName": "Netherlands", + "countryNameLocalized": "Netherlands", + "countryCode": "NL", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}[ ]?[A-Z]{2}" + }, + { + "countryName": "Norway", + "countryNameLocalized": "Norway", + "countryCode": "NO", + "currencyCode": "NOK", + "currencyName": "Norwegian Krone", + "currencySign": "øre", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "New Zealand", + "countryNameLocalized": "New Zealand", + "countryCode": "NZ", + "currencyCode": "NZD", + "currencyName": "New Zealand Dollar", + "currencySign": "NZ$", + "region": "Oceania", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Oman", + "countryNameLocalized": "Oman", + "countryCode": "OM", + "currencyCode": "OMR", + "currencyName": "Omani Rial", + "currencySign": "ر.ع", + "region": "Asia", + "postalCodeRegex": "(PC )?\\d{3}" + }, + { + "countryName": "Philippines", + "countryNameLocalized": "Philippines", + "countryCode": "PH", + "currencyCode": "PHP", + "currencyName": "Philippine Peso", + "currencySign": "₱", + "region": "Asia", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Poland", + "countryNameLocalized": "Poland", + "countryCode": "PL", + "currencyCode": "PLN", + "currencyName": "Polish Zloty", + "currencySign": "zł", + "region": "Europe", + "postalCodeRegex": "\\d{2}-\\d{3}" + }, + { + "countryName": "Pitcairn Islands", + "countryNameLocalized": "Pitcairn Islands", + "countryCode": "PN", + "currencyCode": "NZD", + "currencyName": "New Zealand Dollar", + "currencySign": "NZ$", + "region": "Oceania", + "postalCodeRegex": "PCRN 1ZZ" + }, + { + "countryName": "Puerto Rico", + "countryNameLocalized": "Puerto Rico", + "countryCode": "PR", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": "00[679]\\d{2}([ \\-]\\d{4})?" + }, + { + "countryName": "Portugal", + "countryNameLocalized": "Portugal", + "countryCode": "PT", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}([\\-]\\d{3})?" + }, + { + "countryName": "Palau", + "countryNameLocalized": "Palau", + "countryCode": "PW", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Oceania", + "postalCodeRegex": "96940" + }, + { + "countryName": "Paraguay", + "countryNameLocalized": "Paraguay", + "countryCode": "PY", + "currencyCode": "PYG", + "currencyName": "Paraguay Guarani", + "currencySign": "₲", + "region": "Americas", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Qatar", + "countryNameLocalized": "Qatar", + "countryCode": "QA", + "currencyCode": "QAR", + "currencyName": "Qatari Riyal", + "currencySign": "ر.ق", + "region": "Asia", + "postalCodeRegex": null + }, + { + "countryName": "Romania", + "countryNameLocalized": "Romania", + "countryCode": "RO", + "currencyCode": "RON", + "currencyName": "Romanian Leu", + "currencySign": "ROL", + "region": "Europe", + "postalCodeRegex": "\\d{6}" + }, + { + "countryName": "Serbia", + "countryNameLocalized": "Serbia", + "countryCode": "RS", + "currencyCode": "RSD", + "currencyName": "Serbian Dinar", + "currencySign": "дин", + "region": "Europe", + "postalCodeRegex": "\\d{6}" + }, + { + "countryName": "Rwanda", + "countryNameLocalized": "Rwanda", + "countryCode": "RW", + "currencyCode": "RWF", + "currencyName": "Rwandan Franc", + "currencySign": "RF", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Saudi Arabia", + "countryNameLocalized": "Saudi Arabia", + "countryCode": "SA", + "currencyCode": "SAR", + "currencyName": "Saudi Arabian Riyal", + "currencySign": "ر.س", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Solomon Islands", + "countryNameLocalized": "Solomon Islands", + "countryCode": "SB", + "currencyCode": "SBD", + "currencyName": "Solomon Islands dollar", + "currencySign": "SI$", + "region": "Oceania", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Sweden", + "countryNameLocalized": "Sweden", + "countryCode": "SE", + "currencyCode": "SEK", + "currencyName": "Swedish Krona", + "currencySign": "kr", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" + }, + { + "countryName": "Singapore", + "countryNameLocalized": "Singapore", + "countryCode": "SG", + "currencyCode": "SGD", + "currencyName": "Singapore Dollar", + "currencySign": "S$", + "region": "Asia", + "postalCodeRegex": "\\d{6}" + }, + { + "countryName": "Saint Helena", + "countryNameLocalized": "Saint Helena", + "countryCode": "SH", + "currencyCode": "SHP", + "currencyName": "St Helena Pound", + "currencySign": "SH£", + "region": "Africa", + "postalCodeRegex": "(ASCN|STHL) 1ZZ" + }, + { + "countryName": "Slovenia", + "countryNameLocalized": "Slovenia", + "countryCode": "SI", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Slovakia", + "countryNameLocalized": "Slovakia", + "countryCode": "SK", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{3}[ ]?\\d{2}" + }, + { + "countryName": "Turks and Caicos Islands", + "countryNameLocalized": "Turks and Caicos Islands", + "countryCode": "TC", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": "TKCA 1ZZ" + }, + { + "countryName": "Togo", + "countryNameLocalized": "Togo", + "countryCode": "TG", + "currencyCode": "XOF", + "currencyName": "CFA Franc", + "currencySign": null, + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Thailand", + "countryNameLocalized": "Thailand", + "countryCode": "TH", + "currencyCode": "THB", + "currencyName": "Thai Baht", + "currencySign": "฿", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Tajikistan", + "countryNameLocalized": "Tajikistan", + "countryCode": "TJ", + "currencyCode": "TJS", + "currencyName": "Tajikistan Somoni", + "currencySign": "TJS", + "region": "Asia", + "postalCodeRegex": "\\d{6}" + }, + { + "countryName": "East Timor", + "countryNameLocalized": "East Timor", + "countryCode": "TL", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Asia", + "postalCodeRegex": null + }, + { + "countryName": "Turkey", + "countryNameLocalized": "Turkey", + "countryCode": "TR", + "currencyCode": "TRY", + "currencyName": "Turkish New Lira", + "currencySign": "YTL", + "region": "Asia", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Tanzania", + "countryNameLocalized": "Tanzania", + "countryCode": "TZ", + "currencyCode": "TZS", + "currencyName": "Tanzanian Shilling", + "currencySign": "TSh", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "Ukraine", + "countryNameLocalized": "Ukraine", + "countryCode": "UA", + "currencyCode": "UAH", + "currencyName": "Ukrainian Hryvnia", + "currencySign": "₴", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Uganda", + "countryNameLocalized": "Uganda", + "countryCode": "UG", + "currencyCode": "UGX", + "currencyName": "Ugandan Shilling", + "currencySign": "USh", + "region": "Africa", + "postalCodeRegex": null + }, + { + "countryName": "United States Minor Outlying Islands", + "countryNameLocalized": "United States Minor Outlying Islands", + "countryCode": "UM", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "United States", + "countryNameLocalized": "United States", + "countryCode": "US", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": "\\d{5}([ \\-]\\d{4})?" + }, + { + "countryName": "Uruguay", + "countryNameLocalized": "Uruguay", + "countryCode": "UY", + "currencyCode": "UYU", + "currencyName": "Uruguayan peso", + "currencySign": "UR$", + "region": "Americas", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Holy See", + "countryNameLocalized": "Holy See", + "countryCode": "VA", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "British Virgin Islands", + "countryNameLocalized": "British Virgin Islands", + "countryCode": "VG", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "U.S. Virgin Islands", + "countryNameLocalized": "U.S. Virgin Islands", + "countryCode": "VI", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": null + }, + { + "countryName": "Vietnam", + "countryNameLocalized": "Vietnam", + "countryCode": "VN", + "currencyCode": "VND", + "currencyName": "Viet Nam Dong", + "currencySign": "₫", + "region": "Asia", + "postalCodeRegex": null + }, + { + "countryName": "Wallis and Futuna", + "countryNameLocalized": "Wallis and Futuna", + "countryCode": "WF", + "currencyCode": "XPF", + "currencyName": "French Pacific Franc", + "currencySign": "CFP", + "region": "Oceania", + "postalCodeRegex": "986\\d{2}" + }, + { + "countryName": "South Africa", + "countryNameLocalized": "South Africa", + "countryCode": "ZA", + "currencyCode": "ZAR", + "currencyName": "South African Rand", + "currencySign": "SAR", + "region": "Africa", + "postalCodeRegex": "\\d{4}" + } ] \ No newline at end of file diff --git a/public/template-common/checkout1/state/cy.json b/public/template-common/checkout1/state/cy.json new file mode 100644 index 000000000..93b6ee4c4 --- /dev/null +++ b/public/template-common/checkout1/state/cy.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"CY", + "StateCode":"01", + "StateName":"Lefkosia" + }, + { + "CountryCode":"CY", + "StateCode":"02", + "StateName":"Lemesos" + }, + { + "CountryCode":"CY", + "StateCode":"03", + "StateName":"Larnaka" + }, + { + "CountryCode":"CY", + "StateCode":"04", + "StateName":"Ammochostos" + }, + { + "CountryCode":"CY", + "StateCode":"05", + "StateName":"Pafos" + }, + { + "CountryCode":"CY", + "StateCode":"06", + "StateName":"Keryneia" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/cz.json b/public/template-common/checkout1/state/cz.json new file mode 100644 index 000000000..14181b658 --- /dev/null +++ b/public/template-common/checkout1/state/cz.json @@ -0,0 +1,72 @@ +[ + { + "CountryCode":"CZ", + "StateCode":"JC", + "StateName":"Jihoceskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"JM", + "StateName":"Jihomoravskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"KA", + "StateName":"Karlovarskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"KR", + "StateName":"Královéhradeckýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"LI", + "StateName":"Libereckýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"MO", + "StateName":"Moravskoslezskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"OL", + "StateName":"Olomouckýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"PA", + "StateName":"Pardubickýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"PL", + "StateName":"Plzenskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"PR", + "StateName":"Praha, Hlavnímesto" + }, + { + "CountryCode":"CZ", + "StateCode":"ST", + "StateName":"Stredoceskýkraj" + }, + { + "CountryCode":"CZ", + "StateCode":"US", + "StateName":"Ústecký kraj" + }, + { + "CountryCode":"CZ", + "StateCode":"VY", + "StateName":"Vysocina" + }, + { + "CountryCode":"CZ", + "StateCode":"ZL", + "StateName":"Zlínskýkraj" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/dk.json b/public/template-common/checkout1/state/dk.json new file mode 100644 index 000000000..25c365694 --- /dev/null +++ b/public/template-common/checkout1/state/dk.json @@ -0,0 +1,107 @@ +[ + { + "CountryCode":"DK", + "StateCode":"015", + "StateName":"København" + }, + { + "CountryCode":"DK", + "StateCode":"020", + "StateName":"Frederiksborg" + }, + { + "CountryCode":"DK", + "StateCode":"025", + "StateName":"Roskilde" + }, + { + "CountryCode":"DK", + "StateCode":"030", + "StateName":"Vestsjælland" + }, + { + "CountryCode":"DK", + "StateCode":"035", + "StateName":"Storstrøm" + }, + { + "CountryCode":"DK", + "StateCode":"040", + "StateName":"Bornholm" + }, + { + "CountryCode":"DK", + "StateCode":"042", + "StateName":"Fyn" + }, + { + "CountryCode":"DK", + "StateCode":"050", + "StateName":"Sønderjylland" + }, + { + "CountryCode":"DK", + "StateCode":"055", + "StateName":"Ribe" + }, + { + "CountryCode":"DK", + "StateCode":"060", + "StateName":"Vejle" + }, + { + "CountryCode":"DK", + "StateCode":"065", + "StateName":"Ringkøbing" + }, + { + "CountryCode":"DK", + "StateCode":"070", + "StateName":"Århus" + }, + { + "CountryCode":"DK", + "StateCode":"076", + "StateName":"Viborg" + }, + { + "CountryCode":"DK", + "StateCode":"080", + "StateName":"Nordjylland" + }, + { + "CountryCode":"DK", + "StateCode":"101", + "StateName":"Kobenhavn" + }, + { + "CountryCode":"DK", + "StateCode":"147", + "StateName":"Frederiksberg" + }, + { + "CountryCode":"DK", + "StateCode":"81", + "StateName":"North Jutland" + }, + { + "CountryCode":"DK", + "StateCode":"82", + "StateName":"Central Jutland" + }, + { + "CountryCode":"DK", + "StateCode":"83", + "StateName":"South Denmark" + }, + { + "CountryCode":"DK", + "StateCode":"84", + "StateName":"Capital" + }, + { + "CountryCode":"DK", + "StateCode":"85", + "StateName":"Zeeland" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ee.json b/public/template-common/checkout1/state/ee.json new file mode 100644 index 000000000..c71c3c559 --- /dev/null +++ b/public/template-common/checkout1/state/ee.json @@ -0,0 +1,77 @@ +[ + { + "CountryCode":"EE", + "StateCode":"37", + "StateName":"Harjumaa" + }, + { + "CountryCode":"EE", + "StateCode":"39", + "StateName":"Hiiumaa" + }, + { + "CountryCode":"EE", + "StateCode":"44", + "StateName":"Ida-Virumaa" + }, + { + "CountryCode":"EE", + "StateCode":"49", + "StateName":"Jõgevamaa" + }, + { + "CountryCode":"EE", + "StateCode":"51", + "StateName":"Järvamaa" + }, + { + "CountryCode":"EE", + "StateCode":"57", + "StateName":"Läänemaa" + }, + { + "CountryCode":"EE", + "StateCode":"59", + "StateName":"Lääne-Virumaa" + }, + { + "CountryCode":"EE", + "StateCode":"65", + "StateName":"Põlvamaa" + }, + { + "CountryCode":"EE", + "StateCode":"67", + "StateName":"Pärnumaa" + }, + { + "CountryCode":"EE", + "StateCode":"70", + "StateName":"Raplamaa" + }, + { + "CountryCode":"EE", + "StateCode":"74", + "StateName":"Saaremaa" + }, + { + "CountryCode":"EE", + "StateCode":"78", + "StateName":"Tartumaa" + }, + { + "CountryCode":"EE", + "StateCode":"82", + "StateName":"Valgamaa" + }, + { + "CountryCode":"EE", + "StateCode":"84", + "StateName":"Viljandimaa" + }, + { + "CountryCode":"EE", + "StateCode":"86", + "StateName":"Võrumaa" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/et.json b/public/template-common/checkout1/state/et.json new file mode 100644 index 000000000..76db70800 --- /dev/null +++ b/public/template-common/checkout1/state/et.json @@ -0,0 +1,57 @@ +[ + { + "CountryCode":"ET", + "StateCode":"AA", + "StateName":"Adis Abeba" + }, + { + "CountryCode":"ET", + "StateCode":"AF", + "StateName":"Afar" + }, + { + "CountryCode":"ET", + "StateCode":"AM", + "StateName":"Amara" + }, + { + "CountryCode":"ET", + "StateCode":"BE", + "StateName":"Binshangul Gumuz" + }, + { + "CountryCode":"ET", + "StateCode":"DD", + "StateName":"Dire Dawa" + }, + { + "CountryCode":"ET", + "StateCode":"GA", + "StateName":"Gambela Hizboch" + }, + { + "CountryCode":"ET", + "StateCode":"HA", + "StateName":"Hareri Hizb" + }, + { + "CountryCode":"ET", + "StateCode":"OR", + "StateName":"Oromiya" + }, + { + "CountryCode":"ET", + "StateCode":"SN", + "StateName":"Yeebub Biheroch Biheresebochna Hizboch" + }, + { + "CountryCode":"ET", + "StateCode":"SO", + "StateName":"Sumale" + }, + { + "CountryCode":"ET", + "StateCode":"TI", + "StateName":"Tigray" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/fi.json b/public/template-common/checkout1/state/fi.json new file mode 100644 index 000000000..d2ce8154c --- /dev/null +++ b/public/template-common/checkout1/state/fi.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"FI", + "StateCode":"AL", + "StateName":"Ahvenanmaanlääni" + }, + { + "CountryCode":"FI", + "StateCode":"ES", + "StateName":"Etelä-Suomenlääni" + }, + { + "CountryCode":"FI", + "StateCode":"IS", + "StateName":"Itä-Suomenlääni" + }, + { + "CountryCode":"FI", + "StateCode":"LL", + "StateName":"Lapinlääni" + }, + { + "CountryCode":"FI", + "StateCode":"LS", + "StateName":"Länsi-Suomenlääni" + }, + { + "CountryCode":"FI", + "StateCode":"OL", + "StateName":"Oulunlääni" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/gb.json b/public/template-common/checkout1/state/gb.json new file mode 100644 index 000000000..5b0643714 --- /dev/null +++ b/public/template-common/checkout1/state/gb.json @@ -0,0 +1,1457 @@ +[ + { + "CountryCode":"GB", + "StateCode":"ABD", + "StateName":"Aberdeenshire" + }, + { + "CountryCode":"GB", + "StateCode":"ABE", + "StateName":"Aberdeen City" + }, + { + "CountryCode":"GB", + "StateCode":"AGB", + "StateName":"Argylland Bute" + }, + { + "CountryCode":"GB", + "StateCode":"AGY", + "StateName":"Isleof Anglesey" + }, + { + "CountryCode":"GB", + "StateCode":"ANS", + "StateName":"Angus" + }, + { + "CountryCode":"GB", + "StateCode":"ANT", + "StateName":"Antrim" + }, + { + "CountryCode":"GB", + "StateCode":"ARD", + "StateName":"Ards" + }, + { + "CountryCode":"GB", + "StateCode":"ARL", + "StateName":"Argyll (Argyllshire)" + }, + { + "CountryCode":"GB", + "StateCode":"ARM", + "StateName":"Armagh" + }, + { + "CountryCode":"GB", + "StateCode":"AVN", + "StateName":"Avon" + }, + { + "CountryCode":"GB", + "StateCode":"AYR", + "StateName":"Ayrshire" + }, + { + "CountryCode":"GB", + "StateCode":"BAN", + "StateName":"Banffshire" + }, + { + "CountryCode":"GB", + "StateCode":"BAS", + "StateName":"Bathand North East Somerset" + }, + { + "CountryCode":"GB", + "StateCode":"BBD", + "StateName":"Blackburnwith Darwen" + }, + { + "CountryCode":"GB", + "StateCode":"BBO", + "StateName":"Bedford Borough" + }, + { + "CountryCode":"GB", + "StateCode":"BDF", + "StateName":"Bedfordshire" + }, + { + "CountryCode":"GB", + "StateCode":"BDG", + "StateName":"Barkingand Dagenham" + }, + { + "CountryCode":"GB", + "StateCode":"BEN", + "StateName":"Brent" + }, + { + "CountryCode":"GB", + "StateCode":"BEW", + "StateName":"Berwickshire" + }, + { + "CountryCode":"GB", + "StateCode":"BEX", + "StateName":"Bexley" + }, + { + "CountryCode":"GB", + "StateCode":"BFS", + "StateName":"Belfast" + }, + { + "CountryCode":"GB", + "StateCode":"BGE", + "StateName":"Bridgend" + }, + { + "CountryCode":"GB", + "StateCode":"BGW", + "StateName":"Blaenau Gwent" + }, + { + "CountryCode":"GB", + "StateCode":"BIR", + "StateName":"Birmingham" + }, + { + "CountryCode":"GB", + "StateCode":"BKM", + "StateName":"Buckinghamshire" + }, + { + "CountryCode":"GB", + "StateCode":"BLA", + "StateName":"Ballymena" + }, + { + "CountryCode":"GB", + "StateCode":"BLY", + "StateName":"Ballymoney" + }, + { + "CountryCode":"GB", + "StateCode":"BMH", + "StateName":"Bournemouth" + }, + { + "CountryCode":"GB", + "StateCode":"BNB", + "StateName":"Banbridge" + }, + { + "CountryCode":"GB", + "StateCode":"BNE", + "StateName":"Barnet" + }, + { + "CountryCode":"GB", + "StateCode":"BNH", + "StateName":"Brightonand Hove" + }, + { + "CountryCode":"GB", + "StateCode":"BNS", + "StateName":"Barnsley" + }, + { + "CountryCode":"GB", + "StateCode":"BOL", + "StateName":"Bolton" + }, + { + "CountryCode":"GB", + "StateCode":"BPL", + "StateName":"Blackpool" + }, + { + "CountryCode":"GB", + "StateCode":"BRC", + "StateName":"Bracknell Forest" + }, + { + "CountryCode":"GB", + "StateCode":"BRD", + "StateName":"Bradford" + }, + { + "CountryCode":"GB", + "StateCode":"BRE", + "StateName":"Brecknockshire" + }, + { + "CountryCode":"GB", + "StateCode":"BRK", + "StateName":"Berkshire" + }, + { + "CountryCode":"GB", + "StateCode":"BRY", + "StateName":"Bromley" + }, + { + "CountryCode":"GB", + "StateCode":"BST", + "StateName":"Bristol" + }, + { + "CountryCode":"GB", + "StateCode":"BUC", + "StateName":"Buckingham" + }, + { + "CountryCode":"GB", + "StateCode":"BUR", + "StateName":"Bury" + }, + { + "CountryCode":"GB", + "StateCode":"BUT", + "StateName":"Bute (Buteshire)" + }, + { + "CountryCode":"GB", + "StateCode":"CAE", + "StateName":"Caernarfonshire" + }, + { + "CountryCode":"GB", + "StateCode":"CAI", + "StateName":"Caithness" + }, + { + "CountryCode":"GB", + "StateCode":"CAM", + "StateName":"Cambridgeshire" + }, + { + "CountryCode":"GB", + "StateCode":"CAY", + "StateName":"Caerphilly" + }, + { + "CountryCode":"GB", + "StateCode":"CGN", + "StateName":"Ceredigion" + }, + { + "CountryCode":"GB", + "StateCode":"CGV", + "StateName":"Craigavon" + }, + { + "CountryCode":"GB", + "StateCode":"CHE", + "StateName":"Cheshire East" + }, + { + "CountryCode":"GB", + "StateCode":"CHS", + "StateName":"Cheshire" + }, + { + "CountryCode":"GB", + "StateCode":"CKF", + "StateName":"Carrickfergus" + }, + { + "CountryCode":"GB", + "StateCode":"CKT", + "StateName":"Cookstown" + }, + { + "CountryCode":"GB", + "StateCode":"CLD", + "StateName":"Calderdale" + }, + { + "CountryCode":"GB", + "StateCode":"CLK", + "StateName":"Clackmannanshire" + }, + { + "CountryCode":"GB", + "StateCode":"CLR", + "StateName":"Coleraine" + }, + { + "CountryCode":"GB", + "StateCode":"CMA", + "StateName":"Cumbria" + }, + { + "CountryCode":"GB", + "StateCode":"CMD", + "StateName":"Camden" + }, + { + "CountryCode":"GB", + "StateCode":"CMN", + "StateName":"Carmarthenshire" + }, + { + "CountryCode":"GB", + "StateCode":"CON", + "StateName":"Cornwall" + }, + { + "CountryCode":"GB", + "StateCode":"COV", + "StateName":"Coventry" + }, + { + "CountryCode":"GB", + "StateCode":"CRF", + "StateName":"Cardiff" + }, + { + "CountryCode":"GB", + "StateCode":"CRY", + "StateName":"Croydon" + }, + { + "CountryCode":"GB", + "StateCode":"CSR", + "StateName":"Castlereagh" + }, + { + "CountryCode":"GB", + "StateCode":"CUL", + "StateName":"Cumberland" + }, + { + "CountryCode":"GB", + "StateCode":"CWC", + "StateName":"Cheshire Westand Chester" + }, + { + "CountryCode":"GB", + "StateCode":"CWD", + "StateName":"Clwyd" + }, + { + "CountryCode":"GB", + "StateCode":"CWY", + "StateName":"Conwy" + }, + { + "CountryCode":"GB", + "StateCode":"DAL", + "StateName":"Darlington" + }, + { + "CountryCode":"GB", + "StateCode":"DBY", + "StateName":"Derbyshire" + }, + { + "CountryCode":"GB", + "StateCode":"DEN", + "StateName":"Denbighshire D" + }, + { + "CountryCode":"GB", + "StateCode":"DER", + "StateName":"Derby" + }, + { + "CountryCode":"GB", + "StateCode":"DEV", + "StateName":"Devon" + }, + { + "CountryCode":"GB", + "StateCode":"DFD", + "StateName":"Dyfed" + }, + { + "CountryCode":"GB", + "StateCode":"DFS", + "StateName":"Dumfriesshire" + }, + { + "CountryCode":"GB", + "StateCode":"DGN", + "StateName":"Dungannon" + }, + { + "CountryCode":"GB", + "StateCode":"DGY", + "StateName":"Dumfriesand Galloway" + }, + { + "CountryCode":"GB", + "StateCode":"DNB", + "StateName":"Dunbartonshire" + }, + { + "CountryCode":"GB", + "StateCode":"DNC", + "StateName":"Doncaster" + }, + { + "CountryCode":"GB", + "StateCode":"DND", + "StateName":"Dundee City" + }, + { + "CountryCode":"GB", + "StateCode":"DOR", + "StateName":"Dorset" + }, + { + "CountryCode":"GB", + "StateCode":"DOW", + "StateName":"Down" + }, + { + "CountryCode":"GB", + "StateCode":"DRY", + "StateName":"Derry" + }, + { + "CountryCode":"GB", + "StateCode":"DUD", + "StateName":"Dudley" + }, + { + "CountryCode":"GB", + "StateCode":"DUR", + "StateName":"Durham" + }, + { + "CountryCode":"GB", + "StateCode":"EAL", + "StateName":"Ealing" + }, + { + "CountryCode":"GB", + "StateCode":"EAY", + "StateName":"East Ayrshire" + }, + { + "CountryCode":"GB", + "StateCode":"EDH", + "StateName":"Edinburgh" + }, + { + "CountryCode":"GB", + "StateCode":"EDU", + "StateName":"East Dunbartonshire" + }, + { + "CountryCode":"GB", + "StateCode":"ELN", + "StateName":"East Lothian" + }, + { + "CountryCode":"GB", + "StateCode":"ELS", + "StateName":"Eilean Siar" + }, + { + "CountryCode":"GB", + "StateCode":"ENF", + "StateName":"Enfield" + }, + { + "CountryCode":"GB", + "StateCode":"ERW", + "StateName":"East Renfrewshire" + }, + { + "CountryCode":"GB", + "StateCode":"ERY", + "StateName":"East Ridingof Yorkshire" + }, + { + "CountryCode":"GB", + "StateCode":"ESS", + "StateName":"Essex" + }, + { + "CountryCode":"GB", + "StateCode":"ESX", + "StateName":"East Sussex" + }, + { + "CountryCode":"GB", + "StateCode":"FAL", + "StateName":"Falkirk" + }, + { + "CountryCode":"GB", + "StateCode":"FER", + "StateName":"Fermanagh" + }, + { + "CountryCode":"GB", + "StateCode":"FIF", + "StateName":"Fife" + }, + { + "CountryCode":"GB", + "StateCode":"FLN", + "StateName":"Flintshire" + }, + { + "CountryCode":"GB", + "StateCode":"GAT", + "StateName":"Gateshead" + }, + { + "CountryCode":"GB", + "StateCode":"GGY", + "StateName":"Guernsey" + }, + { + "CountryCode":"GB", + "StateCode":"GLA", + "StateName":"Glamorgan" + }, + { + "CountryCode":"GB", + "StateCode":"GLG", + "StateName":"Glasgow City" + }, + { + "CountryCode":"GB", + "StateCode":"GLO", + "StateName":"Greater London" + }, + { + "CountryCode":"GB", + "StateCode":"GLS", + "StateName":"Gloucestershire" + }, + { + "CountryCode":"GB", + "StateCode":"GNT", + "StateName":"Gwent" + }, + { + "CountryCode":"GB", + "StateCode":"GRE", + "StateName":"Greenwich" + }, + { + "CountryCode":"GB", + "StateCode":"GTM", + "StateName":"Greater Manchester" + }, + { + "CountryCode":"GB", + "StateCode":"GWN", + "StateName":"Gwynedd" + }, + { + "CountryCode":"GB", + "StateCode":"HAL", + "StateName":"Halton" + }, + { + "CountryCode":"GB", + "StateCode":"HAM", + "StateName":"Hampshire" + }, + { + "CountryCode":"GB", + "StateCode":"HAV", + "StateName":"Havering" + }, + { + "CountryCode":"GB", + "StateCode":"HCK", + "StateName":"Hackney" + }, + { + "CountryCode":"GB", + "StateCode":"HEF", + "StateName":"Herefordshire" + }, + { + "CountryCode":"GB", + "StateCode":"HIL", + "StateName":"Hillingdon" + }, + { + "CountryCode":"GB", + "StateCode":"HLD", + "StateName":"Highland" + }, + { + "CountryCode":"GB", + "StateCode":"HMF", + "StateName":"Hammersmithand Fulham" + }, + { + "CountryCode":"GB", + "StateCode":"HNS", + "StateName":"Hounslow" + }, + { + "CountryCode":"GB", + "StateCode":"HPL", + "StateName":"Hartlepool" + }, + { + "CountryCode":"GB", + "StateCode":"HRW", + "StateName":"Harrow" + }, + { + "CountryCode":"GB", + "StateCode":"HRY", + "StateName":"Haringey" + }, + { + "CountryCode":"GB", + "StateCode":"HTF", + "StateName":"Hertfordshire" + }, + { + "CountryCode":"GB", + "StateCode":"HUM", + "StateName":"Humberside" + }, + { + "CountryCode":"GB", + "StateCode":"HUN", + "StateName":"Huntingdonshire" + }, + { + "CountryCode":"GB", + "StateCode":"INV", + "StateName":"Inverness-shire" + }, + { + "CountryCode":"GB", + "StateCode":"IOM", + "StateName":"Isleof Man" + }, + { + "CountryCode":"GB", + "StateCode":"IOS", + "StateName":"Islesof Scilly" + }, + { + "CountryCode":"GB", + "StateCode":"IOW", + "StateName":"Isleof Wight" + }, + { + "CountryCode":"GB", + "StateCode":"ISL", + "StateName":"Islington" + }, + { + "CountryCode":"GB", + "StateCode":"IVC", + "StateName":"Inverclyde" + }, + { + "CountryCode":"GB", + "StateCode":"JEY", + "StateName":"Jersey" + }, + { + "CountryCode":"GB", + "StateCode":"KCD", + "StateName":"Kincardineshire" + }, + { + "CountryCode":"GB", + "StateCode":"KEC", + "StateName":"Kensingtonand Chelsea" + }, + { + "CountryCode":"GB", + "StateCode":"KEN", + "StateName":"Kent" + }, + { + "CountryCode":"GB", + "StateCode":"KHL", + "StateName":"Kingstonupon Hull" + }, + { + "CountryCode":"GB", + "StateCode":"KIR", + "StateName":"Kirklees" + }, + { + "CountryCode":"GB", + "StateCode":"KKD", + "StateName":"Kirkcudbrightshire" + }, + { + "CountryCode":"GB", + "StateCode":"KRS", + "StateName":"Kinross-shire" + }, + { + "CountryCode":"GB", + "StateCode":"KTT", + "StateName":"Kingstonupon Thames" + }, + { + "CountryCode":"GB", + "StateCode":"KWL", + "StateName":"Knowsley" + }, + { + "CountryCode":"GB", + "StateCode":"LAN", + "StateName":"Lancashire" + }, + { + "CountryCode":"GB", + "StateCode":"LBH", + "StateName":"Lambeth" + }, + { + "CountryCode":"GB", + "StateCode":"LCE", + "StateName":"Leicester" + }, + { + "CountryCode":"GB", + "StateCode":"LDS", + "StateName":"Leeds" + }, + { + "CountryCode":"GB", + "StateCode":"LEC", + "StateName":"Leicestershire" + }, + { + "CountryCode":"GB", + "StateCode":"LEW", + "StateName":"Lewisham" + }, + { + "CountryCode":"GB", + "StateCode":"LIN", + "StateName":"Lincolnshire" + }, + { + "CountryCode":"GB", + "StateCode":"LIV", + "StateName":"Liverpool" + }, + { + "CountryCode":"GB", + "StateCode":"LKS", + "StateName":"Lanarkshire" + }, + { + "CountryCode":"GB", + "StateCode":"LMV", + "StateName":"Limavady" + }, + { + "CountryCode":"GB", + "StateCode":"LND", + "StateName":"London" + }, + { + "CountryCode":"GB", + "StateCode":"LRN", + "StateName":"Larne" + }, + { + "CountryCode":"GB", + "StateCode":"LSB", + "StateName":"Lisburn" + }, + { + "CountryCode":"GB", + "StateCode":"LUT", + "StateName":"Luton" + }, + { + "CountryCode":"GB", + "StateCode":"MAN", + "StateName":"Manchester" + }, + { + "CountryCode":"GB", + "StateCode":"MDB", + "StateName":"Middlesbrough" + }, + { + "CountryCode":"GB", + "StateCode":"MDW", + "StateName":"Medway" + }, + { + "CountryCode":"GB", + "StateCode":"MDX", + "StateName":"Middlesex" + }, + { + "CountryCode":"GB", + "StateCode":"MER", + "StateName":"Merionethshire" + }, + { + "CountryCode":"GB", + "StateCode":"MFT", + "StateName":"Magherafelt" + }, + { + "CountryCode":"GB", + "StateCode":"MGM", + "StateName":"Mid Glamorgan" + }, + { + "CountryCode":"GB", + "StateCode":"MGY", + "StateName":"Montgomeryshire" + }, + { + "CountryCode":"GB", + "StateCode":"MIK", + "StateName":"Milton Keynes" + }, + { + "CountryCode":"GB", + "StateCode":"MLN", + "StateName":"Midlothian" + }, + { + "CountryCode":"GB", + "StateCode":"MON", + "StateName":"Monmouthshire" + }, + { + "CountryCode":"GB", + "StateCode":"MOR", + "StateName":"Moray (formerly Elginshire)" + }, + { + "CountryCode":"GB", + "StateCode":"MRT", + "StateName":"Merton" + }, + { + "CountryCode":"GB", + "StateCode":"MRY", + "StateName":"Moray" + }, + { + "CountryCode":"GB", + "StateCode":"MSY", + "StateName":"Merseyside" + }, + { + "CountryCode":"GB", + "StateCode":"MTY", + "StateName":"Merthyr Tydfil" + }, + { + "CountryCode":"GB", + "StateCode":"MYL", + "StateName":"Moyle" + }, + { + "CountryCode":"GB", + "StateCode":"NAI", + "StateName":"Nairnshire" + }, + { + "CountryCode":"GB", + "StateCode":"NAY", + "StateName":"North Ayrshire" + }, + { + "CountryCode":"GB", + "StateCode":"NBL", + "StateName":"Northumberland" + }, + { + "CountryCode":"GB", + "StateCode":"NDN", + "StateName":"North Down" + }, + { + "CountryCode":"GB", + "StateCode":"NEL", + "StateName":"North East Lincolnshire" + }, + { + "CountryCode":"GB", + "StateCode":"NET", + "StateName":"Newcastleupon Tyne" + }, + { + "CountryCode":"GB", + "StateCode":"NFK", + "StateName":"Norfolk" + }, + { + "CountryCode":"GB", + "StateCode":"NGM", + "StateName":"Nottingham" + }, + { + "CountryCode":"GB", + "StateCode":"NLK", + "StateName":"North Lanarkshire" + }, + { + "CountryCode":"GB", + "StateCode":"NLN", + "StateName":"North Lincolnshire" + }, + { + "CountryCode":"GB", + "StateCode":"NSM", + "StateName":"North Somerset" + }, + { + "CountryCode":"GB", + "StateCode":"NTA", + "StateName":"Newtownabbey" + }, + { + "CountryCode":"GB", + "StateCode":"NTH", + "StateName":"Northamptonshire" + }, + { + "CountryCode":"GB", + "StateCode":"NTL", + "StateName":"NeathPort Talbot" + }, + { + "CountryCode":"GB", + "StateCode":"NTT", + "StateName":"Nottinghamshire" + }, + { + "CountryCode":"GB", + "StateCode":"NTY", + "StateName":"North Tyneside" + }, + { + "CountryCode":"GB", + "StateCode":"NWM", + "StateName":"Newham" + }, + { + "CountryCode":"GB", + "StateCode":"NWP", + "StateName":"Newport" + }, + { + "CountryCode":"GB", + "StateCode":"NYK", + "StateName":"North Yorkshire" + }, + { + "CountryCode":"GB", + "StateCode":"NYM", + "StateName":"Newryand Mourne" + }, + { + "CountryCode":"GB", + "StateCode":"OKI", + "StateName":"Orkney" + }, + { + "CountryCode":"GB", + "StateCode":"OLD", + "StateName":"Oldham" + }, + { + "CountryCode":"GB", + "StateCode":"OMH", + "StateName":"Omagh" + }, + { + "CountryCode":"GB", + "StateCode":"ORK", + "StateName":"Orkney Islands" + }, + { + "CountryCode":"GB", + "StateCode":"OXF", + "StateName":"Oxfordshire" + }, + { + "CountryCode":"GB", + "StateCode":"PEE", + "StateName":"Peeblesshire" + }, + { + "CountryCode":"GB", + "StateCode":"PEM", + "StateName":"Pembrokeshire" + }, + { + "CountryCode":"GB", + "StateCode":"PER", + "StateName":"Perthshire" + }, + { + "CountryCode":"GB", + "StateCode":"PKN", + "StateName":"Perthand Kinross" + }, + { + "CountryCode":"GB", + "StateCode":"PLY", + "StateName":"Plymouth" + }, + { + "CountryCode":"GB", + "StateCode":"POL", + "StateName":"Poole" + }, + { + "CountryCode":"GB", + "StateCode":"POR", + "StateName":"Portsmouth" + }, + { + "CountryCode":"GB", + "StateCode":"POW", + "StateName":"Powys" + }, + { + "CountryCode":"GB", + "StateCode":"PTE", + "StateName":"Peterborough" + }, + { + "CountryCode":"GB", + "StateCode":"RAD", + "StateName":"Radnorshire" + }, + { + "CountryCode":"GB", + "StateCode":"RCC", + "StateName":"Redcarand Cleveland" + }, + { + "CountryCode":"GB", + "StateCode":"RCH", + "StateName":"Rochdale" + }, + { + "CountryCode":"GB", + "StateCode":"RCT", + "StateName":"Rhondda Cynon Ta" + }, + { + "CountryCode":"GB", + "StateCode":"RDB", + "StateName":"Redbridge" + }, + { + "CountryCode":"GB", + "StateCode":"RDG", + "StateName":"Reading" + }, + { + "CountryCode":"GB", + "StateCode":"RFW", + "StateName":"Renfrewshire" + }, + { + "CountryCode":"GB", + "StateCode":"RIC", + "StateName":"Richmondupon Thames" + }, + { + "CountryCode":"GB", + "StateCode":"ROC", + "StateName":"Rossand Cromarty" + }, + { + "CountryCode":"GB", + "StateCode":"ROT", + "StateName":"Rotherham" + }, + { + "CountryCode":"GB", + "StateCode":"ROX", + "StateName":"Roxburghshire" + }, + { + "CountryCode":"GB", + "StateCode":"RUT", + "StateName":"Rutland" + }, + { + "CountryCode":"GB", + "StateCode":"SAW", + "StateName":"Sandwell" + }, + { + "CountryCode":"GB", + "StateCode":"SAY", + "StateName":"South Ayrshire" + }, + { + "CountryCode":"GB", + "StateCode":"SCB", + "StateName":"Scottish Borders" + }, + { + "CountryCode":"GB", + "StateCode":"SEL", + "StateName":"Selkirkshire" + }, + { + "CountryCode":"GB", + "StateCode":"SFK", + "StateName":"Suffolk" + }, + { + "CountryCode":"GB", + "StateCode":"SFT", + "StateName":"Sefton" + }, + { + "CountryCode":"GB", + "StateCode":"SGC", + "StateName":"South Gloucestershire" + }, + { + "CountryCode":"GB", + "StateCode":"SGM", + "StateName":"South Glamorgan" + }, + { + "CountryCode":"GB", + "StateCode":"SHF", + "StateName":"Sheffield" + }, + { + "CountryCode":"GB", + "StateCode":"SHI", + "StateName":"Shetland" + }, + { + "CountryCode":"GB", + "StateCode":"SHN", + "StateName":"St Helens" + }, + { + "CountryCode":"GB", + "StateCode":"SHR", + "StateName":"Shropshire" + }, + { + "CountryCode":"GB", + "StateCode":"SKP", + "StateName":"Stockport" + }, + { + "CountryCode":"GB", + "StateCode":"SLF", + "StateName":"Salford" + }, + { + "CountryCode":"GB", + "StateCode":"SLG", + "StateName":"Slough" + }, + { + "CountryCode":"GB", + "StateCode":"SLK", + "StateName":"South Lanarkshire" + }, + { + "CountryCode":"GB", + "StateCode":"SND", + "StateName":"Sunderland" + }, + { + "CountryCode":"GB", + "StateCode":"SOL", + "StateName":"Solihull" + }, + { + "CountryCode":"GB", + "StateCode":"SOM", + "StateName":"Somerset" + }, + { + "CountryCode":"GB", + "StateCode":"SOS", + "StateName":"Southend-on-Sea" + }, + { + "CountryCode":"GB", + "StateCode":"SRY", + "StateName":"Surrey" + }, + { + "CountryCode":"GB", + "StateCode":"SSX", + "StateName":"Sussex" + }, + { + "CountryCode":"GB", + "StateCode":"STB", + "StateName":"Strabane" + }, + { + "CountryCode":"GB", + "StateCode":"STE", + "StateName":"Stoke-on-Trent" + }, + { + "CountryCode":"GB", + "StateCode":"STG", + "StateName":"Stirling" + }, + { + "CountryCode":"GB", + "StateCode":"STH", + "StateName":"Southampton" + }, + { + "CountryCode":"GB", + "StateCode":"STI", + "StateName":"Stirlingshire" + }, + { + "CountryCode":"GB", + "StateCode":"STN", + "StateName":"Sutton" + }, + { + "CountryCode":"GB", + "StateCode":"STS", + "StateName":"Staffordshire" + }, + { + "CountryCode":"GB", + "StateCode":"STT", + "StateName":"Stockton-on-Tees" + }, + { + "CountryCode":"GB", + "StateCode":"STY", + "StateName":"South Tyneside" + }, + { + "CountryCode":"GB", + "StateCode":"SUT", + "StateName":"Sutherland" + }, + { + "CountryCode":"GB", + "StateCode":"SWA", + "StateName":"Swansea" + }, + { + "CountryCode":"GB", + "StateCode":"SWD", + "StateName":"Swindon" + }, + { + "CountryCode":"GB", + "StateCode":"SWK", + "StateName":"Southwark" + }, + { + "CountryCode":"GB", + "StateCode":"SYK", + "StateName":"South Yorkshire" + }, + { + "CountryCode":"GB", + "StateCode":"TAM", + "StateName":"Tameside" + }, + { + "CountryCode":"GB", + "StateCode":"TFW", + "StateName":"Telfordand Wrekin" + }, + { + "CountryCode":"GB", + "StateCode":"THR", + "StateName":"Thurrock" + }, + { + "CountryCode":"GB", + "StateCode":"TOB", + "StateName":"Torbay" + }, + { + "CountryCode":"GB", + "StateCode":"TOF", + "StateName":"Torfaen" + }, + { + "CountryCode":"GB", + "StateCode":"TRF", + "StateName":"Trafford" + }, + { + "CountryCode":"GB", + "StateCode":"TWH", + "StateName":"Tower Hamlets" + }, + { + "CountryCode":"GB", + "StateCode":"TWR", + "StateName":"TyneandWear" + }, + { + "CountryCode":"GB", + "StateCode":"VGL", + "StateName":"Vale of Glamorgan" + }, + { + "CountryCode":"GB", + "StateCode":"WAR", + "StateName":"Warwickshire" + }, + { + "CountryCode":"GB", + "StateCode":"WBK", + "StateName":"West Berkshire" + }, + { + "CountryCode":"GB", + "StateCode":"WDU", + "StateName":"West Dunbartonshire" + }, + { + "CountryCode":"GB", + "StateCode":"WES", + "StateName":"Westmorland" + }, + { + "CountryCode":"GB", + "StateCode":"WFT", + "StateName":"Waltham Forest" + }, + { + "CountryCode":"GB", + "StateCode":"WGM", + "StateName":"West Glamorgan" + }, + { + "CountryCode":"GB", + "StateCode":"WGN", + "StateName":"Wigan" + }, + { + "CountryCode":"GB", + "StateCode":"WIG", + "StateName":"Wigtownshire" + }, + { + "CountryCode":"GB", + "StateCode":"WIL", + "StateName":"Wiltshire" + }, + { + "CountryCode":"GB", + "StateCode":"WKF", + "StateName":"Wakefield" + }, + { + "CountryCode":"GB", + "StateCode":"WLL", + "StateName":"Walsall" + }, + { + "CountryCode":"GB", + "StateCode":"WLN", + "StateName":"West Lothian" + }, + { + "CountryCode":"GB", + "StateCode":"WLV", + "StateName":"Wolverhampton" + }, + { + "CountryCode":"GB", + "StateCode":"WMD", + "StateName":"West Midlands" + }, + { + "CountryCode":"GB", + "StateCode":"WND", + "StateName":"Wandsworth" + }, + { + "CountryCode":"GB", + "StateCode":"WNM", + "StateName":"Windsorand Maidenhead" + }, + { + "CountryCode":"GB", + "StateCode":"WOC", + "StateName":"Worcester" + }, + { + "CountryCode":"GB", + "StateCode":"WOK", + "StateName":"Wokingham" + }, + { + "CountryCode":"GB", + "StateCode":"WOR", + "StateName":"Worcestershire" + }, + { + "CountryCode":"GB", + "StateCode":"WRL", + "StateName":"Wirral" + }, + { + "CountryCode":"GB", + "StateCode":"WRT", + "StateName":"Warrington" + }, + { + "CountryCode":"GB", + "StateCode":"WRX", + "StateName":"Wrexham" + }, + { + "CountryCode":"GB", + "StateCode":"WSM", + "StateName":"Westminster" + }, + { + "CountryCode":"GB", + "StateCode":"WSX", + "StateName":"West Sussex" + }, + { + "CountryCode":"GB", + "StateCode":"WYK", + "StateName":"West Yorkshire" + }, + { + "CountryCode":"GB", + "StateCode":"YKS", + "StateName":"Yorkshire" + }, + { + "CountryCode":"GB", + "StateCode":"YOR", + "StateName":"York" + }, + { + "CountryCode":"GB", + "StateCode":"ZET", + "StateName":"Shetland Islands" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/gh.json b/public/template-common/checkout1/state/gh.json new file mode 100644 index 000000000..05a573bff --- /dev/null +++ b/public/template-common/checkout1/state/gh.json @@ -0,0 +1,52 @@ +[ + { + "CountryCode":"GH", + "StateCode":"AA", + "StateName":"Greater Accra" + }, + { + "CountryCode":"GH", + "StateCode":"AH", + "StateName":"Ashanti" + }, + { + "CountryCode":"GH", + "StateCode":"BA", + "StateName":"Brong-Ahafo" + }, + { + "CountryCode":"GH", + "StateCode":"CP", + "StateName":"Central" + }, + { + "CountryCode":"GH", + "StateCode":"EP", + "StateName":"Eastern" + }, + { + "CountryCode":"GH", + "StateCode":"NP", + "StateName":"Northern" + }, + { + "CountryCode":"GH", + "StateCode":"TV", + "StateName":"Volta" + }, + { + "CountryCode":"GH", + "StateCode":"UE", + "StateName":"Upper East" + }, + { + "CountryCode":"GH", + "StateCode":"UW", + "StateName":"Upper West" + }, + { + "CountryCode":"GH", + "StateCode":"WP", + "StateName":"Western" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/gn.json b/public/template-common/checkout1/state/gn.json new file mode 100644 index 000000000..50113f570 --- /dev/null +++ b/public/template-common/checkout1/state/gn.json @@ -0,0 +1,172 @@ +[ + { + "CountryCode":"GN", + "StateCode":"BE", + "StateName":"Beyla" + }, + { + "CountryCode":"GN", + "StateCode":"BF", + "StateName":"Boffa" + }, + { + "CountryCode":"GN", + "StateCode":"BK", + "StateName":"Boké" + }, + { + "CountryCode":"GN", + "StateCode":"C", + "StateName":"Conakry" + }, + { + "CountryCode":"GN", + "StateCode":"CO", + "StateName":"Coyah" + }, + { + "CountryCode":"GN", + "StateCode":"DB", + "StateName":"Dabola" + }, + { + "CountryCode":"GN", + "StateCode":"DI", + "StateName":"Dinguiraye" + }, + { + "CountryCode":"GN", + "StateCode":"DL", + "StateName":"Dalaba" + }, + { + "CountryCode":"GN", + "StateCode":"DU", + "StateName":"Dubréka" + }, + { + "CountryCode":"GN", + "StateCode":"FA", + "StateName":"Faranah" + }, + { + "CountryCode":"GN", + "StateCode":"FO", + "StateName":"Forécariah" + }, + { + "CountryCode":"GN", + "StateCode":"FR", + "StateName":"Fria" + }, + { + "CountryCode":"GN", + "StateCode":"GA", + "StateName":"Gaoual" + }, + { + "CountryCode":"GN", + "StateCode":"GU", + "StateName":"Guékédou" + }, + { + "CountryCode":"GN", + "StateCode":"KA", + "StateName":"Kankan" + }, + { + "CountryCode":"GN", + "StateCode":"KB", + "StateName":"Koubia" + }, + { + "CountryCode":"GN", + "StateCode":"KD", + "StateName":"Kindia" + }, + { + "CountryCode":"GN", + "StateCode":"KE", + "StateName":"Kérouané" + }, + { + "CountryCode":"GN", + "StateCode":"KN", + "StateName":"Koundara" + }, + { + "CountryCode":"GN", + "StateCode":"KO", + "StateName":"Kouroussa" + }, + { + "CountryCode":"GN", + "StateCode":"KS", + "StateName":"Kissidougou" + }, + { + "CountryCode":"GN", + "StateCode":"LA", + "StateName":"Labé" + }, + { + "CountryCode":"GN", + "StateCode":"LE", + "StateName":"Lélouma" + }, + { + "CountryCode":"GN", + "StateCode":"LO", + "StateName":"Lola" + }, + { + "CountryCode":"GN", + "StateCode":"MC", + "StateName":"Macenta" + }, + { + "CountryCode":"GN", + "StateCode":"MD", + "StateName":"Mandiana" + }, + { + "CountryCode":"GN", + "StateCode":"ML", + "StateName":"Mali" + }, + { + "CountryCode":"GN", + "StateCode":"MM", + "StateName":"Mamou" + }, + { + "CountryCode":"GN", + "StateCode":"NZ", + "StateName":"Nzérékoré" + }, + { + "CountryCode":"GN", + "StateCode":"PI", + "StateName":"Pita" + }, + { + "CountryCode":"GN", + "StateCode":"SI", + "StateName":"Siguiri" + }, + { + "CountryCode":"GN", + "StateCode":"TE", + "StateName":"Télimélé" + }, + { + "CountryCode":"GN", + "StateCode":"TO", + "StateName":"Tougué" + }, + { + "CountryCode":"GN", + "StateCode":"YO", + "StateName":"Yomou" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/gq.json b/public/template-common/checkout1/state/gq.json new file mode 100644 index 000000000..8c1c3b9f4 --- /dev/null +++ b/public/template-common/checkout1/state/gq.json @@ -0,0 +1,47 @@ +[ + { + "CountryCode":"GQ", + "StateCode":"AN", + "StateName":"Annobón" + }, + { + "CountryCode":"GQ", + "StateCode":"BN", + "StateName":"Bioko Norte" + }, + { + "CountryCode":"GQ", + "StateCode":"BS", + "StateName":"Bioko Sur" + }, + { + "CountryCode":"GQ", + "StateCode":"C", + "StateName":"Región Continental" + }, + { + "CountryCode":"GQ", + "StateCode":"CS", + "StateName":"Centro Sur" + }, + { + "CountryCode":"GQ", + "StateCode":"I", + "StateName":"Región Insular" + }, + { + "CountryCode":"GQ", + "StateCode":"KN", + "StateName":"Kie-Ntem" + }, + { + "CountryCode":"GQ", + "StateCode":"LI", + "StateName":"Litoral" + }, + { + "CountryCode":"GQ", + "StateCode":"WN", + "StateName":"Wele-Nzás" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/hr.json b/public/template-common/checkout1/state/hr.json new file mode 100644 index 000000000..f37ce100c --- /dev/null +++ b/public/template-common/checkout1/state/hr.json @@ -0,0 +1,107 @@ +[ + { + "CountryCode":"HR", + "StateCode":"HR-07", + "StateName":"Bjelovarsko-bilogorskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-12", + "StateName":"Brodsko-posavskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-19", + "StateName":"Dubrovacko-neretvanskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-18", + "StateName":"Istarskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-04", + "StateName":"Karlovackažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-06", + "StateName":"Koprivnicko-križevackažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-02", + "StateName":"Krapinsko-zagorskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-09", + "StateName":"Licko-senjskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-20", + "StateName":"Medimurskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-14", + "StateName":"Osjecko-baranjskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-11", + "StateName":"Požeško-slavonskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-08", + "StateName":"Primorsko-goranskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-03", + "StateName":"Sisacko-moslavackažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-17", + "StateName":"Splitsko-dalmatinskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-15", + "StateName":"Šibensko-kninskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-05", + "StateName":"Varaždinskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-10", + "StateName":"Viroviticko-podravskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-16", + "StateName":"Vukovarsko-srijemskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-13", + "StateName":"Zadarskažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-01", + "StateName":"Zagrebackažupanija" + }, + { + "CountryCode":"HR", + "StateCode":"HR-21", + "StateName":"Grad Zagreb" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/hu.json b/public/template-common/checkout1/state/hu.json new file mode 100644 index 000000000..1303dc498 --- /dev/null +++ b/public/template-common/checkout1/state/hu.json @@ -0,0 +1,217 @@ +[ + { + "CountryCode":"HU", + "StateCode":"BA", + "StateName":"Baranya" + }, + { + "CountryCode":"HU", + "StateCode":"BC", + "StateName":"Békéscsaba" + }, + { + "CountryCode":"HU", + "StateCode":"BE", + "StateName":"Békés" + }, + { + "CountryCode":"HU", + "StateCode":"BK", + "StateName":"Bács-Kiskun" + }, + { + "CountryCode":"HU", + "StateCode":"BU", + "StateName":"Budapest" + }, + { + "CountryCode":"HU", + "StateCode":"BZ", + "StateName":"Borsod-Abaúj-Zemplén" + }, + { + "CountryCode":"HU", + "StateCode":"CS", + "StateName":"Csongrád" + }, + { + "CountryCode":"HU", + "StateCode":"DE", + "StateName":"Debrecen" + }, + { + "CountryCode":"HU", + "StateCode":"DU", + "StateName":"Dunaújváros" + }, + { + "CountryCode":"HU", + "StateCode":"EG", + "StateName":"Eger" + }, + { + "CountryCode":"HU", + "StateCode":"ER", + "StateName":"Erd" + }, + { + "CountryCode":"HU", + "StateCode":"FE", + "StateName":"Fejér" + }, + { + "CountryCode":"HU", + "StateCode":"GS", + "StateName":"Gyor-Moson-Sopron" + }, + { + "CountryCode":"HU", + "StateCode":"GY", + "StateName":"Gyor" + }, + { + "CountryCode":"HU", + "StateCode":"HB", + "StateName":"Hajdú-Bihar" + }, + { + "CountryCode":"HU", + "StateCode":"HE", + "StateName":"Heves" + }, + { + "CountryCode":"HU", + "StateCode":"HV", + "StateName":"Hódmezovásárhely" + }, + { + "CountryCode":"HU", + "StateCode":"JN", + "StateName":"Jász-Nagykun-Szolnok" + }, + { + "CountryCode":"HU", + "StateCode":"KE", + "StateName":"Komárom-Esztergom" + }, + { + "CountryCode":"HU", + "StateCode":"KM", + "StateName":"Kecskemét" + }, + { + "CountryCode":"HU", + "StateCode":"KV", + "StateName":"Kaposvár" + }, + { + "CountryCode":"HU", + "StateCode":"MI", + "StateName":"Miskolc" + }, + { + "CountryCode":"HU", + "StateCode":"NK", + "StateName":"Nagykanizsa" + }, + { + "CountryCode":"HU", + "StateCode":"NO", + "StateName":"Nógrád" + }, + { + "CountryCode":"HU", + "StateCode":"NY", + "StateName":"Nyíregyháza" + }, + { + "CountryCode":"HU", + "StateCode":"PE", + "StateName":"Pest" + }, + { + "CountryCode":"HU", + "StateCode":"PS", + "StateName":"Pécs" + }, + { + "CountryCode":"HU", + "StateCode":"SD", + "StateName":"Szeged" + }, + { + "CountryCode":"HU", + "StateCode":"SF", + "StateName":"Székesfehérvár" + }, + { + "CountryCode":"HU", + "StateCode":"SH", + "StateName":"Szombathely" + }, + { + "CountryCode":"HU", + "StateCode":"SK", + "StateName":"Szolnok" + }, + { + "CountryCode":"HU", + "StateCode":"SN", + "StateName":"Sopron" + }, + { + "CountryCode":"HU", + "StateCode":"SO", + "StateName":"Somogy" + }, + { + "CountryCode":"HU", + "StateCode":"SS", + "StateName":"Szekszárd" + }, + { + "CountryCode":"HU", + "StateCode":"ST", + "StateName":"Salgótarján" + }, + { + "CountryCode":"HU", + "StateCode":"SZ", + "StateName":"Szabolcs-Szatmár-Bereg" + }, + { + "CountryCode":"HU", + "StateCode":"TB", + "StateName":"Tatabánya" + }, + { + "CountryCode":"HU", + "StateCode":"TO", + "StateName":"Tolna" + }, + { + "CountryCode":"HU", + "StateCode":"VA", + "StateName":"Vas" + }, + { + "CountryCode":"HU", + "StateCode":"VE", + "StateName":"Veszprém" + }, + { + "CountryCode":"HU", + "StateCode":"VM", + "StateName":"Veszprém City" + }, + { + "CountryCode":"HU", + "StateCode":"ZA", + "StateName":"Zala" + }, + { + "CountryCode":"HU", + "StateCode":"ZE", + "StateName":"Zalaegerszeg" + }, +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/id.json b/public/template-common/checkout1/state/id.json new file mode 100644 index 000000000..ddfcc7c91 --- /dev/null +++ b/public/template-common/checkout1/state/id.json @@ -0,0 +1,167 @@ +[ + { + "CountryCode":"ID", + "StateCode":"AC", + "StateName":"Aceh" + }, + { + "CountryCode":"ID", + "StateCode":"BA", + "StateName":"Bali" + }, + { + "CountryCode":"ID", + "StateCode":"BB", + "StateName":"Bangka Belitung" + }, + { + "CountryCode":"ID", + "StateCode":"BE", + "StateName":"Bengkulu" + }, + { + "CountryCode":"ID", + "StateCode":"BT", + "StateName":"Banten" + }, + { + "CountryCode":"ID", + "StateCode":"GO", + "StateName":"Gorontalo" + }, + { + "CountryCode":"ID", + "StateCode":"JA", + "StateName":"Jambi" + }, + { + "CountryCode":"ID", + "StateCode":"JB", + "StateName":"Jawa Barat" + }, + { + "CountryCode":"ID", + "StateCode":"JI", + "StateName":"Jawa Timur" + }, + { + "CountryCode":"ID", + "StateCode":"JK", + "StateName":"Jakarta Raya" + }, + { + "CountryCode":"ID", + "StateCode":"JT", + "StateName":"Jawa Tengah" + }, + { + "CountryCode":"ID", + "StateCode":"KB", + "StateName":"Kalimantan Barat" + }, + { + "CountryCode":"ID", + "StateCode":"KI", + "StateName":"Kalimantan Timur" + }, + { + "CountryCode":"ID", + "StateCode":"KR", + "StateName":"Kepulauan Riau" + }, + { + "CountryCode":"ID", + "StateCode":"KS", + "StateName":"Kalimantan Selatan" + }, + { + "CountryCode":"ID", + "StateCode":"KT", + "StateName":"Kalimantan Tengah" + }, + { + "CountryCode":"ID", + "StateCode":"LA", + "StateName":"Lampung" + }, + { + "CountryCode":"ID", + "StateCode":"MA", + "StateName":"Maluku" + }, + { + "CountryCode":"ID", + "StateCode":"MU", + "StateName":"Maluku Utara" + }, + { + "CountryCode":"ID", + "StateCode":"NB", + "StateName":"Nusa Tenggara Barat" + }, + { + "CountryCode":"ID", + "StateCode":"NT", + "StateName":"Nusa Tenggara Timur" + }, + { + "CountryCode":"ID", + "StateCode":"PA", + "StateName":"Papua" + }, + { + "CountryCode":"ID", + "StateCode":"PB", + "StateName":"Papua Barat" + }, + { + "CountryCode":"ID", + "StateCode":"RI", + "StateName":"Riau" + }, + { + "CountryCode":"ID", + "StateCode":"SA", + "StateName":"Sulawesi Utara" + }, + { + "CountryCode":"ID", + "StateCode":"SB", + "StateName":"Sumatera Barat" + }, + { + "CountryCode":"ID", + "StateCode":"SG", + "StateName":"Sulawesi Tenggara" + }, + { + "CountryCode":"ID", + "StateCode":"SN", + "StateName":"Sulawesi Selatan" + }, + { + "CountryCode":"ID", + "StateCode":"SR", + "StateName":"Sulawesi Barat" + }, + { + "CountryCode":"ID", + "StateCode":"SS", + "StateName":"Sumatera Selatan" + }, + { + "CountryCode":"ID", + "StateCode":"ST", + "StateName":"Sulawesi Tengah" + }, + { + "CountryCode":"ID", + "StateCode":"SU", + "StateName":"Sumatera Utara" + }, + { + "CountryCode":"ID", + "StateCode":"YO", + "StateName":"Yogyakarta" + }, +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/il.json b/public/template-common/checkout1/state/il.json new file mode 100644 index 000000000..727db9824 --- /dev/null +++ b/public/template-common/checkout1/state/il.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"IL", + "StateCode":"D", + "StateName":"Ha Darom" + }, + { + "CountryCode":"IL", + "StateCode":"HA", + "StateName":"Haifa" + }, + { + "CountryCode":"IL", + "StateCode":"JM", + "StateName":"Yerushalayim" + }, + { + "CountryCode":"IL", + "StateCode":"M", + "StateName":"Ha Merkaz" + }, + { + "CountryCode":"IL", + "StateCode":"TA", + "StateName":"Tel-Aviv" + }, + { + "CountryCode":"IL", + "StateCode":"Z", + "StateName":"Ha Zafon" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/in.json b/public/template-common/checkout1/state/in.json new file mode 100644 index 000000000..64851ae9d --- /dev/null +++ b/public/template-common/checkout1/state/in.json @@ -0,0 +1,177 @@ +[ + { + "CountryCode":"IN", + "StateCode":"AN", + "StateName":"Andamanand Nicobar Islands" + }, + { + "CountryCode":"IN", + "StateCode":"AP", + "StateName":"Andhra Pradesh" + }, + { + "CountryCode":"IN", + "StateCode":"AR", + "StateName":"Arunachal Pradesh" + }, + { + "CountryCode":"IN", + "StateCode":"AS", + "StateName":"Assam" + }, + { + "CountryCode":"IN", + "StateCode":"BR", + "StateName":"Bihar" + }, + { + "CountryCode":"IN", + "StateCode":"CH", + "StateName":"Chandigarh" + }, + { + "CountryCode":"IN", + "StateCode":"CT", + "StateName":"Chhattisgarh" + }, + { + "CountryCode":"IN", + "StateCode":"DD", + "StateName":"Damanand Diu" + }, + { + "CountryCode":"IN", + "StateCode":"DL", + "StateName":"Delhi" + }, + { + "CountryCode":"IN", + "StateCode":"DN", + "StateName":"Dadraand Nagar Haveli" + }, + { + "CountryCode":"IN", + "StateCode":"GA", + "StateName":"Goa" + }, + { + "CountryCode":"IN", + "StateCode":"GJ", + "StateName":"Gujarat" + }, + { + "CountryCode":"IN", + "StateCode":"HP", + "StateName":"Himachal Pradesh" + }, + { + "CountryCode":"IN", + "StateCode":"HR", + "StateName":"Haryana" + }, + { + "CountryCode":"IN", + "StateCode":"JH", + "StateName":"Jharkhand" + }, + { + "CountryCode":"IN", + "StateCode":"JK", + "StateName":"Jammuand Kashmir" + }, + { + "CountryCode":"IN", + "StateCode":"KA", + "StateName":"Karnataka" + }, + { + "CountryCode":"IN", + "StateCode":"KL", + "StateName":"Kerala" + }, + { + "CountryCode":"IN", + "StateCode":"LD", + "StateName":"Lakshadweep" + }, + { + "CountryCode":"IN", + "StateCode":"MH", + "StateName":"Maharashtra" + }, + { + "CountryCode":"IN", + "StateCode":"ML", + "StateName":"Meghalaya" + }, + { + "CountryCode":"IN", + "StateCode":"MN", + "StateName":"Manipur" + }, + { + "CountryCode":"IN", + "StateCode":"MP", + "StateName":"Madhya Pradesh" + }, + { + "CountryCode":"IN", + "StateCode":"MZ", + "StateName":"Mizoram" + }, + { + "CountryCode":"IN", + "StateCode":"NL", + "StateName":"Nagaland" + }, + { + "CountryCode":"IN", + "StateCode":"OR", + "StateName":"Orissa" + }, + { + "CountryCode":"IN", + "StateCode":"PB", + "StateName":"Punjab" + }, + { + "CountryCode":"IN", + "StateCode":"PY", + "StateName":"Pondicherry" + }, + { + "CountryCode":"IN", + "StateCode":"RJ", + "StateName":"Rajasthan" + }, + { + "CountryCode":"IN", + "StateCode":"SK", + "StateName":"Sikkim" + }, + { + "CountryCode":"IN", + "StateCode":"TN", + "StateName":"Tamil Nadu" + }, + { + "CountryCode":"IN", + "StateCode":"TR", + "StateName":"Tripura" + }, + { + "CountryCode":"IN", + "StateCode":"UL", + "StateName":"Uttaranchal" + }, + { + "CountryCode":"IN", + "StateCode":"UP", + "StateName":"Uttar Pradesh" + }, + { + "CountryCode":"IN", + "StateCode":"WB", + "StateName":"West Bengal" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/is.json b/public/template-common/checkout1/state/is.json new file mode 100644 index 000000000..fa3f59a3d --- /dev/null +++ b/public/template-common/checkout1/state/is.json @@ -0,0 +1,47 @@ +[ + { + "CountryCode":"IS", + "StateCode":"0", + "StateName":"Reykjavík" + }, + { + "CountryCode":"IS", + "StateCode":"1", + "StateName":"Höfuðborgarsvæðiutan Reykjavíkur" + }, + { + "CountryCode":"IS", + "StateCode":"2", + "StateName":"Suðurnes" + }, + { + "CountryCode":"IS", + "StateCode":"3", + "StateName":"Vesturland" + }, + { + "CountryCode":"IS", + "StateCode":"4", + "StateName":"Vestfirðir" + }, + { + "CountryCode":"IS", + "StateCode":"5", + "StateName":"Norðurlandvestra" + }, + { + "CountryCode":"IS", + "StateCode":"6", + "StateName":"Norðurlandeystra" + }, + { + "CountryCode":"IS", + "StateCode":"7", + "StateName":"Austurland" + }, + { + "CountryCode":"IS", + "StateCode":"8", + "StateName":"Suðurland" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ke.json b/public/template-common/checkout1/state/ke.json new file mode 100644 index 000000000..7f97596ca --- /dev/null +++ b/public/template-common/checkout1/state/ke.json @@ -0,0 +1,42 @@ +[ + { + "CountryCode":"KE", + "StateCode":"110", + "StateName":"Nairobi" + }, + { + "CountryCode":"KE", + "StateCode":"200", + "StateName":"Central" + }, + { + "CountryCode":"KE", + "StateCode":"300", + "StateName":"Coast" + }, + { + "CountryCode":"KE", + "StateCode":"400", + "StateName":"Eastern" + }, + { + "CountryCode":"KE", + "StateCode":"500", + "StateName":"North-Eastern" + }, + { + "CountryCode":"KE", + "StateCode":"600", + "StateName":"Nyanza" + }, + { + "CountryCode":"KE", + "StateCode":"700", + "StateName":"Rift Valley" + }, + { + "CountryCode":"KE", + "StateCode":"900", + "StateName":"Western" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/kh.json b/public/template-common/checkout1/state/kh.json new file mode 100644 index 000000000..3ffc2dd14 --- /dev/null +++ b/public/template-common/checkout1/state/kh.json @@ -0,0 +1,122 @@ +[ + { + "CountryCode":"KH", + "StateCode":"1", + "StateName":"Banteay Mean Chey" + }, + { + "CountryCode":"KH", + "StateCode":"10", + "StateName":"Kracheh" + }, + { + "CountryCode":"KH", + "StateCode":"11", + "StateName":"Mondol Kiri" + }, + { + "CountryCode":"KH", + "StateCode":"12", + "StateName":"Phnom Penh" + }, + { + "CountryCode":"KH", + "StateCode":"13", + "StateName":"Preah Vihear" + }, + { + "CountryCode":"KH", + "StateCode":"14", + "StateName":"Prey Veaen" + }, + { + "CountryCode":"KH", + "StateCode":"15", + "StateName":"Pousaat" + }, + { + "CountryCode":"KH", + "StateCode":"16", + "StateName":"Rotanak Kiri" + }, + { + "CountryCode":"KH", + "StateCode":"17", + "StateName":"Siem Reab" + }, + { + "CountryCode":"KH", + "StateCode":"18", + "StateName":"Krong Preah Sihanouk" + }, + { + "CountryCode":"KH", + "StateCode":"19", + "StateName":"Stueng Traeng" + }, + { + "CountryCode":"KH", + "StateCode":"2", + "StateName":"Baat Dambang" + }, + { + "CountryCode":"KH", + "StateCode":"20", + "StateName":"Svaay Rien" + }, + { + "CountryCode":"KH", + "StateCode":"21", + "StateName":"Taakae" + }, + { + "CountryCode":"KH", + "StateCode":"22", + "StateName":"Otdar Mean Chey" + }, + { + "CountryCode":"KH", + "StateCode":"23", + "StateName":"Krong Kaeb" + }, + { + "CountryCode":"KH", + "StateCode":"24", + "StateName":"Krong Pailin" + }, + { + "CountryCode":"KH", + "StateCode":"3", + "StateName":"Kampong Chaam" + }, + { + "CountryCode":"KH", + "StateCode":"4", + "StateName":"Kampong Chhnang" + }, + { + "CountryCode":"KH", + "StateCode":"5", + "StateName":"Kampong Spueu" + }, + { + "CountryCode":"KH", + "StateCode":"6", + "StateName":"Kampong Thum" + }, + { + "CountryCode":"KH", + "StateCode":"7", + "StateName":"Kampot" + }, + { + "CountryCode":"KH", + "StateCode":"8", + "StateName":"Kandaal" + }, + { + "CountryCode":"KH", + "StateCode":"9", + "StateName":"Kaoh Kong" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/km.json b/public/template-common/checkout1/state/km.json new file mode 100644 index 000000000..dac254980 --- /dev/null +++ b/public/template-common/checkout1/state/km.json @@ -0,0 +1,17 @@ +[ + { + "CountryCode":"KM", + "StateCode":"A", + "StateName":"Andjouân" + }, + { + "CountryCode":"KM", + "StateCode":"G", + "StateName":"Andjazîdja" + }, + { + "CountryCode":"KM", + "StateCode":"M", + "StateName":"Moûhîlî" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/kw.json b/public/template-common/checkout1/state/kw.json new file mode 100644 index 000000000..03fa5d056 --- /dev/null +++ b/public/template-common/checkout1/state/kw.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"KW", + "StateCode":"AH", + "StateName":"Al Ahmadi" + }, + { + "CountryCode":"KW", + "StateCode":"FA", + "StateName":"Al Farwaniyah" + }, + { + "CountryCode":"KW", + "StateCode":"HA", + "StateName":"Hawalli" + }, + { + "CountryCode":"KW", + "StateCode":"JA", + "StateName":"Al Jahrah" + }, + { + "CountryCode":"KW", + "StateCode":"KU", + "StateName":"Al Kuwayt" + }, + { + "CountryCode":"KW", + "StateCode":"MU", + "StateName":"Mubarakal-Kabir" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/lb.json b/public/template-common/checkout1/state/lb.json new file mode 100644 index 000000000..9cdaa1b5c --- /dev/null +++ b/public/template-common/checkout1/state/lb.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"LB", + "StateCode":"AS", + "StateName":"Loubnâneech Chemâli" + }, + { + "CountryCode":"LB", + "StateCode":"BA", + "StateName":"Beirut" + }, + { + "CountryCode":"LB", + "StateCode":"BI", + "StateName":"El Beqaa" + }, + { + "CountryCode":"LB", + "StateCode":"JA", + "StateName":"Loubnâneej Jnoûbi" + }, + { + "CountryCode":"LB", + "StateCode":"JL", + "StateName":"Jabal Loubnâne" + }, + { + "CountryCode":"LB", + "StateCode":"NA", + "StateName":"Nabatîyé" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/li.json b/public/template-common/checkout1/state/li.json new file mode 100644 index 000000000..81aa4d23d --- /dev/null +++ b/public/template-common/checkout1/state/li.json @@ -0,0 +1,57 @@ +[ + { + "CountryCode":"LI", + "StateCode":"01", + "StateName":"Balzers" + }, + { + "CountryCode":"LI", + "StateCode":"02", + "StateName":"Eschen" + }, + { + "CountryCode":"LI", + "StateCode":"03", + "StateName":"Gamprin" + }, + { + "CountryCode":"LI", + "StateCode":"04", + "StateName":"Mauren" + }, + { + "CountryCode":"LI", + "StateCode":"05", + "StateName":"Planken" + }, + { + "CountryCode":"LI", + "StateCode":"06", + "StateName":"Ruggell" + }, + { + "CountryCode":"LI", + "StateCode":"07", + "StateName":"Schaan" + }, + { + "CountryCode":"LI", + "StateCode":"08", + "StateName":"Schellenberg" + }, + { + "CountryCode":"LI", + "StateCode":"09", + "StateName":"Triesen" + }, + { + "CountryCode":"LI", + "StateCode":"10", + "StateName":"Triesenberg" + }, + { + "CountryCode":"LI", + "StateCode":"11", + "StateName":"Vaduz" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/lu.json b/public/template-common/checkout1/state/lu.json new file mode 100644 index 000000000..49d227dba --- /dev/null +++ b/public/template-common/checkout1/state/lu.json @@ -0,0 +1,17 @@ +[ + { + "CountryCode":"LU", + "StateCode":"D", + "StateName":"Diekirch" + }, + { + "CountryCode":"LU", + "StateCode":"G", + "StateName":"Grevenmacher" + }, + { + "CountryCode":"LU", + "StateCode":"L", + "StateName":"Luxembourg" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ma.json b/public/template-common/checkout1/state/ma.json new file mode 100644 index 000000000..791c2461e --- /dev/null +++ b/public/template-common/checkout1/state/ma.json @@ -0,0 +1,237 @@ +[ + { + "CountryCode":"MA", + "StateCode":"ASZ", + "StateName":"Assa-Zag" + }, + { + "CountryCode":"MA", + "StateCode":"AZI", + "StateName":"Azilal" + }, + { + "CountryCode":"MA", + "StateCode":"BEM", + "StateName":"Beni Mellal" + }, + { + "CountryCode":"MA", + "StateCode":"BER", + "StateName":"Berkane" + }, + { + "CountryCode":"MA", + "StateCode":"BES", + "StateName":"Ben Slimane" + }, + { + "CountryCode":"MA", + "StateCode":"BOD", + "StateName":"Boujdour(EH)" + }, + { + "CountryCode":"MA", + "StateCode":"BOM", + "StateName":"Boulemane" + }, + { + "CountryCode":"MA", + "StateCode":"CHE", + "StateName":"Chefchaouen" + }, + { + "CountryCode":"MA", + "StateCode":"CHI", + "StateName":"Chichaoua" + }, + { + "CountryCode":"MA", + "StateCode":"CHT", + "StateName":"Chtouka-Ait Baha" + }, + { + "CountryCode":"MA", + "StateCode":"ERR", + "StateName":"Errachidia" + }, + { + "CountryCode":"MA", + "StateCode":"ESI", + "StateName":"Essaouira" + }, + { + "CountryCode":"MA", + "StateCode":"ESM", + "StateName":"Es Smara(EH)" + }, + { + "CountryCode":"MA", + "StateCode":"FIG", + "StateName":"Figuig" + }, + { + "CountryCode":"MA", + "StateCode":"GUE", + "StateName":"Guelmim" + }, + { + "CountryCode":"MA", + "StateCode":"HAJ", + "StateName":"El Hajeb" + }, + { + "CountryCode":"MA", + "StateCode":"HAO", + "StateName":"Al Haouz" + }, + { + "CountryCode":"MA", + "StateCode":"HOC", + "StateName":"Al Hoceïma" + }, + { + "CountryCode":"MA", + "StateCode":"IFR", + "StateName":"Ifrane" + }, + { + "CountryCode":"MA", + "StateCode":"JDI", + "StateName":"El Jadida" + }, + { + "CountryCode":"MA", + "StateCode":"JRA", + "StateName":"Jrada" + }, + { + "CountryCode":"MA", + "StateCode":"KEN", + "StateName":"Kénitra" + }, + { + "CountryCode":"MA", + "StateCode":"KES", + "StateName":"Kelaates Sraghna" + }, + { + "CountryCode":"MA", + "StateCode":"KHE", + "StateName":"Khemisset" + }, + { + "CountryCode":"MA", + "StateCode":"KHN", + "StateName":"Khenifra" + }, + { + "CountryCode":"MA", + "StateCode":"KHO", + "StateName":"Khouribga" + }, + { + "CountryCode":"MA", + "StateCode":"LAA", + "StateName":"Laâyoune" + }, + { + "CountryCode":"MA", + "StateCode":"LAR", + "StateName":"Larache" + }, + { + "CountryCode":"MA", + "StateCode":"MED", + "StateName":"Mediouna" + }, + { + "CountryCode":"MA", + "StateCode":"MOU", + "StateName":"Moulay Yacoub" + }, + { + "CountryCode":"MA", + "StateCode":"NAD", + "StateName":"Nador" + }, + { + "CountryCode":"MA", + "StateCode":"NOU", + "StateName":"Nouaceur" + }, + { + "CountryCode":"MA", + "StateCode":"OUA", + "StateName":"Ouarzazate" + }, + { + "CountryCode":"MA", + "StateCode":"OUD", + "StateName":"Oueded Dahab(EH)" + }, + { + "CountryCode":"MA", + "StateCode":"SAF", + "StateName":"Safi" + }, + { + "CountryCode":"MA", + "StateCode":"SEF", + "StateName":"Sefrou" + }, + { + "CountryCode":"MA", + "StateCode":"SET", + "StateName":"Settat" + }, + { + "CountryCode":"MA", + "StateCode":"SIK", + "StateName":"Sidi Kacem" + }, + { + "CountryCode":"MA", + "StateCode":"TAI", + "StateName":"Taourirt" + }, + { + "CountryCode":"MA", + "StateCode":"TAO", + "StateName":"Taounate" + }, + { + "CountryCode":"MA", + "StateCode":"TAR", + "StateName":"Taroudant" + }, + { + "CountryCode":"MA", + "StateCode":"TAT", + "StateName":"Tata" + }, + { + "CountryCode":"MA", + "StateCode":"TAZ", + "StateName":"Taza" + }, + { + "CountryCode":"MA", + "StateCode":"TIZ", + "StateName":"Tiznit" + }, + { + "CountryCode":"MA", + "StateCode":"TNT", + "StateName":"Tan-Tan" + }, + { + "CountryCode":"MA", + "StateCode":"X1", + "StateName":"Laayoune-Boujdour-Sakia El Hamra" + }, + { + "CountryCode":"MA", + "StateCode":"ZAG", + "StateName":"Zagora" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mg.json b/public/template-common/checkout1/state/mg.json new file mode 100644 index 000000000..15ac9ff03 --- /dev/null +++ b/public/template-common/checkout1/state/mg.json @@ -0,0 +1,32 @@ +[ + { + "CountryCode":"MG", + "StateCode":"A", + "StateName":"Toamasina" + }, + { + "CountryCode":"MG", + "StateCode":"D", + "StateName":"Antsiranana" + }, + { + "CountryCode":"MG", + "StateCode":"F", + "StateName":"Fianarantsoa" + }, + { + "CountryCode":"MG", + "StateCode":"M", + "StateName":"Mahajanga" + }, + { + "CountryCode":"MG", + "StateCode":"T", + "StateName":"Antananarivo" + }, + { + "CountryCode":"MG", + "StateCode":"U", + "StateName":"Toliara" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mh.json b/public/template-common/checkout1/state/mh.json new file mode 100644 index 000000000..a29d9469a --- /dev/null +++ b/public/template-common/checkout1/state/mh.json @@ -0,0 +1,122 @@ +[ + { + "CountryCode":"MH", + "StateCode":"ALK", + "StateName":"Ailuk" + }, + { + "CountryCode":"MH", + "StateCode":"ALL", + "StateName":"Ailinglaplap" + }, + { + "CountryCode":"MH", + "StateCode":"ARN", + "StateName":"Arno" + }, + { + "CountryCode":"MH", + "StateCode":"AUR", + "StateName":"Aur" + }, + { + "CountryCode":"MH", + "StateCode":"EBO", + "StateName":"Ebon" + }, + { + "CountryCode":"MH", + "StateCode":"ENI", + "StateName":"Enewetak" + }, + { + "CountryCode":"MH", + "StateCode":"JAB", + "StateName":"Jabat" + }, + { + "CountryCode":"MH", + "StateCode":"JAL", + "StateName":"Jaluit" + }, + { + "CountryCode":"MH", + "StateCode":"KIL", + "StateName":"Kili" + }, + { + "CountryCode":"MH", + "StateCode":"KWA", + "StateName":"Kwajalein" + }, + { + "CountryCode":"MH", + "StateCode":"LAE", + "StateName":"Lae" + }, + { + "CountryCode":"MH", + "StateCode":"LIB", + "StateName":"Lib" + }, + { + "CountryCode":"MH", + "StateCode":"LIK", + "StateName":"Likiep" + }, + { + "CountryCode":"MH", + "StateCode":"MAJ", + "StateName":"Majuro" + }, + { + "CountryCode":"MH", + "StateCode":"MAL", + "StateName":"Maloelap" + }, + { + "CountryCode":"MH", + "StateCode":"MEJ", + "StateName":"Mejit" + }, + { + "CountryCode":"MH", + "StateCode":"MIL", + "StateName":"Mili" + }, + { + "CountryCode":"MH", + "StateCode":"NMK", + "StateName":"Namdrik" + }, + { + "CountryCode":"MH", + "StateCode":"NMU", + "StateName":"Namu" + }, + { + "CountryCode":"MH", + "StateCode":"RON", + "StateName":"Rongelap" + }, + { + "CountryCode":"MH", + "StateCode":"UJA", + "StateName":"Ujae" + }, + { + "CountryCode":"MH", + "StateCode":"UTI", + "StateName":"Utirik" + }, + { + "CountryCode":"MH", + "StateCode":"WTH", + "StateName":"Wotho" + }, + { + "CountryCode":"MH", + "StateCode":"WTJ", + "StateName":"Wotje" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mu.json b/public/template-common/checkout1/state/mu.json new file mode 100644 index 000000000..39950f82c --- /dev/null +++ b/public/template-common/checkout1/state/mu.json @@ -0,0 +1,87 @@ +[ + { + "CountryCode":"MU", + "StateCode":"AG", + "StateName":"Agalega Islands" + }, + { + "CountryCode":"MU", + "StateCode":"BL", + "StateName":"Black River" + }, + { + "CountryCode":"MU", + "StateCode":"BR", + "StateName":"Beau Bassin-Rose Hill" + }, + { + "CountryCode":"MU", + "StateCode":"CC", + "StateName":"Cargados Carajos Shoals" + }, + { + "CountryCode":"MU", + "StateCode":"CU", + "StateName":"Curepipe" + }, + { + "CountryCode":"MU", + "StateCode":"FL", + "StateName":"Flacq" + }, + { + "CountryCode":"MU", + "StateCode":"GP", + "StateName":"Grand Port" + }, + { + "CountryCode":"MU", + "StateCode":"MO", + "StateName":"Moka" + }, + { + "CountryCode":"MU", + "StateCode":"PA", + "StateName":"Pamplemousses" + }, + { + "CountryCode":"MU", + "StateCode":"PL", + "StateName":"Port Louis City" + }, + { + "CountryCode":"MU", + "StateCode":"PU", + "StateName":"Port Louis District" + }, + { + "CountryCode":"MU", + "StateCode":"PW", + "StateName":"Plaines Wilhems" + }, + { + "CountryCode":"MU", + "StateCode":"QB", + "StateName":"Quatre Bornes" + }, + { + "CountryCode":"MU", + "StateCode":"RO", + "StateName":"Rodrigues Island" + }, + { + "CountryCode":"MU", + "StateCode":"RR", + "StateName":"Rivièredu Rempart" + }, + { + "CountryCode":"MU", + "StateCode":"SA", + "StateName":"Savanne" + }, + { + "CountryCode":"MU", + "StateCode":"VP", + "StateName":"Vacoas-Phoenix" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mv.json b/public/template-common/checkout1/state/mv.json new file mode 100644 index 000000000..634a2cb4c --- /dev/null +++ b/public/template-common/checkout1/state/mv.json @@ -0,0 +1,107 @@ +[ + { + "CountryCode":"MV", + "StateCode":"01", + "StateName":"Seenu" + }, + { + "CountryCode":"MV", + "StateCode":"02", + "StateName":"Alif" + }, + { + "CountryCode":"MV", + "StateCode":"03", + "StateName":"Lhaviyani" + }, + { + "CountryCode":"MV", + "StateCode":"04", + "StateName":"Vaavu" + }, + { + "CountryCode":"MV", + "StateCode":"05", + "StateName":"Laamu" + }, + { + "CountryCode":"MV", + "StateCode":"07", + "StateName":"Haa Alif" + }, + { + "CountryCode":"MV", + "StateCode":"08", + "StateName":"Thaa" + }, + { + "CountryCode":"MV", + "StateCode":"12", + "StateName":"Meemu" + }, + { + "CountryCode":"MV", + "StateCode":"13", + "StateName":"Raa" + }, + { + "CountryCode":"MV", + "StateCode":"14", + "StateName":"Faafu" + }, + { + "CountryCode":"MV", + "StateCode":"17", + "StateName":"Dhaalu" + }, + { + "CountryCode":"MV", + "StateCode":"20", + "StateName":"Baa" + }, + { + "CountryCode":"MV", + "StateCode":"23", + "StateName":"Haa Dhaalu" + }, + { + "CountryCode":"MV", + "StateCode":"24", + "StateName":"Shaviyani" + }, + { + "CountryCode":"MV", + "StateCode":"25", + "StateName":"Noonu" + }, + { + "CountryCode":"MV", + "StateCode":"26", + "StateName":"Kaafu" + }, + { + "CountryCode":"MV", + "StateCode":"27", + "StateName":"Gaaf Alif" + }, + { + "CountryCode":"MV", + "StateCode":"28", + "StateName":"Gaafu Dhaalu" + }, + { + "CountryCode":"MV", + "StateCode":"29", + "StateName":"Gnaviyani" + }, + { + "CountryCode":"MV", + "StateCode":"MLE", + "StateName":"Male" + }, + { + "CountryCode":"MV", + "StateCode":"X1", + "StateName":"Alif Dhaal" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mw.json b/public/template-common/checkout1/state/mw.json new file mode 100644 index 000000000..19fe4ce30 --- /dev/null +++ b/public/template-common/checkout1/state/mw.json @@ -0,0 +1,157 @@ +[ + { + "CountryCode":"MW", + "StateCode":"BA", + "StateName":"Balaka" + }, + { + "CountryCode":"MW", + "StateCode":"BL", + "StateName":"Blantyre" + }, + { + "CountryCode":"MW", + "StateCode":"C", + "StateName":"Central Region" + }, + { + "CountryCode":"MW", + "StateCode":"CK", + "StateName":"Chikwawa" + }, + { + "CountryCode":"MW", + "StateCode":"CR", + "StateName":"Chiradzulu" + }, + { + "CountryCode":"MW", + "StateCode":"CT", + "StateName":"Chitipa" + }, + { + "CountryCode":"MW", + "StateCode":"DE", + "StateName":"Dedza" + }, + { + "CountryCode":"MW", + "StateCode":"DO", + "StateName":"Dowa" + }, + { + "CountryCode":"MW", + "StateCode":"KR", + "StateName":"Karonga" + }, + { + "CountryCode":"MW", + "StateCode":"KS", + "StateName":"Kasungu" + }, + { + "CountryCode":"MW", + "StateCode":"LI", + "StateName":"Lilongwe" + }, + { + "CountryCode":"MW", + "StateCode":"LK", + "StateName":"Likoma" + }, + { + "CountryCode":"MW", + "StateCode":"MC", + "StateName":"Mchinji" + }, + { + "CountryCode":"MW", + "StateCode":"MG", + "StateName":"Mangochi" + }, + { + "CountryCode":"MW", + "StateCode":"MH", + "StateName":"Machinga" + }, + { + "CountryCode":"MW", + "StateCode":"MU", + "StateName":"Mulanje" + }, + { + "CountryCode":"MW", + "StateCode":"MW", + "StateName":"Mwanza" + }, + { + "CountryCode":"MW", + "StateCode":"MZ", + "StateName":"Mzimba" + }, + { + "CountryCode":"MW", + "StateCode":"N", + "StateName":"Northern Region" + }, + { + "CountryCode":"MW", + "StateCode":"NB", + "StateName":"Nkhata Bay" + }, + { + "CountryCode":"MW", + "StateCode":"NE", + "StateName":"Neno" + }, + { + "CountryCode":"MW", + "StateCode":"NI", + "StateName":"Ntchisi" + }, + { + "CountryCode":"MW", + "StateCode":"NK", + "StateName":"Nkhotakota" + }, + { + "CountryCode":"MW", + "StateCode":"NS", + "StateName":"Nsanje" + }, + { + "CountryCode":"MW", + "StateCode":"NU", + "StateName":"Ntcheu" + }, + { + "CountryCode":"MW", + "StateCode":"PH", + "StateName":"Phalombe" + }, + { + "CountryCode":"MW", + "StateCode":"RU", + "StateName":"Rumphi" + }, + { + "CountryCode":"MW", + "StateCode":"S", + "StateName":"Southern Region" + }, + { + "CountryCode":"MW", + "StateCode":"SA", + "StateName":"Salima" + }, + { + "CountryCode":"MW", + "StateCode":"TH", + "StateName":"Thyolo" + }, + { + "CountryCode":"MW", + "StateCode":"ZO", + "StateName":"Zomba" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/my.json b/public/template-common/checkout1/state/my.json new file mode 100644 index 000000000..8f5eb90cf --- /dev/null +++ b/public/template-common/checkout1/state/my.json @@ -0,0 +1,82 @@ +[ + { + "CountryCode":"MY", + "StateCode":"01", + "StateName":"Johor" + }, + { + "CountryCode":"MY", + "StateCode":"02", + "StateName":"Kedah" + }, + { + "CountryCode":"MY", + "StateCode":"03", + "StateName":"Kelantan" + }, + { + "CountryCode":"MY", + "StateCode":"04", + "StateName":"Melaka" + }, + { + "CountryCode":"MY", + "StateCode":"05", + "StateName":"Negeri Sembilan" + }, + { + "CountryCode":"MY", + "StateCode":"06", + "StateName":"Pahang" + }, + { + "CountryCode":"MY", + "StateCode":"07", + "StateName":"Pulau Pinang" + }, + { + "CountryCode":"MY", + "StateCode":"08", + "StateName":"Perak" + }, + { + "CountryCode":"MY", + "StateCode":"09", + "StateName":"Perlis" + }, + { + "CountryCode":"MY", + "StateCode":"10", + "StateName":"Selangor" + }, + { + "CountryCode":"MY", + "StateCode":"11", + "StateName":"Terengganu" + }, + { + "CountryCode":"MY", + "StateCode":"12", + "StateName":"Sabah" + }, + { + "CountryCode":"MY", + "StateCode":"13", + "StateName":"Sarawak" + }, + { + "CountryCode":"MY", + "StateCode":"14", + "StateName":"Wilayah Persekutuan Kuala Lumpur" + }, + { + "CountryCode":"MY", + "StateCode":"15", + "StateName":"Wilayah Persekutuan Labuan" + }, + { + "CountryCode":"MY", + "StateCode":"16", + "StateName":"Wilayah Persekutuan Putrajaya" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/mz.json b/public/template-common/checkout1/state/mz.json new file mode 100644 index 000000000..5f6b57067 --- /dev/null +++ b/public/template-common/checkout1/state/mz.json @@ -0,0 +1,57 @@ +[ + { + "CountryCode":"MZ", + "StateCode":"A", + "StateName":"Niassa" + }, + { + "CountryCode":"MZ", + "StateCode":"B", + "StateName":"Manica" + }, + { + "CountryCode":"MZ", + "StateCode":"G", + "StateName":"Gaza" + }, + { + "CountryCode":"MZ", + "StateCode":"I", + "StateName":"Inhambane" + }, + { + "CountryCode":"MZ", + "StateCode":"L", + "StateName":"Maputo" + }, + { + "CountryCode":"MZ", + "StateCode":"MPM", + "StateName":"Maputo City" + }, + { + "CountryCode":"MZ", + "StateCode":"N", + "StateName":"Nampula" + }, + { + "CountryCode":"MZ", + "StateCode":"P", + "StateName":"Cabo Delgado" + }, + { + "CountryCode":"MZ", + "StateCode":"Q", + "StateName":"Zambézia" + }, + { + "CountryCode":"MZ", + "StateCode":"S", + "StateName":"Sofala" + }, + { + "CountryCode":"MZ", + "StateCode":"T", + "StateName":"Tete" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/na.json b/public/template-common/checkout1/state/na.json new file mode 100644 index 000000000..40ae6bedf --- /dev/null +++ b/public/template-common/checkout1/state/na.json @@ -0,0 +1,67 @@ +[ + { + "CountryCode":"NA", + "StateCode":"CA", + "StateName":"Caprivi" + }, + { + "CountryCode":"NA", + "StateCode":"ER", + "StateName":"Erongo" + }, + { + "CountryCode":"NA", + "StateCode":"HA", + "StateName":"Hardap" + }, + { + "CountryCode":"NA", + "StateCode":"KA", + "StateName":"Karas" + }, + { + "CountryCode":"NA", + "StateCode":"KH", + "StateName":"Khomas" + }, + { + "CountryCode":"NA", + "StateCode":"KU", + "StateName":"Kunene" + }, + { + "CountryCode":"NA", + "StateCode":"OD", + "StateName":"Otjozondjupa" + }, + { + "CountryCode":"NA", + "StateCode":"OH", + "StateName":"Omaheke" + }, + { + "CountryCode":"NA", + "StateCode":"OK", + "StateName":"Okavango" + }, + { + "CountryCode":"NA", + "StateCode":"ON", + "StateName":"Oshana" + }, + { + "CountryCode":"NA", + "StateCode":"OS", + "StateName":"Omusati" + }, + { + "CountryCode":"NA", + "StateCode":"OT", + "StateName":"Oshikoto" + }, + { + "CountryCode":"NA", + "StateCode":"OW", + "StateName":"Ohangwena" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ng.json b/public/template-common/checkout1/state/ng.json new file mode 100644 index 000000000..6bec03319 --- /dev/null +++ b/public/template-common/checkout1/state/ng.json @@ -0,0 +1,187 @@ +[ + { + "CountryCode":"NG", + "StateCode":"AB", + "StateName":"Abia" + }, + { + "CountryCode":"NG", + "StateCode":"AD", + "StateName":"Adamawa" + }, + { + "CountryCode":"NG", + "StateCode":"AK", + "StateName":"Akwa Ibom" + }, + { + "CountryCode":"NG", + "StateCode":"AN", + "StateName":"Anambra" + }, + { + "CountryCode":"NG", + "StateCode":"BA", + "StateName":"Bauchi" + }, + { + "CountryCode":"NG", + "StateCode":"BE", + "StateName":"Benue" + }, + { + "CountryCode":"NG", + "StateCode":"BO", + "StateName":"Borno" + }, + { + "CountryCode":"NG", + "StateCode":"BY", + "StateName":"Bayelsa" + }, + { + "CountryCode":"NG", + "StateCode":"CR", + "StateName":"Cross River" + }, + { + "CountryCode":"NG", + "StateCode":"DE", + "StateName":"Delta" + }, + { + "CountryCode":"NG", + "StateCode":"EB", + "StateName":"Ebonyi" + }, + { + "CountryCode":"NG", + "StateCode":"ED", + "StateName":"Edo" + }, + { + "CountryCode":"NG", + "StateCode":"EK", + "StateName":"Ekiti" + }, + { + "CountryCode":"NG", + "StateCode":"EN", + "StateName":"Enugu" + }, + { + "CountryCode":"NG", + "StateCode":"FC", + "StateName":"Abuja Federal Capital Territory" + }, + { + "CountryCode":"NG", + "StateCode":"GO", + "StateName":"Gombe" + }, + { + "CountryCode":"NG", + "StateCode":"IM", + "StateName":"Imo" + }, + { + "CountryCode":"NG", + "StateCode":"JI", + "StateName":"Jigawa" + }, + { + "CountryCode":"NG", + "StateCode":"KD", + "StateName":"Kaduna" + }, + { + "CountryCode":"NG", + "StateCode":"KE", + "StateName":"Kebbi" + }, + { + "CountryCode":"NG", + "StateCode":"KN", + "StateName":"Kano" + }, + { + "CountryCode":"NG", + "StateCode":"KO", + "StateName":"Kogi" + }, + { + "CountryCode":"NG", + "StateCode":"KT", + "StateName":"Katsina" + }, + { + "CountryCode":"NG", + "StateCode":"KW", + "StateName":"Kwara" + }, + { + "CountryCode":"NG", + "StateCode":"LA", + "StateName":"Lagos" + }, + { + "CountryCode":"NG", + "StateCode":"NA", + "StateName":"Nassarawa" + }, + { + "CountryCode":"NG", + "StateCode":"NI", + "StateName":"Niger" + }, + { + "CountryCode":"NG", + "StateCode":"OG", + "StateName":"Ogun" + }, + { + "CountryCode":"NG", + "StateCode":"ON", + "StateName":"Ondo" + }, + { + "CountryCode":"NG", + "StateCode":"OS", + "StateName":"Osun" + }, + { + "CountryCode":"NG", + "StateCode":"OY", + "StateName":"Oyo" + }, + { + "CountryCode":"NG", + "StateCode":"PL", + "StateName":"Plateau" + }, + { + "CountryCode":"NG", + "StateCode":"RI", + "StateName":"Rivers" + }, + { + "CountryCode":"NG", + "StateCode":"SO", + "StateName":"Sokoto" + }, + { + "CountryCode":"NG", + "StateCode":"TA", + "StateName":"Taraba" + }, + { + "CountryCode":"NG", + "StateCode":"YO", + "StateName":"Yobe" + }, + { + "CountryCode":"NG", + "StateCode":"ZA", + "StateName":"Zamfara" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/nl.json b/public/template-common/checkout1/state/nl.json new file mode 100644 index 000000000..c8fc4c19b --- /dev/null +++ b/public/template-common/checkout1/state/nl.json @@ -0,0 +1,62 @@ +[ + { + "CountryCode":"NL", + "StateCode":"DR", + "StateName":"Drenthe" + }, + { + "CountryCode":"NL", + "StateCode":"FL", + "StateName":"Flevoland" + }, + { + "CountryCode":"NL", + "StateCode":"FR", + "StateName":"Friesland" + }, + { + "CountryCode":"NL", + "StateCode":"GE", + "StateName":"Gelderland" + }, + { + "CountryCode":"NL", + "StateCode":"GR", + "StateName":"Groningen" + }, + { + "CountryCode":"NL", + "StateCode":"LI", + "StateName":"Limburg" + }, + { + "CountryCode":"NL", + "StateCode":"NB", + "StateName":"Noord-Brabant" + }, + { + "CountryCode":"NL", + "StateCode":"NH", + "StateName":"Noord-Holland" + }, + { + "CountryCode":"NL", + "StateCode":"OV", + "StateName":"Overijssel" + }, + { + "CountryCode":"NL", + "StateCode":"UT", + "StateName":"Utrecht" + }, + { + "CountryCode":"NL", + "StateCode":"ZE", + "StateName":"Zeeland" + }, + { + "CountryCode":"NL", + "StateCode":"ZH", + "StateName":"Zuid-Holland" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/no.json b/public/template-common/checkout1/state/no.json new file mode 100644 index 000000000..f3f5ea73a --- /dev/null +++ b/public/template-common/checkout1/state/no.json @@ -0,0 +1,107 @@ +[ + { + "CountryCode":"NO", + "StateCode":"01", + "StateName":"Østfold" + }, + { + "CountryCode":"NO", + "StateCode":"02", + "StateName":"Akershus" + }, + { + "CountryCode":"NO", + "StateCode":"03", + "StateName":"Oslo" + }, + { + "CountryCode":"NO", + "StateCode":"04", + "StateName":"Hedmark" + }, + { + "CountryCode":"NO", + "StateCode":"05", + "StateName":"Oppland" + }, + { + "CountryCode":"NO", + "StateCode":"06", + "StateName":"Buskerud" + }, + { + "CountryCode":"NO", + "StateCode":"07", + "StateName":"Vestfold" + }, + { + "CountryCode":"NO", + "StateCode":"08", + "StateName":"Telemark" + }, + { + "CountryCode":"NO", + "StateCode":"09", + "StateName":"Aust-Agder" + }, + { + "CountryCode":"NO", + "StateCode":"10", + "StateName":"Vest-Agder" + }, + { + "CountryCode":"NO", + "StateCode":"11", + "StateName":"Rogaland" + }, + { + "CountryCode":"NO", + "StateCode":"12", + "StateName":"Hordaland" + }, + { + "CountryCode":"NO", + "StateCode":"14", + "StateName":"Sognog Fjordane" + }, + { + "CountryCode":"NO", + "StateCode":"15", + "StateName":"Møreog Romsdal" + }, + { + "CountryCode":"NO", + "StateCode":"16", + "StateName":"Sør-Trøndelag" + }, + { + "CountryCode":"NO", + "StateCode":"17", + "StateName":"Nord-Trøndelag" + }, + { + "CountryCode":"NO", + "StateCode":"18", + "StateName":"Nordland" + }, + { + "CountryCode":"NO", + "StateCode":"19", + "StateName":"Troms" + }, + { + "CountryCode":"NO", + "StateCode":"20", + "StateName":"Finnmark" + }, + { + "CountryCode":"NO", + "StateCode":"21", + "StateName":"Svalbard" + }, + { + "CountryCode":"NO", + "StateCode":"22", + "StateName":"Jan Mayen" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ph.json b/public/template-common/checkout1/state/ph.json new file mode 100644 index 000000000..b53769aee --- /dev/null +++ b/public/template-common/checkout1/state/ph.json @@ -0,0 +1,492 @@ +[ + { + "CountryCode":"PH", + "StateCode":"00", + "StateName":"National Capital Region" + }, + { + "CountryCode":"PH", + "StateCode":"01", + "StateName":"Ilocos(RegionI)" + }, + { + "CountryCode":"PH", + "StateCode":"02", + "StateName":"Cagayan Valley(RegionII)" + }, + { + "CountryCode":"PH", + "StateCode":"03", + "StateName":"Central Luzon(RegionIII)" + }, + { + "CountryCode":"PH", + "StateCode":"05", + "StateName":"Bicol(Region V)" + }, + { + "CountryCode":"PH", + "StateCode":"06", + "StateName":"Western Visayas(Region VI)" + }, + { + "CountryCode":"PH", + "StateCode":"07", + "StateName":"Central Visayas(Region VII)" + }, + { + "CountryCode":"PH", + "StateCode":"08", + "StateName":"Eastern Visayas(Region VIII)" + }, + { + "CountryCode":"PH", + "StateCode":"09", + "StateName":"Zamboanga Peninsula(Region IX)" + }, + { + "CountryCode":"PH", + "StateCode":"10", + "StateName":"Northern Mindanao(Region X)" + }, + { + "CountryCode":"PH", + "StateCode":"11", + "StateName":"Davao(Region XI)" + }, + { + "CountryCode":"PH", + "StateCode":"12", + "StateName":"Soccsksargen(Region XII)" + }, + { + "CountryCode":"PH", + "StateCode":"13", + "StateName":"Caraga(Region XIII)" + }, + { + "CountryCode":"PH", + "StateCode":"14", + "StateName":"Autonomous Regionin Muslim Mindanao(ARMM)" + }, + { + "CountryCode":"PH", + "StateCode":"15", + "StateName":"Cordillera Administrative Region(CAR)" + }, + { + "CountryCode":"PH", + "StateCode":"40", + "StateName":"CALABARZON(Region IV-A)" + }, + { + "CountryCode":"PH", + "StateCode":"41", + "StateName":"MIMAROPA(Region IV-B)" + }, + { + "CountryCode":"PH", + "StateCode":"ABR", + "StateName":"Abra" + }, + { + "CountryCode":"PH", + "StateCode":"AGN", + "StateName":"Agusandel Norte" + }, + { + "CountryCode":"PH", + "StateCode":"AGS", + "StateName":"Agusandel Sur" + }, + { + "CountryCode":"PH", + "StateCode":"AKL", + "StateName":"Aklan" + }, + { + "CountryCode":"PH", + "StateCode":"ALB", + "StateName":"Albay" + }, + { + "CountryCode":"PH", + "StateCode":"ANT", + "StateName":"Antique" + }, + { + "CountryCode":"PH", + "StateCode":"APA", + "StateName":"Apayao" + }, + { + "CountryCode":"PH", + "StateCode":"AUR", + "StateName":"Aurora" + }, + { + "CountryCode":"PH", + "StateCode":"BAN", + "StateName":"Bataan" + }, + { + "CountryCode":"PH", + "StateCode":"BAS", + "StateName":"Basilan" + }, + { + "CountryCode":"PH", + "StateCode":"BEN", + "StateName":"Benguet" + }, + { + "CountryCode":"PH", + "StateCode":"BIL", + "StateName":"Biliran" + }, + { + "CountryCode":"PH", + "StateCode":"BOH", + "StateName":"Bohol" + }, + { + "CountryCode":"PH", + "StateCode":"BTG", + "StateName":"Batangas" + }, + { + "CountryCode":"PH", + "StateCode":"BTN", + "StateName":"Batanes" + }, + { + "CountryCode":"PH", + "StateCode":"BUK", + "StateName":"Bukidnon" + }, + { + "CountryCode":"PH", + "StateCode":"BUL", + "StateName":"Bulacan" + }, + { + "CountryCode":"PH", + "StateCode":"CAG", + "StateName":"Cagayan" + }, + { + "CountryCode":"PH", + "StateCode":"CAM", + "StateName":"Camiguin" + }, + { + "CountryCode":"PH", + "StateCode":"CAN", + "StateName":"Camarines Norte" + }, + { + "CountryCode":"PH", + "StateCode":"CAP", + "StateName":"Capiz" + }, + { + "CountryCode":"PH", + "StateCode":"CAS", + "StateName":"Camarines Sur" + }, + { + "CountryCode":"PH", + "StateCode":"CAT", + "StateName":"Catanduanes" + }, + { + "CountryCode":"PH", + "StateCode":"CAV", + "StateName":"Cavite" + }, + { + "CountryCode":"PH", + "StateCode":"CEB", + "StateName":"Cebu" + }, + { + "CountryCode":"PH", + "StateCode":"COM", + "StateName":"Compostela Valley" + }, + { + "CountryCode":"PH", + "StateCode":"DAO", + "StateName":"Davao Oriental" + }, + { + "CountryCode":"PH", + "StateCode":"DAS", + "StateName":"Davaodel Sur" + }, + { + "CountryCode":"PH", + "StateCode":"DAV", + "StateName":"Davaodel Norte" + }, + { + "CountryCode":"PH", + "StateCode":"DIN", + "StateName":"Dinagat Islands" + }, + { + "CountryCode":"PH", + "StateCode":"EAS", + "StateName":"Eastern Samar" + }, + { + "CountryCode":"PH", + "StateCode":"GUI", + "StateName":"Guimaras" + }, + { + "CountryCode":"PH", + "StateCode":"IFU", + "StateName":"Ifugao" + }, + { + "CountryCode":"PH", + "StateCode":"ILI", + "StateName":"Iloilo" + }, + { + "CountryCode":"PH", + "StateCode":"ILN", + "StateName":"Ilocos Norte" + }, + { + "CountryCode":"PH", + "StateCode":"ILS", + "StateName":"Ilocos Sur" + }, + { + "CountryCode":"PH", + "StateCode":"ISA", + "StateName":"Isabela" + }, + { + "CountryCode":"PH", + "StateCode":"KAL", + "StateName":"Kalinga" + }, + { + "CountryCode":"PH", + "StateCode":"LAG", + "StateName":"Laguna" + }, + { + "CountryCode":"PH", + "StateCode":"LAN", + "StateName":"Lanaodel Norte" + }, + { + "CountryCode":"PH", + "StateCode":"LAS", + "StateName":"Lanaodel Sur" + }, + { + "CountryCode":"PH", + "StateCode":"LEY", + "StateName":"Leyte" + }, + { + "CountryCode":"PH", + "StateCode":"LUN", + "StateName":"La Union" + }, + { + "CountryCode":"PH", + "StateCode":"MAD", + "StateName":"Marinduque" + }, + { + "CountryCode":"PH", + "StateCode":"MAG", + "StateName":"Maguindanao" + }, + { + "CountryCode":"PH", + "StateCode":"MAS", + "StateName":"Masbate" + }, + { + "CountryCode":"PH", + "StateCode":"MDC", + "StateName":"Mindoro Occidental" + }, + { + "CountryCode":"PH", + "StateCode":"MDR", + "StateName":"Mindoro Oriental" + }, + { + "CountryCode":"PH", + "StateCode":"MOU", + "StateName":"Mountain Province" + }, + { + "CountryCode":"PH", + "StateCode":"MSC", + "StateName":"Misamis Occidental" + }, + { + "CountryCode":"PH", + "StateCode":"MSR", + "StateName":"Misamis Oriental" + }, + { + "CountryCode":"PH", + "StateCode":"NCO", + "StateName":"North Cotabato" + }, + { + "CountryCode":"PH", + "StateCode":"NEC", + "StateName":"Negros Occidental" + }, + { + "CountryCode":"PH", + "StateCode":"NER", + "StateName":"Negros Oriental" + }, + { + "CountryCode":"PH", + "StateCode":"NSA", + "StateName":"Northern Samar" + }, + { + "CountryCode":"PH", + "StateCode":"NUE", + "StateName":"Nueva Ecija" + }, + { + "CountryCode":"PH", + "StateCode":"NUV", + "StateName":"Nueva Vizcaya" + }, + { + "CountryCode":"PH", + "StateCode":"PAM", + "StateName":"Pampanga" + }, + { + "CountryCode":"PH", + "StateCode":"PAN", + "StateName":"Pangasinan" + }, + { + "CountryCode":"PH", + "StateCode":"PLW", + "StateName":"Palawan" + }, + { + "CountryCode":"PH", + "StateCode":"QUE", + "StateName":"Quezon" + }, + { + "CountryCode":"PH", + "StateCode":"QUI", + "StateName":"Quirino" + }, + { + "CountryCode":"PH", + "StateCode":"RIZ", + "StateName":"Rizal" + }, + { + "CountryCode":"PH", + "StateCode":"ROM", + "StateName":"Romblon" + }, + { + "CountryCode":"PH", + "StateCode":"SAR", + "StateName":"Sarangani" + }, + { + "CountryCode":"PH", + "StateCode":"SCO", + "StateName":"South Cotabato" + }, + { + "CountryCode":"PH", + "StateCode":"SIG", + "StateName":"Siquijor" + }, + { + "CountryCode":"PH", + "StateCode":"SLE", + "StateName":"Southern Leyte" + }, + { + "CountryCode":"PH", + "StateCode":"SLU", + "StateName":"Sulu" + }, + { + "CountryCode":"PH", + "StateCode":"SOR", + "StateName":"Sorsogon" + }, + { + "CountryCode":"PH", + "StateCode":"SUK", + "StateName":"Sultan Kudarat" + }, + { + "CountryCode":"PH", + "StateCode":"SUN", + "StateName":"Surigaodel Norte" + }, + { + "CountryCode":"PH", + "StateCode":"SUR", + "StateName":"Surigaodel Sur" + }, + { + "CountryCode":"PH", + "StateCode":"TAR", + "StateName":"Tarlac" + }, + { + "CountryCode":"PH", + "StateCode":"TAW", + "StateName":"Tawi-Tawi" + }, + { + "CountryCode":"PH", + "StateCode":"WSA", + "StateName":"Western Samar" + }, + { + "CountryCode":"PH", + "StateCode":"X2", + "StateName":"Shariff Kabunsuan" + }, + { + "CountryCode":"PH", + "StateCode":"ZAN", + "StateName":"Zamboangadel Norte" + }, + { + "CountryCode":"PH", + "StateCode":"ZAS", + "StateName":"Zamboangadel Sur" + }, + { + "CountryCode":"PH", + "StateCode":"ZMB", + "StateName":"Zambales" + }, + { + "CountryCode":"PH", + "StateCode":"ZSI", + "StateName":"Zamboanga Sibugue" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/pl.json b/public/template-common/checkout1/state/pl.json new file mode 100644 index 000000000..9f87d23dd --- /dev/null +++ b/public/template-common/checkout1/state/pl.json @@ -0,0 +1,82 @@ +[ + { + "CountryCode":"PL", + "StateCode":"DS", + "StateName":"Dolnoslaskie" + }, + { + "CountryCode":"PL", + "StateCode":"KP", + "StateName":"Kujawsko-pomorskie" + }, + { + "CountryCode":"PL", + "StateCode":"LB", + "StateName":"Lubuskie" + }, + { + "CountryCode":"PL", + "StateCode":"LD", + "StateName":"Lódzkie" + }, + { + "CountryCode":"PL", + "StateCode":"LU", + "StateName":"Lubelskie" + }, + { + "CountryCode":"PL", + "StateCode":"MA", + "StateName":"Malopolskie" + }, + { + "CountryCode":"PL", + "StateCode":"MZ", + "StateName":"Mazowieckie" + }, + { + "CountryCode":"PL", + "StateCode":"OP", + "StateName":"Opolskie" + }, + { + "CountryCode":"PL", + "StateCode":"PD", + "StateName":"Podlaskie" + }, + { + "CountryCode":"PL", + "StateCode":"PK", + "StateName":"Podkarpackie" + }, + { + "CountryCode":"PL", + "StateCode":"PM", + "StateName":"Pomorskie" + }, + { + "CountryCode":"PL", + "StateCode":"SK", + "StateName":"Swietokrzyskie" + }, + { + "CountryCode":"PL", + "StateCode":"SL", + "StateName":"Slaskie" + }, + { + "CountryCode":"PL", + "StateCode":"WN", + "StateName":"Warminsko-mazurskie" + }, + { + "CountryCode":"PL", + "StateCode":"WP", + "StateName":"Wielkopolskie" + }, + { + "CountryCode":"PL", + "StateCode":"ZP", + "StateName":"Zachodniopomorskie" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/pt.json b/public/template-common/checkout1/state/pt.json new file mode 100644 index 000000000..34bdb6f9c --- /dev/null +++ b/public/template-common/checkout1/state/pt.json @@ -0,0 +1,102 @@ +[ + { + "CountryCode":"PT", + "StateCode":"01", + "StateName":"Aveiro" + }, + { + "CountryCode":"PT", + "StateCode":"02", + "StateName":"Beja" + }, + { + "CountryCode":"PT", + "StateCode":"03", + "StateName":"Braga" + }, + { + "CountryCode":"PT", + "StateCode":"04", + "StateName":"Bragança" + }, + { + "CountryCode":"PT", + "StateCode":"05", + "StateName":"Castelo Branco" + }, + { + "CountryCode":"PT", + "StateCode":"06", + "StateName":"Coimbra" + }, + { + "CountryCode":"PT", + "StateCode":"07", + "StateName":"Évora" + }, + { + "CountryCode":"PT", + "StateCode":"08", + "StateName":"Faro" + }, + { + "CountryCode":"PT", + "StateCode":"09", + "StateName":"Guarda" + }, + { + "CountryCode":"PT", + "StateCode":"10", + "StateName":"Leiria" + }, + { + "CountryCode":"PT", + "StateCode":"11", + "StateName":"Lisboa" + }, + { + "CountryCode":"PT", + "StateCode":"12", + "StateName":"Portalegre" + }, + { + "CountryCode":"PT", + "StateCode":"13", + "StateName":"Porto" + }, + { + "CountryCode":"PT", + "StateCode":"14", + "StateName":"Santarém" + }, + { + "CountryCode":"PT", + "StateCode":"15", + "StateName":"Setúbal" + }, + { + "CountryCode":"PT", + "StateCode":"16", + "StateName":"Vianado Castelo" + }, + { + "CountryCode":"PT", + "StateCode":"17", + "StateName":"Vila Real" + }, + { + "CountryCode":"PT", + "StateCode":"18", + "StateName":"Viseu" + }, + { + "CountryCode":"PT", + "StateCode":"20", + "StateName":"Região Autónoma dos Açores" + }, + { + "CountryCode":"PT", + "StateCode":"30", + "StateName":"Região Autónoma da Madeira" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/pw.json b/public/template-common/checkout1/state/pw.json new file mode 100644 index 000000000..517a3d356 --- /dev/null +++ b/public/template-common/checkout1/state/pw.json @@ -0,0 +1,82 @@ +[ + { + "CountryCode":"PW", + "StateCode":"002", + "StateName":"Aimeliik" + }, + { + "CountryCode":"PW", + "StateCode":"004", + "StateName":"Airai" + }, + { + "CountryCode":"PW", + "StateCode":"010", + "StateName":"Angaur" + }, + { + "CountryCode":"PW", + "StateCode":"050", + "StateName":"Hatobohei" + }, + { + "CountryCode":"PW", + "StateCode":"100", + "StateName":"Kayangel" + }, + { + "CountryCode":"PW", + "StateCode":"150", + "StateName":"Koror" + }, + { + "CountryCode":"PW", + "StateCode":"212", + "StateName":"Melekeok" + }, + { + "CountryCode":"PW", + "StateCode":"214", + "StateName":"Ngaraard" + }, + { + "CountryCode":"PW", + "StateCode":"218", + "StateName":"Ngarchelong" + }, + { + "CountryCode":"PW", + "StateCode":"222", + "StateName":"Ngardmau" + }, + { + "CountryCode":"PW", + "StateCode":"224", + "StateName":"Ngatpang" + }, + { + "CountryCode":"PW", + "StateCode":"226", + "StateName":"Ngchesar" + }, + { + "CountryCode":"PW", + "StateCode":"227", + "StateName":"Ngeremlengui" + }, + { + "CountryCode":"PW", + "StateCode":"228", + "StateName":"Ngiwal" + }, + { + "CountryCode":"PW", + "StateCode":"350", + "StateName":"Peleliu" + }, + { + "CountryCode":"PW", + "StateCode":"370", + "StateName":"Sonsorol" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/py.json b/public/template-common/checkout1/state/py.json new file mode 100644 index 000000000..9ca99dcd9 --- /dev/null +++ b/public/template-common/checkout1/state/py.json @@ -0,0 +1,92 @@ +[ + { + "CountryCode":"PY", + "StateCode":"1", + "StateName":"Concepción" + }, + { + "CountryCode":"PY", + "StateCode":"10", + "StateName":"Alto Paraná" + }, + { + "CountryCode":"PY", + "StateCode":"11", + "StateName":"Central" + }, + { + "CountryCode":"PY", + "StateCode":"12", + "StateName":"Ñeembucú" + }, + { + "CountryCode":"PY", + "StateCode":"13", + "StateName":"Amambay" + }, + { + "CountryCode":"PY", + "StateCode":"14", + "StateName":"Canindeyú" + }, + { + "CountryCode":"PY", + "StateCode":"15", + "StateName":"Presidente Hayes" + }, + { + "CountryCode":"PY", + "StateCode":"16", + "StateName":"Alto Paraguay" + }, + { + "CountryCode":"PY", + "StateCode":"19", + "StateName":"Boquerón" + }, + { + "CountryCode":"PY", + "StateCode":"2", + "StateName":"San Pedro" + }, + { + "CountryCode":"PY", + "StateCode":"3", + "StateName":"Cordillera" + }, + { + "CountryCode":"PY", + "StateCode":"4", + "StateName":"Guairá" + }, + { + "CountryCode":"PY", + "StateCode":"5", + "StateName":"Caaguazú" + }, + { + "CountryCode":"PY", + "StateCode":"6", + "StateName":"Caazapá" + }, + { + "CountryCode":"PY", + "StateCode":"7", + "StateName":"Itapúa" + }, + { + "CountryCode":"PY", + "StateCode":"8", + "StateName":"Misiones" + }, + { + "CountryCode":"PY", + "StateCode":"9", + "StateName":"Paraguarí" + }, + { + "CountryCode":"PY", + "StateCode":"ASU", + "StateName":"Asunción" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/qa.json b/public/template-common/checkout1/state/qa.json new file mode 100644 index 000000000..02fbf06e1 --- /dev/null +++ b/public/template-common/checkout1/state/qa.json @@ -0,0 +1,52 @@ +[ + { + "CountryCode":"QA", + "StateCode":"DA", + "StateName":"Ad Dawhah" + }, + { + "CountryCode":"QA", + "StateCode":"GH", + "StateName":"Al Ghuwayriyah" + }, + { + "CountryCode":"QA", + "StateCode":"JB", + "StateName":"Jariyanal Batnah" + }, + { + "CountryCode":"QA", + "StateCode":"JU", + "StateName":"Al Jumayliyah" + }, + { + "CountryCode":"QA", + "StateCode":"KH", + "StateName":"Al Khawr" + }, + { + "CountryCode":"QA", + "StateCode":"MS", + "StateName":"Madinatash Shamal" + }, + { + "CountryCode":"QA", + "StateCode":"RA", + "StateName":"Ar Rayyan" + }, + { + "CountryCode":"QA", + "StateCode":"US", + "StateName":"Umm Salal" + }, + { + "CountryCode":"QA", + "StateCode":"WA", + "StateName":"Al Wakrah" + }, + { + "CountryCode":"QA", + "StateCode":"X1", + "StateName":"Umm Sa'id" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ro.json b/public/template-common/checkout1/state/ro.json new file mode 100644 index 000000000..07174da3e --- /dev/null +++ b/public/template-common/checkout1/state/ro.json @@ -0,0 +1,212 @@ +[ + { + "CountryCode":"RO", + "StateCode":"RO-AB", + "StateName":"Alba" + }, + { + "CountryCode":"RO", + "StateCode":"RO-AR", + "StateName":"Arad" + }, + { + "CountryCode":"RO", + "StateCode":"RO-AG", + "StateName":"Argeș" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BC", + "StateName":"Bacău" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BH", + "StateName":"Bihor" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BN", + "StateName":"Bistrița-Năsăud" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BT", + "StateName":"Botoșani" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BV", + "StateName":"Brașov" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BR", + "StateName":"Brăila" + }, + { + "CountryCode":"RO", + "StateCode":"RO-BZ", + "StateName":"Buzău" + }, + { + "CountryCode":"RO", + "StateCode":"RO-CS", + "StateName":"Caraș-Severin" + }, + { + "CountryCode":"RO", + "StateCode":"RO-CL", + "StateName":"Călărași" + }, + { + "CountryCode":"RO", + "StateCode":"RO-CJ", + "StateName":"Cluj" + }, + { + "CountryCode":"RO", + "StateCode":"RO-CT", + "StateName":"Constanța" + }, + { + "CountryCode":"RO", + "StateCode":"RO-CV", + "StateName":"Covasna" + }, + { + "CountryCode":"RO", + "StateCode":"RO-DB", + "StateName":"Dâmbovița" + }, + { + "CountryCode":"RO", + "StateCode":"RO-DJ", + "StateName":"Dolj" + }, + { + "CountryCode":"RO", + "StateCode":"RO-GL", + "StateName":"Galați" + }, + { + "CountryCode":"RO", + "StateCode":"RO-GR", + "StateName":"Giurgiu" + }, + { + "CountryCode":"RO", + "StateCode":"RO-GJ", + "StateName":"Gorj" + }, + { + "CountryCode":"RO", + "StateCode":"RO-HR", + "StateName":"Harghita" + }, + { + "CountryCode":"RO", + "StateCode":"RO-HD", + "StateName":"Hunedoara" + }, + { + "CountryCode":"RO", + "StateCode":"RO-IL", + "StateName":"Ialomița" + }, + { + "CountryCode":"RO", + "StateCode":"RO-IS", + "StateName":"Iași" + }, + { + "CountryCode":"RO", + "StateCode":"RO-IF", + "StateName":"Ilfov" + }, + { + "CountryCode":"RO", + "StateCode":"RO-MM", + "StateName":"Maramureș" + }, + { + "CountryCode":"RO", + "StateCode":"RO-MH", + "StateName":"Mehedinți" + }, + { + "CountryCode":"RO", + "StateCode":"RO-MS", + "StateName":"Mureș" + }, + { + "CountryCode":"RO", + "StateCode":"RO-NT", + "StateName":"Neamț" + }, + { + "CountryCode":"RO", + "StateCode":"RO-OT", + "StateName":"Olt" + }, + { + "CountryCode":"RO", + "StateCode":"RO-PH", + "StateName":"Prahova" + }, + { + "CountryCode":"RO", + "StateCode":"RO-SM", + "StateName":"Satu Mare" + }, + { + "CountryCode":"RO", + "StateCode":"RO-SJ", + "StateName":"Sălaj" + }, + { + "CountryCode":"RO", + "StateCode":"RO-SB", + "StateName":"Sibiu" + }, + { + "CountryCode":"RO", + "StateCode":"RO-SV", + "StateName":"Suceava" + }, + { + "CountryCode":"RO", + "StateCode":"RO-TR", + "StateName":"Teleorman" + }, + { + "CountryCode":"RO", + "StateCode":"RO-TM", + "StateName":"Timiș" + }, + { + "CountryCode":"RO", + "StateCode":"RO-TL", + "StateName":"Tulcea" + }, + { + "CountryCode":"RO", + "StateCode":"RO-VS", + "StateName":"Vaslui" + }, + { + "CountryCode":"RO", + "StateCode":"RO-VL", + "StateName":"Vâlcea" + }, + { + "CountryCode":"RO", + "StateCode":"RO-VN", + "StateName":"Vrancea" + }, + { + "CountryCode":"RO", + "StateCode":"RO-B", + "StateName":"București" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/rw.json b/public/template-common/checkout1/state/rw.json new file mode 100644 index 000000000..374eec5c1 --- /dev/null +++ b/public/template-common/checkout1/state/rw.json @@ -0,0 +1,27 @@ +[ + { + "CountryCode":"RW", + "StateCode":"01", + "StateName":"Villede Kigali" + }, + { + "CountryCode":"RW", + "StateCode":"02", + "StateName":"Est" + }, + { + "CountryCode":"RW", + "StateCode":"03", + "StateName":"Nord" + }, + { + "CountryCode":"RW", + "StateCode":"04", + "StateName":"Ouest" + }, + { + "CountryCode":"RW", + "StateCode":"05", + "StateName":"Sud" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/sh.json b/public/template-common/checkout1/state/sh.json new file mode 100644 index 000000000..82ac2a12a --- /dev/null +++ b/public/template-common/checkout1/state/sh.json @@ -0,0 +1,17 @@ +[ + { + "CountryCode":"SH", + "StateCode":"AC", + "StateName":"Ascension" + }, + { + "CountryCode":"SH", + "StateCode":"SH", + "StateName":"Saint Helena" + }, + { + "CountryCode":"SH", + "StateCode":"TA", + "StateName":"Tristanda Cunha" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/tg.json b/public/template-common/checkout1/state/tg.json new file mode 100644 index 000000000..af411f3fc --- /dev/null +++ b/public/template-common/checkout1/state/tg.json @@ -0,0 +1,27 @@ +[ + { + "CountryCode":"TG", + "StateCode":"C", + "StateName":"Centre" + }, + { + "CountryCode":"TG", + "StateCode":"K", + "StateName":"Kara" + }, + { + "CountryCode":"TG", + "StateCode":"M", + "StateName":"Maritime(Région)" + }, + { + "CountryCode":"TG", + "StateCode":"P", + "StateName":"Plateaux" + }, + { + "CountryCode":"TG", + "StateCode":"S", + "StateName":"Savannes" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/th.json b/public/template-common/checkout1/state/th.json new file mode 100644 index 000000000..c150116b0 --- /dev/null +++ b/public/template-common/checkout1/state/th.json @@ -0,0 +1,387 @@ +[ + { + "CountryCode":"TH", + "StateCode":"10", + "StateName":"Krung T" + }, + { + "CountryCode":"TH", + "StateCode":"11", + "StateName":"Samut Prakan" + }, + { + "CountryCode":"TH", + "StateCode":"12", + "StateName":"Nonthaburi" + }, + { + "CountryCode":"TH", + "StateCode":"13", + "StateName":"Pathum Thani" + }, + { + "CountryCode":"TH", + "StateCode":"14", + "StateName":"Phra Nakhon Si Ayutthaya" + }, + { + "CountryCode":"TH", + "StateCode":"15", + "StateName":"Ang Thong" + }, + { + "CountryCode":"TH", + "StateCode":"16", + "StateName":"Lop Buri" + }, + { + "CountryCode":"TH", + "StateCode":"17", + "StateName":"Sing Buri" + }, + { + "CountryCode":"TH", + "StateCode":"18", + "StateName":"Chai Nat" + }, + { + "CountryCode":"TH", + "StateCode":"19", + "StateName":"Saraburi" + }, + { + "CountryCode":"TH", + "StateCode":"20", + "StateName":"Chon Buri" + }, + { + "CountryCode":"TH", + "StateCode":"21", + "StateName":"Rayong" + }, + { + "CountryCode":"TH", + "StateCode":"22", + "StateName":"Chanthaburi" + }, + { + "CountryCode":"TH", + "StateCode":"23", + "StateName":"Trat" + }, + { + "CountryCode":"TH", + "StateCode":"24", + "StateName":"Chachoengsao" + }, + { + "CountryCode":"TH", + "StateCode":"25", + "StateName":"Prachin Buri" + }, + { + "CountryCode":"TH", + "StateCode":"26", + "StateName":"Nakhon Nayok" + }, + { + "CountryCode":"TH", + "StateCode":"27", + "StateName":"Sa Kaeo" + }, + { + "CountryCode":"TH", + "StateCode":"30", + "StateName":"Nakhon Ratchasima" + }, + { + "CountryCode":"TH", + "StateCode":"31", + "StateName":"Buri Ram" + }, + { + "CountryCode":"TH", + "StateCode":"32", + "StateName":"Surin" + }, + { + "CountryCode":"TH", + "StateCode":"33", + "StateName":"Si SaKet" + }, + { + "CountryCode":"TH", + "StateCode":"34", + "StateName":"Ubon Ratchathani" + }, + { + "CountryCode":"TH", + "StateCode":"35", + "StateName":"Yasothon" + }, + { + "CountryCode":"TH", + "StateCode":"36", + "StateName":"Chaiyaphum" + }, + { + "CountryCode":"TH", + "StateCode":"37", + "StateName":"Amnat Charoen" + }, + { + "CountryCode":"TH", + "StateCode":"39", + "StateName":"Nong Bua Lam Phu" + }, + { + "CountryCode":"TH", + "StateCode":"40", + "StateName":"Khon Kaen" + }, + { + "CountryCode":"TH", + "StateCode":"41", + "StateName":"Udon Thani" + }, + { + "CountryCode":"TH", + "StateCode":"42", + "StateName":"Loei" + }, + { + "CountryCode":"TH", + "StateCode":"43", + "StateName":"Nong Khai" + }, + { + "CountryCode":"TH", + "StateCode":"44", + "StateName":"Maha Sarakham" + }, + { + "CountryCode":"TH", + "StateCode":"45", + "StateName":"Roi Et" + }, + { + "CountryCode":"TH", + "StateCode":"46", + "StateName":"Kalasin" + }, + { + "CountryCode":"TH", + "StateCode":"47", + "StateName":"Sakon Nakhon" + }, + { + "CountryCode":"TH", + "StateCode":"48", + "StateName":"Nakhon Phanom" + }, + { + "CountryCode":"TH", + "StateCode":"49", + "StateName":"Mukdahan" + }, + { + "CountryCode":"TH", + "StateCode":"50", + "StateName":"Chiang Mai" + }, + { + "CountryCode":"TH", + "StateCode":"51", + "StateName":"Lamphun" + }, + { + "CountryCode":"TH", + "StateCode":"52", + "StateName":"Lampang" + }, + { + "CountryCode":"TH", + "StateCode":"53", + "StateName":"Uttaradit" + }, + { + "CountryCode":"TH", + "StateCode":"54", + "StateName":"Phrae" + }, + { + "CountryCode":"TH", + "StateCode":"55", + "StateName":"Nan" + }, + { + "CountryCode":"TH", + "StateCode":"56", + "StateName":"Phayao" + }, + { + "CountryCode":"TH", + "StateCode":"57", + "StateName":"Chiang Rai" + }, + { + "CountryCode":"TH", + "StateCode":"58", + "StateName":"Mae Hong Son" + }, + { + "CountryCode":"TH", + "StateCode":"60", + "StateName":"Nakhon Sawan" + }, + { + "CountryCode":"TH", + "StateCode":"61", + "StateName":"Uthai Thani" + }, + { + "CountryCode":"TH", + "StateCode":"62", + "StateName":"Kamphaeng Phet" + }, + { + "CountryCode":"TH", + "StateCode":"63", + "StateName":"Tak" + }, + { + "CountryCode":"TH", + "StateCode":"64", + "StateName":"Sukhothai" + }, + { + "CountryCode":"TH", + "StateCode":"65", + "StateName":"Phitsanulok" + }, + { + "CountryCode":"TH", + "StateCode":"66", + "StateName":"Phichit" + }, + { + "CountryCode":"TH", + "StateCode":"67", + "StateName":"Phetchabun" + }, + { + "CountryCode":"TH", + "StateCode":"70", + "StateName":"Ratchaburi" + }, + { + "CountryCode":"TH", + "StateCode":"71", + "StateName":"Kanchanaburi" + }, + { + "CountryCode":"TH", + "StateCode":"72", + "StateName":"Suphan Buri" + }, + { + "CountryCode":"TH", + "StateCode":"73", + "StateName":"Nakhon Pathom" + }, + { + "CountryCode":"TH", + "StateCode":"74", + "StateName":"Samut Sakhon" + }, + { + "CountryCode":"TH", + "StateCode":"75", + "StateName":"Samut Songkhram" + }, + { + "CountryCode":"TH", + "StateCode":"76", + "StateName":"Phetchaburi" + }, + { + "CountryCode":"TH", + "StateCode":"77", + "StateName":"PrachuapKhiri Khan" + }, + { + "CountryCode":"TH", + "StateCode":"80", + "StateName":"Nakhon Si Thammarat" + }, + { + "CountryCode":"TH", + "StateCode":"81", + "StateName":"Krabi" + }, + { + "CountryCode":"TH", + "StateCode":"82", + "StateName":"Phangnga" + }, + { + "CountryCode":"TH", + "StateCode":"83", + "StateName":"Phuket" + }, + { + "CountryCode":"TH", + "StateCode":"84", + "StateName":"Surat Thani" + }, + { + "CountryCode":"TH", + "StateCode":"85", + "StateName":"Ranong" + }, + { + "CountryCode":"TH", + "StateCode":"86", + "StateName":"Chumphon" + }, + { + "CountryCode":"TH", + "StateCode":"90", + "StateName":"Songkhla" + }, + { + "CountryCode":"TH", + "StateCode":"91", + "StateName":"Satun" + }, + { + "CountryCode":"TH", + "StateCode":"92", + "StateName":"Trang" + }, + { + "CountryCode":"TH", + "StateCode":"93", + "StateName":"Phatthalung" + }, + { + "CountryCode":"TH", + "StateCode":"94", + "StateName":"Pattani" + }, + { + "CountryCode":"TH", + "StateCode":"95", + "StateName":"Yala" + }, + { + "CountryCode":"TH", + "StateCode":"96", + "StateName":"Narathiwat" + }, + { + "CountryCode":"TH", + "StateCode":"S", + "StateName":"Phatthaya" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/tj.json b/public/template-common/checkout1/state/tj.json new file mode 100644 index 000000000..dde917b5e --- /dev/null +++ b/public/template-common/checkout1/state/tj.json @@ -0,0 +1,17 @@ +[ + { + "CountryCode":"TJ", + "StateCode":"GB", + "StateName":"Gorno-Badakhshan" + }, + { + "CountryCode":"TJ", + "StateCode":"KT", + "StateName":"Khatlon" + }, + { + "CountryCode":"TJ", + "StateCode":"SU", + "StateName":"Sughd" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/tr.json b/public/template-common/checkout1/state/tr.json new file mode 100644 index 000000000..192959f8a --- /dev/null +++ b/public/template-common/checkout1/state/tr.json @@ -0,0 +1,407 @@ +[ + { + "CountryCode":"TR", + "StateCode":"01", + "StateName":"Adana" + }, + { + "CountryCode":"TR", + "StateCode":"02", + "StateName":"Adiyaman" + }, + { + "CountryCode":"TR", + "StateCode":"03", + "StateName":"Afyon" + }, + { + "CountryCode":"TR", + "StateCode":"04", + "StateName":"Agri" + }, + { + "CountryCode":"TR", + "StateCode":"05", + "StateName":"Amasya" + }, + { + "CountryCode":"TR", + "StateCode":"06", + "StateName":"Ankara" + }, + { + "CountryCode":"TR", + "StateCode":"07", + "StateName":"Antalya" + }, + { + "CountryCode":"TR", + "StateCode":"08", + "StateName":"Artvin" + }, + { + "CountryCode":"TR", + "StateCode":"09", + "StateName":"Aydin" + }, + { + "CountryCode":"TR", + "StateCode":"10", + "StateName":"Balikesir" + }, + { + "CountryCode":"TR", + "StateCode":"11", + "StateName":"Bilecik" + }, + { + "CountryCode":"TR", + "StateCode":"12", + "StateName":"Bingöl" + }, + { + "CountryCode":"TR", + "StateCode":"13", + "StateName":"Bitlis" + }, + { + "CountryCode":"TR", + "StateCode":"14", + "StateName":"Bolu" + }, + { + "CountryCode":"TR", + "StateCode":"15", + "StateName":"Burdur" + }, + { + "CountryCode":"TR", + "StateCode":"16", + "StateName":"Bursa" + }, + { + "CountryCode":"TR", + "StateCode":"17", + "StateName":"Çanakkale" + }, + { + "CountryCode":"TR", + "StateCode":"18", + "StateName":"Çankiri" + }, + { + "CountryCode":"TR", + "StateCode":"19", + "StateName":"Çorum" + }, + { + "CountryCode":"TR", + "StateCode":"20", + "StateName":"Denizli" + }, + { + "CountryCode":"TR", + "StateCode":"21", + "StateName":"Diyarbakir" + }, + { + "CountryCode":"TR", + "StateCode":"22", + "StateName":"Edirne" + }, + { + "CountryCode":"TR", + "StateCode":"23", + "StateName":"Elazig" + }, + { + "CountryCode":"TR", + "StateCode":"24", + "StateName":"Erzincan" + }, + { + "CountryCode":"TR", + "StateCode":"25", + "StateName":"Erzurum" + }, + { + "CountryCode":"TR", + "StateCode":"26", + "StateName":"Eskisehir" + }, + { + "CountryCode":"TR", + "StateCode":"27", + "StateName":"Gaziantep" + }, + { + "CountryCode":"TR", + "StateCode":"28", + "StateName":"Giresun" + }, + { + "CountryCode":"TR", + "StateCode":"29", + "StateName":"Gümüshane" + }, + { + "CountryCode":"TR", + "StateCode":"30", + "StateName":"Hakkâri" + }, + { + "CountryCode":"TR", + "StateCode":"31", + "StateName":"Hatay" + }, + { + "CountryCode":"TR", + "StateCode":"32", + "StateName":"Isparta" + }, + { + "CountryCode":"TR", + "StateCode":"33", + "StateName":"Içel" + }, + { + "CountryCode":"TR", + "StateCode":"34", + "StateName":"Istanbul" + }, + { + "CountryCode":"TR", + "StateCode":"35", + "StateName":"Izmir" + }, + { + "CountryCode":"TR", + "StateCode":"36", + "StateName":"Kars" + }, + { + "CountryCode":"TR", + "StateCode":"37", + "StateName":"Kastamonu" + }, + { + "CountryCode":"TR", + "StateCode":"38", + "StateName":"Kayseri" + }, + { + "CountryCode":"TR", + "StateCode":"39", + "StateName":"Kirklareli" + }, + { + "CountryCode":"TR", + "StateCode":"40", + "StateName":"Kirsehir" + }, + { + "CountryCode":"TR", + "StateCode":"41", + "StateName":"Kocaeli" + }, + { + "CountryCode":"TR", + "StateCode":"42", + "StateName":"Konya" + }, + { + "CountryCode":"TR", + "StateCode":"43", + "StateName":"Kütahya" + }, + { + "CountryCode":"TR", + "StateCode":"44", + "StateName":"Malatya" + }, + { + "CountryCode":"TR", + "StateCode":"45", + "StateName":"Manisa" + }, + { + "CountryCode":"TR", + "StateCode":"46", + "StateName":"Kahramanmaras" + }, + { + "CountryCode":"TR", + "StateCode":"47", + "StateName":"Mardin" + }, + { + "CountryCode":"TR", + "StateCode":"48", + "StateName":"Mugla" + }, + { + "CountryCode":"TR", + "StateCode":"49", + "StateName":"Mus" + }, + { + "CountryCode":"TR", + "StateCode":"50", + "StateName":"Nevsehir" + }, + { + "CountryCode":"TR", + "StateCode":"51", + "StateName":"Nigde" + }, + { + "CountryCode":"TR", + "StateCode":"52", + "StateName":"Ordu" + }, + { + "CountryCode":"TR", + "StateCode":"53", + "StateName":"Rize" + }, + { + "CountryCode":"TR", + "StateCode":"54", + "StateName":"Sakarya" + }, + { + "CountryCode":"TR", + "StateCode":"55", + "StateName":"Samsun" + }, + { + "CountryCode":"TR", + "StateCode":"56", + "StateName":"Siirt" + }, + { + "CountryCode":"TR", + "StateCode":"57", + "StateName":"Sinop" + }, + { + "CountryCode":"TR", + "StateCode":"58", + "StateName":"Sivas" + }, + { + "CountryCode":"TR", + "StateCode":"59", + "StateName":"Tekirdag" + }, + { + "CountryCode":"TR", + "StateCode":"60", + "StateName":"Tokat" + }, + { + "CountryCode":"TR", + "StateCode":"61", + "StateName":"Trabzon" + }, + { + "CountryCode":"TR", + "StateCode":"62", + "StateName":"Tunceli" + }, + { + "CountryCode":"TR", + "StateCode":"63", + "StateName":"Sanliurfa" + }, + { + "CountryCode":"TR", + "StateCode":"64", + "StateName":"Usak" + }, + { + "CountryCode":"TR", + "StateCode":"65", + "StateName":"Van" + }, + { + "CountryCode":"TR", + "StateCode":"66", + "StateName":"Yozgat" + }, + { + "CountryCode":"TR", + "StateCode":"67", + "StateName":"Zonguldak" + }, + { + "CountryCode":"TR", + "StateCode":"68", + "StateName":"Aksaray" + }, + { + "CountryCode":"TR", + "StateCode":"69", + "StateName":"Bayburt" + }, + { + "CountryCode":"TR", + "StateCode":"70", + "StateName":"Karaman" + }, + { + "CountryCode":"TR", + "StateCode":"71", + "StateName":"Kirikkale" + }, + { + "CountryCode":"TR", + "StateCode":"72", + "StateName":"Batman" + }, + { + "CountryCode":"TR", + "StateCode":"73", + "StateName":"Sirnak" + }, + { + "CountryCode":"TR", + "StateCode":"74", + "StateName":"Bartin" + }, + { + "CountryCode":"TR", + "StateCode":"75", + "StateName":"Ardahan" + }, + { + "CountryCode":"TR", + "StateCode":"76", + "StateName":"Igdir" + }, + { + "CountryCode":"TR", + "StateCode":"77", + "StateName":"Yalova" + }, + { + "CountryCode":"TR", + "StateCode":"78", + "StateName":"Karabük" + }, + { + "CountryCode":"TR", + "StateCode":"79", + "StateName":"Kilis" + }, + { + "CountryCode":"TR", + "StateCode":"80", + "StateName":"Osmaniye" + }, + { + "CountryCode":"TR", + "StateCode":"81", + "StateName":"Düzce" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/tz.json b/public/template-common/checkout1/state/tz.json new file mode 100644 index 000000000..623fbaf69 --- /dev/null +++ b/public/template-common/checkout1/state/tz.json @@ -0,0 +1,132 @@ +[ + { + "CountryCode":"TZ", + "StateCode":"01", + "StateName":"Arusha" + }, + { + "CountryCode":"TZ", + "StateCode":"02", + "StateName":"Dares Salaam" + }, + { + "CountryCode":"TZ", + "StateCode":"03", + "StateName":"Dodoma" + }, + { + "CountryCode":"TZ", + "StateCode":"04", + "StateName":"Iringa" + }, + { + "CountryCode":"TZ", + "StateCode":"05", + "StateName":"Kagera" + }, + { + "CountryCode":"TZ", + "StateCode":"06", + "StateName":"Kaskazini Pemba" + }, + { + "CountryCode":"TZ", + "StateCode":"07", + "StateName":"Kaskazini Unguja" + }, + { + "CountryCode":"TZ", + "StateCode":"08", + "StateName":"Kigoma" + }, + { + "CountryCode":"TZ", + "StateCode":"09", + "StateName":"Kilimanjaro" + }, + { + "CountryCode":"TZ", + "StateCode":"10", + "StateName":"Kusini Pemba" + }, + { + "CountryCode":"TZ", + "StateCode":"11", + "StateName":"Kusini Unguja" + }, + { + "CountryCode":"TZ", + "StateCode":"12", + "StateName":"Lindi" + }, + { + "CountryCode":"TZ", + "StateCode":"13", + "StateName":"Mara" + }, + { + "CountryCode":"TZ", + "StateCode":"14", + "StateName":"Mbeya" + }, + { + "CountryCode":"TZ", + "StateCode":"15", + "StateName":"Mjini Magharibi" + }, + { + "CountryCode":"TZ", + "StateCode":"16", + "StateName":"Morogoro" + }, + { + "CountryCode":"TZ", + "StateCode":"17", + "StateName":"Mtwara" + }, + { + "CountryCode":"TZ", + "StateCode":"18", + "StateName":"Mwanza" + }, + { + "CountryCode":"TZ", + "StateCode":"19", + "StateName":"Pwani" + }, + { + "CountryCode":"TZ", + "StateCode":"20", + "StateName":"Rukwa" + }, + { + "CountryCode":"TZ", + "StateCode":"21", + "StateName":"Ruvuma" + }, + { + "CountryCode":"TZ", + "StateCode":"22", + "StateName":"Shinyanga" + }, + { + "CountryCode":"TZ", + "StateCode":"23", + "StateName":"Singida" + }, + { + "CountryCode":"TZ", + "StateCode":"24", + "StateName":"Tabora" + }, + { + "CountryCode":"TZ", + "StateCode":"25", + "StateName":"Tanga" + }, + { + "CountryCode":"TZ", + "StateCode":"26", + "StateName":"Manyara" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ua.json b/public/template-common/checkout1/state/ua.json new file mode 100644 index 000000000..5de675a0e --- /dev/null +++ b/public/template-common/checkout1/state/ua.json @@ -0,0 +1,137 @@ +[ + { + "CountryCode":"UA", + "StateCode":"05", + "StateName":"Vinnyts'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"07", + "StateName":"Volyns'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"09", + "StateName":"Luhans'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"12", + "StateName":"Dnipropetrovs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"14", + "StateName":"Donets'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"18", + "StateName":"Zhytomyrs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"21", + "StateName":"Zakarpats'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"23", + "StateName":"Zaporiz'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"26", + "StateName":"Ivano-Frankivs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"30", + "StateName":"Kyïv" + }, + { + "CountryCode":"UA", + "StateCode":"32", + "StateName":"Kyïvs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"35", + "StateName":"Kirovohrads'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"40", + "StateName":"Sevastopol'" + }, + { + "CountryCode":"UA", + "StateCode":"43", + "StateName":"RespublikaKrym" + }, + { + "CountryCode":"UA", + "StateCode":"46", + "StateName":"L'vivs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"48", + "StateName":"Mykolaïvs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"51", + "StateName":"Odes'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"53", + "StateName":"Poltavs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"56", + "StateName":"Rivnens'ka blast'" + }, + { + "CountryCode":"UA", + "StateCode":"59", + "StateName":"Sums'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"61", + "StateName":"Ternopil's'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"63", + "StateName":"Kharkivs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"65", + "StateName":"Khersons'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"68", + "StateName":"Khmel'nyts'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"71", + "StateName":"Cherkas'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"74", + "StateName":"Chernihivs'ka Oblast'" + }, + { + "CountryCode":"UA", + "StateCode":"77", + "StateName":"Chernivets'ka Oblast'" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/ug.json b/public/template-common/checkout1/state/ug.json new file mode 100644 index 000000000..3c68c486a --- /dev/null +++ b/public/template-common/checkout1/state/ug.json @@ -0,0 +1,402 @@ +[ + { + "CountryCode":"UG", + "StateCode":"101", + "StateName":"Kalangala" + }, + { + "CountryCode":"UG", + "StateCode":"102", + "StateName":"Kampala" + }, + { + "CountryCode":"UG", + "StateCode":"103", + "StateName":"Kiboga" + }, + { + "CountryCode":"UG", + "StateCode":"104", + "StateName":"Luwero" + }, + { + "CountryCode":"UG", + "StateCode":"105", + "StateName":"Masaka" + }, + { + "CountryCode":"UG", + "StateCode":"106", + "StateName":"Mpigi" + }, + { + "CountryCode":"UG", + "StateCode":"107", + "StateName":"Mubende" + }, + { + "CountryCode":"UG", + "StateCode":"108", + "StateName":"Mukono" + }, + { + "CountryCode":"UG", + "StateCode":"109", + "StateName":"Nakasongola" + }, + { + "CountryCode":"UG", + "StateCode":"110", + "StateName":"Rakai" + }, + { + "CountryCode":"UG", + "StateCode":"111", + "StateName":"Sembabule" + }, + { + "CountryCode":"UG", + "StateCode":"112", + "StateName":"Kayunga" + }, + { + "CountryCode":"UG", + "StateCode":"113", + "StateName":"Wakiso" + }, + { + "CountryCode":"UG", + "StateCode":"114", + "StateName":"Mityana" + }, + { + "CountryCode":"UG", + "StateCode":"115", + "StateName":"Nakaseke" + }, + { + "CountryCode":"UG", + "StateCode":"116", + "StateName":"Lyantonde" + }, + { + "CountryCode":"UG", + "StateCode":"201", + "StateName":"Bugiri" + }, + { + "CountryCode":"UG", + "StateCode":"202", + "StateName":"Busia" + }, + { + "CountryCode":"UG", + "StateCode":"203", + "StateName":"Iganga" + }, + { + "CountryCode":"UG", + "StateCode":"204", + "StateName":"Jinja" + }, + { + "CountryCode":"UG", + "StateCode":"205", + "StateName":"Kamuli" + }, + { + "CountryCode":"UG", + "StateCode":"206", + "StateName":"Kapchorwa" + }, + { + "CountryCode":"UG", + "StateCode":"207", + "StateName":"Katakwi" + }, + { + "CountryCode":"UG", + "StateCode":"208", + "StateName":"Kumi" + }, + { + "CountryCode":"UG", + "StateCode":"209", + "StateName":"Mbale" + }, + { + "CountryCode":"UG", + "StateCode":"210", + "StateName":"Pallisa" + }, + { + "CountryCode":"UG", + "StateCode":"211", + "StateName":"Soroti" + }, + { + "CountryCode":"UG", + "StateCode":"212", + "StateName":"Tororo" + }, + { + "CountryCode":"UG", + "StateCode":"213", + "StateName":"Kaberamaido" + }, + { + "CountryCode":"UG", + "StateCode":"214", + "StateName":"Mayuge" + }, + { + "CountryCode":"UG", + "StateCode":"215", + "StateName":"Sironko" + }, + { + "CountryCode":"UG", + "StateCode":"216", + "StateName":"Amuria" + }, + { + "CountryCode":"UG", + "StateCode":"217", + "StateName":"Budaka" + }, + { + "CountryCode":"UG", + "StateCode":"218", + "StateName":"Bukwa" + }, + { + "CountryCode":"UG", + "StateCode":"219", + "StateName":"Butaleja" + }, + { + "CountryCode":"UG", + "StateCode":"220", + "StateName":"Kaliro" + }, + { + "CountryCode":"UG", + "StateCode":"221", + "StateName":"Manafwa" + }, + { + "CountryCode":"UG", + "StateCode":"222", + "StateName":"Namutumba" + }, + { + "CountryCode":"UG", + "StateCode":"223", + "StateName":"Bududa" + }, + { + "CountryCode":"UG", + "StateCode":"224", + "StateName":"Bukedea" + }, + { + "CountryCode":"UG", + "StateCode":"301", + "StateName":"Adjumani" + }, + { + "CountryCode":"UG", + "StateCode":"302", + "StateName":"Apac" + }, + { + "CountryCode":"UG", + "StateCode":"303", + "StateName":"Arua" + }, + { + "CountryCode":"UG", + "StateCode":"304", + "StateName":"Gulu" + }, + { + "CountryCode":"UG", + "StateCode":"305", + "StateName":"Kitgum" + }, + { + "CountryCode":"UG", + "StateCode":"306", + "StateName":"Kotido" + }, + { + "CountryCode":"UG", + "StateCode":"307", + "StateName":"Lira" + }, + { + "CountryCode":"UG", + "StateCode":"308", + "StateName":"Moroto" + }, + { + "CountryCode":"UG", + "StateCode":"309", + "StateName":"Moyo" + }, + { + "CountryCode":"UG", + "StateCode":"310", + "StateName":"Nebbi" + }, + { + "CountryCode":"UG", + "StateCode":"311", + "StateName":"Nakapiripirit" + }, + { + "CountryCode":"UG", + "StateCode":"312", + "StateName":"Pader" + }, + { + "CountryCode":"UG", + "StateCode":"313", + "StateName":"Yumbe" + }, + { + "CountryCode":"UG", + "StateCode":"314", + "StateName":"Amolatar" + }, + { + "CountryCode":"UG", + "StateCode":"315", + "StateName":"Kaabong" + }, + { + "CountryCode":"UG", + "StateCode":"316", + "StateName":"Koboko" + }, + { + "CountryCode":"UG", + "StateCode":"317", + "StateName":"Abim" + }, + { + "CountryCode":"UG", + "StateCode":"318", + "StateName":"Dokolo" + }, + { + "CountryCode":"UG", + "StateCode":"319", + "StateName":"Amuru" + }, + { + "CountryCode":"UG", + "StateCode":"320", + "StateName":"Maracha" + }, + { + "CountryCode":"UG", + "StateCode":"321", + "StateName":"Oyam" + }, + { + "CountryCode":"UG", + "StateCode":"401", + "StateName":"Bundibugyo" + }, + { + "CountryCode":"UG", + "StateCode":"402", + "StateName":"Bushenyi" + }, + { + "CountryCode":"UG", + "StateCode":"403", + "StateName":"Hoima" + }, + { + "CountryCode":"UG", + "StateCode":"404", + "StateName":"Kabale" + }, + { + "CountryCode":"UG", + "StateCode":"405", + "StateName":"Kabarole" + }, + { + "CountryCode":"UG", + "StateCode":"406", + "StateName":"Kasese" + }, + { + "CountryCode":"UG", + "StateCode":"407", + "StateName":"Kibaale" + }, + { + "CountryCode":"UG", + "StateCode":"408", + "StateName":"Kisoro" + }, + { + "CountryCode":"UG", + "StateCode":"409", + "StateName":"Masindi" + }, + { + "CountryCode":"UG", + "StateCode":"410", + "StateName":"Mbarara" + }, + { + "CountryCode":"UG", + "StateCode":"411", + "StateName":"Ntungamo" + }, + { + "CountryCode":"UG", + "StateCode":"412", + "StateName":"Rukungiri" + }, + { + "CountryCode":"UG", + "StateCode":"413", + "StateName":"Kamwenge" + }, + { + "CountryCode":"UG", + "StateCode":"414", + "StateName":"Kanungu" + }, + { + "CountryCode":"UG", + "StateCode":"415", + "StateName":"Kyenjojo" + }, + { + "CountryCode":"UG", + "StateCode":"416", + "StateName":"Ibanda" + }, + { + "CountryCode":"UG", + "StateCode":"417", + "StateName":"Isingiro" + }, + { + "CountryCode":"UG", + "StateCode":"418", + "StateName":"Kiruhura" + }, + { + "CountryCode":"UG", + "StateCode":"419", + "StateName":"Buliisa" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/uy.json b/public/template-common/checkout1/state/uy.json new file mode 100644 index 000000000..5c8b467e3 --- /dev/null +++ b/public/template-common/checkout1/state/uy.json @@ -0,0 +1,82 @@ +[ + { + "CountryCode":"UY", + "StateCode":"AR", + "StateName":"Artigas" + }, + { + "CountryCode":"UY", + "StateCode":"DU", + "StateName":"Durazno" + }, + { + "CountryCode":"UY", + "StateCode":"FD", + "StateName":"Florida" + }, + { + "CountryCode":"UY", + "StateCode":"FS", + "StateName":"Flores" + }, + { + "CountryCode":"UY", + "StateCode":"LA", + "StateName":"Lavalleja" + }, + { + "CountryCode":"UY", + "StateCode":"MA", + "StateName":"Maldonado" + }, + { + "CountryCode":"UY", + "StateCode":"MO", + "StateName":"Montevideo" + }, + { + "CountryCode":"UY", + "StateCode":"PA", + "StateName":"Paysandú" + }, + { + "CountryCode":"UY", + "StateCode":"RN", + "StateName":"Río Negro" + }, + { + "CountryCode":"UY", + "StateCode":"RO", + "StateName":"Rocha" + }, + { + "CountryCode":"UY", + "StateCode":"RV", + "StateName":"Rivera" + }, + { + "CountryCode":"UY", + "StateCode":"SA", + "StateName":"Salto" + }, + { + "CountryCode":"UY", + "StateCode":"SJ", + "StateName":"San José" + }, + { + "CountryCode":"UY", + "StateCode":"SO", + "StateName":"Soriano" + }, + { + "CountryCode":"UY", + "StateCode":"TA", + "StateName":"Tacuarembó" + }, + { + "CountryCode":"UY", + "StateCode":"TT", + "StateName":"Treintay Tres" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/vn.json b/public/template-common/checkout1/state/vn.json new file mode 100644 index 000000000..423cc52f2 --- /dev/null +++ b/public/template-common/checkout1/state/vn.json @@ -0,0 +1,322 @@ +[ + { + "CountryCode":"VN", + "StateCode":"01", + "StateName":"Lai Châu" + }, + { + "CountryCode":"VN", + "StateCode":"02", + "StateName":"Lào Cai" + }, + { + "CountryCode":"VN", + "StateCode":"03", + "StateName":"Hà Giang" + }, + { + "CountryCode":"VN", + "StateCode":"04", + "StateName":"Cao Bằng" + }, + { + "CountryCode":"VN", + "StateCode":"05", + "StateName":"Sơn La" + }, + { + "CountryCode":"VN", + "StateCode":"06", + "StateName":"Yên Bái" + }, + { + "CountryCode":"VN", + "StateCode":"07", + "StateName":"Tuyên Quang" + }, + { + "CountryCode":"VN", + "StateCode":"09", + "StateName":"Lạng Sơn" + }, + { + "CountryCode":"VN", + "StateCode":"13", + "StateName":"Quảng Ninh" + }, + { + "CountryCode":"VN", + "StateCode":"14", + "StateName":"Hoà Bình" + }, + { + "CountryCode":"VN", + "StateCode":"15", + "StateName":"Hà Tây" + }, + { + "CountryCode":"VN", + "StateCode":"18", + "StateName":"Ninh Bình" + }, + { + "CountryCode":"VN", + "StateCode":"20", + "StateName":"Thái Bình" + }, + { + "CountryCode":"VN", + "StateCode":"21", + "StateName":"Thanh Hoá" + }, + { + "CountryCode":"VN", + "StateCode":"22", + "StateName":"Nghệ An" + }, + { + "CountryCode":"VN", + "StateCode":"23", + "StateName":"Hà Tĩnh" + }, + { + "CountryCode":"VN", + "StateCode":"24", + "StateName":"Quảng Bình" + }, + { + "CountryCode":"VN", + "StateCode":"25", + "StateName":"Quảng Trị" + }, + { + "CountryCode":"VN", + "StateCode":"26", + "StateName":"Thừa Thiên - Huế" + }, + { + "CountryCode":"VN", + "StateCode":"27", + "StateName":"Quảng Nam" + }, + { + "CountryCode":"VN", + "StateCode":"28", + "StateName":"Kon Tum" + }, + { + "CountryCode":"VN", + "StateCode":"29", + "StateName":"Quảng Ngãi" + }, + { + "CountryCode":"VN", + "StateCode":"30", + "StateName":"Gia Lai" + }, + { + "CountryCode":"VN", + "StateCode":"31", + "StateName":"Bình Định" + }, + { + "CountryCode":"VN", + "StateCode":"32", + "StateName":"Phú Yên" + }, + { + "CountryCode":"VN", + "StateCode":"33", + "StateName":"Đắk Lắk" + }, + { + "CountryCode":"VN", + "StateCode":"34", + "StateName":"Khánh Hoà" + }, + { + "CountryCode":"VN", + "StateCode":"35", + "StateName":"Lâm Đồng" + }, + { + "CountryCode":"VN", + "StateCode":"36", + "StateName":"Ninh Thuận" + }, + { + "CountryCode":"VN", + "StateCode":"37", + "StateName":"Tây Ninh" + }, + { + "CountryCode":"VN", + "StateCode":"39", + "StateName":"Đồng Nai" + }, + { + "CountryCode":"VN", + "StateCode":"40", + "StateName":"Bình Thuận" + }, + { + "CountryCode":"VN", + "StateCode":"41", + "StateName":"Long An" + }, + { + "CountryCode":"VN", + "StateCode":"43", + "StateName":"Bà Rịa - Vũng Tàu" + }, + { + "CountryCode":"VN", + "StateCode":"44", + "StateName":"An Giang" + }, + { + "CountryCode":"VN", + "StateCode":"45", + "StateName":"Đồng Tháp" + }, + { + "CountryCode":"VN", + "StateCode":"46", + "StateName":"Tiền Giang" + }, + { + "CountryCode":"VN", + "StateCode":"47", + "StateName":"Kiên Giang" + }, + { + "CountryCode":"VN", + "StateCode":"48", + "StateName":"Cần Thơ" + }, + { + "CountryCode":"VN", + "StateCode":"49", + "StateName":"Vĩnh Long" + }, + { + "CountryCode":"VN", + "StateCode":"50", + "StateName":"Bến Tre" + }, + { + "CountryCode":"VN", + "StateCode":"51", + "StateName":"Trà Vinh" + }, + { + "CountryCode":"VN", + "StateCode":"52", + "StateName":"Sóc Trăng" + }, + { + "CountryCode":"VN", + "StateCode":"53", + "StateName":"Bắc Cạn" + }, + { + "CountryCode":"VN", + "StateCode":"54", + "StateName":"Bắc Giang" + }, + { + "CountryCode":"VN", + "StateCode":"55", + "StateName":"Bạc Liêu" + }, + { + "CountryCode":"VN", + "StateCode":"56", + "StateName":"Bắc Ninh" + }, + { + "CountryCode":"VN", + "StateCode":"57", + "StateName":"Bình Dương" + }, + { + "CountryCode":"VN", + "StateCode":"58", + "StateName":"Bình Phước" + }, + { + "CountryCode":"VN", + "StateCode":"59", + "StateName":"Cà Mau" + }, + { + "CountryCode":"VN", + "StateCode":"60", + "StateName":"Đà Nẵng" + }, + { + "CountryCode":"VN", + "StateCode":"61", + "StateName":"Hải Dương" + }, + { + "CountryCode":"VN", + "StateCode":"62", + "StateName":"Hải Phòng" + }, + { + "CountryCode":"VN", + "StateCode":"63", + "StateName":"Hà Nam" + }, + { + "CountryCode":"VN", + "StateCode":"64", + "StateName":"Hà Nội" + }, + { + "CountryCode":"VN", + "StateCode":"65", + "StateName":"Hồ Chí Minh" + }, + { + "CountryCode":"VN", + "StateCode":"66", + "StateName":"Hưng Yên" + }, + { + "CountryCode":"VN", + "StateCode":"67", + "StateName":"Nam Định" + }, + { + "CountryCode":"VN", + "StateCode":"68", + "StateName":"Phú Thọ" + }, + { + "CountryCode":"VN", + "StateCode":"69", + "StateName":"Thái Nguyên" + }, + { + "CountryCode":"VN", + "StateCode":"70", + "StateName":"Vĩnh Phúc" + }, + { + "CountryCode":"VN", + "StateCode":"71", + "StateName":"Điện Biên" + }, + { + "CountryCode":"VN", + "StateCode":"72", + "StateName":"Đắk Nông" + }, + { + "CountryCode":"VN", + "StateCode":"73", + "StateName":"Hậu Giang" + } +] \ No newline at end of file diff --git a/public/template-common/checkout1/state/za.json b/public/template-common/checkout1/state/za.json new file mode 100644 index 000000000..26b383e02 --- /dev/null +++ b/public/template-common/checkout1/state/za.json @@ -0,0 +1,47 @@ +[ + { + "CountryCode":"ZA", + "StateCode":"EC", + "StateName":"Eastern Cape" + }, + { + "CountryCode":"ZA", + "StateCode":"FS", + "StateName":"Free State" + }, + { + "CountryCode":"ZA", + "StateCode":"GT", + "StateName":"Gauteng" + }, + { + "CountryCode":"ZA", + "StateCode":"LP", + "StateName":"Limpopo" + }, + { + "CountryCode":"ZA", + "StateCode":"MP", + "StateName":"Mpumalanga" + }, + { + "CountryCode":"ZA", + "StateCode":"NC", + "StateName":"Northern Cape" + }, + { + "CountryCode":"ZA", + "StateCode":"NL", + "StateName":"Kwazulu-Natal" + }, + { + "CountryCode":"ZA", + "StateCode":"NW", + "StateName":"North-West" + }, + { + "CountryCode":"ZA", + "StateCode":"WC", + "StateName":"Western Cape" + } +] \ No newline at end of file From 91c7048770d3a791034ba14eac13d3d01a900617 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Sat, 17 Feb 2024 10:20:56 +0800 Subject: [PATCH 103/386] fix fr --- .../checkout1/state/countries_fr.json | 41 +++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 public/template-common/checkout1/state/countries_fr.json diff --git a/public/template-common/checkout1/state/countries_fr.json b/public/template-common/checkout1/state/countries_fr.json new file mode 100644 index 000000000..df4b4e3df --- /dev/null +++ b/public/template-common/checkout1/state/countries_fr.json @@ -0,0 +1,41 @@ +[ + { + "countryName": "France", + "countryNameLocalized": "France", + "countryCode": "FR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{2}[ ]?\\d{3}" + }, + { + "countryName": "Germany", + "countryNameLocalized": "Germany", + "countryCode": "DE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + },{ + "countryName": "Belgium", + "countryNameLocalized": "Belgium", + "countryCode": "BE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + }, + { + "countryName": "Switzerland", + "countryNameLocalized": "Switzerland", + "countryCode": "CH", + "currencyCode": "CHF", + "currencyName": "Swiss Franc", + "currencySign": "CHF", + "region": "Europe", + "postalCodeRegex": "\\d{4}" + } +] \ No newline at end of file From b4e1e9472963ea9f48af3a08023f080af3b923ac Mon Sep 17 00:00:00 2001 From: xxl4 Date: Sat, 17 Feb 2024 11:55:26 +0800 Subject: [PATCH 104/386] add onebuy console --- .../src/Console/Commands/Countries/Get.php | 72 +++++++++++++++++++ .../src/Providers/OneBuyServiceProvider.php | 15 ++++ 2 files changed, 87 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/src/Console/Commands/Countries/Get.php diff --git a/packages/Nicelizhi/OneBuy/src/Console/Commands/Countries/Get.php b/packages/Nicelizhi/OneBuy/src/Console/Commands/Countries/Get.php new file mode 100644 index 000000000..0af275257 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Console/Commands/Countries/Get.php @@ -0,0 +1,72 @@ +$item) { + $country_code = strtolower($item->countryCode); + $dst_file = $dst_dir."/".$country_code.".json"; + $this->info($dst_file); + if(!file_exists($dst_file)) { + $url = "https://cdn-sgn.dfowebsys-h01.com/states/".$country_code.".json"; + $this->error($url); + + + $client = new Client(); + try { + $res = $client->request('GET', $url); + var_dump($res->getStatusCode()); + // "200" + $content = $res->getBody(); + file_put_contents($dst_file, $content); + }catch(Exception $e) { + var_dump($e->getCode()); + } + } + + } + } +} diff --git a/packages/Nicelizhi/OneBuy/src/Providers/OneBuyServiceProvider.php b/packages/Nicelizhi/OneBuy/src/Providers/OneBuyServiceProvider.php index 766cde5b9..7544f79be 100644 --- a/packages/Nicelizhi/OneBuy/src/Providers/OneBuyServiceProvider.php +++ b/packages/Nicelizhi/OneBuy/src/Providers/OneBuyServiceProvider.php @@ -55,6 +55,7 @@ public function boot(Router $router) */ public function register() { + $this->registerCommands(); $this->registerConfig(); } @@ -74,4 +75,18 @@ protected function registerConfig() dirname(__DIR__) . '/Config/onebuy.php', 'onebuy' ); } + + /** + * Register the console commands of this package. + * + * @return void + */ + protected function registerCommands(): void + { + if ($this->app->runningInConsole()) { + $this->commands([ + \Nicelizhi\OneBuy\Console\Commands\Countries\Get::class, + ]); + } + } } From eb4261a3f96ea5c9dfc3da9df737ae05d8987b8b Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 08:58:32 +0000 Subject: [PATCH 105/386] add shopify store --- .env.example | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 435feeb03..d744caa6e 100644 --- a/.env.example +++ b/.env.example @@ -86,4 +86,8 @@ SHOPIFY_APP_HOST_NAME= APP_TIMEZONE=Asia/Shanghai -DB_TIMEZONE=+08:00 \ No newline at end of file +DB_TIMEZONE=+08:00 +ONEBUY_DEFAULT_COUNTRY=DE + +SHOPIFY_APP_ID= +SHOPIFY_STORE_LANG=en \ No newline at end of file From 640f8e204f01b54d64bf7b2a340cd71fa57723be Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 09:17:25 +0000 Subject: [PATCH 106/386] add eng countries --- .../checkout1/state/countries_en.json | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) create mode 100644 public/template-common/checkout1/state/countries_en.json diff --git a/public/template-common/checkout1/state/countries_en.json b/public/template-common/checkout1/state/countries_en.json new file mode 100644 index 000000000..bd07d76f4 --- /dev/null +++ b/public/template-common/checkout1/state/countries_en.json @@ -0,0 +1,52 @@ +[ + { + "countryName": "United Kingdom", + "countryNameLocalized": "United Kingdom", + "countryCode": "GB", + "currencyCode": "GBP", + "currencyName": "United Kingdom Pound Sterling", + "currencySign": "UK£", + "region": "Europe", + "postalCodeRegex": "GIR[ ]?0AA|((AB|AL|B|BA|BB|BD|BH|BL|BN|BR|BS|BT|CA|CB|CF|CH|CM|CO|CR|CT|CV|CW|DA|DD|DE|DG|DH|DL|DN|DT|DY|E|EC|EH|EN|EX|FK|FY|G|GL|GY|GU|HA|HD|HG|HP|HR|HS|HU|HX|IG|IM|IP|IV|JE|KA|KT|KW|KY|L|LA|LD|LE|LL|LN|LS|LU|M|ME|MK|ML|N|NE|NG|NN|NP|NR|NW|OL|OX|PA|PE|PH|PL|PO|PR|RG|RH|RM|S|SA|SE|SG|SK|SL|SM|SN|SO|SP|SR|SS|ST|SW|SY|TA|TD|TF|TN|TQ|TR|TS|TW|UB|W|WA|WC|WD|WF|WN|WR|WS|WV|YO|ZE)(\\d[\\dA-Z]?[ ]?\\d[ABD-HJLN-UW-Z]{2}))|BFPO[ ]?\\d{1,4}" + }, + { + "countryName": "United States", + "countryNameLocalized": "United States", + "countryCode": "US", + "currencyCode": "USD", + "currencyName": "United States Dollar", + "currencySign": "US$", + "region": "Americas", + "postalCodeRegex": "\\d{5}([ \\-]\\d{4})?" + }, + { + "countryName": "France", + "countryNameLocalized": "France", + "countryCode": "FR", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{2}[ ]?\\d{3}" + }, + { + "countryName": "Germany", + "countryNameLocalized": "Germany", + "countryCode": "DE", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Spain", + "countryNameLocalized": "Spain", + "countryCode": "ES", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + } +] \ No newline at end of file From 5bcaa4bb74aeb2e32b1f55d9ef0e878a47652799 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 09:51:20 +0000 Subject: [PATCH 107/386] fix the shopify data --- packages/Nicelizhi/Shopify/src/Config/shopify.php | 3 ++- .../Nicelizhi/Shopify/src/Console/Commands/Order/Get.php | 6 +++++- .../Nicelizhi/Shopify/src/Console/Commands/Order/Post.php | 5 ++++- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 6 ++++-- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Config/shopify.php b/packages/Nicelizhi/Shopify/src/Config/shopify.php index 5fdc900d1..3fdf70eb6 100644 --- a/packages/Nicelizhi/Shopify/src/Config/shopify.php +++ b/packages/Nicelizhi/Shopify/src/Config/shopify.php @@ -4,5 +4,6 @@ 'shopify_admin_access_token' => env('SHOPIFY_ADMIN_ACCESS_TOKEN'), 'shopify_client_id' => env('SHOPIFY_CLIENT_ID'), 'shopify_client_secret' => env('SHOPIFY_CLIENT_SECRET'), - 'shopify_store_id' => env('SHOPIFY_APP_ID') + 'shopify_store_id' => env('SHOPIFY_APP_ID'), + 'store_lang' => env('SHOPIFY_STORE_LANG') ]; \ No newline at end of file diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Get.php index 7ec65ea7d..a2e6ba173 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Get.php @@ -33,6 +33,9 @@ class Get extends Command */ protected $description = 'Get Order List'; + private $lang = null; + private $shopify_store_id = null; + /** * Create a new command instance. * @@ -49,7 +52,8 @@ public function __construct( { $this->shopify_store_id = "wmshoe"; $this->shopify_store_id = "hatmeo"; - $this->shopify_store_id = "wmbracom"; + $this->shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); parent::__construct(); } diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php index cc191cb51..8e511a43c 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php @@ -30,7 +30,8 @@ class Post extends Command */ protected $description = 'create Order'; - private $shopify_store_id = ""; + private $shopify_store_id = null; + private $lang = null; /** * Create a new command instance. @@ -46,6 +47,8 @@ public function __construct( { $this->shopify_store_id = "hatmeo"; $this->shopify_store_id = "wmbracom"; + $this->shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); parent::__construct(); } diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 13f165aa2..ce54a6b06 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -39,6 +39,8 @@ class Get extends Command private $category_id = 0; + private $lang = null; + /** * Create a new command instance. * @@ -51,8 +53,8 @@ public function __construct( protected ShopifyStore $ShopifyStore, ) { - $this->shopify_store_id = "wmbracom"; - $this->lang = "de"; + $this->shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); $this->category_id = 9; parent::__construct(); } From a6014ac763d094e0c63d7936a80f45769c07d1e6 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 17 Feb 2024 10:00:52 +0000 Subject: [PATCH 108/386] fix onebuy --- .../src/Resources/views/cms/page.blade.php | 139 +----------------- .../Resources/views/product-detail.blade.php | 6 +- 2 files changed, 7 insertions(+), 138 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php index 41f8a7dd2..082ab4cb6 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/cms/page.blade.php @@ -13,151 +13,20 @@ + - - - - - -
+

meta_title;?>

html_content;?> -
-
+ \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index 4b85ef1c6..a1a13b244 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -587,9 +587,9 @@ function getQueryParameterTop(param) {
From 072532d3b7cefdc6bf5ea63a48239c616724e01e Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 02:19:00 +0000 Subject: [PATCH 112/386] fix new products --- .../src/Console/Commands/Product/GetV2.php | 517 ++++++++++++++++++ 1 file changed, 517 insertions(+) create mode 100644 packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php new file mode 100644 index 000000000..dd98f9d67 --- /dev/null +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -0,0 +1,517 @@ +shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); + $this->category_id = 9; + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + + $shopify_pro_id = "8924785377562"; + + $client = new Client(); + + $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); + + if(is_null($shopifyStore)) { + $this->error("no store"); + return false; + } + + $shopify = $shopifyStore->toArray(); + + + + /** + * + * @link https://shopify.dev/docs/api/admin-rest/2023-10/resources/product#get-products?ids=632910392,921728736 + * + */ + $created_at_min = date("Y-m-d")."T00:00:00-00:00"; + $response = $client->get($shopify['shopify_app_host_name'].'/admin/api/2023-10/products.json?ids='.$shopify_pro_id.'&limit=10&fields=id,title,variants,options,images,product_type,body_html,tags,admin_graphql_api_id,collection_id', [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'X-Shopify-Access-Token' => $shopify['shopify_admin_access_token'], + ] + ]); + + $body = json_decode($response->getBody(), true); + + $body = $response->getBody(); + //Log::info($body); + $body = json_decode($body, true); + //var_dump($body);exit; + foreach($body['products'] as $key=>$item) { + //var_dump($item['collection_id']);exit; + + $shopifyProduct = \Nicelizhi\Shopify\Models\ShopifyProduct::where("product_id", $item['id'])->first(); + if(is_null($shopifyProduct)) { + $shopifyProduct = new \Nicelizhi\Shopify\Models\ShopifyProduct(); + $item['product_id'] = $item['id']; + unset($item['id']); + $item['shopify_store_id'] = $this->shopify_store_id; + $shopifyProduct::create($item); + }else{ + //$shopifyProduct::where("product_id", $item['id'])->update($item); + } + } + + + $this->syncProductToLocal($shopify_pro_id); + + // 处理目录权限 + $this->Permissions(); + + } + + protected function Permissions() { + $local_image_path = "storage/product/"; + $path = public_path($local_image_path); + $execPath = "chown www:www ". $path."* -R"; + $this->error($execPath); + //exit; + exec($execPath); + } + + private $locales = [ + 'en', + 'fr', + 'nl', + 'tr', + 'es', + 'de', + 'it', + 'ru', + 'uk' + ]; + + /** + * + * sync product to local product + * + */ + public function syncProductToLocal($shopify_pro_id) { + $items = \Nicelizhi\Shopify\Models\ShopifyProduct::where("shopify_store_id", $this->shopify_store_id)->where("product_id", $shopify_pro_id)->get(); + foreach($items as $key=>$item) { + // if($item['product_id']!='8126562107640') continue; + + $this->info($item['product_id']); + + //var_dump($item->options);exit; + + // 23 color + // 24 size + // ba_attribute_options + // ba_attribute_option_translations + $options = $item->options; + $shopifyVariants = $item->variants; + $shopifyImages = $item->images; + $color = []; + $size = []; + $error = 0; + foreach($options as $kk => $option) { + $attr_id = 0; + if(strpos($option['name'], "Size")!==false) $attr_id = 24; + if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; + if(strpos($option['name'], "尺码") !==false) $attr_id = 24; + if(strpos($option['name'], "Length") !==false) $attr_id = 24; + if(strpos($option['name'], "Color") !==false) $attr_id = 23; + if(strpos($option['name'], "颜色") !==false) $attr_id = 23; + if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; + //var_dump($option['name'], $attr_id); exit; + //if($option['position']==2) $attr_id = 24; + if(empty($attr_id)) { + $this->error(json_encode($item)); + Log::info(json_encode($item)); + $error = 1; + continue; + //exit; + } + $this->info("attr id ". $attr_id); + + $values = $option['values']; + foreach($values as $kky => $value) { + $this->info($value); + if($value==35 && $attr_id==23) { + var_dump($item);exit; + } + //ba_attribute_options + $attr_option = AttributeOption::where("attribute_id", $attr_id)->where("admin_name", $value)->first(); + if(is_null($attr_option)) { + $attr_option = new AttributeOption(); + $attr_option->attribute_id = $attr_id; + $attr_option->admin_name = $value; + $attr_option->save(); + $attribute_option_id = $attr_option->id; + }else{ + $attribute_option_id = $attr_option->id; + } + + //var_dump($attr_opt_tran);exit; + foreach($this->locales as $kl => $locale) { + $attr_opt_tran = AttributeOptionTranslation::where("attribute_option_id", $attribute_option_id)->where("locale", $locale)->first(); + if(is_null($attr_opt_tran)) { + $attr_opt_tran = new AttributeOptionTranslation(); + if($locale==$this->lang) { + $attr_opt_tran->label = $value; + } else{ + $attr_opt_tran->label = ""; + } + $attr_opt_tran->locale = $locale; + $attr_opt_tran->attribute_option_id = $attribute_option_id; + $attr_opt_tran->save(); + } + } + if($attr_id==23) $color[$attribute_option_id] = $attribute_option_id; //array_push($color, $attribute_option_id); + if($attr_id==24) $size[$attribute_option_id] = $attribute_option_id; + } + } + + if($error==1) continue; + + + + // add product + + $data = []; + $data['attribute_family_id'] = 1; + $data['sku'] = $item['product_id']; + $data['type'] = "configurable"; + $super_attributes['color'] = $color; + $super_attributes['size'] = $size; + $data['super_attributes'] = $super_attributes; + //$data['family'] = []; + + //var_dump($data);exit; + Event::dispatch('catalog.product.create.before'); + + // check product info + $product = $this->productRepository->where("sku", $item['product_id'])->first(); + if(is_null($product)) { + $product = $this->productRepository->create($data); + $id = $product->id; + }else{ + $id = $product->id; + } + Event::dispatch('catalog.product.create.after', $product); + + $updateData = []; + $updateData['product_number'] = 1000; + $updateData['name'] = $item['title']; + $updateData['url_key'] = $item['product_id']; + $updateData['short_description'] = $item['title']; + $updateData['description'] = $item['title']; + $updateData['new'] = 1; + $updateData['featured'] = 1; + $updateData['visible_individually'] = 1; + $updateData['status'] = 1; + $updateData['guest_checkout'] = 1; + $updateData['channel'] = "default"; + $updateData['locale'] = $this->lang; + $categories[] = $this->category_id; + $updateData['categories'] = $categories; + + $updateData['description'] = $item['body_html']; + + $updateData['compare_at_price'] = $item['compare_at_price']; + + $variants = $variantCollection = $product->variants()->get()->toArray(); + + //var_dump(count($shopifyVariants)); + + $newShopifyVarants = []; + foreach($shopifyVariants as $sv => $shopifyVariant) { + //var_dump($shopifyVariant); + $newkey = $shopifyVariant['product_id']; + $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); + $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); + + if(is_null($color) || is_null($size)) { + $this->info("error"); + var_dump($color, $size, $shopifyVariant); + exit; + } + + $newkey .="_".$color->id."_".$size->id; + + $newShopifyVarant = []; + + $newShopifyVarant['id'] = $shopifyVariant['id']; + $newShopifyVarant['price'] = $shopifyVariant['price']; + $newShopifyVarant['title'] = $shopifyVariant['title']; + $newShopifyVarant['weight'] = $shopifyVariant['weight']; + $newShopifyVarant['sku'] = $shopifyVariant['sku']; + $newShopifyVarant['option1'] = $shopifyVariant['option1']; + $newShopifyVarant['option2'] = $shopifyVariant['option2']; + $newShopifyVarants[$newkey] = $newShopifyVarant; + } + + //var_dump($newShopifyVarants);exit; + + /** + * + * variants[440][sku]: 8007538966776-variant-1375-1376 + * variants[440][name]: Variant 1375 1376 + * variants[440][price]: 0.0000 + * variants[440][weight]: 0 + * variants[440][status]: 1 + * variants[440][color]: 1375 + * variants[440][size]: 1376 + * variants[440][inventories][1]: 0 + * + * + */ + $newVariants = []; + foreach($variants as $k => $variant) { + //Log::info(json_encode($variant)); + //var_dump($variant); + $newkey = $item['product_id']."_".$variant['color']."_".$variant['size']; + if($variant['size']=='1403') { + //var_dump($variant);exit; + } + $this->info($newkey); + if(!isset($newShopifyVarants[$newkey])) continue; + //var_dump($newkey);exit; + $newVariant['sku'] = $item['product_id'].'-'.$newShopifyVarants[$newkey]['id']; + $newVariant['name'] = $newShopifyVarants[$newkey]['title']; + $newVariant['price'] = $newShopifyVarants[$newkey]['price']; + $newVariant['weight'] = $newShopifyVarants[$newkey]['weight']; + $newVariant['status'] = 1; + $newVariant['color'] = $variant['color']; + $newVariant['size'] = $variant['size']; + $newVariant['inventories'][1] = 1000; + $categories[] = 5; + $newVariant['categories'] = $categories; + $newVariant['guest_checkout'] = 1; + $newVariant['compare_at_price'] = $item['compare_at_price']; + $newVariants[$variant['id']] = $newVariant; + } + + //var_dump(count($newVariants));exit; + + $updateData['variants'] = $newVariants; + + // images + /** + * + * + * + * images[files][32]: + * images[files][]: (二进制) + * + * + */ + + $arrContextOptions=array( + "ssl"=>array( + "verify_peer"=>false, + "verify_peer_name"=>false, + ), + ); + $images = []; + foreach($shopifyImages as $key=>$shopifyImage) { + + //var_dump($shopifyImage); + $info = pathinfo($shopifyImage['src']); + + //var_dump($shopifyImage); + + $this->info($info['filename']); + + + //var_dump($info);exit; + $image_path = "product/".$id."/".$info['filename'].".webp"; + $local_image_path = "storage/".$image_path; + $this->info(public_path($local_image_path)); + if(!file_exists(public_path($local_image_path))) { + $this->error("copy [ ".$local_image_path); + $this->info($shopifyImage['src']); + //var_dump($shopifyImage['src'],"hello"); + $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + //var_dump($contents); + Storage::disk("images")->put($local_image_path, $contents); + sleep(1); + //exit; + //var_dump($local_image_path);exit; + } + $images[] = $image_path; + } + + $product = $this->productRepository->update($updateData, $id); + + Event::dispatch('catalog.product.update.after', $product); + + foreach($shopifyImages as $key=>$shopifyImage) { + + //var_dump($shopifyImage); + $info = pathinfo($shopifyImage['src']); + + //var_dump($shopifyImage); + + $this->info($info['filename']); + + $image_path = "product/".$id."/".$info['filename'].".webp"; + $local_image_path = "storage/".$image_path; + $this->info(public_path($local_image_path)); + if(!file_exists(public_path($local_image_path))) { + $this->error("copy [ ".$local_image_path); + $this->info($shopifyImage['src']); + $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + Storage::disk("images")->put($local_image_path, $contents); + sleep(1); + } + $images[] = $image_path; + } + + foreach($images as $key=>$image) { + $checkImg = ProductImage::where("product_id", $id)->where("path", $image)->first(); + if(is_null($checkImg)) { + $checkImg = new ProductImage(); + $checkImg->product_id = $id; + $checkImg->path = $image; + $checkImg->type = "images"; + $checkImg->save(); + } + } + + //更新对应的分类 + $sku_products = $this->productRepository->where("parent_id", $id)->get(); + foreach($sku_products as $key=>$sku) { + + $this->info("process ".$sku->id); + + Event::dispatch('catalog.product.create.after', $sku); + + $updateData = []; + + $updateData['new'] = 1; + $updateData['featured'] = 1; + $updateData['visible_individually'] = 1; + $updateData['status'] = 1; + $updateData['guest_checkout'] = 1; + $updateData['channel'] = "default"; + $updateData['locale'] = $this->lang; + $categories[] = $this->category_id; + $updateData['categories'] = $categories; + + $this->productRepository->update($updateData, $sku->id); + + Event::dispatch('catalog.product.update.after', $sku); + + $images = []; + foreach($shopifyImages as $key=>$shopifyImage) { + + //var_dump($shopifyImage); + $info = pathinfo($shopifyImage['src']); + + //var_dump($shopifyImage); + + $this->info($info['filename']); + + $image_path = "product/".$sku->id."/".$info['filename'].".webp"; + $local_image_path = "storage/".$image_path; + $this->info(public_path($local_image_path)); + if(!file_exists(public_path($local_image_path))) { + $this->error("copy [ ".$local_image_path); + $this->info($shopifyImage['src']); + $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + Storage::disk("images")->put($local_image_path, $contents); + sleep(1); + } + $images[] = $image_path; + } + + foreach($images as $key=>$image) { + $checkImg = ProductImage::where("product_id", $sku->id)->where("path", $image)->first(); + if(is_null($checkImg)) { + $checkImg = new ProductImage(); + $checkImg->product_id = $sku->id; + $checkImg->path = $image; + $checkImg->type = "images"; + $checkImg->save(); + } + } + } + + + // exit; + + + sleep(1); + //var_dump($product);exit; + + + //var_dump($product);exit; + + // add product_attr + + + // add product_images + // add product_sku + + + + } + } +} From cceaf7a8cff62c7702694c0fd7ce237c3326891a Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 04:04:24 +0000 Subject: [PATCH 113/386] es countries --- .../checkout1/state/countries_es.json | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 public/template-common/checkout1/state/countries_es.json diff --git a/public/template-common/checkout1/state/countries_es.json b/public/template-common/checkout1/state/countries_es.json new file mode 100644 index 000000000..3e42f83b2 --- /dev/null +++ b/public/template-common/checkout1/state/countries_es.json @@ -0,0 +1,32 @@ +[ + { + "countryName": "Spain", + "countryNameLocalized": "Spain", + "countryCode": "ES", + "currencyCode": "EUR", + "currencyName": "European Euro", + "currencySign": "€", + "region": "Europe", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Mexico", + "countryNameLocalized": "Mexico", + "countryCode": "MX", + "currencyCode": "MXN", + "currencyName": "Mexican Peso", + "currencySign": "Mex$", + "region": "Americas", + "postalCodeRegex": "\\d{5}" + }, + { + "countryName": "Argentina", + "countryNameLocalized": "Argentina", + "countryCode": "AR", + "currencyCode": "ARS", + "currencyName": "Argentine Peso", + "currencySign": "AR$", + "region": "Americas", + "postalCodeRegex": "([A-HJ-NP-Z])?\\d{4}([A-Z]{3})?" + } +] \ No newline at end of file From ffcf64fa9e05178ddcc7449a7fa12f1961dc877f Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 06:23:55 +0000 Subject: [PATCH 114/386] add shopify sync product have one attr --- .../src/Console/Commands/Product/GetV2.php | 80 ++++++++++++------- .../src/Providers/ShopifyServiceProvider.php | 1 + 2 files changed, 52 insertions(+), 29 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index dd98f9d67..f9e62791e 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -57,6 +57,7 @@ public function __construct( $this->lang = config('shopify.store_lang'); $this->category_id = 9; parent::__construct(); + } /** @@ -66,13 +67,17 @@ public function __construct( */ public function handle() { + $this->error("lang ". $this->lang); + $this->error("shopify_store_id ". $this->shopify_store_id); - $shopify_pro_id = "8924785377562"; + $shopify_pro_id = "8444768977126"; $client = new Client(); $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); + //var_dump($shopifyStore);exit; + if(is_null($shopifyStore)) { $this->error("no store"); return false; @@ -135,6 +140,7 @@ protected function Permissions() { } private $locales = [ + 'us', 'en', 'fr', 'nl', @@ -153,17 +159,9 @@ protected function Permissions() { */ public function syncProductToLocal($shopify_pro_id) { $items = \Nicelizhi\Shopify\Models\ShopifyProduct::where("shopify_store_id", $this->shopify_store_id)->where("product_id", $shopify_pro_id)->get(); - foreach($items as $key=>$item) { - // if($item['product_id']!='8126562107640') continue; + foreach($items as $key=>$item) { $this->info($item['product_id']); - - //var_dump($item->options);exit; - - // 23 color - // 24 size - // ba_attribute_options - // ba_attribute_option_translations $options = $item->options; $shopifyVariants = $item->variants; $shopifyImages = $item->images; @@ -192,7 +190,7 @@ public function syncProductToLocal($shopify_pro_id) { $values = $option['values']; foreach($values as $kky => $value) { - $this->info($value); + $this->error($value); if($value==35 && $attr_id==23) { var_dump($item);exit; } @@ -223,11 +221,19 @@ public function syncProductToLocal($shopify_pro_id) { $attr_opt_tran->save(); } } - if($attr_id==23) $color[$attribute_option_id] = $attribute_option_id; //array_push($color, $attribute_option_id); - if($attr_id==24) $size[$attribute_option_id] = $attribute_option_id; + if($attr_id==23) { + $color[$attribute_option_id] = $attribute_option_id; //array_push($color, $attribute_option_id); + $super_attributes['color'] = $color; + } + if($attr_id==24) { + $size[$attribute_option_id] = $attribute_option_id; + $super_attributes['size'] = $size; + } } } + //exit; + if($error==1) continue; @@ -238,10 +244,9 @@ public function syncProductToLocal($shopify_pro_id) { $data['attribute_family_id'] = 1; $data['sku'] = $item['product_id']; $data['type'] = "configurable"; - $super_attributes['color'] = $color; - $super_attributes['size'] = $size; $data['super_attributes'] = $super_attributes; - //$data['family'] = []; + + // var_dump($data); //var_dump($data);exit; Event::dispatch('catalog.product.create.before'); @@ -278,22 +283,28 @@ public function syncProductToLocal($shopify_pro_id) { $variants = $variantCollection = $product->variants()->get()->toArray(); + //var_dump($variants,$product->variants()->get()); + //var_dump(count($shopifyVariants)); $newShopifyVarants = []; foreach($shopifyVariants as $sv => $shopifyVariant) { //var_dump($shopifyVariant); $newkey = $shopifyVariant['product_id']; - $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); - $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); + if(!empty($color)) $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); + + if(!empty($size)) $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); - if(is_null($color) || is_null($size)) { - $this->info("error"); - var_dump($color, $size, $shopifyVariant); - exit; - } + - $newkey .="_".$color->id."_".$size->id; + // if(is_null($color) || is_null($size)) { + // $this->info("error"); + // var_dump($color, $size, $shopifyVariant); + // exit; + // } + + + //$newkey .="_".$color->id."_".$size->id; $newShopifyVarant = []; @@ -302,8 +313,15 @@ public function syncProductToLocal($shopify_pro_id) { $newShopifyVarant['title'] = $shopifyVariant['title']; $newShopifyVarant['weight'] = $shopifyVariant['weight']; $newShopifyVarant['sku'] = $shopifyVariant['sku']; - $newShopifyVarant['option1'] = $shopifyVariant['option1']; - $newShopifyVarant['option2'] = $shopifyVariant['option2']; + if(!is_null($color) && !empty($color)) { + $newkey .="_".$color->id; + $newShopifyVarant['option1'] = $shopifyVariant['option1']; + } + if(!is_null($size) && !empty($size)) { + $newkey .="_".$size->id; + $newShopifyVarant['option2'] = $shopifyVariant['option2']; + } + $newShopifyVarants[$newkey] = $newShopifyVarant; } @@ -324,9 +342,11 @@ public function syncProductToLocal($shopify_pro_id) { */ $newVariants = []; foreach($variants as $k => $variant) { - //Log::info(json_encode($variant)); - //var_dump($variant); - $newkey = $item['product_id']."_".$variant['color']."_".$variant['size']; + + $newkey = $item['product_id']; + if(!empty($variant['color'])) $newkey.="_".$variant['color']; + if(!empty($variant['size'])) $newkey.="_".$variant['size']; + $this->error($newkey); if($variant['size']=='1403') { //var_dump($variant);exit; } @@ -352,6 +372,8 @@ public function syncProductToLocal($shopify_pro_id) { $updateData['variants'] = $newVariants; + //var_dump($updateData);exit; + // images /** * diff --git a/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php b/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php index eb970221e..74b05ab46 100644 --- a/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php +++ b/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php @@ -86,6 +86,7 @@ protected function registerCommands(): void if ($this->app->runningInConsole()) { $this->commands([ \Nicelizhi\Shopify\Console\Commands\Product\Get::class, + \Nicelizhi\Shopify\Console\Commands\Product\GetV2::class, \Nicelizhi\Shopify\Console\Commands\Product\Post::class, \Nicelizhi\Shopify\Console\Commands\Product\Put::class, \Nicelizhi\Shopify\Console\Commands\Product\Delete::class, From 7d9c0b91a790a142d703d53a7d4607d8a85a97ee Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 07:25:45 +0000 Subject: [PATCH 115/386] add main_de, main_us --- .github/workflows/laravel.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index e38ae560d..fe8082fdf 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -2,9 +2,9 @@ name: Laravel on: push: - branches: [ "main" ] + branches: [ "main","main_de","main_us" ] pull_request: - branches: [ "main" ] + branches: [ "main","main_de","main_us" ] jobs: laravel-tests: From a125e6b04e2b8bf81e80ec2c7a8a1fefe33c0e0f Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 07:28:21 +0000 Subject: [PATCH 116/386] add main_de, main_us --- .github/workflows/laravel.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index fe8082fdf..03aad5280 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -8,9 +8,7 @@ on: jobs: laravel-tests: - runs-on: ubuntu-latest - container: image: kirschbaumdevelopment/laravel-test-runner:8.1 services: From 59e6a7bcd91f08c2fc3e89244339c99f2862b511 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 07:31:12 +0000 Subject: [PATCH 117/386] fix --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index b2a2b37ab..06adb6100 100644 --- a/.gitignore +++ b/.gitignore @@ -21,6 +21,7 @@ package-lock.json /public/hot /public/storage /public/vendor +/public/* /lang/vendor /storage/*.key /storage/dcc-data/ From dcf3e01b032a898c8b14a552ac04e16a55ab61be Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 07:58:43 +0000 Subject: [PATCH 118/386] fix add one attr --- .../Http/Controllers/ProductV2Controller.php | 1215 +++++++ packages/Nicelizhi/OneBuy/src/Http/routes.php | 11 +- .../views/v2/product-detail.blade.php | 2876 +++++++++++++++++ 3 files changed, 4099 insertions(+), 3 deletions(-) create mode 100644 packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php new file mode 100644 index 000000000..1dfe995b6 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -0,0 +1,1215 @@ +productRepository->findBySlug($slugOrPath); + + if ( + ! $product + || ! $product->visible_individually + || ! $product->url_key + || ! $product->status + ) { + abort(404); + } + + visitor()->visit($product); + + $refer = $request->input("refer"); + + if(!empty($refer)) { + $request->session()->put('refer', $refer); + }else{ + $refer = $request->session()->get('refer'); + } + + + + //var_dump($product);exit; + + // 四个商品的价格情况 + $package_products = []; + $productBaseImage = product_image()->getProductBaseImage($product); + $package_products = $this->makeProducts($product, [2,1,3,4]); + + + // skus 数据 + $skus = []; + $cache_key = "product_sku_".$product->id; + $size_cache_key = "product_sku_size_".$product->id; + $color_cache_key = "product_color_size_".$product->id; + $skus = Cache::get($cache_key); + $qty_items_size = Cache::get($size_cache_key); + $qty_items_color = Cache::get($color_cache_key); + $skus = []; + if(empty($skus)) { + $sku_products = $this->productRepository->where("parent_id", $product->id)->get(); + $attributeOptionRepository = app(AttributeOptionRepository::class); + + foreach($sku_products as $key=>$sku) { + $sku_id = $sku->id; + $sku_code = $sku->sku; + unset($sku); + /** + * + * + * {"name":"Women's thin no wire lace bra - Black \/ S","sku_code":"CJ02168-C#black-S#m","sku_id":44113194877163,"attribute_name":"S,Black","key":"S_Black"} + * + * + */ + $productAttribute = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $sku_id, + 'attribute_id' => 2, + ]); + + //var_dump($productAttribute); + + $sku['name'] = $productAttribute['text_value']; + + + + $sku['sku_code'] = $sku_code; + $sku['sku_id'] = $sku_id; + + $colorAttribute = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $sku_id, + 'attribute_id' => 23, + ]); + + $sizeAttribute = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $sku_id, + 'attribute_id' => 24, + ]); + + $attr_id = ""; + $ColorattributeOptions = null; + if(!is_null($colorAttribute)) { + $ColorattributeOptions = $attributeOptionRepository->findOneWhere(['id'=>$colorAttribute['integer_value']]); + $attr_id = "24_".$colorAttribute['integer_value']; + } + $SizeattributeOptions = null; + if(!is_null($sizeAttribute)) { + $SizeattributeOptions = $attributeOptionRepository->findOneWhere(['id'=>$sizeAttribute['integer_value']]); + if(empty($attr_id)) { + $attr_id = "23_".$sizeAttribute['integer_value']; + }else{ + $attr_id .= ",23_".$sizeAttribute['integer_value']; + } + + } + + + + + + // $attribute_name = $ColorattributeOptions->admin_name.",".$SizeattributeOptions->admin_name; + //$attribute_name = $SizeattributeOptions->admin_name.",".$ColorattributeOptions->admin_name; + + $attribute_name = ""; + $sku_key = ""; + + + if(!is_null($SizeattributeOptions)) { + $attribute_name .= $SizeattributeOptions->admin_name; + $sku_key = $SizeattributeOptions->admin_name; + } + if(!is_null($ColorattributeOptions)) { + if(!empty($attribute_name)) { + $attribute_name.=",".$ColorattributeOptions->admin_name; + $sku_key.= "_".$ColorattributeOptions->admin_name; + }else{ + $attribute_name = $ColorattributeOptions->admin_name; + $sku_key = $ColorattributeOptions->admin_name; + } + } + + $sku['attribute_name'] = $attribute_name; + $sku['attr_id'] = $attr_id; + //$sku['attr_id'] = "24_".$colorAttribute['integer_value'].",23_".$sizeAttribute['integer_value']; + + //$sku['key'] = $ColorattributeOptions->admin_name."_".$SizeattributeOptions->admin_name; // 这个数据需要留意他的位置,JS判断会需要使用 + //$sku['key'] = $SizeattributeOptions->admin_name."_".$ColorattributeOptions->admin_name; // 这个数据需要留意他的位置,JS判断会需要使用 + $sku['key'] = $sku_key; + + // $qty_items_color[$ColorattributeOptions->admin_name][] = $SizeattributeOptions->admin_name; + // $qty_items_size[$SizeattributeOptions->admin_name][] = $ColorattributeOptions->admin_name; + + $skus[] = $sku; + } + Cache::put($cache_key, json_encode($skus), 36000); + Cache::put($size_cache_key, json_encode($qty_items_size), 36000); + Cache::put($color_cache_key, json_encode($qty_items_color), 36000); + }else { + $skus = json_decode($skus, JSON_OBJECT_AS_ARRAY); + } + + + $product_attributes = []; + + $cache_key = "product_attributes_".$product->id; + $product_attributes = Cache::get($cache_key); + + $cache_key_1 = "product_category_".$product->id; + $product_category = Cache::get($cache_key_1); + if(empty($product_category)) { + $categories = $product->categories; + if(isset($categories[0])) { + $product_category_id = intval($categories[0]->id); + }else{ + $product_category_id = 9; + } + + Cache::put($cache_key_1, $product_category_id, 36000); + }else{ + //$product_category = json_decode($product_category); + //var_dump($product_category);exit; + $product_category_id = intval($product_category); + } + + if(empty($product_attributes)) { + + $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); + $attributes = $productViewHelper->getConfigurationConfig($product); + + + $productSizeImage = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 32, + ]); + + + //var_dump($customAttributeValues);exit; + + //获取到他底部的商品内容 + // $attributes = $this->productRepository->getSuperAttributes($product); + foreach($attributes['attributes'] as $key=>$attribute) { + $attribute['name'] = $attribute['code']; + $options = []; + foreach($attribute['options'] as $kk=>$option) { + + // 获取商品图片内容 + $is_sold_out = false; + if($attribute['id']==23) { + $new_id = $option['products'][0]; + $new_product = $this->productRepository->find($new_id); + $NewproductBaseImage = product_image()->getProductBaseImage($new_product); + $option['image'] = @$NewproductBaseImage['medium_image_url']; + + }else{ + $option['image'] = $productBaseImage['medium_image_url']; + + } + // 判断是否有对应的尺码内容 + $option['is_sold_out'] = $is_sold_out; + $option['name'] = $option['label']; + unset($option['admin_name']); + $options[] = $option; + //var_dump($option); + } + + $tip = ""; + $tip_img = ""; + if($attribute['id']==24) { + $tip = "Size Chart"; + if(isset($productSizeImage->text_value)) $tip_img = $productSizeImage->text_value; + if(empty($tip_img)) $tip = ""; + } + + $attribute['tip'] = $tip; + $attribute['tip_img'] = $tip_img; + + unset($attribute['translations']); //去掉多余的数据内容 + //var_dump($options); + $attribute['options'] = $options; + $attribute['image'] = $productBaseImage['medium_image_url']; + $product_attributes[] = $attribute; + } + + Cache::put($cache_key, json_encode($product_attributes), 36000); + + }else{ + $product_attributes = json_decode($product_attributes, JSON_OBJECT_AS_ARRAY); + } + + rsort($product_attributes); + + //商品的背景图片获取 + + $productBgAttribute = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 29, + ]); + + + $productBgAttribute_mobile = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 30, + ]); + + + $app_env = config("app.env"); + + //var_dump($productBgAttribute); + + // 获取 faq 数据 + $redis = Redis::connection('default'); + $faqItems = $redis->hgetall($this->faq_cache_key); + + sort($faqItems); + + $comments = $redis->hgetall($this->cache_prefix_key."product_comments_".$product['id']); + + + //获取 paypal smart key + $paypal_client_id = core()->getConfigData('sales.payment_methods.paypal_smart_button.client_id'); + + + //支持的区域 + $countries = config("countries"); + + $default_country = config('onebuy.default_country'); + + $airwallex_method = config('onebuy.airwallex.method'); + + //var_dump($default_country);exit; + + return view('onebuy::v2.product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method')); + } + + public function cms($slug, Request $request) { + \Debugbar::disable(); /* 开启后容易出现前端JS报错的情况 */ + + $page = $this->cmsRepository->findByUrlKeyOrFail($slug); + + return view('onebuy::cms.page')->with('page', $page); + + } + + // 完成订单生成动作 + public function order_add_sync(Request $request) { + //var_dump($request->all()); + + $payment_method = $request->input('payment_method'); + + $input = $request->all(); + + $refer = $request->session()->get('refer'); + Log::info("refer checkout v1 ".$refer); + + + $products = $request->input("products"); + // 添加到购物车 + Cart::deActivateCart(); + foreach($products as $key=>$product) { + //var_dump($product); + $product['quantity'] = $product['amount']; + $product['selected_configurable_option'] = $product['variant_id']; + $attr_ids = explode(',', $product['attr_id']); + foreach($attr_ids as $key=>$attr_id) { + $attr = explode('_', $attr_id); + $super_attribute[$attr[0]] = $attr[1]; + } + $product['super_attribute'] = $super_attribute; + //Log::info("add product into cart ". json_encode($product)); + $cart = Cart::addProduct($product['product_id'], $product); + + if ( + is_array($cart) + && isset($cart['warning']) + ) { + return new JsonResource([ + 'message' => $cart['warning'], + ]); + } + + } + // 添加地址内容 + $addressData = []; + $addressData['billing'] = []; + $address1 = []; + array_push($address1, $input['address']); + $addressData['billing']['city'] = $input['city']; + $addressData['billing']['country'] = $input['country']; + $addressData['billing']['email'] = $input['email']; + $addressData['billing']['first_name'] = $input['first_name']; + $addressData['billing']['last_name'] = $input['second_name']; + //undefined+ + $input['phone_full'] = str_replace('undefined+','', $input['phone_full']); + $addressData['billing']['phone'] = $input['phone_full']; + $addressData['billing']['postcode'] = $input['code']; + $addressData['billing']['state'] = $input['province']; + $addressData['billing']['use_for_shipping'] = true; + $addressData['billing']['address1'] = $address1; + $addressData['shipping'] = []; + $addressData['shipping']['isSaved'] = false; + $address1 = []; + array_push($address1, ""); + $addressData['shipping']['address1'] = $address1; + + $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); + + $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); + + + //return response()->json($addressData); + + //var_dump($addressData);exit; + + + //Cart::saveCustomerAddress($addressData); + + if ( + Cart::hasError() + || ! Cart::saveCustomerAddress($addressData) + ) { + return new JsonResource([ + 'redirect' => true, + 'data' => route('shop.checkout.cart.index'), + ]); + } + + + //处理配送方式 + $shippingMethod = "free_free"; // 包邮 + $shippingMethod = "flatrate_flatrate"; + // Cart::saveShippingMethod($shippingMethod); + + if ( + Cart::hasError() + || ! $shippingMethod + || ! Cart::saveShippingMethod($shippingMethod) + ) { + return response()->json([ + 'redirect_url' => route('shop.checkout.cart.index'), + ], Response::HTTP_FORBIDDEN); + } + + Cart::collectTotals(); + + if($payment_method=="airwallex_klarna") $payment_method = "airwallex"; + + // 获取支付信息 + + if($payment_method=='airwallex') { + //处理支付方式 + $payment = []; + $payment['description'] = $payment_method."-".$refer; + $payment['method'] = $payment_method; + $payment['method_title'] = $payment_method."-".$refer; + $payment['sort'] = "2"; + // Cart::savePaymentMethod($payment); + + if ( + Cart::hasError() + || ! $payment + || ! Cart::savePaymentMethod($payment) + ) { + return response()->json([ + 'redirect_url' => route('shop.checkout.cart.index'), + ], Response::HTTP_FORBIDDEN); + } + + // 生成订单, + Cart::collectTotals(); + $this->validateOrder(); + $cart = Cart::getCart(); + $order = $this->orderRepository->create(Cart::prepareDataForOrder()); + //Cart::deActivateCart(); + //Cart::activateCartIfSessionHasDeactivatedCartId(); + // 跳转到支付 + $data['result'] = 200; + $data['order'] = $order; + if ($order) { + $orderId = $order->id; + $transactionManager = $this->airwallex->createPaymentOrder($cart, $order->id); + + $data['client_secret'] = $transactionManager->client_secret; + $data['payment_intent_id'] = $transactionManager->id; + $data['currency'] = $transactionManager->currency; + $data['country'] = $input['country']; + } + + return response()->json($data); + } + + if($payment_method=='paypal_standard') { + //处理支付方式 + $payment = []; + $payment['description'] = "PayPal-".$refer; + $payment['method'] = "paypal_standard"; + $payment['method_title'] = "PayPal standard Button-".$refer; + $payment['sort'] = "1"; + // Cart::savePaymentMethod($payment); + + if ( + Cart::hasError() + || ! $payment + || ! Cart::savePaymentMethod($payment) + ) { + return response()->json([ + 'message' => 'save payment error', + ]); + } + + Cart::collectTotals(); + + $this->validateOrder(); + + $cart = Cart::getCart(); + + $order = $this->orderRepository->create(Cart::prepareDataForOrder()); + + if ($redirectUrl = Payment::getRedirectUrl($cart)) { + $paypalStandard = app('Webkul\Paypal\Payment\Standard'); + $data = []; + $data['success'] = true; + $data['redirect'] = $redirectUrl; + $data['redirect_url'] = $redirectUrl; + $data['form'] = $paypalStandard->getFormFields(); + $data['pay_url'] = $paypalStandard->getPaypalUrl(); + $data['result'] = 200; + return response()->json($data); + } + + // $order = $this->orderRepository->create(Cart::prepareDataForOrder()); + + // Cart::deActivateCart(); + + // Cart::activateCartIfSessionHasDeactivatedCartId(); + + // session()->flash('order', $order); + + // return new JsonResource([ + // 'success' => true, + // 'redirect' => true, + // 'redirect_url' => route('shop.checkout.onepage.success'), + // ]); + } + + // 商品更新到购物车中。http://45.79.79.208:8002/api/checkout/cart + // 订单基于购物车中的商品完成订单生成 + + } + + // paypal 生成订单动作 + /** + * + * @link https://gist.github.com/nicelizhi/76d2a09692459c1a22388366c5861521 input params + * @return + */ + public function order_addr_after(Request $request) { + $input = $request->all(); + + Log::info("order addr after ".json_encode($input)); + + $refer = $request->session()->get('refer'); + Log::info("refer checkout v1 ".$refer); + + $products = $request->input("products"); + // 添加到购物车 + Cart::deActivateCart(); + foreach($products as $key=>$product) { + //var_dump($product); + $product['quantity'] = $product['amount']; + $product['selected_configurable_option'] = $product['variant_id']; + $attr_ids = explode(',', $product['attr_id']); + foreach($attr_ids as $key=>$attr_id) { + $attr = explode('_', $attr_id); + $super_attribute[$attr[0]] = $attr[1]; + } + + $product['super_attribute'] = $super_attribute; + Log::info("add product into cart ". json_encode($product)); + $cart = Cart::addProduct($product['product_id'], $product); + if ( + is_array($cart) + && isset($cart['warning']) + ) { + return new JsonResource([ + 'message' => $cart['warning'], + ]); + } + } + // 添加地址内容 + $addressData = []; + $addressData['billing'] = []; + $address1 = []; + array_push($address1, $input['address']); + $addressData['billing']['city'] = $input['city']; + $addressData['billing']['country'] = $input['country']; + $addressData['billing']['email'] = $input['email']; + $addressData['billing']['first_name'] = $input['first_name']; + $addressData['billing']['last_name'] = $input['second_name']; + $input['phone_full'] = str_replace('undefined+','', $input['phone_full']); + $addressData['billing']['phone'] = $input['phone_full']; + $addressData['billing']['postcode'] = $input['code']; + $addressData['billing']['state'] = $input['province']; + $addressData['billing']['use_for_shipping'] = true; + $addressData['billing']['address1'] = $address1; + $addressData['shipping'] = []; + $addressData['shipping']['isSaved'] = false; + $address1 = []; + array_push($address1, ""); + $addressData['shipping']['address1'] = $address1; + + $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); + + $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); + + Log::info("paypal pay ".$refer.'--'.json_encode($addressData)); + + + if ( + Cart::hasError() + || ! Cart::saveCustomerAddress($addressData) + ) { + return new JsonResource([ + 'redirect' => true, + 'data' => route('shop.checkout.cart.index'), + ]); + } + + + //处理配送方式 + $shippingMethod = "free_free"; // 包邮 + $shippingMethod = "flatrate_flatrate"; + // Cart::saveShippingMethod($shippingMethod); + + if ( + Cart::hasError() + || ! $shippingMethod + || ! Cart::saveShippingMethod($shippingMethod) + ) { + return response()->json([ + 'redirect_url' => route('shop.checkout.cart.index'), + ], Response::HTTP_FORBIDDEN); + } + + Cart::collectTotals(); + + //处理支付方式 + $payment = []; + $payment['description'] = "PayPal-".$refer; + $payment['method'] = "paypal_smart_button"; + $payment['method_title'] = "PayPal Smart Button-".$refer; + $payment['sort'] = "1"; + // Cart::savePaymentMethod($payment); + + if ( + Cart::hasError() + || ! $payment + || ! Cart::savePaymentMethod($payment) + ) { + return response()->json([ + 'redirect_url' => route('shop.checkout.cart.index'), + ], Response::HTTP_FORBIDDEN); + } + + + /* + Cart::collectTotals(); + + $this->validateOrder(); + + $cart = Cart::getCart(); + + $order = $this->orderRepository->create(Cart::prepareDataForOrder()); + + Cart::deActivateCart(); + + Cart::activateCartIfSessionHasDeactivatedCartId(); + */ + + try { + $order = $this->smartButton->createOrder($this->buildRequestBody()); + $data = []; + $data['order'] = $order; + $data['code'] = 200; + $data['result'] = 200; + return response()->json($order); + } catch (\Exception $e) { + return response()->json(json_decode($e->getMessage()), 400); + } + + // return response()->json($order); + } + + + /** + * + * + * + */ + public function confirm(Request $request) { + $payment_intent_id = $request->input("payment_intent_id"); + $order_id = $request->input("order_id"); + + $order = $this->orderRepository->find($order_id); + + $transactionManager = $this->airwallex->confirmPayment($payment_intent_id, $order); + + $data = []; + $data['payment'] = $transactionManager; + $data['code'] = 200; + $data['result'] = 200; + $data['order_id'] = $order_id; + $data['order_id'] = $order_id; + return response()->json($data); + + } + + /** + * + * 订单状态查询 + * + */ + public function order_status(Request $request) { + + $refer = $request->session()->get('refer'); + Log::info("refer checkout v1 ".$refer); + + try { + $order = $this->smartButton->getOrder(request()->input('orderData.orderID')); + // return response()->json($order); + + + Log::info("paypal ".json_encode($order)); + Log::info("paypal request ".json_encode($request->all())); + + $order = (array)$order; + + //var_dump($order); + + $purchase_units = (array)$order['result']->purchase_units; + $input = (array)$purchase_units[0]->shipping; + $payer = (array)$order['result']->payer; + $payment_source = (array)$order['result']->payment_source; + $payment_source_paypal = (array)$payment_source['paypal']; + + Log::info("paypal source".json_encode($payment_source)); + Log::info("paypal source paypal".json_encode($payment_source_paypal)); + + // 添加地址内容 + $addressData = []; + $addressData['billing'] = []; + $address1 = []; + array_push($address1, $input['address']->address_line_1); + $addressData['billing']['city'] = isset($input['address']->admin_area_1) ? $input['address']->admin_area_1 : ""; + $addressData['billing']['country'] = $input['address']->country_code; + $addressData['billing']['email'] = $payer['email_address']; + $addressData['billing']['first_name'] = $payer['name']->given_name; + $addressData['billing']['last_name'] = $payer['name']->surname; + $national_number = isset($payment_source_paypal['phone_number']) ? $payment_source_paypal['phone_number']->national_number : ""; + $addressData['billing']['phone'] = $national_number; + $addressData['billing']['postcode'] = isset($input['address']->postal_code) ? $input['address']->postal_code : ""; + $addressData['billing']['state'] = isset($input['address']->admin_area_2) ? $input['address']->admin_area_2 : ""; + $addressData['billing']['use_for_shipping'] = true; + $addressData['billing']['address1'] = $address1; + $addressData['shipping'] = []; + $addressData['shipping']['isSaved'] = false; + $address1 = []; + array_push($address1, ""); + $addressData['shipping']['address1'] = $address1; + + $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); + + $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); + + Log::info("address data-".$refer.'--'.json_encode($addressData)); + + if ( + Cart::hasError() + || ! Cart::saveCustomerAddress($addressData) + ) { + return new JsonResource([ + 'redirect' => true, + 'data' => route('shop.checkout.cart.index'), + ]); + } + + $this->smartButton->captureOrder(request()->input('orderData.orderID')); + return $this->saveOrder(); + } catch (\Exception $e) { + return response()->json($e->getMessage()); + return response()->json(json_decode($e->getMessage()), 400); + } + + } + + /** + * Saving order once captured and all formalities done. + * + * @return \Illuminate\Http\Response + */ + protected function saveOrder() + { + if (Cart::hasError()) { + return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); + } + + try { + Cart::collectTotals(); + + $this->validateOrder(); + + $order = $this->orderRepository->create(Cart::prepareDataForOrder()); + + $this->orderRepository->update(['status' => 'processing'], $order->id); + + if ($order->canInvoice()) { + $this->invoiceRepository->create($this->prepareInvoiceData($order)); + } + + Cart::deActivateCart(); + + session()->flash('order', $order); + + return response()->json([ + 'success' => true, + ]); + } catch (\Exception $e) { + session()->flash('error', trans('shop::app.common.error')); + + throw $e; + } + } + + /** + * Prepares order's invoice data for creation. + * + * @param \Webkul\Sales\Models\Order $order + * @return array + */ + protected function prepareInvoiceData($order) + { + $invoiceData = ['order_id' => $order->id]; + + foreach ($order->items as $item) { + $invoiceData['invoice']['items'][$item->id] = $item->qty_to_invoice; + } + + return $invoiceData; + } + + protected function buildRequestBody() + { + $cart = Cart::getCart(); + + $billingAddressLines = $this->getAddressLines($cart->billing_address->address1); + + $data = [ + 'intent' => 'CAPTURE', + 'application_context' => [ + //'shipping_preference' => 'NO_SHIPPING', + 'shipping_preference' => 'GET_FROM_FILE', // 用户选择自己的地址内容 + ], + + 'purchase_units' => [ + [ + 'amount' => [ + 'value' => $this->smartButton->formatCurrencyValue((float) $cart->sub_total + $cart->tax_total + ($cart->selected_shipping_rate ? $cart->selected_shipping_rate->price : 0) - $cart->discount_amount), + 'currency_code' => $cart->cart_currency_code, + + 'breakdown' => [ + 'item_total' => [ + 'currency_code' => $cart->cart_currency_code, + 'value' => $this->smartButton->formatCurrencyValue((float) $cart->sub_total), + ], + + 'shipping' => [ + 'currency_code' => $cart->cart_currency_code, + 'value' => $this->smartButton->formatCurrencyValue((float) ($cart->selected_shipping_rate ? $cart->selected_shipping_rate->price : 0)), + ], + + 'tax_total' => [ + 'currency_code' => $cart->cart_currency_code, + 'value' => $this->smartButton->formatCurrencyValue((float) $cart->tax_total), + ], + + 'discount' => [ + 'currency_code' => $cart->cart_currency_code, + 'value' => $this->smartButton->formatCurrencyValue((float) $cart->discount_amount), + ], + ], + ], + + 'items' => $this->getLineItems($cart), + ], + ], + ]; + + if (! empty($cart->billing_address->phone)) { + $data['payer']['phone'] = [ + 'phone_type' => 'MOBILE', + + 'phone_number' => [ + 'national_number' => $this->smartButton->formatPhone($cart->billing_address->phone), + ], + ]; + } + + if ( + $cart->haveStockableItems() + && $cart->shipping_address + ) { + //$data['application_context']['shipping_preference'] = 'SET_PROVIDED_ADDRESS'; + + /* + $data['purchase_units'][0] = array_merge($data['purchase_units'][0], [ + 'shipping' => [ + 'address' => [ + 'address_line_1' => current($billingAddressLines), + 'address_line_2' => last($billingAddressLines), + 'admin_area_2' => $cart->shipping_address->city, + 'admin_area_1' => $cart->shipping_address->state, + 'postal_code' => $cart->shipping_address->postcode, + 'country_code' => $cart->shipping_address->country, + ], + ], + ]); + */ + } + + return $data; + } + + /** + * Return cart items. + * + * @param string $cart + * @return array + */ + protected function getLineItems($cart) + { + $lineItems = []; + + foreach ($cart->items as $item) { + $lineItems[] = [ + 'unit_amount' => [ + 'currency_code' => $cart->cart_currency_code, + 'value' => $this->smartButton->formatCurrencyValue((float) $item->price), + ], + 'quantity' => $item->quantity, + 'name' => $item->name, + 'sku' => $item->sku, + 'category' => $item->getTypeInstance()->isStockable() ? 'PHYSICAL_GOODS' : 'DIGITAL_GOODS', + ]; + } + + return $lineItems; + } + + /** + * Return convert multiple address lines into 2 address lines. + * + * @param string $address + * @return array + */ + protected function getAddressLines($address) + { + $address = explode(PHP_EOL, $address, 2); + + $addressLines = [current($address)]; + + if (isset($address[1])) { + $addressLines[] = str_replace(["\r\n", "\r", "\n"], ' ', last($address)); + } else { + $addressLines[] = ''; + } + + return $addressLines; + } + + /** + * + * generation products for page + * @param product + * @param array nums + * + */ + + private function makeProducts($product, $nums = array()) { + + //var_dump($product->id);exit; + $cache_key = "product_ext_".$product->id."_".count($nums); + $package_products = Cache::get($cache_key); + + if(true) { + //if(empty($package_products)) { + //if($package_products) { + $package_products = []; + $productBaseImage = product_image()->getProductBaseImage($product); + + //source price + + $productBgAttribute_price = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 31, + ]); + $source_price = 0; + if(!is_null($productBgAttribute_price)) $source_price = $productBgAttribute_price->float_value; + if(empty($source_price)) { + return abort(404); + } + + foreach($nums as $key=>$i) { + + $package_product = []; + $package_product['id'] = $i; + $package_product['name'] = $i."x " . $product->name; + $package_product['image'] = $productBaseImage['medium_image_url']; + $package_product['amount'] = $i; + //$package_product['old_price'] = $productPrice['regular']['price'] * $i; + $price = $this->getCartProductPrice($product,$product->id, $i); + $package_product['old_price'] = round($source_price * $i, 2); + $package_product['old_price_format'] = core()->currency($package_product['old_price']); + //$package_product['new_price'] = "3.23" * $i; + if ($i==2) $discount = 0.8; + if ($i==3) $discount = 0.7; + if ($i==4) $discount = 0.6; + if ($i==1) $discount = 1; + $package_product['new_price'] = $this->getCartProductPrice($product,$product->id, $i) * $discount; + $package_product['new_price_format'] = core()->currency($package_product['new_price']) ; + $tip1_price = (1 - round(($package_product['new_price'] / $package_product['old_price']), 2)) * 100; + $package_product['tip1'] = $tip1_price."% Savings"; + $tip2_price = round($package_product['new_price'] / $i, 2); + $package_product['tip2'] = core()->currency($tip2_price)."/piece"; + $package_product['shipping_fee'] = 9.99; + $popup_info['name'] = null; + $popup_info['old_price'] = null; + $popup_info['new_price'] = null; + $popup_info['img'] = null; + $package_product['popup_info'] = $popup_info; + $package_products[] = $package_product; + } + + Cache::put($cache_key, json_encode($package_products), 36000); + //var_dump("hello"); + return $package_products; + } + + return json_decode($package_products, JSON_OBJECT_AS_ARRAY); + } + + /** + * + * + * 计算商品在具体的数量的时候的价格,主要是考虑到会有购物车折扣的情况下 + * + * @param int $product_id + * @param int $qty + * + * @return float price + * + */ + private function getCartProductPrice($product, $product_id, $qty) { + //清空购车动作 + Cart::deActivateCart(); + //添加对应的商品到购物车中 + + $variant = $product->getTypeInstance()->getDefaultVariant(); + + //$product_variant = $this->productRepository->where("parent_id", $product->id)->get(); + + $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); + + $attributes = $productViewHelper->getConfigurationConfig($product); + + //var_dump($attributes);exit; + + + $AddcartProduct = []; + + $AddcartProduct['quantity'] = $qty; + + foreach($attributes['attributes'] as $key=>$attribute) { + $super_attribute[$attribute['id']] = $attribute['options'][0]['id']; + $product_variant_id = $attribute['options'][0]['products'][0]; + } + + $AddcartProduct['selected_configurable_option'] = $product_variant_id; + $AddcartProduct['super_attribute'] = $super_attribute; + //var_dump($super_attribute);exit; + + //var_dump($AddcartProduct);exit; + // $attr_ids = explode(',', $product['attr_id']); + // foreach($attr_ids as $key=>$attr_id) { + // $attr = explode('_', $attr_id); + // $super_attribute[$attr[0]] = $attr[1]; + // } + + //$AddcartProduct['super_attribute'] = $super_attribute; + //var_dump($AddcartProduct);exit; + + $cart = Cart::addProduct($product['product_id'], $AddcartProduct); + + //获取购车中商品价格返回 + $cart = Cart::getCart(); + + //var_dump($cart); exit; + + //清空购车动作 + Cart::deActivateCart(); + + return $cart->grand_total; + + } + + /** + * Validate order before creation. + * + * @return void|\Exception + */ + public function validateOrder() + { + $cart = Cart::getCart(); + + $minimumOrderAmount = core()->getConfigData('sales.order_settings.minimum_order.minimum_order_amount') ?: 0; + + if ( + auth()->guard('customer')->check() + && auth()->guard('customer')->user()->is_suspended + ) { + throw new \Exception(trans('shop::app.checkout.cart.suspended-account-message')); + } + + if ( + auth()->guard('customer')->user() + && ! auth()->guard('customer')->user()->status + ) { + throw new \Exception(trans('shop::app.checkout.cart.inactive-account-message')); + } + + if (! $cart->checkMinimumOrder()) { + throw new \Exception(trans('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)])); + } + + if ($cart->haveStockableItems() && ! $cart->shipping_address) { + throw new \Exception(trans('shop::app.checkout.cart.check-shipping-address')); + } + + if (! $cart->billing_address) { + throw new \Exception(trans('shop::app.checkout.cart.check-billing-address')); + } + + if ( + $cart->haveStockableItems() + && ! $cart->selected_shipping_rate + ) { + throw new \Exception(trans('shop::app.checkout.cart.specify-shipping-method')); + } + + if (! $cart->payment) { + throw new \Exception(trans('shop::app.checkout.cart.specify-payment-method')); + } + } + + /*** + * + * + */ + + public function checkout_success(Request $request) { + \Debugbar::disable(); /* 开启后容易出现前端JS报错的情况 */ + $product = []; + return view('onebuy::checkout-success', compact('product')); + } + + public function order_query(Request $request) { + $order_id = $request->input("id"); + + $order = $this->orderRepository->find($order_id); + if(is_null($order)) { + return new JsonResource([ + 'order_id' => 0, + 'info' => [], + ]); + } + + return new JsonResource([ + 'order_id' => $order_id, + 'info' => $order, + ]); + } + + public function recommended_query(Request $request) { + + $checkout_path = $request->input("checkout_path"); + $recommended_info = []; + return new JsonResource([ + 'checkout_path' => $checkout_path, + 'recommended_info' => $recommended_info, + 'recommended_info_title' => 'recommended_info_title' + ]); + + } + + public function order_log(Request $request) { + Log::info("request ". json_encode($request->all())); + $session_data = $request->session()->all(); + Log::info("session ". json_encode($session_data)); + $refer = $request->cookie('refer'); + Log::info("cookie refer ". $refer); + } +} \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Http/routes.php b/packages/Nicelizhi/OneBuy/src/Http/routes.php index c0bb887d4..17cbcb70b 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/routes.php +++ b/packages/Nicelizhi/OneBuy/src/Http/routes.php @@ -2,7 +2,9 @@ use Illuminate\Support\Facades\Route; use Nicelizhi\OneBuy\Http\Controllers\ProductController; +use Nicelizhi\OneBuy\Http\Controllers\ProductV2Controller; +// default Route::group(['middleware' => ['locale', 'theme', 'currency','web']], function () { Route::get('onebuy/{slug}', [ProductController::class, 'detail']) @@ -18,8 +20,6 @@ Route::any('onebuy/order/status', [ProductController::class, "order_status"]) ->name("onebuy.order.status"); - - Route::get('onebuy/checkout/success', [ProductController::class, "checkout_success"])->name('onebuy.checkout.success'); @@ -31,10 +31,15 @@ Route::get('onebuy/page/{slug}', [ProductController::class, "cms"])->name('onebuy.cms.page'); +}); +// v2 +Route::group(['middleware' => ['locale', 'theme', 'currency','web']], function () { - + Route::get('onebuy/v2/{slug}', [ProductV2Controller::class, 'detail']) + ->name('onebuy.v2.product.page') + ->middleware('cacheResponse'); }); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php new file mode 100644 index 000000000..ffecc5ba3 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php @@ -0,0 +1,2876 @@ +@inject ('reviewHelper', 'Webkul\Product\Helpers\Review') +@inject ('productViewHelper', 'Webkul\Product\Helpers\View') + +@php + $productBaseImage = product_image()->getProductBaseImage($product); +@endphp + + + + + {{ trim($product->meta_title) != "" ? $product->meta_title : $product->name }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+ + +
+
+
+
+
+
+
+ + + +
+
+@lang('onebuy::app.product.step.Select Quantity')
+
+
+
+
+
+
+ + + +
+
+ @lang('onebuy::app.product.step.Payment')
+
+
+
+
+
+
+ + + +
+
+ @lang('onebuy::app.product.step.Shipping Information')
+
+
+
+
+
+
+ + + +
+
+ @lang('onebuy::app.product.step.Place Order')
+
+
+
+
+
+
+
+
+ +
+ @lang('onebuy::app.product.order.Secure Checkout')
+
+ +
+
+ $package_product) { ?> +
+ +
+ +
+ @lang('onebuy::app.product.order.RECOMMENDED DEAL')
+
+ +
+
+ +
+
+
+ + +
+ +
+
+
+ +
+
+
+
+ +
+
+
+ +
+
+ @lang('onebuy::app.product.order.Express Checkout')
+
+
+ +
+
+
+
+
+
+
+
+ +
+
+@lang('onebuy::app.product.order.Shipping')
+
+@lang('onebuy::app.product.order.Enter your contact information'): +
+
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+
+ + + +
+ +
+ + + +
+
+ + + +
+
+
+ + + +
+
+ + + +
+
+ + + +
+
+
+
+
+
+@lang('onebuy::app.product.order.Order Summary')
+
+ +
+
+
+ +@lang('onebuy::app.product.order.Subtotal'): + + +
+
+ +@lang('onebuy::app.product.order.Discount'): + + +
+
+ +@lang('onebuy::app.product.order.Shipping'): + + +
+ + +
+ +@lang('onebuy::app.product.order.Total'): + + +
+
+
+ +
+
+
+
+ + + + +
+@lang('onebuy::app.product.step.Payment')
+
+@lang('onebuy::app.product.order.All transactions are secure and encrypted'): +
+
+
+ +
+
+
+
+ + +
+ +
+
+

+

+ @lang('onebuy::app.product.payment.klarna.description') +
+

+
+
+
+ +
+ +
+
+

+

+ @lang('onebuy::app.product.payment.paypal.description') +
+

+
+
+
+ + +
+
+

+
+
+ + +
+ +
+

+
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.card_number')
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.Expiry')
+
+
+
+
@lang('onebuy::app.product.payment.creditCard.cvc')
+
+
+
+
+
+ + + + + + +
+
+
+
+
+
+ +
+
+ +
@lang('onebuy::app.product.payment.complete_secure_purchase')
+ +
+
+ + +
+ +
+
+
+ + + + + + + +
+
+ +
+ +
+ +
+ + @lang('onebuy::app.product.order.What customers are saying about') Hatmeo +
+ +
+ +
+ $comment) { + $comment = json_decode($comment); + //var_dump($comment);exit; + ?> +
+
+
+

name, 0, 1);?>

+

name;?>

+

+ Verified Buyer +

+
+
+
+ +
+
+
+ +
+ title;?> + +

content;?>

+ +
+
+ + + +
+ + +
+ +
+ + +
+ +
+ + @lang('onebuy::app.product.order.What customers are saying about') + +
+ +
+ + $item) { + $item = json_decode($item); + ?> + +
+ +

+ + + +

+ +
+ +
+ + a;?> + +
+ +
+ +
+ + + +
+ +
+
+ +
+ +
+@include('onebuy::footer-container-'.strtolower($default_country)) +
+
+
+
+product image +
+
+
+firstName +lastName +. from +location +
+just purchased: +product name +
+
+ @lang('onebuy::app.product.order.JUST NOW')
+
+
+
+
+
+
+
+ +
+ +
+
+
+
+
+
+ +
+
+
+
+ + +
+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From 773782cc6d37afafa0a4d97506ed4e8945b75fb0 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 08:18:02 +0000 Subject: [PATCH 119/386] add github action sync --- .github/workflows/laravel.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 03aad5280..8d48ba836 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -47,3 +47,16 @@ jobs: DB_USERNAME: root DB_PASSWORD: password run: php artisan migrate && php artisan db:seed && vendor/bin/pest + - name: Sync to Server 1 and Do it + uses: appleboy/ssh-action@master + env: + GITHUB_SHA_X: ${GITHUB_SHA} + with: + host: ${{ secrets.SSH_HOST }} + username: ${{ secrets.SSH_USERNAME }} + key: ${{ secrets.DEPLOY_KEY }} + port: ${{secrets.SSH_PORT }} + script: | + cd ${{ secrets.WWW_DIR }} && sudo git pull + php artisan migrate + composer update From 0c79cc19666c5c085c9c4b97d0cd4bdfa45ea187 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 08:25:59 +0000 Subject: [PATCH 120/386] fix auto cicd --- .github/workflows/laravel.yml | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 8d48ba836..ef3f7c4c2 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -60,3 +60,12 @@ jobs: cd ${{ secrets.WWW_DIR }} && sudo git pull php artisan migrate composer update + cd ${{ secrets.WWW_DIR_2 }} && sudo git pull + php artisan migrate + composer update + cd ${{ secrets.WWW_DIR_3 }} && sudo git pull + php artisan migrate + composer update + cd ${{ secrets.WWW_DIR_4 }} && sudo git pull + php artisan migrate + composer update From c44f77c6f400d540c32619f9a16b407d3d5a80f4 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 18 Feb 2024 08:30:44 +0000 Subject: [PATCH 121/386] add new lang --- .../OneBuy/src/Resources/lang/es/app.php | 79 +++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php new file mode 100644 index 000000000..435485011 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php @@ -0,0 +1,79 @@ + [ + 'payment' => [ + 'creditCard' => [ + 'title' => 'Credit card', + 'card_number' => 'Card number', + 'Expiry' => 'Expiry', + 'cvc' => 'CVC', + ], + 'paypal' => [ + 'title' => 'PayPal', + 'description' => 'After you click “Pay with PayPal,” you will be redirected to PayPal to safely complete your purchase.' + ], + 'klarna' => [ + 'title' => 'klarna', + 'description' => 'After you click “Pay Now”, you will be redirected to Klarna to safely complete your purchase.' + ], + 'complete_secure_purchase' => 'COMPLETELY SAFE PURCHASE', + ], + 'step' => [ + 'Select Quantity' => 'Select Quantity', + 'Payment' => 'Payment', + 'Shipping Information' => 'Shipping Information', + 'Place Order' => 'Place Order', + ], + "order" => [ + 'Express Checkout' => 'Express Checkout', + 'Secure Checkout' => 'Secure Checkout', + 'RECOMMENDED DEAL' => 'RECOMMENDED DEAL', + 'Shipping' => 'Shipping', + 'Or Pay With Credit Card' => 'Or Pay With Credit Card', + 'Credit Card Information' => 'Credit Card Information', + 'Your Card Info is invaild' => 'Your Card Info is invaild', + 'GUARANTEED' => 'GUARANTEED', + 'SAFE' => 'SAFE', + 'CHECKOUT' => 'CHECKOUT', + 'Enter your contact information' => 'Enter your contact information', + 'Street Address' => 'Street Address', + 'Phone Number' => 'Phone Number', + 'Last Name' => 'Last Name', + 'First Name' => 'First Name', + 'Email' => 'Email', + 'City' => 'City', + 'Country' => 'Country', + 'State/Province' => 'State/Province', + 'Zip/Postal Code' => 'Zip/Postal Code', + 'Order Summary' => 'Order Summary', + 'EDIT' => 'EDIT', + 'QTY' => 'QTY', + 'Refund policy' => 'Refund policy', + 'Privacy Policy' => 'Privacy Policy', + 'Total' => 'Total', + 'Coupon' => 'Coupon', + 'Shipping Insurance' => 'Shipping Insurance', + 'Discount' => 'Discount', + 'Subtotal' => 'Subtotal', + '30 DAY GUARANTEE' => '30 DAY GUARANTEE', + 'What customers are saying about' => 'What customers are saying about', + 'Frequently Asked Questions' => 'Frequently Asked Questions', + 'JUST NOW' => 'JUST NOW', + 'COMPLETE SECURE PURCHASE' => 'COMPLETE SECURE PURCHASE', + 'Item' => 'Item', + 'SELECT YOUR' => 'SELECT YOUR', + 'All transactions are secure and encrypted' => 'All transactions are secure and encrypted', + 'Hatmeo offers 30' => 'Hatmeo offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', + ], + 'footer' => [ + 'Shipping Delivery' => 'Envío y Entrega', + 'Refund policy' => 'Politica de reembolso', + 'About US' => 'Sobre nosotros', + 'Privacy Policy' => 'política de privacidad', + 'Contact Us' => 'Contacta con nosotras', + ] + ], + 'order-success' => [ + + ], +]; \ No newline at end of file From 375971fd5a0ca6de8157546c992fefd0fb1a7e36 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Sun, 18 Feb 2024 16:42:31 +0800 Subject: [PATCH 122/386] add es footer --- .../views/footer-container-es.blade.php | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php new file mode 100644 index 000000000..9e36e4322 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php @@ -0,0 +1,48 @@ + \ No newline at end of file From 0a08b6af7719e38ad2e524ce97a717b5961d2893 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 19 Feb 2024 02:10:17 +0000 Subject: [PATCH 123/386] fix onebuy param --- .env.example | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.env.example b/.env.example index d744caa6e..a1223282a 100644 --- a/.env.example +++ b/.env.example @@ -90,4 +90,9 @@ DB_TIMEZONE=+08:00 ONEBUY_DEFAULT_COUNTRY=DE SHOPIFY_APP_ID= -SHOPIFY_STORE_LANG=en \ No newline at end of file +SHOPIFY_STORE_LANG=en + +ONEBUY_PAYMENT_AIRWALLEX_KLARNA=0 +ONEBUY_PAYMNET_PAYAL_STANDARD=1 +ONEBUY_PAYMENT_AIRWALLEX_CREDIT_CARD=1 +ONEBUY_PAYMENT_DEFAULT=payment_method_airwallex \ No newline at end of file From fa5c6444e103b244f675846b7a437221d5672928 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 19 Feb 2024 02:10:48 +0000 Subject: [PATCH 124/386] fix the payment options --- .../Nicelizhi/OneBuy/src/Config/onebuy.php | 6 + .../Http/Controllers/ProductController.php | 4 +- .../Http/Controllers/ProductV2Controller.php | 6 +- .../Resources/views/product-detail.blade.php | 125 ++++++++------- .../views/v2/product-detail.blade.php | 147 ++++++++++-------- 5 files changed, 163 insertions(+), 125 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php index d4d76a63c..02c17c43f 100644 --- a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php +++ b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php @@ -9,4 +9,10 @@ 'applepay', ] ], + 'payments_default' => env('ONEBUY_PAYMENT_DEFAULT','payment_method_airwallex'), + 'payments' => [ + 'airwallex_klarna' => env('ONEBUY_PAYMENT_AIRWALLEX_KLARNA', 1), + 'payal_standard' => env('ONEBUY_PAYMNET_PAYAL_STANDARD', 1), + 'airwallex_credit_card' => env('ONEBUY_PAYMENT_AIRWALLEX_CREDIT_CARD', 1) + ] ]; \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 7fd63ef5d..9508fce43 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -299,9 +299,11 @@ public function detail($slug, Request $request) { $airwallex_method = config('onebuy.airwallex.method'); + $payments = config('onebuy.payments'); // config the payments status + //var_dump($default_country);exit; - return view('onebuy::product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method')); + return view('onebuy::product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments')); } public function cms($slug, Request $request) { diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 1dfe995b6..9c2be8968 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -332,9 +332,11 @@ public function detail($slug, Request $request) { $airwallex_method = config('onebuy.airwallex.method'); - //var_dump($default_country);exit; + $payments = config('onebuy.payments'); // config the payments status + $payments_default = config('onebuy.payments_default'); - return view('onebuy::v2.product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method')); + + return view('onebuy::v2.product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default')); } public function cms($slug, Request $request) { diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index 506b8be2b..0bfefad89 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -738,72 +738,73 @@ function getQueryParameterTop(param) {
- +
- + + +
+
+
+

+

+ @lang('onebuy::app.product.payment.paypal.description') +
+

+
+
+
+ +

- + value="airwallex">

- + @@ -892,7 +893,7 @@ function getQueryParameterTop(param) {
-
+
@lang('onebuy::app.product.payment.complete_secure_purchase')
@@ -2776,12 +2777,22 @@ function payAfterSubmit() { \ No newline at end of file From 142f65467fa14c28a11c49c244df4e3c33054b7e Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 16:56:44 +0800 Subject: [PATCH 138/386] fix composer update to composer dump-autoload --- .github/workflows/laravel.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index ef3f7c4c2..f24898585 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -59,13 +59,13 @@ jobs: script: | cd ${{ secrets.WWW_DIR }} && sudo git pull php artisan migrate - composer update + composer dump-autoload cd ${{ secrets.WWW_DIR_2 }} && sudo git pull php artisan migrate - composer update + composer dump-autoload cd ${{ secrets.WWW_DIR_3 }} && sudo git pull php artisan migrate - composer update + composer dump-autoload cd ${{ secrets.WWW_DIR_4 }} && sudo git pull php artisan migrate - composer update + composer dump-autoload From 459cc5e13c516fae4d73d1656df558a53b2f8457 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:15:25 +0800 Subject: [PATCH 139/386] fix remote composer and php migr --- .github/workflows/laravel.yml | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index f24898585..edc97dad5 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -58,14 +58,17 @@ jobs: port: ${{secrets.SSH_PORT }} script: | cd ${{ secrets.WWW_DIR }} && sudo git pull - php artisan migrate - composer dump-autoload cd ${{ secrets.WWW_DIR_2 }} && sudo git pull - php artisan migrate - composer dump-autoload cd ${{ secrets.WWW_DIR_3 }} && sudo git pull - php artisan migrate - composer dump-autoload cd ${{ secrets.WWW_DIR_4 }} && sudo git pull - php artisan migrate - composer dump-autoload + - name: Sync to Server 2 and Do it + uses: appleboy/ssh-action@master + env: + GITHUB_SHA_X: ${GITHUB_SHA} + with: + host: ${{ secrets.SSH_HOST_US }} + username: ${{ secrets.SSH_USERNAME_US }} + key: ${{ secrets.DEPLOY_KEY_US }} + port: ${{secrets.SSH_PORT_US }} + script: | + cd ${{ secrets.WWW_DIR_US }} && sudo git pull From d9a4e6aae97a9337dd91fbf0ec42716add000153 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:17:34 +0800 Subject: [PATCH 140/386] fix remote composer and php migr --- .github/workflows/laravel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index edc97dad5..cf05d8a16 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -71,4 +71,4 @@ jobs: key: ${{ secrets.DEPLOY_KEY_US }} port: ${{secrets.SSH_PORT_US }} script: | - cd ${{ secrets.WWW_DIR_US }} && sudo git pull + cd ${{ secrets.WWW_DIR_US }} && git pull From fd7f4f75dfeed7d467ddc691811ad911b6ced092 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:24:55 +0800 Subject: [PATCH 141/386] fix the test for checkout --- packages/Nicelizhi/Checkout/tests/Feature/ExampleTest.php | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/Nicelizhi/Checkout/tests/Feature/ExampleTest.php b/packages/Nicelizhi/Checkout/tests/Feature/ExampleTest.php index 644d8ad91..d37929a2a 100644 --- a/packages/Nicelizhi/Checkout/tests/Feature/ExampleTest.php +++ b/packages/Nicelizhi/Checkout/tests/Feature/ExampleTest.php @@ -1,11 +1,4 @@ get('/checkout/v1/8398348714214'); - - $response->assertStatus(404); -}); - test('test checkout successful response', function() { $response = $this->get('/checkout/v1/cms/contact-us'); From 7743ef7ce63caa53c854fd711459f5842ec95116 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:28:21 +0800 Subject: [PATCH 142/386] fix test case --- packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php b/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php index 63a2f4b8d..22fe71748 100644 --- a/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php +++ b/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php @@ -3,5 +3,5 @@ test('the shop returns a successful response', function () { $response = $this->get('/'); - $response->assertStatus(404); + $response->assertStatus(200); }); From 35b7512b76db461426cf1a9cb4953cd7c8d5ec38 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:28:36 +0800 Subject: [PATCH 143/386] fix test case --- packages/Webkul/DataGrid/tests/Feature/ExampleTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/DataGrid/tests/Feature/ExampleTest.php b/packages/Webkul/DataGrid/tests/Feature/ExampleTest.php index b0a2b5edb..fe3326bd2 100644 --- a/packages/Webkul/DataGrid/tests/Feature/ExampleTest.php +++ b/packages/Webkul/DataGrid/tests/Feature/ExampleTest.php @@ -3,5 +3,5 @@ test('the datagrid returns a successful response', function () { $response = $this->get('/'); - $response->assertStatus(404); + $response->assertStatus(200); }); From d2f1e831a58fff8b4b4a6bf8cba0b0e98b84b78e Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:29:12 +0800 Subject: [PATCH 144/386] fix test case --- packages/Webkul/Shop/tests/Feature/ExampleTest.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Shop/tests/Feature/ExampleTest.php b/packages/Webkul/Shop/tests/Feature/ExampleTest.php index 63a2f4b8d..22fe71748 100644 --- a/packages/Webkul/Shop/tests/Feature/ExampleTest.php +++ b/packages/Webkul/Shop/tests/Feature/ExampleTest.php @@ -3,5 +3,5 @@ test('the shop returns a successful response', function () { $response = $this->get('/'); - $response->assertStatus(404); + $response->assertStatus(200); }); From ed788bd8f387dc486340f5a4cd60c873804457b6 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:30:30 +0800 Subject: [PATCH 145/386] add test case for it --- .github/workflows/laravel.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index cf05d8a16..233779f84 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -58,9 +58,13 @@ jobs: port: ${{secrets.SSH_PORT }} script: | cd ${{ secrets.WWW_DIR }} && sudo git pull + vendor/bin/pest cd ${{ secrets.WWW_DIR_2 }} && sudo git pull + vendor/bin/pest cd ${{ secrets.WWW_DIR_3 }} && sudo git pull + vendor/bin/pest cd ${{ secrets.WWW_DIR_4 }} && sudo git pull + vendor/bin/pest - name: Sync to Server 2 and Do it uses: appleboy/ssh-action@master env: @@ -72,3 +76,4 @@ jobs: port: ${{secrets.SSH_PORT_US }} script: | cd ${{ secrets.WWW_DIR_US }} && git pull + vendor/bin/pest From 7480102397487f7a96b8436f49fde7541d1d4312 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 17:32:55 +0800 Subject: [PATCH 146/386] add test case for it --- .github/workflows/laravel.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 233779f84..24d04d8a3 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -46,7 +46,7 @@ jobs: DB_DATABASE: test DB_USERNAME: root DB_PASSWORD: password - run: php artisan migrate && php artisan db:seed && vendor/bin/pest + run: php artisan migrate && php artisan db:seed - name: Sync to Server 1 and Do it uses: appleboy/ssh-action@master env: From a85e2dedbd6f1824972663e05274eaae7d9a5fb9 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 19 Feb 2024 09:51:12 +0000 Subject: [PATCH 147/386] fix 200 --- packages/Webkul/Shop/src/Http/Controllers/HomeController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php index 573afe6db..0c917ab01 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php @@ -28,7 +28,7 @@ public function index() { visitor()->visit(); - return abort(404); + return abort(200); $customizations = $this->themeCustomizationRepository->orderBy('sort_order')->findWhere([ 'status' => self::STATUS, From 7308cdb21c5f60cb7cd3f89031af0fd0edaf9185 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Mon, 19 Feb 2024 19:02:48 +0800 Subject: [PATCH 148/386] fix fb id --- .../OneBuy/src/Resources/views/checkout-success.blade.php | 4 ++-- .../OneBuy/src/Resources/views/product-detail-de.blade.php | 2 +- .../OneBuy/src/Resources/views/product-detail-us.blade.php | 2 +- .../OneBuy/src/Resources/views/product-detail.blade.php | 2 +- .../OneBuy/src/Resources/views/v2/product-detail.blade.php | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/checkout-success.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/checkout-success.blade.php index 68e80791a..09ca4124f 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/checkout-success.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/checkout-success.blade.php @@ -443,12 +443,12 @@ function purchase(value) { t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); - fbq('init', '844340774106979'); + fbq('init', '410784348009950'); fbq('track', 'PageView'); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php index 4b85ef1c6..a5301cbb8 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-de.blade.php @@ -40,7 +40,7 @@ t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); - fbq('init', '844340774106979'); + fbq('init', '410784348009950'); fbq('track', 'PageView'); fbq('track', 'ViewContent'); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-us.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-us.blade.php index 23adb0f39..4e5e82b39 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-us.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-us.blade.php @@ -34,7 +34,7 @@ t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); - fbq('init', '844340774106979'); + fbq('init', '410784348009950'); fbq('track', 'PageView'); fbq('track', 'ViewContent'); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index 52df1c7ea..9494809d9 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -40,7 +40,7 @@ t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); - fbq('init', '844340774106979'); + fbq('init', '410784348009950'); fbq('track', 'PageView'); fbq('track', 'ViewContent'); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php index bb9016e0b..bf888db7f 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/v2/product-detail.blade.php @@ -40,7 +40,7 @@ t.src=v;s=b.getElementsByTagName(e)[0]; s.parentNode.insertBefore(t,s)}(window, document,'script', 'https://connect.facebook.net/en_US/fbevents.js'); - fbq('init', '844340774106979'); + fbq('init', '410784348009950'); fbq('track', 'PageView'); fbq('track', 'ViewContent'); From 59f69a0bf5d5bf9ea2167dfc05a4cc8a39813b0d Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 09:11:49 +0800 Subject: [PATCH 149/386] fix post pedding order --- .../Commands/Order/PostCannelOrder.php | 497 ++++++++++++++++++ 1 file changed, 497 insertions(+) create mode 100644 packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php new file mode 100644 index 000000000..82fb60474 --- /dev/null +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php @@ -0,0 +1,497 @@ +shopify_store_id = "hatmeo"; + $this->shopify_store_id = "wmbracom"; + $this->shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + + + $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); + + if(is_null($shopifyStore)) { + $this->error("no store"); + return false; + } + + $lists = Order::where(['status'=>'pending'])->orderBy("updated_at", "desc")->limit(10)->get(); + + foreach($lists as $key=>$list) { + $this->info("start post order " . $list->id); + $this->postOrder($list->id, $shopifyStore); + $this->syncOrderPrice($list); // sync price to system + //exit; + } + + + + } + + /** + * + * + * @param object orderitem + * + */ + public function syncOrderPrice($orderItem) { + if($orderItem->grand_total_invoiced=='0.0000') { + + $base_grand_total_invoiced = $orderItem->base_grand_total; + $grand_total_invoiced = $orderItem->grand_total; + Order::where(['id'=>$orderItem->id])->update(['grand_total_invoiced'=>$grand_total_invoiced, 'base_grand_total_invoiced'=>$base_grand_total_invoiced]); + + } + + } + + public function postOrder($id, $shopifyStore) { + + $shopifyOrder = $this->ShopifyOrder->where([ + 'order_id' => $id + ])->first(); + if(!is_null($shopifyOrder)) { + return false; + } + + $this->info("sync to order to shopify ".$id); + + $client = new Client(); + + $shopify = $shopifyStore->toArray(); + + /** + * + * @link https://shopify.dev/docs/api/admin-rest/2023-10/resources/order#post-orders + * + */ + // $id = 147; + $order = $this->orderRepository->findOrFail($id); + + $orderPayment = $order->payment; + + //var_dump($order);exit; + + $postOrder = []; + + $line_items = []; + + $products = $order->items; + foreach($products as $key=>$product) { + $sku = $product['additional']; + + $skuInfo = explode('-', $sku['product_sku']); + if(!isset($skuInfo[1])) { + $this->error("have error" . $id); + return false; + } + + $line_item = []; + $line_item['variant_id'] = $skuInfo[1]; + $line_item ['quantity'] = $product['qty_ordered']; + $line_item ['requires_shipping'] = true; + + array_push($line_items, $line_item); + } + + $shipping_address = $order->shipping_address; + $postOrder['line_items'] = $line_items; + + + $customer = []; + $customer = [ + "first_name" => $shipping_address->first_name, + "last_name" => $shipping_address->last_name, + "email" => $shipping_address->email, + ]; + $postOrder['customer'] = $customer; + + $shipping_address->phone = str_replace('undefined', '', $shipping_address->phone); + $shipping_address->city = empty($shipping_address->city) ? $shipping_address->state : $shipping_address->city; + + $billing_address = [ + "first_name" => $shipping_address->first_name, + "last_name" => $shipping_address->last_name, + "address1" => $shipping_address->address1, + //$input['phone_full'] = str_replace('undefined+','', $input['phone_full']); + + "phone" => $shipping_address->phone, + "city" => $shipping_address->city, + "province" => $shipping_address->state, + "country" => $shipping_address->country, + "zip" => $shipping_address->postcode + ]; + $postOrder['billing_address'] = $billing_address; + + + $shipping_address = [ + "first_name" => $shipping_address->first_name, + "last_name" => $shipping_address->last_name, + "address1" => $shipping_address->address1, + "phone" => $shipping_address->phone, + "city" => $shipping_address->city, + "province" => $shipping_address->state, + "country" => $shipping_address->country, + "zip" => $shipping_address->postcode + ]; + + $postOrder['shipping_address'] = $shipping_address; + + //$postOrder['email'] = ""; + + $transactions = []; + + $transactions = [ + [ + "kind" => "sales", + "status" => "success", + "amount" => $order->grand_total, + ] + ]; + + $postOrder['transactions'] = $transactions; + + /** + * + * + * authorized: Show only authorized orders + + pending: Show only pending orders + + paid: Show only paid orders + + partially_paid: Show only partially paid orders + + refunded: Show only refunded orders + + voided: Show only voided orders + + partially_refunded: Show only partially refunded orders + + any: Show orders of any financial status. + + unpaid: Show authorized and partially paid orders. + * + * + */ + + $postOrder['financial_status'] = "pending"; + + $postOrder['current_subtotal_price'] = $order->sub_total; + + $current_subtotal_price_set = [ + 'shop_money' => [ + "amount" => $order->sub_total, + "currency_code" => $order->order_currency_code, + ], + 'presentment_money' => [ + "amount" => $order->sub_total, + "currency_code" => $order->order_currency_code, + ] + ]; + $postOrder['current_subtotal_price_set'] = $current_subtotal_price_set; + + + + // $total_shipping_price_set = []; + // $shop_money = []; + // $shop_money['amount'] = $order->shipping_amount; + // $shop_money['currency_code'] = $order->order_currency_code; + // $total_shipping_price_set['shop_money'] = $shop_money; + // $total_shipping_price_set['presentment_money'] = $shop_money; + + $total_shipping_price_set = [ + "shop_money" => [ + "amount" => $order->shipping_amount, + "currency_code" => $order->order_currency_code, + ], + "presentment_money" => [ + "amount" => $order->shipping_amount, + "currency_code" => $order->order_currency_code, + ] + ]; + + $postOrder['total_shipping_price_set'] = $total_shipping_price_set; + + // $discount_codes = []; + // $discount_codes = [ + // 'code' => 'COUPON_CODE', + // 'amount' => $order->discount_amount, + // 'type' => 'percentage' + // ]; + + /** + * + * If you're working on a private app and order confirmations are still being sent to the customer when send_receipt is set to false, then you need to disable the Storefront API from the private app's page in the Shopify admin. + * + */ + + //$postOrder['send_receipt'] = false; + $postOrder['send_receipt'] = true; + + // $postOrder['discount_codes'] = $discount_codes; + + $postOrder['current_total_discounts'] = $order->discount_amount; + $current_total_discounts_set = [ + 'shop_money' => [ + 'amount' => $order->discount_amount, + 'currency_code' => $order->order_currency_code + ], + 'presentment_money' => [ + 'amount' => $order->discount_amount, + 'currency_code' => $order->order_currency_code + ] + ]; + $postOrder['current_total_discounts_set'] = $current_total_discounts_set; + $postOrder['total_discount'] = $order->discount_amount; + $total_discount_set = []; + $total_discount_set = [ + 'shop_money' => [ + 'amount' => $order->discount_amount, + 'currency_code' => $order->order_currency_code + ], + 'presentment_money' => [ + 'amount' => $order->discount_amount, + 'currency_code' => $order->order_currency_code + ] + ]; + $postOrder['total_discount_set'] = $total_discount_set; + $postOrder['total_discounts'] = $order->discount_amount; + + + $shipping_lines = []; + + $shipping_lines = [ + 'price' => $order->shipping_amount, + 'code' => 'Standard', + "title" => "Standard Shipping", + "source" => "us_post", + "tax_lines" => [], + "carrier_identifier" => "third_party_carrier_identifier", + "requested_fulfillment_service_id" => "third_party_fulfillment_service_id", + "price_set" => [ + 'shop_money' => [ + 'amount' => $order->shipping_amount, + 'currency_code' => $order->order_currency_code + ], + 'presentment_money' => [ + 'amount' => $order->shipping_amount, + 'currency_code' => $order->order_currency_code + ] + ] + ]; + + + + $postOrder['shipping_lines'][] = $shipping_lines; + + + $pOrder['order'] = $postOrder; + //var_dump($pOrder);exit; + + Log::info("post to shopify order ". json_encode($pOrder)); + + $response = $client->post($shopify['shopify_app_host_name'].'/admin/api/2023-10/orders.json', [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'X-Shopify-Access-Token' => $shopify['shopify_admin_access_token'], + ], + 'body' => json_encode($pOrder) + ]); + + $body = json_decode($response->getBody(), true); + Log::info("shopify post order body ". json_encode($pOrder)); + Log::info("shopify post order".json_encode($body)); + + if(isset($body['order']['id'])) { + $shopifyNewOrder = $this->ShopifyOrder->where([ + 'shopify_order_id' => $body['order']['id'] + ])->first(); + if(is_null($shopifyNewOrder)) $shopifyNewOrder = new \Nicelizhi\Shopify\Models\ShopifyOrder(); + $shopifyNewOrder->order_id = $id; + $shopifyNewOrder->shopify_order_id = $body['order']['id']; + $shopifyNewOrder->shopify_store_id = $this->shopify_store_id; + + $item = $body['order']; + + $shopifyNewOrder->admin_graphql_api_id = $item['admin_graphql_api_id']; + $shopifyNewOrder->app_id = $item['app_id']; + $shopifyNewOrder->browser_ip = $item['browser_ip']; + $shopifyNewOrder->buyer_accepts_marketing = $item['buyer_accepts_marketing']; + $shopifyNewOrder->cancel_reason = $item['cancel_reason']; + $shopifyNewOrder->cancelled_at = $item['cancelled_at']; + $shopifyNewOrder->cart_token = $item['cart_token']; + $shopifyNewOrder->checkout_id = $item['checkout_id']; + $shopifyNewOrder->checkout_token = $item['checkout_token']; + $shopifyNewOrder->client_details = $item['client_details']; + $shopifyNewOrder->closed_at = $item['closed_at']; + $shopifyNewOrder->company = $item['company']; + $shopifyNewOrder->confirmation_number = $item['confirmation_number']; + $shopifyNewOrder->confirmed = $item['confirmed']; + $shopifyNewOrder->contact_email = $item['contact_email']; + $shopifyNewOrder->currency = $item['currency']; + $shopifyNewOrder->current_subtotal_price = $item['current_subtotal_price']; + $shopifyNewOrder->current_subtotal_price_set = $item['current_subtotal_price_set']; + $shopifyNewOrder->current_total_additional_fees_set = $item['current_total_additional_fees_set']; + $shopifyNewOrder->current_total_discounts = $item['current_total_discounts']; + $shopifyNewOrder->current_total_discounts_set = $item['current_total_discounts_set']; + $shopifyNewOrder->current_total_duties_set = $item['current_total_duties_set']; + $shopifyNewOrder->current_total_price = $item['current_total_price']; + $shopifyNewOrder->current_total_price_set = $item['current_total_price_set']; + $shopifyNewOrder->current_total_tax = $item['current_total_tax']; + $shopifyNewOrder->current_total_tax_set = $item['current_total_tax_set']; + $shopifyNewOrder->customer_locale = $item['customer_locale']; + $shopifyNewOrder->device_id = $item['device_id']; + $shopifyNewOrder->discount_codes = $item['discount_codes']; + $shopifyNewOrder->email = $item['email']; + $shopifyNewOrder->estimated_taxes = $item['estimated_taxes']; + $shopifyNewOrder->financial_status = $item['financial_status']; + $shopifyNewOrder->fulfillment_status = $item['fulfillment_status']; + $shopifyNewOrder->landing_site = $item['landing_site']; + $shopifyNewOrder->landing_site_ref = $item['landing_site_ref']; + $shopifyNewOrder->location_id = $item['location_id']; + $shopifyNewOrder->merchant_of_record_app_id = $item['merchant_of_record_app_id']; + $shopifyNewOrder->name = $item['name']; + $shopifyNewOrder->note = $item['note']; + $shopifyNewOrder->note_attributes = $item['note_attributes']; + $shopifyNewOrder->number = $item['number']; + $shopifyNewOrder->order_number = $item['order_number']; + $shopifyNewOrder->order_status_url = $item['order_status_url']; + $shopifyNewOrder->original_total_additional_fees_set = $item['original_total_additional_fees_set']; + $shopifyNewOrder->original_total_duties_set = $item['original_total_duties_set']; + $shopifyNewOrder->payment_gateway_names = $item['payment_gateway_names']; + $shopifyNewOrder->phone = $item['phone']; + $shopifyNewOrder->po_number = $item['po_number']; + $shopifyNewOrder->presentment_currency = $item['presentment_currency']; + $shopifyNewOrder->processed_at = $item['processed_at']; + $shopifyNewOrder->reference = $item['reference']; + $shopifyNewOrder->referring_site = $item['referring_site']; + $shopifyNewOrder->source_identifier = $item['source_identifier']; + $shopifyNewOrder->source_name = $item['source_name']; + $shopifyNewOrder->source_url = $item['source_url']; + $shopifyNewOrder->subtotal_price = $item['subtotal_price']; + $shopifyNewOrder->subtotal_price_set = $item['subtotal_price_set']; + $shopifyNewOrder->tags = $item['tags']; + $shopifyNewOrder->tax_exempt = $item['tax_exempt']; + $shopifyNewOrder->tax_lines = $item['tax_lines']; + $shopifyNewOrder->taxes_included = $item['taxes_included']; + $shopifyNewOrder->test = $item['test']; + $shopifyNewOrder->token = $item['token']; + $shopifyNewOrder->total_discounts = $item['total_discounts']; + $shopifyNewOrder->total_discounts_set = $item['total_discounts_set']; + $shopifyNewOrder->total_line_items_price = $item['total_line_items_price']; + $shopifyNewOrder->total_line_items_price_set = $item['total_line_items_price_set']; + $shopifyNewOrder->total_outstanding = $item['total_outstanding']; + $shopifyNewOrder->total_price = $item['total_price']; + $shopifyNewOrder->total_price_set = $item['total_price_set']; + + $shopifyNewOrder->total_shipping_price_set = $item['total_shipping_price_set']; + $shopifyNewOrder->total_tax = $item['total_tax']; + $shopifyNewOrder->total_tax_set = $item['total_tax_set']; + $shopifyNewOrder->total_tip_received = $item['total_tip_received']; + $shopifyNewOrder->total_weight = $item['total_weight']; + $shopifyNewOrder->user_id = $item['user_id']; + $shopifyNewOrder->billing_address = $item['billing_address']; + $shopifyNewOrder->customer = $item['customer']; + $shopifyNewOrder->discount_applications = $item['discount_applications']; + $shopifyNewOrder->fulfillments = $item['fulfillments']; + $shopifyNewOrder->line_items = $item['line_items']; + $shopifyNewOrder->payment_terms = $item['payment_terms']; + $shopifyNewOrder->refunds = $item['refunds']; + $shopifyNewOrder->shipping_address = $item['shipping_address']; + $shopifyNewOrder->shipping_lines = $item['shipping_lines']; + + + + $shopifyNewOrder->save(); + + + + // order sync to other job + + $cnv_id = explode('-',$orderPayment['method_title']); + $url = "https://track.heomai2021.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; + $res = $this->get_content($url); + Log::info("post to bm url ".$url." res ".json_encode($res)); + $url = "https://binom.heomai.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; + $res = $this->get_content($url); + Log::info("post to bm url ".$url." res ".json_encode($res)); + + + $url = "http://45.79.79.208:8009/api/offers/callBack?refer=".$cnv_id[1]."&revenue=".$order->grand_total; + $res = $this->get_content($url); + Log::info("post to bm 2 url ".$url." res ".json_encode($res)); + + + + + + + + } + } + + private function get_content($URL){ + $ch = curl_init(); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); + curl_setopt($ch, CURLOPT_URL, $URL); + $data = curl_exec($ch); + curl_close($ch); + return $data; + } + +} From a6d0ed349461d6d5a13bff54d8b282c3e8f826d7 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 09:31:41 +0800 Subject: [PATCH 150/386] fix gb --- .../views/footer-container-gb.blade.php | 48 +++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php new file mode 100644 index 000000000..9e36e4322 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php @@ -0,0 +1,48 @@ + \ No newline at end of file From 12f206220b49741b92e08d64fd82d9f1b201fb5a Mon Sep 17 00:00:00 2001 From: Steve Date: Tue, 20 Feb 2024 01:37:15 +0000 Subject: [PATCH 151/386] fix test for the onebuy version 1 checkout page --- packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php b/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php index 22fe71748..8fb2ec92f 100644 --- a/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php +++ b/packages/Nicelizhi/Shopify/tests/Feature/ExampleTest.php @@ -1,5 +1,10 @@ get('/onebuy/8395243356390'); + $response->assertStatus(200); +}); + test('the shop returns a successful response', function () { $response = $this->get('/'); From 6a1648f27cbc7ee1e56a080f0b4f372c34e0f659 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 10:53:17 +0800 Subject: [PATCH 152/386] fix docs for it --- docs/.gitignore | 8 + docs/README.md | 12 + docs/_config.landscape.yml | 39 ++ docs/_config.next.yml | 904 ++++++++++++++++++++++++++++++++ docs/_config.yml | 166 ++++++ docs/package.json | 33 ++ docs/scaffolds/draft.md | 4 + docs/scaffolds/page.md | 4 + docs/scaffolds/post.md | 5 + docs/sitemap_template.txt | 5 + docs/sitemap_template.xml | 40 ++ docs/source/_data/languages.yml | 2 + docs/source/categories/index.md | 5 + docs/source/tags/index.md | 5 + 14 files changed, 1232 insertions(+) create mode 100644 docs/.gitignore create mode 100644 docs/README.md create mode 100644 docs/_config.landscape.yml create mode 100644 docs/_config.next.yml create mode 100644 docs/_config.yml create mode 100644 docs/package.json create mode 100644 docs/scaffolds/draft.md create mode 100644 docs/scaffolds/page.md create mode 100644 docs/scaffolds/post.md create mode 100644 docs/sitemap_template.txt create mode 100644 docs/sitemap_template.xml create mode 100644 docs/source/_data/languages.yml create mode 100644 docs/source/categories/index.md create mode 100644 docs/source/tags/index.md diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 000000000..63f307b81 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1,8 @@ +.DS_Store +Thumbs.db +db.json +*.log +node_modules/ +public/ +.deploy*/ +_multiconfig.yml \ No newline at end of file diff --git a/docs/README.md b/docs/README.md new file mode 100644 index 000000000..7dbd23076 --- /dev/null +++ b/docs/README.md @@ -0,0 +1,12 @@ +### Hi 👋,I'm Steve + + +- 🔭 I’m currently a Developer and SRE engineer +- 🌱 My blog is https://medium.com/@cdndns + + + xxl4's github stats + xxl4's github top languages + + +![1612495992-915976-image](https://github.com/xxl4/xxl4/assets/34465153/2912927a-675b-43d5-997e-10b868ef158f) diff --git a/docs/_config.landscape.yml b/docs/_config.landscape.yml new file mode 100644 index 000000000..dea9f5a0e --- /dev/null +++ b/docs/_config.landscape.yml @@ -0,0 +1,39 @@ +# Header +menu: + Home: / + About me: /about-me + Archives: /archives + Tools: /tools +rss: /atom.xml +banner: images/banner.jpg +subtitle: Full Stack,DevOPS,Cloud Develop,Kubernetes,CDN, DNS, WAF,SRE,DevSecOps + +# Content +excerpt_link: Read More +fancybox: true +recent_posts_limits: 5 +# Footer +copyright: |- + Creative Commons License
+ All website licensed under CC BY-NC-ND 4.0
+ +# Sidebar +sidebar: right +widgets: +- category +- tagcloud +- archive +- recent_posts + +# Miscellaneous +google_analytics: G-Z7L6BT187M +favicon: /images/favicon.png +twitter: https://twitter.com/kongfaceworld + +# Header links +# Each name must correspond to the icon name of Fork Awesome +# https://forkaweso.me/Fork-Awesome/icons/ +links: + github: https://github.com/nicelizhi + twitter: https://twitter.com/kongfaceworld +# telegram: https://t.me/your_telegram_account diff --git a/docs/_config.next.yml b/docs/_config.next.yml new file mode 100644 index 000000000..4cdca324f --- /dev/null +++ b/docs/_config.next.yml @@ -0,0 +1,904 @@ +# =============================================================== +# It's recommended to use Alternate Theme Config to configure NexT +# Modifying this file may result in merge conflict +# See: https://theme-next.js.org/docs/getting-started/configuration +# =============================================================== + +# --------------------------------------------------------------- +# Theme Core Configuration Settings +# See: https://theme-next.js.org/docs/theme-settings/ +# --------------------------------------------------------------- + +# Allow to cache content generation. +cache: + enable: true + +# Remove unnecessary files after hexo generate. +minify: false + +# Define custom file paths. +# Create your custom files in site directory `source/_data` and uncomment needed files below. +custom_file_path: + #head: source/_data/head.njk + #header: source/_data/header.njk + #sidebar: source/_data/sidebar.njk + #postMeta: source/_data/post-meta.njk + #postBodyEnd: source/_data/post-body-end.njk + #footer: source/_data/footer.njk + #bodyEnd: source/_data/body-end.njk + #variable: source/_data/variables.styl + #mixin: source/_data/mixins.styl + #style: source/_data/styles.styl + + +# --------------------------------------------------------------- +# Scheme Settings +# --------------------------------------------------------------- + +# Schemes +#scheme: Muse +#scheme: Mist +#scheme: Pisces +scheme: Gemini + +# Dark Mode +darkmode: false + + +# --------------------------------------------------------------- +# Site Information Settings +# --------------------------------------------------------------- + +favicon: + small: /images/favicon-16x16-next.png + medium: /images/favicon-32x32-next.png + apple_touch_icon: /images/apple-touch-icon-next.png + safari_pinned_tab: /images/logo.svg + #android_manifest: /manifest.json + +# Custom Logo (Warning: Do not support scheme Mist) +custom_logo: #/uploads/custom-logo.jpg + +# Creative Commons 4.0 International License. +# See: https://creativecommons.org/about/cclicenses/ +creative_commons: + # Available values: by | by-nc | by-nc-nd | by-nc-sa | by-nd | by-sa | cc-zero + license: by-nc-sa + # Available values: big | small + size: small + sidebar: false + post: true + # You can set a language value if you prefer a translated version of CC license, e.g. deed.zh + # CC licenses are available in 39 languages, you can find the specific and correct abbreviation you need on https://creativecommons.org + language: + +# Open graph settings +# See: https://hexo.io/docs/helpers#open-graph +open_graph: + enable: true + options: + #twitter_card: + #twitter_id: + #twitter_site: + #twitter_image: + #google_plus: + #fb_admins: + #fb_app_id: + + +# --------------------------------------------------------------- +# Menu Settings +# --------------------------------------------------------------- + +# Usage: `Key: /link/ || icon` +# Key is the name of menu item. If the translation for this item is available, the translated text will be loaded, otherwise the Key name will be used. Key is case-sensitive. +# Value before `||` delimiter is the target link, value after `||` delimiter is the name of Font Awesome icon. +# External url should start with http:// or https:// +menu: + home: / || fa fa-home + about: /about-me/ || fa fa-user + tags: /tags/ || fa fa-tags + categories: /categories/ || fa fa-th + archives: /archives/ || fa fa-archive + tools: /tools/ || fa fa-screwdriver-wrench + sitemap: /sitemap.xml || fa fa-sitemap +# commonweal: /404/ || fa fa-heartbeat + +# Enable / Disable menu icons / item badges. +menu_settings: + icons: true + badges: true + + +# --------------------------------------------------------------- +# Sidebar Settings +# See: https://theme-next.js.org/docs/theme-settings/sidebar +# --------------------------------------------------------------- + +sidebar: + # Sidebar Position. + position: left + #position: right + + # Manual define the sidebar width. If commented, will be default for: + # Muse | Mist: 320 + # Pisces | Gemini: 240 + #width: 300 + + # Sidebar Display (only for Muse | Mist), available values: + # - post expand on posts automatically. Default. + # - always expand for all pages automatically. + # - hide expand only when click on the sidebar toggle icon. + # - remove totally remove sidebar including sidebar toggle. + display: post + + # Sidebar padding in pixels. + padding: 18 + # Sidebar offset from top menubar in pixels (only for Pisces | Gemini). + offset: 12 + +# Sidebar Avatar +avatar: + # Replace the default image and set the url here. + url: #/images/avatar.gif + # If true, the avatar will be displayed in circle. + rounded: false + # If true, the avatar will be rotated with the cursor. + rotated: false + +# Posts / Categories / Tags in sidebar. +site_state: true + +# Social Links +# Usage: `Key: permalink || icon` +# Key is the link label showing to end users. +# Value before `||` delimiter is the target permalink, value after `||` delimiter is the name of Font Awesome icon. +social: + GitHub: https://github.com/xxl4 || fab fa-github + E-Mail: mailto:nice.lizhi@gmail.com || fa fa-envelope + #Weibo: https://weibo.com/yourname || fab fa-weibo + #Google: https://plus.google.com/yourname || fab fa-google + #Twitter: https://twitter.com/yourname || fab fa-twitter + #FB Page: https://www.facebook.com/yourname || fab fa-facebook + #StackOverflow: https://stackoverflow.com/yourname || fab fa-stack-overflow + #YouTube: https://youtube.com/yourname || fab fa-youtube + #Instagram: https://instagram.com/yourname || fab fa-instagram + #Skype: skype:yourname?call|chat || fab fa-skype + +social_icons: + enable: true + icons_only: false + transition: false + +# Blog rolls +links_settings: + icon: fa fa-globe + title: Links + # Available values: block | inline + layout: block + +links: + Github: https://github.com/xxl4 + Zylinkus.com: https://www.zylinkus.com + +# Table of Contents in the Sidebar +# Front-matter variable (nonsupport wrap expand_all). +toc: + enable: true + # Automatically add list number to toc. + number: true + # If true, all words will placed on next lines if header width longer then sidebar width. + wrap: false + # If true, all level of TOC in a post will be displayed, rather than the activated part of it. + expand_all: false + # Maximum heading depth of generated toc. + max_depth: 6 + + +# --------------------------------------------------------------- +# Footer Settings +# See: https://theme-next.js.org/docs/theme-settings/footer +# --------------------------------------------------------------- + +# Show multilingual switcher in footer. +language_switcher: true + +footer: + # Specify the year when the site was setup. If not defined, current year will be used. + since: 1984 + + # Icon between year and copyright info. + icon: + # Icon name in Font Awesome. See: https://fontawesome.com/icons + name: fa fa-heart + # If you want to animate the icon, set it to true. + animated: false + # Change the color of icon, using Hex Code. + color: "#ff0000" + + # If not defined, `author` from Hexo `_config.yml` will be used. + copyright: + + # Powered by Hexo & NexT + powered: false + + # Beian ICP and gongan information for Chinese users. See: https://beian.miit.gov.cn, http://www.beian.gov.cn + beian: + enable: false + icp: + # The digit in the num of gongan beian. + gongan_id: + # The full num of gongan beian. + gongan_num: + # The icon for gongan beian. See: http://www.beian.gov.cn/portal/download + gongan_icon_url: + + +# --------------------------------------------------------------- +# Post Settings +# See: https://theme-next.js.org/docs/theme-settings/posts +# --------------------------------------------------------------- + +# Automatically excerpt description in homepage as preamble text. +excerpt_description: true + +# Read more button +# If true, the read more button will be displayed in excerpt section. +read_more_btn: true + +# Post meta display settings +post_meta: + item_text: true + created_at: true + updated_at: + enable: true + another_day: true + categories: true + +# Post wordcount display settings +# Dependencies: https://github.com/next-theme/hexo-word-counter +symbols_count_time: + separated_meta: true # 是否换行显示 字数统计 及 阅读时长 + item_text_post: true # 文章 字数统计 阅读时长 使用图标 还是 文本表示 + item_text_total: true # 博客底部统计 字数统计 阅读时长 使用图标 还是 文本表示 + awl: 4 + wpm: 275 + +# Use icon instead of the symbol # to indicate the tag at the bottom of the post +tag_icon: false + +# Donate (Sponsor) settings +# Front-matter variable (nonsupport animation). +reward_settings: + # If true, a donate button will be displayed in every article by default. + enable: false + animation: false + #comment: Buy me a coffee + +reward: + #wechatpay: /images/wechatpay.png + #alipay: /images/alipay.png + #paypal: /images/paypal.png + #bitcoin: /images/bitcoin.png + +# Subscribe through Telegram Channel, Twitter, etc. +# Usage: `Key: permalink || icon` (Font Awesome) +follow_me: + Twitter: https://twitter.com/kongfaceworld || fab fa-twitter + #Telegram: https://t.me/channel_name || fab fa-telegram + #WeChat: /images/wechat_channel.jpg || fab fa-weixin + RSS: /atom.xml || fa fa-rss + +# Related popular posts +# Dependencies: https://github.com/sergeyzwezdin/hexo-related-posts +related_posts: + enable: true + title: # Custom header, leave empty to use the default one + display_in_home: true + +# Post edit +# Easily browse and edit blog source code online. +post_edit: + enable: false + url: https://github.com/user-name/repo-name/tree/branch-name/subdirectory-name/ # Link for view source + #url: https://github.com/user-name/repo-name/edit/branch-name/subdirectory-name/ # Link for fork & edit + +# Show previous post and next post in post footer if exists +# Available values: left | right | false +post_navigation: left + + +# --------------------------------------------------------------- +# Custom Page Settings +# See: https://theme-next.js.org/docs/theme-settings/custom-pages +# --------------------------------------------------------------- + +# TagCloud settings for tags page. +tagcloud: + min: 12 # Minimum font size in px + max: 30 # Maximum font size in px + amount: 200 # Total amount of tags + orderby: name # Order of tags + order: 1 # Sort order + +# Google Calendar +# Share your recent schedule to others via calendar page. +calendar: + calendar_id: # Your Google account E-Mail + api_key: + orderBy: startTime + showLocation: false + offsetMax: 72 # Time Range + offsetMin: 4 # Time Range + showDeleted: false + singleEvents: true + maxResults: 250 + + +# --------------------------------------------------------------- +# Misc Theme Settings +# See: https://theme-next.js.org/docs/theme-settings/miscellaneous +# --------------------------------------------------------------- + +# Preconnect CDN for fonts and plugins. +# For more information: https://www.w3.org/TR/resource-hints/#preconnect +preconnect: false + +# Set the text alignment in posts / pages. +text_align: + # Available values: start | end | left | right | center | justify | justify-all | match-parent + desktop: justify + mobile: justify + +# Reduce padding / margin indents on devices with narrow width. +mobile_layout_economy: false + +# Browser header panel color. +theme_color: + light: "#222" + dark: "#222" + +# Override browsers' default behavior. +body_scrollbar: + # Place the scrollbar over the content. + overlay: false + # Present the scrollbar even if the content is not overflowing. + stable: false + +codeblock: + # Code Highlight theme + # All available themes: https://theme-next.js.org/highlight/ + theme: + light: default + dark: stackoverflow-dark + prism: + light: prism + dark: prism-dark + # Add copy button on codeblock + copy_button: + enable: false + # Available values: default | flat | mac + style: + +back2top: + enable: true + # Back to top in sidebar. + sidebar: false + # Scroll percent label in b2t button. + scrollpercent: false + +# Reading progress bar +reading_progress: + enable: false + # Available values: left | right + start_at: left + # Available values: top | bottom + position: top + reversed: false + color: "#37c6c0" + height: 3px + +# Bookmark Support +bookmark: + enable: false + # Customize the color of the bookmark. + color: "#222" + # If auto, save the reading progress when closing the page or clicking the bookmark-icon. + # If manual, only save it by clicking the bookmark-icon. + save: auto + +# `Follow me on GitHub` banner in the top-right corner. +github_banner: + enable: true + permalink: https://github.com/xxl4 + title: Follow me on GitHub + + +# --------------------------------------------------------------- +# Font Settings +# --------------------------------------------------------------- +# Find fonts on Google Fonts (https://fonts.google.com) +# All fonts set here will have the following styles: +# light | light italic | normal | normal italic | bold | bold italic +# Be aware that setting too much fonts will cause site running slowly +# --------------------------------------------------------------- +# Web Safe fonts are recommended for `global` (and `title`): +# Arial | Tahoma | Helvetica | Times New Roman | Courier New | Verdana | Georgia | Palatino | Garamond | Comic Sans MS | Trebuchet MS +# --------------------------------------------------------------- + +font: + enable: false + + # Uri of fonts host, e.g. https://fonts.googleapis.com (Default). + host: + + # Font options: + # `external: true` will load this font family from `host` above. + # `family: Times New Roman`. Without any quotes. + # `size: x.x`. Use `em` as unit. Default: 1 (16px) + + # Global font settings used for all elements inside . + global: + external: true + family: Lato + size: + + # Font settings for site title (.site-title). + title: + external: true + family: + size: + + # Font settings for headlines (

to

). + headings: + external: true + family: + size: + + # Font settings for posts (.post-body). + posts: + external: true + family: + + # Font settings for and code blocks. + codes: + external: true + family: + + +# --------------------------------------------------------------- +# SEO Settings +# See: https://theme-next.js.org/docs/theme-settings/seo +# --------------------------------------------------------------- + +# If true, site-subtitle will be added to index page. +# Remember to set up your site-subtitle in Hexo `_config.yml` (e.g. subtitle: Subtitle) +index_with_subtitle: false + +# Automatically add external URL with Base64 encrypt & decrypt. +exturl: false +# If true, an icon will be attached to each external URL +exturl_icon: true + +# Google Webmaster tools verification. +# See: https://developers.google.com/search +google_site_verification: 0gId0SJh4tQpwVkRakpmCucIt2I6il9JveIQf8gjGtA + +# Bing Webmaster tools verification. +# See: https://www.bing.com/webmasters +bing_site_verification: + +# Yandex Webmaster tools verification. +# See: https://webmaster.yandex.ru +yandex_site_verification: + +# Baidu Webmaster tools verification. +# See: https://ziyuan.baidu.com/site +baidu_site_verification: + + +# --------------------------------------------------------------- +# Third Party Plugins & Services Settings +# See: https://theme-next.js.org/docs/third-party-services/ +# More plugins: https://github.com/next-theme/awesome-next +# You may need to install the corresponding dependency packages +# --------------------------------------------------------------- + +# Math Formulas Render Support +# Warning: Please install / uninstall the relevant renderer according to the documentation. +# See: https://theme-next.js.org/docs/third-party-services/math-equations +# Server-side plugin: https://github.com/next-theme/hexo-filter-mathjax +math: + # Default (false) will load mathjax / katex script on demand. + # That is it only render those page which has `mathjax: true` in front-matter. + # If you set it to true, it will load mathjax / katex script EVERY PAGE. + every_page: false + + mathjax: + enable: false + # Available values: none | ams | all + tags: none + + katex: + enable: false + # See: https://github.com/KaTeX/KaTeX/tree/master/contrib/copy-tex + copy_tex: false + +# Easily enable fast Ajax navigation on your website. +# For more information: https://github.com/next-theme/pjax +pjax: true + +# FancyBox is a tool that offers a nice and elegant way to add zooming functionality for images. +# For more information: https://fancyapps.com/fancybox/ +fancybox: true + +# A JavaScript library for zooming images like Medium. +# Warning: Do not enable both `fancybox` and `mediumzoom`. +# For more information: https://medium-zoom.francoischalifour.com +mediumzoom: false + +# Vanilla JavaScript plugin for lazyloading images. +# For more information: https://apoorv.pro/lozad.js/demo/ +lazyload: false + +# Pangu Support +# For more information: https://github.com/vinta/pangu.js +# Server-side plugin: https://github.com/next-theme/hexo-pangu +pangu: false + +# Quicklink Support +# For more information: https://getquick.link +# Front-matter variable (nonsupport home archive). +quicklink: + enable: false + + # Home page and archive page can be controlled through home and archive options below. + # This configuration item is independent of `enable`. + home: false + archive: false + + # Default (true) will initialize quicklink after the load event fires. + delay: true + # Custom a time in milliseconds by which the browser must execute prefetching. + timeout: 3000 + # Default (true) will attempt to use the fetch() API if supported (rather than link[rel=prefetch]). + priority: true + + +# --------------------------------------------------------------- +# Comments Settings +# See: https://theme-next.js.org/docs/third-party-services/comments +# --------------------------------------------------------------- + +# Multiple Comment System Support +comments: + # Available values: tabs | buttons + style: tabs + # Choose a comment system to be displayed by default. + # Available values: disqus | disqusjs | changyan | livere | gitalk | utterances + active: + # Setting `true` means remembering the comment system selected by the visitor. + storage: true + # Lazyload all comment systems. + lazyload: false + # Modify texts or order for any naves, here are some examples. + nav: + #disqus: + # text: Load Disqus + # order: -1 + #gitalk: + # order: -2 + +# Disqus +# For more information: https://disqus.com +disqus: + enable: false + shortname: + count: true + +# DisqusJS +# For more information: https://disqusjs.skk.moe +disqusjs: + enable: false + # API Endpoint of Disqus API (https://disqus.com/api/docs/). + # Leave api empty if you are able to connect to Disqus API. Otherwise you need a reverse proxy for it. + # For example: + # api: https://disqus.skk.moe/disqus/ + api: + apikey: # Register new application from https://disqus.com/api/applications/ + shortname: # See: https://disqus.com/admin/settings/general/ + +# Changyan +# For more information: https://changyan.kuaizhan.com +changyan: + enable: false + appid: + appkey: + +# LiveRe comments system +# You can get your uid from https://livere.com/insight/myCode (General web site) +livere_uid: # + +# Gitalk +# For more information: https://gitalk.github.io +gitalk: + enable: false + github_id: # GitHub repo owner + repo: # Repository name to store issues + client_id: # GitHub Application Client ID + client_secret: # GitHub Application Client Secret + admin_user: # GitHub repo owner and collaborators, only these guys can initialize gitHub issues + distraction_free_mode: true # Facebook-like distraction free mode + # When the official proxy is not available, you can change it to your own proxy address + proxy: https://cors-anywhere.azm.workers.dev/https://github.com/login/oauth/access_token # This is official proxy address + # Gitalk's display language depends on user's browser or system environment + # If you want everyone visiting your site to see a uniform language, you can set a force language value + # Available values: en | es-ES | fr | ru | zh-CN | zh-TW + language: en | zh-CN + +# Utterances +# For more information: https://utteranc.es +utterances: + enable: false + repo: user-name/repo-name # Github repository owner and name + # Available values: pathname | url | title | og:title + issue_term: pathname + # Available values: github-light | github-dark | preferred-color-scheme | github-dark-orange | icy-dark | dark-blue | photon-dark | boxy-light + theme: github-light + +# Isso +# For more information: https://posativ.org/isso/ +isso: # + + +# --------------------------------------------------------------- +# Post Widgets & Content Sharing Services +# See: https://theme-next.js.org/docs/third-party-services/post-widgets +# --------------------------------------------------------------- + +# Star rating support to each article. +# To get your ID visit https://widgetpack.com +rating: + enable: false + id: # + color: "#fc6423" + +# AddThis Share. See: https://www.addthis.com +# Go to https://www.addthis.com/dashboard to customize your tools. +add_this_id: + + +# --------------------------------------------------------------- +# Statistics and Analytics +# See: https://theme-next.js.org/docs/third-party-services/statistics-and-analytics +# --------------------------------------------------------------- + +# Google Analytics +# See: https://analytics.google.com +google_analytics: + tracking_id: G-Z7L6BT187M + # By default, NexT will load an external gtag.js script on your site. + # If you only need the pageview feature, set the following option to true to get a better performance. + only_pageview: false + +# Baidu Analytics +# See: https://tongji.baidu.com +baidu_analytics: # + +# Growingio Analytics +# See: https://www.growingio.com +growingio_analytics: # + +# Cloudflare Web Analytics +# See: https://www.cloudflare.com/web-analytics/ +cloudflare_analytics: + +# Microsoft Clarity Analytics +# See: https://clarity.microsoft.com/ +clarity_analytics: # + +# Show number of visitors of each article. +# You can visit https://www.leancloud.cn to get AppID and AppKey. +leancloud_visitors: + enable: false + app_id: # + app_key: # + # Required for apps from CN region + server_url: # + # Dependencies: https://github.com/theme-next/hexo-leancloud-counter-security + # If you don't care about security in leancloud counter and just want to use it directly + # (without hexo-leancloud-counter-security plugin), set `security` to `false`. + security: true + +# Another tool to show number of visitors to each article. +# Visit https://console.firebase.google.com/u/0/ to get apiKey and projectId. +# Visit https://firebase.google.com/docs/firestore/ to get more information about firestore. +firestore: + enable: false + collection: articles # Required, a string collection name to access firestore database + apiKey: # Required + projectId: # Required + +# Show Views / Visitors of the website / page with busuanzi. +# For more information: http://ibruce.info/2015/04/04/busuanzi/ +busuanzi_count: + enable: false + total_visitors: true + total_visitors_icon: fa fa-user + total_views: true + total_views_icon: fa fa-eye + post_views: true + post_views_icon: far fa-eye + + +# --------------------------------------------------------------- +# Search Services +# See: https://theme-next.js.org/docs/third-party-services/search-services +# --------------------------------------------------------------- + +# Algolia Search +# For more information: https://www.algolia.com +algolia_search: + enable: false + hits: + per_page: 10 + +# Local Search +# Dependencies: https://github.com/next-theme/hexo-generator-searchdb +local_search: + enable: false + # If auto, trigger search by changing input. + # If manual, trigger search by pressing enter key or search button. + trigger: auto + # Show top n results per article, show all results by setting to -1 + top_n_per_article: 1 + # Unescape html strings to the readable one. + unescape: false + # Preload the search data when the page loads. + preload: false + + +# --------------------------------------------------------------- +# Chat Services +# See: https://theme-next.js.org/docs/third-party-services/chat-services +# --------------------------------------------------------------- + +# A button to open designated chat widget in sidebar. +# Firstly, you need to enable and configure the chat service. +chat: + enable: false + icon: fa fa-comment # Icon name in Font Awesome, set false to disable icon. + text: Chat # Button text, change it as you wish. + +# Chatra Support +# For more information: https://chatra.com +# Dashboard: https://app.chatra.io/settings/general +chatra: + enable: false + async: true + id: # Visit Dashboard to get your ChatraID + #embed: # Unfinished experimental feature for developers. See: https://chatra.com/help/api/#injectto + +# Tidio Support +# For more information: https://www.tidio.com +# Dashboard: https://www.tidio.com/panel/dashboard +tidio: + enable: false + key: # Public Key, get it from dashboard. See: https://www.tidio.com/panel/settings/developer + +# Gitter Support +# For more information: https://gitter.im +gitter: + enable: false + room: + + +# --------------------------------------------------------------- +# Tags Settings +# See: https://theme-next.js.org/docs/tag-plugins/ +# --------------------------------------------------------------- + +# Note tag (bootstrap callout) +note: + # Note tag style values: + # - simple bootstrap callout old alert style. Default. + # - modern bootstrap callout new (v2-v3) alert style. + # - flat flat callout style with background, like on Mozilla or StackOverflow. + # - disabled disable all CSS styles import of note tag. + style: simple + icons: false + # Offset lighter of background in % for modern and flat styles (modern: -12 | 12; flat: -18 | 6). + # Offset also applied to label tag variables. This option can work with disabled note tag. + light_bg_offset: 0 + +# Tabs tag +tabs: + # Make the nav bar of tabs with long content stick to the top. + sticky: false + transition: + tabs: false + labels: true + +# PDF tag +# NexT will try to load pdf files natively, if failed, pdf.js will be used. +# So, you have to install the dependency of pdf.js if you want to use pdf tag and make it available to all browsers. +# Dependencies: https://github.com/next-theme/theme-next-pdf +pdf: + enable: false + # Default height + height: 500px + +# Mermaid tag +mermaid: + enable: false + # Available themes: default | dark | forest | neutral + theme: + light: default + dark: dark + + +# --------------------------------------------------------------- +# Animation Settings +# --------------------------------------------------------------- + +# Use Animate.css to animate everything. +# For more information: https://animate.style +motion: + enable: true + async: false + transition: + # All available transition variants: https://theme-next.js.org/animate/ + post_block: fadeIn + post_header: fadeInDown + post_body: fadeInDown + coll_header: fadeInLeft + # Only for Pisces | Gemini. + sidebar: fadeInUp + +# Progress bar in the top during page loading. +# For more information: https://github.com/CodeByZach/pace +pace: + enable: false + # All available colors: + # black | blue | green | orange | pink | purple | red | silver | white | yellow + color: blue + # All available themes: + # big-counter | bounce | barber-shop | center-atom | center-circle | center-radar | center-simple + # corner-indicator | fill-left | flat-top | flash | loading-bar | mac-osx | material | minimal + theme: minimal + +# Canvas ribbon +# For more information: https://github.com/hustcc/ribbon.js +canvas_ribbon: + enable: false + size: 300 # The width of the ribbon + alpha: 0.6 # The transparency of the ribbon + zIndex: -1 # The display level of the ribbon + + +# --------------------------------------------------------------- +# CDN Settings +# See: https://theme-next.js.org/docs/advanced-settings/vendors +# --------------------------------------------------------------- + +vendors: + # The CDN provider of NexT internal scripts. + # Available values: local | jsdelivr | unpkg | cdnjs | custom + # Warning: If you are using the latest master branch of NexT, please set `internal: local` + internal: local + # The default CDN provider of third-party plugins. + # Available values: local | jsdelivr | unpkg | cdnjs | custom + # Dependencies for `plugins: local`: https://github.com/next-theme/plugins + plugins: jsdelivr + # Custom CDN URL + # For example: + # custom_cdn_url: https://cdn.jsdelivr.net/npm/${npm_name}@${version}/${minified} + # custom_cdn_url: https://cdnjs.cloudflare.com/ajax/libs/${cdnjs_name}/${version}/${cdnjs_file} + custom_cdn_url: + +# Assets +# Accelerate delivery of static files using a CDN +# The js option is only valid when vendors.internal is local. +css: css +js: js +images: images diff --git a/docs/_config.yml b/docs/_config.yml new file mode 100644 index 000000000..5b461e930 --- /dev/null +++ b/docs/_config.yml @@ -0,0 +1,166 @@ +# Hexo Configuration +## Docs: https://hexo.io/docs/configuration.html +## Source: https://github.com/hexojs/hexo/ + +# Site +title: Nexa Merchant Laravel ecommerce +subtitle: '' +description: '' +keywords: "Laravel, MySQL, PgSQL, Redis, Queue, PHP, 电商,Ecommerce" +author: Steve +language: [zh-CN,en] +timezone: '' + +# URL +## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project' +url: https://xxl4.github.io/NexaMerchant/ +permalink: :lang/:year/:month/:day/:title/ +permalink_defaults: +pretty_urls: + trailing_index: true # Set to false to remove trailing 'index.html' from permalinks + trailing_html: true # Set to false to remove trailing '.html' from permalinks + +# Directory +source_dir: source +public_dir: public +tag_dir: tags +archive_dir: archives +category_dir: categories +code_dir: downloads/code +i18n_dir: :lang +skip_render: + +# Writing +new_post_name: :title.md # File name of new posts +default_layout: post +titlecase: false # Transform title into titlecase +external_link: + enable: true # Open external links in new tab + field: site # Apply to the whole site + exclude: '' +filename_case: 0 +render_drafts: false +post_asset_folder: true +marked: + prependRoot: true + postAsset: true +relative_link: false +future: true +syntax_highlighter: highlight.js +highlight: + line_number: true + auto_detect: false + tab_replace: '' + wrap: true + hljs: false +prismjs: + preprocess: true + line_number: true + tab_replace: '' + +# Home page setting +# path: Root path for your blogs index page. (default = '') +# per_page: Posts displayed per page. (0 = disable pagination) +# order_by: Posts order. (Order by date descending by default) +index_generator: + path: '' + per_page: 10 + order_by: -date + +# Category & Tag +default_category: uncategorized +category_map: +tag_map: ["安全","SRE","DevOps", "DevSecOps","PHP", "Java", "Google"] + +# Metadata elements +## https://developer.mozilla.org/en-US/docs/Web/HTML/Element/meta +meta_generator: true + +# Date / Time format +## Hexo uses Moment.js to parse and display date +## You can customize the date format as defined in +## http://momentjs.com/docs/#/displaying/format/ +date_format: YYYY-MM-DD +time_format: HH:mm:ss +## updated_option supports 'mtime', 'date', 'empty' +updated_option: 'mtime' + +# Pagination +## Set per_page to 0 to disable pagination +per_page: 10 +pagination_dir: page + +# Include / Exclude file(s) +## include:/exclude: options only apply to the 'source/' folder +include: +exclude: +ignore: + +# Extensions +## Plugins: https://hexo.io/plugins/ +## Themes: https://hexo.io/themes/ +theme: next + +# Deployment +## Docs: https://hexo.io/docs/one-command-deployment +deploy: + type: '' + +feed: + enable: true + type: atom + path: atom.xml + limit: 20 + hub: + content: + content_limit: 140 + content_limit_delim: ' ' + order_by: -date + icon: icon.png + autodiscovery: true + template: + +i18n: + type: [page, post] + generator: [index, archive, category, tag] + +markdown: + render: + html: true + xhtmlOut: false + breaks: true + linkify: true + typographer: true + quotes: '“”‘’' + plugins: + - markdown-it-abbr + - markdown-it-footnote + - markdown-it-ins + - markdown-it-sub + - markdown-it-sup + anchors: + level: 2 + collisionSuffix: 'v' + permalink: true + permalinkClass: header-anchor + permalinkSymbol: ¶ + +search: + path: search.xml + field: post + +sitemap: + path: + - sitemap.xml + - sitemap.txt + template: ./sitemap_template.xml + template_txt: ./sitemap_template.txt + rel: false + tags: true + categories: true + +symbols_count_time: + symbols: true # 文章字数 + time: true # 阅读时长 + total_symbols: true # 所有文章总字数 + total_time: true # 所有文章阅读中时长 diff --git a/docs/package.json b/docs/package.json new file mode 100644 index 000000000..f2224e48e --- /dev/null +++ b/docs/package.json @@ -0,0 +1,33 @@ +{ + "name": "steve-me-site", + "version": "1.0.0", + "private": true, + "scripts": { + "build": "hexo generate", + "clean": "hexo clean", + "deploy": "hexo deploy", + "server": "hexo server" + }, + "hexo": { + "version": "7.0.0" + }, + "dependencies": { + "hexo": "^7.1.1", + "hexo-asset-link": "^2.2.3", + "hexo-generator-archive": "^2.0.0", + "hexo-generator-category": "^2.0.0", + "hexo-generator-feed": "^3.0.0", + "hexo-generator-i18n": "^0.0.10", + "hexo-generator-index": "^3.0.0", + "hexo-generator-search": "^2.4.3", + "hexo-generator-sitemap": "^3.0.1", + "hexo-generator-tag": "^2.0.0", + "hexo-renderer-ejs": "^2.0.0", + "hexo-renderer-markdown-it": "^7.1.1", + "hexo-renderer-stylus": "^3.0.1", + "hexo-server": "^3.0.0", + "hexo-symbols-count-time": "^0.7.1", + "hexo-theme-landscape": "^1.0.0", + "hexo-theme-next": "^8.19.1" + } +} diff --git a/docs/scaffolds/draft.md b/docs/scaffolds/draft.md new file mode 100644 index 000000000..498e95baf --- /dev/null +++ b/docs/scaffolds/draft.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +tags: +--- diff --git a/docs/scaffolds/page.md b/docs/scaffolds/page.md new file mode 100644 index 000000000..f01ba3cd8 --- /dev/null +++ b/docs/scaffolds/page.md @@ -0,0 +1,4 @@ +--- +title: {{ title }} +date: {{ date }} +--- diff --git a/docs/scaffolds/post.md b/docs/scaffolds/post.md new file mode 100644 index 000000000..1f9b9a465 --- /dev/null +++ b/docs/scaffolds/post.md @@ -0,0 +1,5 @@ +--- +title: {{ title }} +date: {{ date }} +tags: +--- diff --git a/docs/sitemap_template.txt b/docs/sitemap_template.txt new file mode 100644 index 000000000..33751c4c9 --- /dev/null +++ b/docs/sitemap_template.txt @@ -0,0 +1,5 @@ +{% for post in posts %}{{ post.permalink | uriencode }} +{% endfor %}{{ config.url | uriencode }} +{% for tag in tags %}{{ tag.permalink | uriencode }} +{% endfor %}{% for cat in categories %}{{ cat.permalink | uriencode }} +{% endfor %} \ No newline at end of file diff --git a/docs/sitemap_template.xml b/docs/sitemap_template.xml new file mode 100644 index 000000000..3563907db --- /dev/null +++ b/docs/sitemap_template.xml @@ -0,0 +1,40 @@ + + + {% for post in posts %} + + {{ post.permalink | uriencode }} + {% if post.updated %} + {{ post.updated | formatDate }} + {% elif post.date %} + {{ post.date | formatDate }} + {% endif %} + monthly + 0.6 + + {% endfor %} + + + {{ config.url | uriencode }} + {{ sNow | formatDate }} + daily + 1.0 + + + {% for tag in tags %} + + {{ tag.permalink | uriencode }} + {{ sNow | formatDate }} + weekly + 0.2 + + {% endfor %} + + {% for cat in categories %} + + {{ cat.permalink | uriencode }} + {{ sNow | formatDate }} + weekly + 0.2 + + {% endfor %} + \ No newline at end of file diff --git a/docs/source/_data/languages.yml b/docs/source/_data/languages.yml new file mode 100644 index 000000000..a8d967345 --- /dev/null +++ b/docs/source/_data/languages.yml @@ -0,0 +1,2 @@ +zh-CN: +en: \ No newline at end of file diff --git a/docs/source/categories/index.md b/docs/source/categories/index.md new file mode 100644 index 000000000..3de8b5fe7 --- /dev/null +++ b/docs/source/categories/index.md @@ -0,0 +1,5 @@ +--- +title: Categories +date: 2024-01-19 12:39:04 +type: categories +--- \ No newline at end of file diff --git a/docs/source/tags/index.md b/docs/source/tags/index.md new file mode 100644 index 000000000..08ce211bd --- /dev/null +++ b/docs/source/tags/index.md @@ -0,0 +1,5 @@ +--- +title: Tags +date: 2024-01-19 12:39:04 +type: tags +--- \ No newline at end of file From bb86a487d509cabcd9578fd3f545da6d509873e4 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:19:27 +0800 Subject: [PATCH 153/386] fix upgrade doces --- docs/_config.next.yml | 1 - docs/_config.yml | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/docs/_config.next.yml b/docs/_config.next.yml index 4cdca324f..46541c3d3 100644 --- a/docs/_config.next.yml +++ b/docs/_config.next.yml @@ -179,7 +179,6 @@ links_settings: links: Github: https://github.com/xxl4 - Zylinkus.com: https://www.zylinkus.com # Table of Contents in the Sidebar # Front-matter variable (nonsupport wrap expand_all). diff --git a/docs/_config.yml b/docs/_config.yml index 5b461e930..4f57d6652 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -13,7 +13,7 @@ timezone: '' # URL ## Set your site url here. For example, if you use GitHub Page, set url as 'https://username.github.io/project' -url: https://xxl4.github.io/NexaMerchant/ +url: https://nexa-merchant.vercel.app/ permalink: :lang/:year/:month/:day/:title/ permalink_defaults: pretty_urls: From a882671be888721286bc9c0e66454c4380e9ad8e Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:27:16 +0800 Subject: [PATCH 154/386] upgrade the docs for update --- .github/workflows/laravel.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 24d04d8a3..886a813a0 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -3,6 +3,9 @@ name: Laravel on: push: branches: [ "main","main_de","main_us" ] + paths-ignore: + - .github/** + - docs/** pull_request: branches: [ "main","main_de","main_us" ] From 4a3b689a0518d1bfe801c4fcac3126b2dbbb3e69 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:40:33 +0800 Subject: [PATCH 155/386] add docs index --- docs/source/index.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/source/index.md diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 000000000..313702428 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,5 @@ +--- +layout: page +title: homepage +date: 2024-02-20 +--- \ No newline at end of file From c104cf9faa052ca25f55f6ca7303a2414bce6419 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:46:03 +0800 Subject: [PATCH 156/386] fix remote --- docs/source/index.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 docs/source/index.md diff --git a/docs/source/index.md b/docs/source/index.md deleted file mode 100644 index 313702428..000000000 --- a/docs/source/index.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -layout: page -title: homepage -date: 2024-02-20 ---- \ No newline at end of file From 48c34e0f14e66f62a02739fec524f5f80260afb9 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:53:00 +0800 Subject: [PATCH 157/386] fix the package --- docs/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/package.json b/docs/package.json index f2224e48e..aa6cbf000 100644 --- a/docs/package.json +++ b/docs/package.json @@ -1,5 +1,5 @@ { - "name": "steve-me-site", + "name": "nexa-merchant-site", "version": "1.0.0", "private": true, "scripts": { From 46bb3551e207f626081b956ff9b63d17f07a604e Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 11:58:56 +0800 Subject: [PATCH 158/386] debug the docs --- docs/_config.yml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/docs/_config.yml b/docs/_config.yml index 4f57d6652..fca920fef 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -133,11 +133,6 @@ markdown: typographer: true quotes: '“”‘’' plugins: - - markdown-it-abbr - - markdown-it-footnote - - markdown-it-ins - - markdown-it-sub - - markdown-it-sup anchors: level: 2 collisionSuffix: 'v' From 658917d2b8186cf4ad1ef7258e528594e5a60a60 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:08:04 +0800 Subject: [PATCH 159/386] fix remove languages --- docs/source/_data/languages.yml | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 docs/source/_data/languages.yml diff --git a/docs/source/_data/languages.yml b/docs/source/_data/languages.yml deleted file mode 100644 index a8d967345..000000000 --- a/docs/source/_data/languages.yml +++ /dev/null @@ -1,2 +0,0 @@ -zh-CN: -en: \ No newline at end of file From aef78f35c74e4f2718cb6afbb02217106a38de2b Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:13:18 +0800 Subject: [PATCH 160/386] add homepage --- docs/source/index.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 docs/source/index.md diff --git a/docs/source/index.md b/docs/source/index.md new file mode 100644 index 000000000..5c38d4309 --- /dev/null +++ b/docs/source/index.md @@ -0,0 +1,5 @@ +--- +title: Nexa Merchant Laravel ecommerce +date: 2024-02-20 12:39:04 +type: homepage +--- \ No newline at end of file From b5ad6e27716788ce29e29a642b182fe88e75ae83 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:14:43 +0800 Subject: [PATCH 161/386] fix --- docs/_config.next.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.next.yml b/docs/_config.next.yml index 46541c3d3..c2aa0c295 100644 --- a/docs/_config.next.yml +++ b/docs/_config.next.yml @@ -204,7 +204,7 @@ language_switcher: true footer: # Specify the year when the site was setup. If not defined, current year will be used. - since: 1984 + since: 2023 # Icon between year and copyright info. icon: From 6201073c14fd29dafc71725f79161fbe525364b5 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:51:13 +0800 Subject: [PATCH 162/386] add new post --- docs/source/_posts/Plugsin-onebuy.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/source/_posts/Plugsin-onebuy.md diff --git a/docs/source/_posts/Plugsin-onebuy.md b/docs/source/_posts/Plugsin-onebuy.md new file mode 100644 index 000000000..10b98fcb0 --- /dev/null +++ b/docs/source/_posts/Plugsin-onebuy.md @@ -0,0 +1,17 @@ +--- +title: Onebuy Plugin +tags: + - Onebuy + - Larave + - MySQL + - Redis + - Compose +categories: + - Laravel + - Plugins +date: 2024-02-20 14:23:12 +description: Onebuy 是一套基于NexAmerchant 开发与设计的多件购物结算插件 +lang: zh-CN +--- +# About OneBuy Plugin +> OneBuy Plugin 是一套基于NexAmerchant 开发与设计的多件购物结算插件,开发过程中使用到 Laravel,MySQL,Redis 等基础功能组件,使用Compose 做为模块化管理与应用 \ No newline at end of file From 1fad0b869e80ef1e89053925ba198847f19c3bf9 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:54:36 +0800 Subject: [PATCH 163/386] add about page --- docs/source/about/index.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/source/about/index.md diff --git a/docs/source/about/index.md b/docs/source/about/index.md new file mode 100644 index 000000000..b85b86a2d --- /dev/null +++ b/docs/source/about/index.md @@ -0,0 +1,17 @@ +--- +title: About +date: 2023-12-01 10:00:30 +lang: zh-CN +--- + +### Hi 👋,I'm Steve + + +- 🔭 I’m currently a Developer and SRE engineer +- 🌱 My blog is https://medium.com/@cdndns + + + xxl4's github stats + xxl4's github top languages + + From 5ac375506365954970851b30db5033044eeaa45f Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:54:53 +0800 Subject: [PATCH 164/386] fix about url --- docs/_config.next.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/_config.next.yml b/docs/_config.next.yml index c2aa0c295..24ba2953e 100644 --- a/docs/_config.next.yml +++ b/docs/_config.next.yml @@ -96,7 +96,7 @@ open_graph: # External url should start with http:// or https:// menu: home: / || fa fa-home - about: /about-me/ || fa fa-user + about: /about/ || fa fa-user tags: /tags/ || fa fa-tags categories: /categories/ || fa fa-th archives: /archives/ || fa fa-archive From 525aef7676d0427adc5857c1d18cebc211364fd1 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 12:57:06 +0800 Subject: [PATCH 165/386] fix --- docs/source/_posts/Plugsin-onebuy.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/source/_posts/Plugsin-onebuy.md b/docs/source/_posts/Plugsin-onebuy.md index 10b98fcb0..d5017d18f 100644 --- a/docs/source/_posts/Plugsin-onebuy.md +++ b/docs/source/_posts/Plugsin-onebuy.md @@ -1,5 +1,5 @@ --- -title: Onebuy Plugin +title: Onebuy Plugin 多件购买结算页面 tags: - Onebuy - Larave From 39083f875f48ea7288e8366142a92fdb5cdaf126 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 13:36:46 +0800 Subject: [PATCH 166/386] add post --- docs/source/_posts/plugsin-shopify.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 docs/source/_posts/plugsin-shopify.md diff --git a/docs/source/_posts/plugsin-shopify.md b/docs/source/_posts/plugsin-shopify.md new file mode 100644 index 000000000..f87a52503 --- /dev/null +++ b/docs/source/_posts/plugsin-shopify.md @@ -0,0 +1,17 @@ +--- +title: Shopify Plugin 多shopify 店铺管理平台 +tags: + - Shopify + - Larave + - MySQL + - Redis + - Compose +categories: + - Laravel + - Plugins +date: 2024-02-20 14:23:12 +description: Shopify plugin 是一套基于NexAmerchant 开发与设计的 多Shopify 店铺管理运营的平台 +lang: zh-CN +--- +# About Shopify Plugin +> Shopify plugin 是一套基于NexAmerchant 开发与设计的 多Shopify 店铺管理运营的平台,基于Shopify Admin API 接口,实现对多Shopify店铺的管理运营,从而更好的提升Shopify店铺的效率 \ No newline at end of file From 145236e442625e34a3d15bece8127d480dccbe07 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 13:40:34 +0800 Subject: [PATCH 167/386] fix update post --- docs/source/_posts/Plugsin-onebuy.md | 4 ++++ docs/source/_posts/plugsin-shopify.md | 2 ++ 2 files changed, 6 insertions(+) diff --git a/docs/source/_posts/Plugsin-onebuy.md b/docs/source/_posts/Plugsin-onebuy.md index d5017d18f..6388aa6aa 100644 --- a/docs/source/_posts/Plugsin-onebuy.md +++ b/docs/source/_posts/Plugsin-onebuy.md @@ -6,6 +6,10 @@ tags: - MySQL - Redis - Compose + - Php + - Bootstrap + - Paypal + - Airwallex categories: - Laravel - Plugins diff --git a/docs/source/_posts/plugsin-shopify.md b/docs/source/_posts/plugsin-shopify.md index f87a52503..c2775cf4f 100644 --- a/docs/source/_posts/plugsin-shopify.md +++ b/docs/source/_posts/plugsin-shopify.md @@ -6,6 +6,8 @@ tags: - MySQL - Redis - Compose + - Php + - API categories: - Laravel - Plugins From 3862cd066e9a1049eea6b4c12bfa53eb57af9678 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 13:43:33 +0800 Subject: [PATCH 168/386] add medium --- docs/_config.next.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/_config.next.yml b/docs/_config.next.yml index 24ba2953e..5366cdbeb 100644 --- a/docs/_config.next.yml +++ b/docs/_config.next.yml @@ -156,6 +156,7 @@ site_state: true social: GitHub: https://github.com/xxl4 || fab fa-github E-Mail: mailto:nice.lizhi@gmail.com || fa fa-envelope + Medium: https://medium.com/@cdndns || fa fa-medium #Weibo: https://weibo.com/yourname || fab fa-weibo #Google: https://plus.google.com/yourname || fab fa-google #Twitter: https://twitter.com/yourname || fab fa-twitter From f7c10cf7eaf37e5bc744278f02b7f777c24b7730 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 17:50:05 +0800 Subject: [PATCH 169/386] fix the message to empty --- packages/Webkul/Shop/src/Http/Controllers/HomeController.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php index 0c917ab01..8b91ee5e9 100755 --- a/packages/Webkul/Shop/src/Http/Controllers/HomeController.php +++ b/packages/Webkul/Shop/src/Http/Controllers/HomeController.php @@ -28,7 +28,7 @@ public function index() { visitor()->visit(); - return abort(200); + return ''; $customizations = $this->themeCustomizationRepository->orderBy('sort_order')->findWhere([ 'status' => self::STATUS, From 5cf9b5624e343fb157a86e7c01ba8c9ca7ee5aeb Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 17:58:43 +0800 Subject: [PATCH 170/386] rm the adminV2 --- packages/Webkul/AdminV2/composer.json | 26 --- .../src/Providers/AdminServiceProvider.php | 168 ------------------ .../src/Providers/EventServiceProvider.php | 43 ----- 3 files changed, 237 deletions(-) delete mode 100644 packages/Webkul/AdminV2/composer.json delete mode 100644 packages/Webkul/AdminV2/src/Providers/AdminServiceProvider.php delete mode 100644 packages/Webkul/AdminV2/src/Providers/EventServiceProvider.php diff --git a/packages/Webkul/AdminV2/composer.json b/packages/Webkul/AdminV2/composer.json deleted file mode 100644 index 37ba7faa4..000000000 --- a/packages/Webkul/AdminV2/composer.json +++ /dev/null @@ -1,26 +0,0 @@ -{ - "name": "nicelizhi/bagisto-admin", - "license": "MIT", - "description" : "Admin package", - "authors": [ - { - "name": "nicelizhi", - "email": "nice.lizhi@gmail.com" - } - ], - "require": {}, - "autoload": { - "psr-4": { - "Nicelizhi\\Admin\\": "src/" - } - }, - "extra": { - "laravel": { - "providers": [ - "Nicelizhi\\Admin\\Providers\\AdminServiceProvider" - ], - "aliases": {} - } - }, - "minimum-stability": "dev" -} diff --git a/packages/Webkul/AdminV2/src/Providers/AdminServiceProvider.php b/packages/Webkul/AdminV2/src/Providers/AdminServiceProvider.php deleted file mode 100644 index d0ae3ca5c..000000000 --- a/packages/Webkul/AdminV2/src/Providers/AdminServiceProvider.php +++ /dev/null @@ -1,168 +0,0 @@ -group(__DIR__ . '/../Routes/web.php'); - - $this->loadTranslationsFrom(__DIR__ . '/../Resources/lang', 'admin'); - - $this->loadViewsFrom(__DIR__ . '/../Resources/views', 'admin'); - - Blade::anonymousComponentPath(__DIR__ . '/../Resources/views/components', 'admin'); - - $this->composeView(); - - $this->registerACL(); - - $this->app->register(EventServiceProvider::class); - } - - /** - * Register services. - * - * @return void - */ - public function register() - { - $this->registerConfig(); - } - - /** - * Register package config. - * - * @return void - */ - protected function registerConfig() - { - $this->mergeConfigFrom( - dirname(__DIR__) . '/Config/menu.php', - 'menu.admin' - ); - - $this->mergeConfigFrom( - dirname(__DIR__) . '/Config/acl.php', - 'acl' - ); - - $this->mergeConfigFrom( - dirname(__DIR__) . '/Config/system.php', - 'core' - ); - } - - /** - * Bind the data to the views. - * - * @return void - */ - protected function composeView() - { - view()->composer([ - 'admin::components.layouts.header.index', - 'admin::components.layouts.sidebar.index', - 'admin::components.layouts.tabs', - ], function ($view) { - $tree = Tree::create(); - - $permissionType = auth()->guard('admin')->user()->role->permission_type; - - $allowedPermissions = auth()->guard('admin')->user()->role->permissions; - - foreach (config('menu.admin') as $index => $item) { - if (! bouncer()->hasPermission($item['key'])) { - continue; - } - - if ( - $index + 1 < count(config('menu.admin')) - && $permissionType != 'all' - ) { - $permission = config('menu.admin')[$index + 1]; - - if ( - substr_count($permission['key'], '.') == 2 - && substr_count($item['key'], '.') == 1 - ) { - foreach ($allowedPermissions as $key => $value) { - if ($item['key'] != $value) { - continue; - } - - $neededItem = $allowedPermissions[$key + 1]; - - foreach (config('menu.admin') as $key1 => $menu) { - if ($menu['key'] == $neededItem) { - $item['route'] = $menu['route']; - } - } - } - } - } - - $tree->add($item, 'menu'); - } - - $tree->items = core()->sortItems($tree->items); - - $view->with('menu', $tree); - }); - - view()->composer([ - 'admin::settings.roles.create', - 'admin::settings.roles.edit' - ], function ($view) { - $view->with('acl', $this->createACL()); - }); - } - - /** - * Register ACL to entire application. - * - * @return void - */ - protected function registerACL() - { - $this->app->singleton('acl', function () { - return $this->createACL(); - }); - } - - /** - * Create ACL tree. - * - * @return mixed - */ - protected function createACL() - { - static $tree; - - if ($tree) { - return $tree; - } - - $tree = Tree::create(); - - foreach (config('acl') as $item) { - $tree->add($item, 'acl'); - } - - $tree->items = core()->sortItems($tree->items); - - return $tree; - } -} diff --git a/packages/Webkul/AdminV2/src/Providers/EventServiceProvider.php b/packages/Webkul/AdminV2/src/Providers/EventServiceProvider.php deleted file mode 100644 index e29da5d3a..000000000 --- a/packages/Webkul/AdminV2/src/Providers/EventServiceProvider.php +++ /dev/null @@ -1,43 +0,0 @@ - [ - 'Nicelizhi\Admin\Listeners\Admin@afterPasswordUpdated', - ], - - 'checkout.order.save.after' => [ - 'Nicelizhi\Admin\Listeners\Order@afterCreated', - ], - - 'sales.order.cancel.after' => [ - 'Nicelizhi\Admin\Listeners\Order@afterCanceled', - ], - - 'sales.invoice.save.after' => [ - 'Nicelizhi\Admin\Listeners\Invoice@afterCreated', - ], - - 'sales.shipment.save.after' => [ - 'Nicelizhi\Admin\Listeners\Shipment@afterCreated', - ], - - 'sales.refund.save.after' => [ - 'Nicelizhi\Admin\Listeners\Refund@afterCreated', - ], - - 'core.channel.update.after' => [ - 'Nicelizhi\Admin\Listeners\ChannelSettingsChange@checkForMaintenanceMode', - ], - ]; -} From 7ef0b7b4ce545732bdf4ab799b677696562fd6af Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 18:11:32 +0800 Subject: [PATCH 171/386] add onebuy test case --- packages/Nicelizhi/OneBuy/tests/Feature/ExampleTest.php | 1 + packages/Nicelizhi/OneBuy/tests/OneBuyTestCase.php | 9 +++++++++ 2 files changed, 10 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/tests/Feature/ExampleTest.php create mode 100644 packages/Nicelizhi/OneBuy/tests/OneBuyTestCase.php diff --git a/packages/Nicelizhi/OneBuy/tests/Feature/ExampleTest.php b/packages/Nicelizhi/OneBuy/tests/Feature/ExampleTest.php new file mode 100644 index 000000000..b3d9bbc7f --- /dev/null +++ b/packages/Nicelizhi/OneBuy/tests/Feature/ExampleTest.php @@ -0,0 +1 @@ + Date: Tue, 20 Feb 2024 18:11:55 +0800 Subject: [PATCH 172/386] add onebuy test case --- tests/Pest.php | 1 + 1 file changed, 1 insertion(+) diff --git a/tests/Pest.php b/tests/Pest.php index c44ab16f4..469a1aee4 100644 --- a/tests/Pest.php +++ b/tests/Pest.php @@ -18,6 +18,7 @@ uses(Nicelizhi\Shopify\Tests\ShopifyTestCase::class)->in('../packages/Nicelizhi/Shopify/tests'); uses(Nicelizhi\Checkout\Tests\CheckoutTestCase::class)->in('../packages/Nicelizhi/Checkout/tests'); uses(Nicelizhi\Binom\Tests\BinomTestCase::class)->in('../packages/Nicelizhi/Binom/tests'); + uses(Nicelizhi\OneBuy\Tests\OneBuyTestCase::class)->in('../packages/Nicelizhi/OneBuy/tests'); /* |-------------------------------------------------------------------------- From 304dad01fa99c46bab9e6b2ce0e72ef91c45352f Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 18:12:02 +0800 Subject: [PATCH 173/386] add onebuy test case --- phpunit.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/phpunit.xml b/phpunit.xml index c9dff3f33..d7a2fc856 100755 --- a/phpunit.xml +++ b/phpunit.xml @@ -40,6 +40,11 @@ ./packages/Nicelizhi/Binom/tests/Feature + + + ./packages/Nicelizhi/OneBuy/tests/Feature + + ./packages/Nicelizhi/Shopify/tests/Feature From 0be37113af4fef2543d93c1b1f4c693c3e5856e0 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 18:12:09 +0800 Subject: [PATCH 174/386] add onebuy test case --- composer.json | 1 + 1 file changed, 1 insertion(+) diff --git a/composer.json b/composer.json index 3d689c19e..ccc71f3fd 100644 --- a/composer.json +++ b/composer.json @@ -111,6 +111,7 @@ "Nicelizhi\\Checkout\\Tests\\": "packages/Nicelizhi/Checkout/tests", "Nicelizhi\\Binom\\Tests\\": "packages/Nicelizhi/Binom/tests", "Nicelizhi\\Shopify\\Tests\\": "packages/Nicelizhi/Shopify/tests", + "Nicelizhi\\OneBuy\\Tests\\": "packages/Nicelizhi/OneBuy/tests", "Nicelizhi\\ShopLine\\Tests\\": "packages/Nicelizhi/ShopLine/tests" } }, From 99ed054c890e88bf1ace2454e106b9195b555711 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 18:14:13 +0800 Subject: [PATCH 175/386] fix the composer dumpload --- .github/workflows/laravel.yml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.github/workflows/laravel.yml b/.github/workflows/laravel.yml index 886a813a0..9297b185f 100644 --- a/.github/workflows/laravel.yml +++ b/.github/workflows/laravel.yml @@ -61,12 +61,16 @@ jobs: port: ${{secrets.SSH_PORT }} script: | cd ${{ secrets.WWW_DIR }} && sudo git pull + composer dump-autoload vendor/bin/pest cd ${{ secrets.WWW_DIR_2 }} && sudo git pull + composer dump-autoload vendor/bin/pest cd ${{ secrets.WWW_DIR_3 }} && sudo git pull + composer dump-autoload vendor/bin/pest cd ${{ secrets.WWW_DIR_4 }} && sudo git pull + composer dump-autoload vendor/bin/pest - name: Sync to Server 2 and Do it uses: appleboy/ssh-action@master @@ -79,4 +83,5 @@ jobs: port: ${{secrets.SSH_PORT_US }} script: | cd ${{ secrets.WWW_DIR_US }} && git pull + composer dump-autoload vendor/bin/pest From fae421d473975769579ac8d96fa8b23b4e9bfc3b Mon Sep 17 00:00:00 2001 From: xxl4 Date: Tue, 20 Feb 2024 18:18:30 +0800 Subject: [PATCH 176/386] PostCannelOrder --- .../Shopify/src/Console/Commands/Order/PostCannelOrder.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php index 82fb60474..e82394e79 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php @@ -14,7 +14,7 @@ use Nicelizhi\Shopify\Models\ShopifyStore; use Webkul\Sales\Models\Order; -class Post extends Command +class PostCannelOrder extends Command { /** * The name and signature of the console command. From 467252501aea0221823ce7fb2375c6cfb9ee38f2 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:05:31 +0800 Subject: [PATCH 177/386] fix the rep order --- .../OneBuy/src/Http/Controllers/ProductController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 39751e171..7a0ad4c99 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -447,8 +447,8 @@ public function order_add_sync(Request $request) { $this->validateOrder(); $cart = Cart::getCart(); $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - //Cart::deActivateCart(); - //Cart::activateCartIfSessionHasDeactivatedCartId(); + Cart::deActivateCart(); + Cart::activateCartIfSessionHasDeactivatedCartId(); // 跳转到支付 $data['result'] = 200; $data['order'] = $order; From 2b63dcfddd50879655c1d97962c86f776945620a Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:06:06 +0800 Subject: [PATCH 178/386] fix the rep order --- .../OneBuy/src/Http/Controllers/ProductV2Controller.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 46ef46206..2dfa0b390 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -477,8 +477,8 @@ public function order_add_sync(Request $request) { $this->validateOrder(); $cart = Cart::getCart(); $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - //Cart::deActivateCart(); - //Cart::activateCartIfSessionHasDeactivatedCartId(); + Cart::deActivateCart(); + Cart::activateCartIfSessionHasDeactivatedCartId(); // 跳转到支付 $data['result'] = 200; $data['order'] = $order; From 69d57cb7bb95eb40bcbe8336082afa8a0d5a78a8 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:24:12 +0800 Subject: [PATCH 179/386] fix the locals from db --- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 9d70ac0d4..f1084ab02 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -69,6 +69,11 @@ public function __construct( $this->shopify_store_id = config('shopify.shopify_store_id'); $this->lang = config('shopify.store_lang'); $this->category_id = 9; + + // locales + $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + + parent::__construct(); } From 8fbd6319b3bfc672d0a0a2084a8b569ee6f3b976 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:24:17 +0800 Subject: [PATCH 180/386] fix the locals from db --- .../Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index 3c7c182e7..c21767750 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -70,6 +70,10 @@ public function __construct( $this->shopify_store_id = config('shopify.shopify_store_id'); $this->lang = config('shopify.store_lang'); $this->category_id = 9; + + // locales + $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + parent::__construct(); } From ac7b1a06cbabe6e1d282cbe862a4c855f59c874c Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:34:10 +0800 Subject: [PATCH 181/386] fix --- .../OneBuy/src/Http/Controllers/ProductController.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 7a0ad4c99..bcb5ad8b8 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -447,8 +447,8 @@ public function order_add_sync(Request $request) { $this->validateOrder(); $cart = Cart::getCart(); $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - Cart::deActivateCart(); - Cart::activateCartIfSessionHasDeactivatedCartId(); + // Cart::deActivateCart(); + // Cart::activateCartIfSessionHasDeactivatedCartId(); // 跳转到支付 $data['result'] = 200; $data['order'] = $order; From 53f9c7a715581b6adf9fbb9e1eccd630c5867da7 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:34:17 +0800 Subject: [PATCH 182/386] fix --- .../OneBuy/src/Http/Controllers/ProductV2Controller.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 2dfa0b390..f00c86291 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -477,8 +477,8 @@ public function order_add_sync(Request $request) { $this->validateOrder(); $cart = Cart::getCart(); $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - Cart::deActivateCart(); - Cart::activateCartIfSessionHasDeactivatedCartId(); + // Cart::deActivateCart(); + // Cart::activateCartIfSessionHasDeactivatedCartId(); // 跳转到支付 $data['result'] = 200; $data['order'] = $order; From 96bb1f89d3e10751370a3bd26cb26cee6ad1438b Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:39:34 +0800 Subject: [PATCH 183/386] fix the rep order --- .../src/Resources/views/payments.blade.php | 1 - .../Resources/views/product-detail.blade.php | 105 ------------------ 2 files changed, 106 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php index 3cbb5ad77..bd86bb88a 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php @@ -335,5 +335,4 @@ checkout(); }) }); - \ No newline at end of file diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index 9494809d9..50994f652 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -2605,110 +2605,5 @@ function payAfterSubmit() { }); - - - - \ No newline at end of file From 2ac56eddbf84034d0c20f60ef91279b734a23e37 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:45:13 +0800 Subject: [PATCH 184/386] fix the locals pos --- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index f1084ab02..d8a0474f5 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -70,8 +70,7 @@ public function __construct( $this->lang = config('shopify.store_lang'); $this->category_id = 9; - // locales - $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + parent::__construct(); @@ -91,6 +90,9 @@ public function handle() return false; } + // locales + $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + $client = new Client(); $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); From 57198fff27e6dc006c534d22e49550947f0ed79c Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 09:45:19 +0800 Subject: [PATCH 185/386] fix the locals pos --- .../Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index c21767750..fa6cbcb42 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -71,8 +71,6 @@ public function __construct( $this->lang = config('shopify.store_lang'); $this->category_id = 9; - // locales - $this->locales = core()->getAllLocales()->pluck('code')->toArray(); parent::__construct(); @@ -94,6 +92,9 @@ public function handle() return false; } + // locales + $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + $client = new Client(); $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); From 61fc35b0de29f85849379de1eb2aac4222204d2c Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 10:11:39 +0800 Subject: [PATCH 186/386] fix the callback url --- packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php index 8e511a43c..d423e3a29 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/Post.php @@ -456,7 +456,7 @@ public function postOrder($id, $shopifyStore) { Log::info("post to bm url ".$url." res ".json_encode($res)); - $url = "http://45.79.79.208:8009/api/offers/callBack?refer=".$cnv_id[1]."&revenue=".$order->grand_total; + $url = "http://crm.heomai.com/api/offers/callBack?refer=".$cnv_id[1]."&revenue=".$order->grand_total."¤cy_code=".$order->order_currency_code; $res = $this->get_content($url); Log::info("post to bm 2 url ".$url." res ".json_encode($res)); From 4234f98d8fe9aee6ba19b5eb1a8ed3f300af7344 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 10:15:49 +0800 Subject: [PATCH 187/386] fix the callback --- .../Commands/Order/PostCannelOrder.php | 22 ------------------- 1 file changed, 22 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php index e82394e79..be9c3eea9 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php @@ -459,28 +459,6 @@ public function postOrder($id, $shopifyStore) { $shopifyNewOrder->save(); - - - // order sync to other job - - $cnv_id = explode('-',$orderPayment['method_title']); - $url = "https://track.heomai2021.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; - $res = $this->get_content($url); - Log::info("post to bm url ".$url." res ".json_encode($res)); - $url = "https://binom.heomai.com/click.php?cnv_id=".$cnv_id[1]."&payout=".$order->grand_total; - $res = $this->get_content($url); - Log::info("post to bm url ".$url." res ".json_encode($res)); - - - $url = "http://45.79.79.208:8009/api/offers/callBack?refer=".$cnv_id[1]."&revenue=".$order->grand_total; - $res = $this->get_content($url); - Log::info("post to bm 2 url ".$url." res ".json_encode($res)); - - - - - - } } From 3cb9aabea43da948f27149c0869288d67a04b8f3 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 10:16:03 +0800 Subject: [PATCH 188/386] fix the callback --- .../src/Console/Commands/Order/PostCannelOrder.php | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php index be9c3eea9..0c83b333c 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Order/PostCannelOrder.php @@ -461,15 +461,5 @@ public function postOrder($id, $shopifyStore) { } - } - - private function get_content($URL){ - $ch = curl_init(); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); - curl_setopt($ch, CURLOPT_URL, $URL); - $data = curl_exec($ch); - curl_close($ch); - return $data; - } - + } } From 9ccdefd562f5e65f004356d5082750d23234c719 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 11:34:35 +0800 Subject: [PATCH 189/386] fix the option name strtolower --- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 3 +++ .../Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php | 3 +++ 2 files changed, 6 insertions(+) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index d8a0474f5..cd843f3e1 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -185,12 +185,15 @@ public function syncProductToLocal($shopify_pro_id) { $size = []; $error = 0; foreach($options as $kk => $option) { + $option['name'] = strtolower($option['name']); $attr_id = 0; if(strpos($option['name'], "Size")!==false) $attr_id = 24; + if(strpos($option['name'], "size")!==false) $attr_id = 24; if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; if(strpos($option['name'], "尺码") !==false) $attr_id = 24; if(strpos($option['name'], "Length") !==false) $attr_id = 24; if(strpos($option['name'], "Color") !==false) $attr_id = 23; + if(strpos($option['name'], "color") !==false) $attr_id = 23; if(strpos($option['name'], "Couleur") !==false) $attr_id = 23; if(strpos($option['name'], "颜色") !==false) $attr_id = 23; if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index fa6cbcb42..5b00448dc 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -181,12 +181,15 @@ public function syncProductToLocal($shopify_pro_id) { $size = []; $error = 0; foreach($options as $kk => $option) { + $option['name'] = strtolower($option['name']); $attr_id = 0; if(strpos($option['name'], "Size")!==false) $attr_id = 24; + if(strpos($option['name'], "size")!==false) $attr_id = 24; if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; if(strpos($option['name'], "尺码") !==false) $attr_id = 24; if(strpos($option['name'], "Length") !==false) $attr_id = 24; if(strpos($option['name'], "Color") !==false) $attr_id = 23; + if(strpos($option['name'], "color") !==false) $attr_id = 23; if(strpos($option['name'], "Couleur") !==false) $attr_id = 23; if(strpos($option['name'], "颜色") !==false) $attr_id = 23; if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; From 9c08ebc81d3b5bcc81bced051bbbcb5300896871 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 11:54:52 +0800 Subject: [PATCH 190/386] fix the shopify sync --- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 4 ++-- .../Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index cd843f3e1..681a5106a 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -275,7 +275,7 @@ public function syncProductToLocal($shopify_pro_id) { Event::dispatch('catalog.product.create.after', $product); $updateData = []; - $updateData['product_number'] = 1000; + $updateData['product_number'] = ""; $updateData['name'] = $item['title']; $updateData['url_key'] = $item['product_id']; $updateData['short_description'] = $item['title']; @@ -354,7 +354,7 @@ public function syncProductToLocal($shopify_pro_id) { $newVariant['sku'] = $item['product_id'].'-'.$newShopifyVarants[$newkey]['id']; $newVariant['name'] = $newShopifyVarants[$newkey]['title']; $newVariant['price'] = $newShopifyVarants[$newkey]['price']; - $newVariant['weight'] = $newShopifyVarants[$newkey]['weight']; + $newVariant['weight'] = "1000"; $newVariant['status'] = 1; $newVariant['color'] = $variant['color']; $newVariant['size'] = $variant['size']; diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index 5b00448dc..f8ae064d4 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -278,7 +278,7 @@ public function syncProductToLocal($shopify_pro_id) { Event::dispatch('catalog.product.create.after', $product); $updateData = []; - $updateData['product_number'] = 1000; + $updateData['product_number'] = ""; $updateData['name'] = $item['title']; $updateData['url_key'] = $item['product_id']; $updateData['short_description'] = $item['title']; @@ -372,7 +372,7 @@ public function syncProductToLocal($shopify_pro_id) { $newVariant['sku'] = $item['product_id'].'-'.$newShopifyVarants[$newkey]['id']; $newVariant['name'] = $newShopifyVarants[$newkey]['title']; $newVariant['price'] = $newShopifyVarants[$newkey]['price']; - $newVariant['weight'] = $newShopifyVarants[$newkey]['weight']; + $newVariant['weight'] = 1000; $newVariant['status'] = 1; $newVariant['color'] = $variant['color']; $newVariant['size'] = $variant['size']; From 696d453bd9379e760eddb549baae4210073515b5 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 12:59:29 +0800 Subject: [PATCH 191/386] fix add default lang --- .env.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.env.example b/.env.example index a1223282a..8b3e899ee 100644 --- a/.env.example +++ b/.env.example @@ -87,7 +87,9 @@ SHOPIFY_APP_HOST_NAME= APP_TIMEZONE=Asia/Shanghai DB_TIMEZONE=+08:00 + ONEBUY_DEFAULT_COUNTRY=DE +ONEBUY_DEFAULT_LANG=DE SHOPIFY_APP_ID= SHOPIFY_STORE_LANG=en From 79a21d82c1881ee845b670baade5c2baa1156b5e Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 12:59:50 +0800 Subject: [PATCH 192/386] add default lang for onebuy --- packages/Nicelizhi/OneBuy/src/Config/onebuy.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php index 68d20759a..ea203e2db 100644 --- a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php +++ b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php @@ -1,6 +1,7 @@ env('ONEBUY_COUNTRIES'), + 'lang' => env('ONEBUY_DEFAULT_LANG'), 'default_country' => env('ONEBUY_DEFAULT_COUNTRY'), 'airwallex' => [ 'method' => [ From e6996af45b860528949b38ba8da70af34a45f8d2 Mon Sep 17 00:00:00 2001 From: xxl4 Date: Wed, 21 Feb 2024 13:09:04 +0800 Subject: [PATCH 193/386] fix chenage the location --- .../Resources/views/footer-container-de.blade.php | 12 ++++++------ .../Resources/views/footer-container-es.blade.php | 12 ++++++------ .../Resources/views/footer-container-gb.blade.php | 12 ++++++------ .../Resources/views/footer-container-us.blade.php | 10 +++++----- 4 files changed, 23 insertions(+), 23 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php index 9e36e4322..8d2dbf7d9 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php @@ -28,17 +28,17 @@
@lang('onebuy::app.product.order.Shipping')
-@lang('onebuy::app.product.order.Enter your contact information'): +@lang('onebuy::app.product.order.Enter your contact information').
@@ -593,11 +580,11 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.order.Privacy Policy') .
- +
-@lang('onebuy::app.product.order.30 DAY GUARANTEE'): + @lang('onebuy::app.product.order.30 DAY GUARANTEE'): @lang('onebuy::app.product.order.Hatmeo offers 30')
@@ -607,7 +594,7 @@ function getQueryParameterTop(param) {
- +
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php index 8d2dbf7d9..f820ae6f7 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php @@ -22,7 +22,7 @@
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php index e1d73cca4..a0fe139b0 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php @@ -22,7 +22,7 @@
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php index e1d73cca4..a0fe139b0 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php @@ -22,7 +22,7 @@
From e3cfeb2f015d13ccd9381918a67c162fa818b578 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:06:04 +0000 Subject: [PATCH 211/386] fix the width --- .../OneBuy/src/Resources/views/footer-container-es.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php index 8d2dbf7d9..f820ae6f7 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php @@ -22,7 +22,7 @@
From 4d4c499b9511e0501d51e09daa90c0cf6892d5dd Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:31:44 +0000 Subject: [PATCH 212/386] fix the new img --- .../checkout1/images/secure-icons.png | Bin 34923 -> 61042 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/template-common/checkout1/images/secure-icons.png b/public/template-common/checkout1/images/secure-icons.png index 51be88bfd090ff8c5ca7de751eb8404f364bd774..0ff38ae035f21a9bdb3b2f8b2304b6f85ed379bd 100644 GIT binary patch literal 61042 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 LRk|8r67v55Kd)=) literal 34923 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 Y%#_89fJLwm^SqIl3*ZwX70tmJ}lwQ#9?mB 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 From 3ea5972ec3a1571a8e1a19523dc3c89e50977178 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:32:07 +0000 Subject: [PATCH 213/386] fix onebuy --- .../OneBuy/src/Resources/views/payments.blade.php | 8 ++++---- .../OneBuy/src/Resources/views/product-detail.blade.php | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php index 258169160..38ee7ba47 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php @@ -14,7 +14,7 @@
name="payment_method"> -
name="payment_method"> -
value="airwallex"> -
@@ -158,7 +158,7 @@
name="payment_method"> -
- +
$package_product) { ?> From bb73180c32230ebb02e200ef3505b9f84a719349 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:48:34 +0000 Subject: [PATCH 214/386] fix the image size --- .../Resources/views/product-detail.blade.php | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index c175aa455..c1b08a601 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -1266,7 +1266,7 @@ function setAttributeTemplate(select_language, select_language_after, has_img_at if(product_attribute.id == has_img_attribute_id && show_image) { - product_template += '
' + product_template += '
' } } //console.log(product_template); @@ -1378,6 +1378,21 @@ function showImgProp(img) { document.getElementById('img-prop').style.display = 'block'; } +$(document).ready(function(){ + $(".show_big_img").on("click",function(){ + img = $(this).attr('src'); + console.log(img); + showImgProp(img) + }) +}); + + +function showImgProp2(){ + img = $(this).attr("img"); + document.getElementById('prop-img').src = img; + document.getElementById('img-prop').style.display = 'block'; +} + function hideImgProp() { document.getElementById('img-prop').style.display = 'none'; } From 53b8e1e843656d7fc56a5ff0d53e68c12f83c52c Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:50:45 +0000 Subject: [PATCH 215/386] fix image --- .../checkout1/images/secure-icons.png | Bin 61042 -> 62286 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/public/template-common/checkout1/images/secure-icons.png b/public/template-common/checkout1/images/secure-icons.png index 0ff38ae035f21a9bdb3b2f8b2304b6f85ed379bd..3cc4f692ac95ecdae5dd728805c0b94d512bc6f8 100644 GIT binary patch delta 59650 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 Pge3n(MH(Vy67qilxxmY` delta 58448 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⁣}_D@4kCt_KtbOs5WNvMG96`NjA`;R_zq8 zOjpMXS>JOVk$Lyb+&#~}bm_@US1Nmj>sadxfg{&QuioN4Hc5JQDeTZtX7=#@k!KI? z9e?`qNI5-St9Q_`1#56KK4NT$iUm^-K?nr6X-AYRfhk3LO9#BIkvueP+Li60w5nxX z(R7svq)0Tw##*Hfj!DEo2(Ut8ltjCZjEb(T`cf=t%Y5Du*Y+2kGmlTEPJDVYb@ttr zC^%h>h>RuU3QC?LG?r79(DjuVUuf&eFn{r!x&D1_Ee;|YPRWJaOYZTVS!cc$8Al@G z&{*=mq83?PZ5Z|y$A&!iWF3|Q&7Qo=on@DfwyT_HY>*bD#maTQLEE)KfU87UOsSRe zjH+ZDsRIqy8X89mXE`v%W@vI+8@(+H)4l%zq>^#gmDM3n)`omVO0HjE2U?-z7Js2< z1N@b7Ga*xu%&l_iG^DdouU(fY-c$!rZMQgm?Fw@n%#9E4+{54f;@3H{|4?GET(7Rp zcjE}8)*ibB2sOAE;w2Mcikj*D9;^5w@q!#>`Be*G|pz*10)8bN_Dc+&{{m z@#5-4*~nVVZ_eduji zx7v>pw1q??u*TAMJffj8`QZW?0gX<8S(qnUX=9Y6luM(epgz-N?v0b!KvF8_ae%lT zFzaS$KlV5~|K8suGd@bC9r4PG@9@^~tE37U9)9o;_uR1y&l<+(XL$P5tNefdsjK`> zqeb(VKgE+rC)qiiB{MvV`Rr5FmSdP&W;~z5Q^5QZ?aSAgtu&+90ARs$j#LM`}B;?#B3X2P*ttEDRBB_$QNVc@iB^}UtxbJe?PHtn7T5@^RJxb+H9TM4(;aC4<2EBI7=KyG}{qY z_!LX!u1D<@PIw7N8nU?|a@kCBSJ(i;Dz;t6hB3a%Fka3xIqW6bq{9X_SU{Kngv1I# zs0Hm<5U%ckuZGn9Y;URo09dJa_+S6_BR|vn0I8Hr8Dk5rPMkKz${T;GEUbk{gTdzV z>B_xF$KHA1=;Z5rcN8zXp6Vd5QKbELC(gEmI2CK{0@ia>=%<`cKAWnI4rP|dhceYS zPtLA9_uAF!%wnUpd!o>;);jfUCQ+gZKsibH?)*v%ArP*sGM!FTZii9Eg4{NIr5DPh z6i(XJ*}T^*7E?9fcY=TZ`#Xv?GxH5RSMlp#x`SNCBaC7y)ef1IkK@Qyp9|Mf)EgZY zhOwg)CKT9W(bcP43Z$oOHsdu*1;1V{q>|855@m<)N{$^GC5lZ?(Q1VtNcrxxj_t*4 z&aVn7G_i3vZ8-GEBq5V=w-KtvrB=DIGd$>dvLuYXJ*c!t;#z+jM)P8m$B-1sv#%3D zY$%On8~YEAoXljsw_B}fYI&ulJ3$gv=6Mq9N){U-R*1wzt^4r=vB)(dlaICati6dx zlqCtZf_O*Px$>#e)awTd&iS#7n(>4PVq=}a*i8Sm@sun$IW?P1@f-rgFX7sHYt3-G{CS zv#zY>UD?h#0<|GNOQ+oK#?}o!zX3iJSS)iZ%Y6U!7rA}kVQ$;CJIQL*YJj|P8f|Sf zwN{hal|>pGlqUx#ck}ssAEuPfLaT`lgYG;Yun|H?Qln$sd-y2#9k`99YUMoAf?f9n4e9EqU)5gdvt;W6FZa5r6|D0adMr;AUbVQuE){c`zdAC`^i~r zskU02o0+2CZm)Z9*XTH(zWaW5jdj;c?H0Bdv0x2CYw&#TIdGUK@4Sz1JpT+qwAsvj z6Z*qb2N+<0_l2KZLg)I=Oq+yVMVbpU4NhID5XXNpPM^blZ{9SN^|}Ax8220;;_$AG z3YKK>X@>!?pPl2<=;Yqd0P)w##-i@rhVmie=1FY&4Sck)}GKfA!gSU;XPK5i<(K_bB^fH&GtKfr^_t7d*me(o`W|tZa<+Gc{;mMI4yGGKSkT!A0 z7v5kV^Ip-NENTG_q38%nV4&@$U}S`1DTfQ#b_+2#kLXymk_eHcr*F+Juz2bM-l4+` zkCjkZ=9?j>Ms{KL9%jd`Bt3oWyFcapKly)O_{pgYn0p^5JwD8BckIH~nz4mh{@UzW zI+gSM@$5AJ;+=E6^R>tL8(+DPhi=;eLqq8M?!lj2VJz<_N}S~t^vn#+W{nz_uzNr0 zDCXiTC-~7Hevg&q6&&Bg_-V31hrJ6klx>9b$OGiZhe^2tvDm;|x(q>w0713grqX{1 z2>@TE5yjh~a0pgTLR3X6pJuzx`Q~93il678_W(n<#EnH-r~f_2zx^k?a4E&&XZ|L4 z967}JFvL+rD*(sMFg%n_qA|k-+KokK8xCIVqeS<+F4N#-Fb3kVgP)yX&%XWaAJ32y zV1p*MGoKhEcjq{rNKp+G9oBwswp`9G9NaVX_QAbF&m7!We*W;@p)2{U9||Gp1hLm>h3Qr&^21m=LV)k8D4q6$ zv2wPW&$!KICybSnu@EA*3Cpr>Nt;f&G+GhMwKlF&2!U`MnF=FaZijKkfY>M6#hA4P zt(3UFqjNdGRm^#{IMT7!YwKwt1Siff@cPL)+MSrc_Jxy)kYxg&3X|}VBL&K5kNm}x z7?C~!os(CQWCyLwEt*>M_mjerYYU@izemnX@sEG=Z<9EZkbeWbAN<@BI@g5-+(a6^ zQVBRSU8B+n7%BCqEKCNe-D6q4`shv$?krNsrPmc9y2rhFHkqt88{t|Ey)nsrGd5&> zm&wsA{ucf@kj($)D*??`BF#)JLB#5Y(CRJ_iBbngVM9Ts6H&QbV|u2^r3=ga*4OXg zm!CYycrmwSJ%3UN#)dNF^C`e0Y|QX@hDYukXJTkGDPyr1W4V2Ik^k*)9YZRGavb6y z#=&yi-Xevxx8AE3vl9q&bdp}uFa9X_ZUON1%IqIOtlPGyd0&WGOD{ED!%(R z_y6SEL`dp;zs#P46G>L#Y89tmW5-aI|6DZLyYdcy`okH{+753Yp5WMRJ8+~RTh3Ef zE~RWLA#{YqD;04^M`##Ht(NR&Ia07MCHQoEp607BK(mR;a)t#Q#b7c0!nuTatZC@2ZporpbOM;ME!yaj1N+c`?ze;8eU5alP|R~0X@ z$9|uu$A3yW{}?;(*h#6J1~i>^gFsvST$6cdeRP&DAII^J%CBq7?HA?bW7xP9NynMdy3 z{r!B_{az;Rp30`(Rx$4*5O}UaNFkMyGKjPk0(@VYOxo9_LdvFG#d57p80l5x|J7=w zz<+Th=dP?Ux7483j&P)ggwXNANaw=Hcn0K_rndbMNqMf4T1pv5u_21hYCXFr3cPc6 zp4U&#vQ+8t`2D-NZC{x%(u7ePDdp;#JD>4#(+l)Bzk)f?Ez0BMFx2gad zkzuN#Sq==LUNuB^v=Nz3Y%{%3uA6}rSS3X4NKB6d5nXjuJGQ*L9P-oo4p|o>W3g7y zhzyZQ(luMaS3(FOTaSqwpshh)C&@<=4XU?ni;xn>aW-9R5QRzm zVU1+p7~d!*XiX3WH}DGTZksD7A=LoF5Md+i%?}>~3@|_!pIkym3Qz*m3b{I4=gNGY z;bL}m(%T~`c8%pJW*xE_ZW6G z;?$X|=+7QSc`mm-aG3pn_bZs&N3e5CsB!@@RA#{{URjB074qa=nJAB{p+gxEX&89~>F4pIItNR~ zAiHmET!`?+_rzKu-W&A-}&ZS?3pZ* z&1eLIFw*?!v$2^P0RlhXlg*li2==uWml_eD9+O&|Pk%q2X~*q&a|hnj>Ld$SF<7jA z7}z~B&X*th6ptP~#{Ks{LdJ18I6BTh{g1!H>8U=C7-Kj;bB%xg$G^|W&BI(0`wH8k)M)M_ncfI2O()T{y!pKk<1;Wf09ewny4n3$6?0VdgKN z=iN)^Hz|CQnDd^j&ILaMIwoi~P*UJzvY>K^W+Mp^8_bgi7~rPy$s}~>lIRjJmW71| z$1g2$WX}k>l)LV@e8wZ6@i(0>=!HtvdHMJ}*MDYPSf?9{WX#&bTnchIm))aTGVbO9 zIo5``l_o3IPGX+uCTTN^c^5zJQ0v5WT8Tj-N+#>|tz_Y$;mT~2>ACBhes)4l&<-Kc zjF&R}+7tWOIh@^czLM+$J9zGUzfCf}!_M&>nOq7M+gtBg46qG0e!gIYWY&62;}hl! z6n}S5k{e0`1{M}El?rBf9CBS!<@{yZC(jW%9;H3wqy%(~CR|$P@|ml|%B6!ylrW!v z8uie9lrlMNse~dinm89L<|g)X_gB6^s+dMZ5%)(i$I=-X8o~h?Tfg8Rbd`q~p$V@Gw)>Mfpa(~*}kDfRDMB*R+ z%?CfQvXqoGI}szW?dta*|IG(ku5`pRFJ1J`US7&o8$mkMCQ-et3(x7I$L0!wkka@m zr&GxL?Nmy+QD|;h-%YjKku+Nor++Ul5`+;cUnTc#w*{i_hwbiELGln4Kx~LQk!m)> zRHqYX93{1qG7KWUdb-&rq(MnZCk_cijiUt3PBeV-;?fBKAFJYVUad%GI2AM}Kp^mP#^) z^)@%wUqtuZW6 zF?J-S*e*Ba&A^f@Y+WgE`hUj0{(GnU@AYrd?g3Uq7#p`4>s&1onObOK3#J(v3Pq27 zd54@UkzFND54}Wh^}yf=Xd(QI&G_(}OToSK9X){~yC36*zUrD7D~Wcb2r^2vGmZ=q z)`r?L*V42+D=c^^CGw%RiI3FAIhP>05t6iHw(QGx+7XRYD^V=hmVd14;i$m^^+Uvg ziJklxU;B0Lz4Klu4@0}b&U}fpQ&;)d-}xqseJUJlEzh5Phu{6~x7a&6&i>u|!Ngqe z!7PNJl+AHu=N?81C1#cvSKm7`eTCoq;a`w0l(_529Z)DCOxNGWalja^oIcK9zW6N1 zFJIV#=(s+tweKr4)_?m!7)PWWm%DfGXDGMcUuR}{k?+6u5}Uo;NA=1S%A`H9X zuSxh-vsUF>Fa3nSeElW#Rvte>Bq3=+aQ@O+-Z*`nOY^fhQgC?pKJGbu2fNBc2-n3% z(cn8XzyLRiPb{HBcS2t`2u^4`6h2%YOqOPcMF?|;2|jZ^2B(VZBwUXqon z7jbStIFe$~XV*vu&)KYk>4Y&?7aP>;9jw-16w(Sl`|xh=+FRzGi_5%ne2(fui#Rsu zZq_49w|oggYqBF5p1yA<4;~&}yFkP`L1e5ASEuW&EVYon;`T#BJbnL8O1aI1)dzve zp)5lq87^I|LVsk|c0O-m+zQGGAtcHC)voR+Y8015nsG0W%@t_p3M@v3or`mb3sI{ByoPA}VluG8v5@>c}xliPvKchE(&>k{xYXuzRJHG*}?K}JjEA}?I4#)A%;iSc&lc_@?4$Te4Xb0Vdk3_ zp##LlY0S(row{YxclcVN!pYX#Jo8MEthW5-6NlJ8k->Fcgh)sl$JS^rp5gn?o~GHl zn*+N>NPl@Qo;Sv9RdexL1tsbn*78(IprfTFfY4%TMD0*#F?Fvd5MEN#sO3|*I;KK4U^_C*Z zwch)H2U)H@DvXx4&NTRbFfp1(If5WGxUSrC-hVk-%8<`^qEtwwYK@@KXh#`qNz!58 zz%f=i(qwa9V{|yXsI?8EP~Wh=8^PMdr$%c_5GARx9JTJbWR((D8L5-7zzt-@#`R8j zq1$dp>8mr<{coL~J6vl7ugBUlI+W$M{X^Y)w_hk}ZE+k)Htp?y{*9}Tzw!39d!vBo9!Ek+J;r-d*JvcTVJA$fTTEYfKU< z*S#h|BEX%<7!DOI#SPC$C6M!NlUwMRVt>cr*`8^}^$B6)Iifw3Qi~I5Rdc058*8hf zVXh5X)l&$*H&$76iJUhV172GU@scE#>+WJDiB*!n;bsIn#NaM>%-G45@b3AxezzW) zO4^Ye$UBUrBua|wTF%4XaV0veV;p*ZgyJ;Ny){8%8=g1iUm*4(hp;CzgY&(^X zv6hUV;-SNL@a#Kpt|N42mY4X0AAkNOqlFSh&tu1~eTc|_QdnbISeWB~`PP5r4}bh! zqWA`;G9NKIVTj{6+_nDzyGO^9u*P1WSa{>Y8UFA8>G%1susr$DCL7*MWq?@)`b<8t1b49qO))p$Vq#Z`C-2|M_;3O7AxVIT z3n_Mt<#^MVm>^Chmbdumd}|Ooy_>TOo2Ws~dO3C!%49>!*;h`n+=}pLPO|fbS1Gp| z)E28e^Nr`pI#nM1!B0>t%d89?;D^tjVz$!ep{u9a|C1l{*tyG`UVmxvZ-1}M(L48Z zwCv+nDqMT_JZ~*^DDIu)u@Rq{D|1{}3aBmA7#lBAETr&Ui4(-=l`4DRd7WL~{~kxq zuW(@{;9vdj4|wd(y^IWJ*k4)T&YwKPBWK@Xd2xl`{pNT0%lQ>9K6(ecca4zF`k)jk z8&N!a9)9u?wS@-nG=E$g<|Q6ZN8I-Ok15S9(P=yQp5(qmntym~irMZ1IuX3$2lRO@hJp+K|ak|fk!{Wx!l(7plwYRKojBswb8i4b6m zg+Q|tc|j1TfYbrZ5T}u_t%nY*S`oOu6P1eT%GgkDzR?Uik*9B1-;LlX!L`{s zL8K`bQpAzQ*?+Ln;5af2!?^BwGLVUp+I0$);5jsdD1ZFS!o9J!pJ_CM<#I87>Ct1m z!c2FAWV@CsDO4`wxs7(X_xPFluRim_#jjmBw{Q?_H!QkOozvexu|+9iM)K+ESTQ|& zd8$&Mp0DYCC6Gy!82Fw;I_2Ofxw=-1VuR<(Xy1;~m48aTbFw^?nZpr@#L$@ScZD~3 z<@BMeR-zq4tl6=vyzuaYd!9db`}lJyUtJ0#9lJ_))k?i|+m;zEDW_eYoLJ)_Ai4as zlI~w#Z53zRaj|WTYkFI(L-4xZp{uq200! zDZrD$%eo>p-!TuoFx&aHpU!k1uXgkhvP-sYb=!7_;glrYomETC$gKQusugN0xNq3! zSlMT$9aHpF`X{sP@=P->CO%TzTthz=s24Ok!Bv z9j~m`h-QO3@3@;^efmqhcHs$9;!y<4aF`j?C~FW*gs`APf-# zp1$`%{`{4n^3#)Vt$Tm5w!**q_J88F^QU;^u6x;08pd&4F3wKz`sw4me)a^{7Uw^_ z4uAN75Jn+ZNJb`h@bK+-@ts$G%1mWx_5EhM#WQce%3^JWM_>IZx9#3XK9yyuQRUt9 zXL;%5Tb%6+aodP=CP&z;^9RrT1>b(@xm7X;;LOw&{=<*I%h6qXdGfwT$Y*oV`e1$U z1{mPy6+c&m&cddX&{J;^$h6_^_UO6#OBZ$FQU5~IH zlWoBmoRq_ODTVKCt%7L>F<0jsbb`dV5^E`B9ma<;jFk(Fl?yz6*DhL}4wq)?%q%ro ztcNr@G1fpPr8qE|;jRNC3`Sq zSi(rt2qLt$$nCP6ki_+-eTnO;?s01t$%U-Pfw4UKv`e+p0ldLN_WeK@BH%*0z&)bL z*vb;|H~*Y-f2ug$m}0Uy%YKz+^2$Z7{=a^Qspb^*#xz69V`O2LcmD8OG<8h5Gsm6v zDSpLhDocXz{Xw1Ou@M$hmIF((_5y&IIXriTLzP)ZQ+dL-TD}t+1lxd;HTxtbL>3??17eC)& zXK7(m?z(Vg<+H&$RQG@2o!!&&^CgYKq9Qc7TqrO^&M>6AM)Jer#o z`Lwk{2y}PV-;;){Dt{}ws;cc4<;EsTRAa2;I^n%{O}_g1Cl7u1;GXikzN^|jqv#$a z5DUSyc96d0Hh=wv3V}>3nL$vhggO^nD_7gF9c+^PAnk~#=!wdZFB@Wm!gkeIz!7MRTnfz4+kZ>pol1z$?aH~8yN1LC zA-JaPwt0Yrw&Vk2cZadv_rq(guYCJ*>+@4By%!-aX`TThZqSGcA#GWj3~yTA@h`CCnxRz}|hCT%XOjqBfpU^C?F(q}b-Gxv+iD z4)ETv)i=P{B!8o-H6{sfvlfC5sX~dT?|Ybk^tE5-pMB%^xHLDtdXB~N&c$>5i*Nor zCPpTB?D27Osmzvh-YAaHMl-bM0AG9TDPB7D4#%%tSa;0T#W}7n&hf_ClMENjI6^YL zvcR>4Tc613!CH&48l@b*@c3tW{me=Jf8Y7$x?^gsCV$VLc$;@GooCPZ4zgZ~YOBuW z`B_@Q_CcLO2vV*?vs&RVU->Dgu3lXCzBZZ@S1$0Ax8LCC!Q04>j1CB$0S359{9F+_ z?-fD-QehD^R{}20)robCqa4-~9P44NWuemIm6Nm7mYRwGfa4@KfZbS9YYiAnA>&Za z``gNfJAXmU+)|59WUxqtQjC^-JgHr(Cd0JkfL^sz z3st`V@)b^fV@<}>I8t)QaE;%-_aZKujDH`KaU>>ml5dbQJa(wf9Xn^4tIVTg%~&?3 zoP$o(pcO1(OiaetWL<@gU4)8=1I0`w!}*mAZ7UK&2Mb0dmK=jDS08KanaC5xW_4Wj zT*cx_i%Pw-Zg{KK!+g6F7i*2M+zO&0v=Q5TY1p+zqT}GF+(s_#EETeD?A&C1*MEgg zHV}%%G?STROcy;*nl%{LRn1N(n$Kmtnv%rZID#bSNdcZq9BCF8o5f};ynD~iBI%Ty zFXsL4mI|rkfX=2}q!dUY$fjM!hBB$y`NrWYbzuqDk=2or{B(IF zx728K@?orfluWX(Y*Ytb4{Qi{2gXjmNt3fT%Moh@_+p7mTi|(Zt}zF zAGholsk`lU+0pJf8<}}~bF}RyzT83_#{{hghmPFIZ+-479KU*jcQ2l!-d^v~S#33W z=i=Ed%Uu_$)qh<^qjgLeg-EekO6NH)^-hZ*ju{w;4=}*Z&l)0a@UST5fU@|0n5<9? z2w};jBZfpmz*-|Q$nHAQBDBD9VJI6>@(tP;TtG+%&wr1}XS<6_1I9R5Wx%z}ETuR; zQ>0P%L0E(`*w}VIT6u$&*#NgXO2yQs*R(cF%_};QUL6H1^-ihNiOY>k0nt>)Q^-CdBW7-DM8$>)RCA4C}jUx!H;?mdfcR zl!%FYiGQ@WVdIs=8cQ5$S#L)Z%awNK#JTyr=c!#6r>iITOcv))U0kfT+K~>T*m>d2 zYuSb6#`xKb%llqGK6A%QZ%^GnJ5$?(pqo0;Nt8c&3nHmsW-GAil+ze4rcw zTZN$sDQLE0f>5t=3<5#B6H{x1^L|w_4FhAo_XTIJwM*Jvv|e#9qTAbHl2vGloH9_kCI4N;dh^j{ZB?u3L247jo1{b zp)RAZ6ZX@?s%n-v>&fMUr|LylF_BsSq)#|Q$xKT#-P*#mbORz|naDWYGveb)fv>jZ zOn;(+C+E*qIUZ_z_+mXeDPZwxEAALDSDJC^ z8yB0UR?P6*OW~a_%(fpmQHhSWJEoAByNOMH)?4GE+atB{|l^gzfcxEfCzkdp{%DJZ$kf4=}(0TjS@7(0Sibf@Y{WadCyq zb9MGi6t8=@F_zcP%=6ZXc_JwiAAf;$5Q!w*81{^3Ik>Zo-!{>qot?u5K`VUa)i@j3qech53^eudG=JiqvvLp*hC$F}EPnQ!o|7q0T! z@kMkqgi<@M+3PaR&n_AVUdaQogNcI?RW);qIXFMnWeHQWm8 z>}}d$fp^^;&!>jDH(H^HMkx$KS=vwy6$$Os6N9~*)V1t^7d3~5)8_5mv(78ortMj%6rbS#dm z5|5BrVy#GsAt8E3MQf@t67y9nx@C1&jK%<=KuUpfWU^@=i=+-~k_{y3B)7JeNT~^> z8(6m8l9^+jZOUt|M7kZn0c#VTywHQCgXy(YGI{as=t2q{^O_TZp#N6d7Q23rgNl~91%AC9V(8!7DYb!geOO3*sq~#`99cvSl=1xqplwP^- zj>%WP{@Ejcd}QzNyJ_FCdnWQ-QIW-1OK)E$63~wHYAyYU6MsS{RS$Kk6PiL21}4|; zolR}%^_j(SMXTt^xtu2(X-BZf*?O868MxYvZ@5Pk8p~ux^1z5kHL{6dYwKr}DR`ni znNgP~bI#P|N_e0a*`)1TwR?5#Exg`-XhAQ1HZJ1kK1|-&_n+ zZ!H9cW@t*)(0>foBc1CQQaC*#=O!NB-HFV<i2?L~%7;EqxHz`tU zWE8Pybe#X}3%|&Cd6>U==_kB&`ZyQorVCE@SDCLY^CvILJa!OnHNXHjjRB!!EjWtM#GJZT z<@D7R9>04M)lDnAZq6+P7R$xi6<#?pM{S`6#eX!yk(0!7_nS!^WwWx{JUq)^YTmASgMDR zaoD-9#OEL0#rURdFKc_eZ=GAX|fyG+Qv`X__YKX4|IgW)jJfn$4l2!z| zY3;jV3ARhr^p(7NPiq8ip}NAdZdC>h65I1@6#}dz?w(4IhY{V~WYe3`f=1G!FDthc z2xXyTiBCZA7oZP-a0Rrx@6(eSTUPV<(tq8(7B*3|SWrcfV*-&QnYbIk3Us7^grHgF zU~HngNtC?`+dsGJCYI_^Q#P60cQ3z>;OX_%T32F>z(#BDSSv6lnYr6;*-{#ihFZhp zW9ycL$vX#J;g4m|lyp`CVW3qr0q+Ho3dVjLwN*lq} z-oQPD&CP^B3lgvA&_Hau%C2qBX~$6V<-(oA?ujdP=SXuo%InYwJk|Gb*rEawLNe5- zFx1(4M`sp^hNUY_J|zQJNz;jp+X#$jW0MTq0+Gy_`a1A>*U}yIg%H+JQWt!=vLmai z!peB66?LEeZ&WNpD+dlj1@}! z>SIrHcJBewo{tcMN~6x>ciclEokm&%{R$f)A&#-yAhUTsfB&Ndoi;C>dY4+eiSH!F z?X6D0aIuIEL%ww1qdaoxD2;X-r6l!si_hNkAikFnNi^#qB@^S5{D0P$zRrCIkMNz> zU*etfr@1h5je5Iimaca-fnT*uDu+b+=YjLs4q)a(595m@YG%RQ_2>oG;4Uup%aBX zdFMS0rLz#nn{UWCA%AkmOJ%L%9q$# zC?l=m)Av2hN~=yL<#Sp%El z)D#wkBe7aBztrZHGqXH&dl}W;b?@KxOu34B5b+l;UFOYm3m7R8Tbko^7rKtZU|FiP zxG-J8SdC5+l;AlMi{`|oMXK#ES=i=$I!J!-+ANEeh7aoL!>3zB$Kmp&Sznz1=iwZ zU1Dvpo77CV7H$nfNA{Tw*@TF&7BFb(aNI5MQ*VgfQGbh~i3z2P?(Q-rYpb<;cJ+JG zHwzctXs+HmBbgcZ9pC*|bQfxN!}m=Xx@wxf6B4e7n4Z4If&$?S>>`BUvBX)M5IH&_ zY?6BH`a)P+uZRxdfcK=peO#bQte>#kgjniVS+8EZ5dCYvZqeP)hOV@^SJ7HVPP^gr z@3yhWu78>JWtrs7)%Rpt6Crr#YJrz7l?dt{6v9Ns)7P9oV3ZwWInH0JjE12eZ#08~HP<8Yy36|5;&{?b3}tJMqgIw`?RKjj-E@5$ zW%rQm!ghj~b`TLpNm#lmiz(kK;g59{ zVZl=?JJN2g6We&UZ3vB}t!2u>P%X5DSmWNXJOsWYbjg?Xf+s2xV#zkwxw?rl!25xX z6Ov}%=s5q!zy5cyc76E1lmbU7gfZPrSEB#Tq>PnCMzcA7`*UCAuRr+(tTn46tA7vz zZ8Wh?6fymqsFuY0##0JR65@*1P+3MO#qIkJa(M4SI*mGum1UNjHMBN3j>Bl7#6)=* zna+TYnaCG->aP2eI!VTIM@k&!AX*Kcy5ks+-+t$6bgs3w>yxQaLSQ?s)lC80s54n8 z@^`-Qwbik|caJHN^oI?*YRuJmQ-6UC16<(n*d+h^U;UfiaQd}-(-9I^2yE01dFr$g zL5E^K&u@I@%l!JMKEpy~nYrpRVVFFhhH^PZOG9J|MHB)PboeKK=f7N?)!A+zyHY}B z1(f1zkA9jbjvixnWf4ay#)d{I&TYDjNNg^!;ubo?>`N!{)Px}~?Bn%Nk;K*cAcXgr7 zaxF+EqG^{1%egBJE?lee!dp}99?dc_oTXGsQ^| z+I)jcb1jxvI>|&ctcNCq&l$c5~dRuz!8xgI>`t5QAL? zy#Rz38<6L+`qo-#hMQ2_P4{W16SIF; znIrqkOpN4k9Yrp^^;%WQB(--T=d*uT=^V!XXli<8=k#=KJZuJ8WRleiS0xR$rjM-b z{^AI5+*L&cT7$O4+9c1*RM#WNT8MO_aFG%>?IC26y=#-{X@BpF+2en^S-=Xp)KW2@ zsE6O!=e~XKUedwcSmX-gk1BBRcP7Sd<>AE%h^?q;T7@DOW=?6q{sY ze#=3)*C!_F>wlc5!XaN)n~`n4wixKPwp*TNNu0d$uArkWyRwR`v;N3lv+pQ-lzqkd zT1-c8Gau;Q(pMWX+S*#dm9G!^GGFx7!R59YBQnXr>xk`Bii^I2pxf^jW0U(l*$IWjcU4R)JF-rr($V&0C4Zt38$u&}5JSz-=Cr}t*4VjM zhZHvB%1X(Tb2(Sm+HoQh8w~Cr9+Xm~Q|Zl%eH}v-U4OI0+9aga^>9)fe9#2RcUtQ% zX(-n}^tUR%YtSx?!BGymLV;W^$8N1xJ>#WPAiJ_HYwpZ21uC6R>e$%cUe>Q|`_e(BT<8y1OI(q$akTDOYb`<>gjC?Cm>3;r ze0X$qbHGuu+Xf)kD90g_O4C!|tzJhICMo5GKq{A^@-Rb%Vvl+6K2rwYpaBMWuNV+I zJvb6=4CgP`Ie(_oeR0E}(i>nM1)f6sYTE=LD1U)gf>W2OoI10#8lFN=89;X;tlT8! zdDlBYSb=o~CNfOVwV0l2uqtPF1dgL{9f3q7mJ8Mr#ReOiWO6J-(mvmTUM7=nwXwCF zzEb7XnZ-myEw<4r`!4uBgX0?vtd1bih8Nyk;Dspa7T1*|*lr!Zi|`$AB)58QpX)vR zet%|dpeH-&%|KaIg@7gyiWj^gp7TbyEpAfK0lpD5rGvA@=e0)6{1wTx{-VV;zxN-v zI_U-B0zQc0-q^UdS6?pcZ7R0j47l%(3I5Jsy9cc; zQLIV(+lvnhd7s@A1?#%9sw8iozO?(m@e510U%s$-dlbf=5r{-pv&A*^uA~2rUVm5& zusWV~i5zLrt}C^h_N<@rohUZ49YjL+$e)d0_O90)Lg0H&BbRZP@)@t;Z0khZeI!an z;BCsxw2GAHSl5xY@!{-rxtv~JUTKcoSPNX)^~md6rT644oe;Dkn@hEKO%yJVjO1Q2 z#=f<%)T~U+)w)p*8wSm8_RDbpZhxZDG9udgvvs6!JFzLPbj(PoNnMv#?~yv%QgjG& zu4pWWrm4iXLM#9@mc_s_*D)vwMSs2fukM=oJ~^3YEUkEPu5-f?Q3`=CMbwDRwUjGf z-&gkTi{apGGcL!macpmqd_A?!x}5~E`8{nA8mkOiDWS8TlFAXP8C#(vD}Pp>Bb&-i z=3qh!opNP8=ZWf&FFQeOSPJ4qv1DaRAch;EE@;En^5mp*k~y6eCauI`&Jzn6M+8wX z1a~Xk0_xwN2Uuee(H3U8H=}$N0&6rP)Yn&km@U4STb19-=dqf!HGC_D20-6N051vwy?$Y!pHiCgZ4b z5RQY>vrsVI>+E?5Nr~8a9lbsjBKaIU9dMjALMaSE>+WXX00Rv0UhwfFbi~>}?{`7B z)p@Hv8d8G0@rb@jr6Ack+Gf*k6}GDc=&{bCZwAw2SS*R;eBC79CVw6vjs%fp~<(HeDtI{JQJx zO+w}BTxx)uLic9e1d%*6CCoY*{vbyrY&5o*tjFxyAjuyD7v51>O7*q zj@8$?iWWro`>{6Z=zsmWuCCS3e&gLiLf%+Vy9Mt3AoC(IIF43}TrI&vn;D3JD?5-E4NonANn|*Mqh|Y#1tL z=AL+9&vUhARIPpIJ6vDXwi-l<=%V+C=+PM=L?1Jq=-ojOg25O>kKTLloe;gZ z(R-ih(VqD|@AD_TpU!p8hjq@i&suw}wfDa78^vqLW#W5#eRzL%cJbzdZ~o2iCcL$A z2H{$~tY*Ptrbs5fG3eW_)3(fzW+*gcz~Upa5rD*_{%$R@U|A`X&=c`}WB*;=qJqp6 z4Rh3vM4DaSfg#TC`VVwp$B|2gV(y;S-$o8tFA^`W}+GMyY3>p!;X z0Mhur;(bvs1#?71*d)~2`$t|2dSJ+}5*8B0Sg zk9SG?vi-i#EXLof?yM(#>-1}LZk$+j_6$KqdAD|{Fkc;nRk^@P>(zqDrU~f7*K+I` z%krs>)+i{wK&E=CX}y;Ad`@&pjqKZ0z)5a8j`_!H!?OO@t_0nIL&{9uOM+srm zEVzHWk}h!hRWI!MZ0E8JodkP~V!q?w^g9veIlJhNeGwRaj2J3d+Wrd`kSZ<^c-pj| zuo-gP4*8~4bps|19F9uIp~zurCY_8*scNkv%+iI{LQY=B^3C4&x>-yYYq{^LhrzHr z7euY=6W(CTD*g66*d9Qwx`G?#-I%bLbJ47XA}tZLM;n{e&Rmiz|L$E(&+O;4L9IVu ztkEr*GC~dKGQK@pOnG@9lsbQBW(rKZgIjccOc+`J4Me(*i#aljH?*vs;D?=nRTqM>t|B!=t@&w2VB@T z{m6FP@$g9N(MjpeDo<@gaFR?%DfZTY2cD@%pK>^AoL;&<4`xgJp>KVo*Qm`U{T^!v z?SKyjz59LqSB*j1KwY<1n2UX;X_+AH17s9Q%R*=2ef8Gtz?5x)q!G|MT+mMi)i_?C z$4YH+NwBM=t+L~$`O8%@#W{bC&oWeWGSyAeVp6Lne-5d(x1M;f$Z1`}Qj*&WSnb^@ zik+3NIoCOzpYCRJ>Mm>Agx;2y)O;_xP)}B`soOVE*mr+)r*jsQrW(#q_~Yeh(=WHS zAB&lNvIO+^RDZurFaeSc3N#Ms|Ez#Sv{uO9bURbo%no~H#$@%UJq;*elF|q>ojsn| z!Z}X$t^SEDGi)%ZtUT5ff+#i^2Eu~u`dAV#_}DcCdKXASlXWE6BcqxdCP0^c$fWXg zP`hV|v11~MNvp&A@&_}vG3fKsIf}ugKEJC&-+Sck)!o+h!%`XMm&XxXz~9`&&H;+;^V#qPHui+_HaSq)RIMq1q!JVO3R@Dlh}8k~p9> zcGyeno2#J^P3QQw{E4ISr5u?)M_l~cc$LpT#ZD<>eAT10tr)JTpFxS{B*V>G_%h9K zSd_1Fop_8=zIlZ@{1qdXG`BU~D<3O*D&&f~isgtd3-H`Q05Ir=UQMU`w}ytwz+b_> zS-5G@W_WH~yo+VCb)^(TCtC&%TL*3QJ>0AIu$s*L+!H~%BP1IFuR@3^F^!--alZGV zptrm(A6d#o411t`c7R7*X)yKbs!FB=)-shVE=OWpqi)ALlUUi71)9j_;Hw(g3WIm( zF#ZDy(OH}vaFXi7WjV0cSyg3@$$o2+yt6>0$wXYd%G|`Rv=v`sk(pHu^P!y7$VA~i zNOP;_`HPCP^-PRcZYH8-^hVToZn|eZ{tiwH^eG#s@i6Bod8;kd`pddb+u}CY>h7V{ zi@HP2!|RYz^G{Je7Y(sb@LQp_3HJ6Nh5(~ysdG;7V-oQhs^S{qr})spUYuu8TImYl z`Z|4J{qWkSq?|#v!&*#D_(-$Vqe0Th&t&T*+g@;GgSd99dDMNMkphQ0J&J*$Cj=6& z5F}E*><~%qsQ0lZ7OAu4UmO*)8aAil6IGdcIFyOVJ*#J+0^RK4T()_hq>(!208$?N z6X(jJf-6)!TX#2U8#i1>e3!{-bAK#b6X0EX%@lW2=Ll7%E#c#KaDU3PmDY{?#u}fS z!(0odx)}NwDFyM))X|w*$;epRFFBgZABu54718BU?x(gjyzyG^TK~Ai%k8%{_{qYg zBoU>?^qvxXkc}0ny{4a7k))8TI zq5u+C+3s2|jdVRCRpE+AZ)g}T=lTOgh_OaqAJVB;S-;xi)3BN*4)?I4lezQ9W)V{m zNOtyiYvIKuS!q)?%?hb|*purM1578RIIuLNL=d1C+J~KDkUo}oL|_pB2vXL|l;b!E z>yvx0M#tUEas1ln1jHZf4|ZJk@)P4b<4ElO^vfRnCYz$qWn`N8xqjfVch+>PBMid# z+ueKu=WOJhWutJ1h!P=^h&gFsjnhMMxoubzQp56sf~U7HJ^kdTVTo#G3{0r;Qjrw5 zKq-#F-C}Dl>~a5F_p(YGK&(5e({(_!|Ezt~pVl-0{RxVTg=URZeis!DQ58mc@C-IA zT!?Cy8E&J}G2&K!jtatR)k4yqvN#-u=UG%8p!Fl+>)w0r(zEvGQiTymue9pS4tu-@ znoQLeF&K5Eyk-Ptb;7i1(zrS5h{DK--<~(gWT-vVq5l+L)kCEltcMYv8?bOFU?1}$ zTu3Tv*Ess<*5}Ckc47Ix9pTE20MED$zE`$763Hdl#NZhvyGH1GAP9(uKp#gg%Z9C)BCOTUN3UkZ7Mt?RW}rxSN4TD4ZY4njL9U zsCaVvHh#l(ZPVb;+A2mmwhh+>NMb}`pEAqOjHF_X{)Hh?Wwo8Ey&HP>Zp{5(_s7(Hdo)BcF9D!t;9$wxNLl;8m&V`saNH>vJXE2Q8E(8?n9O&NU7tQqO~tVr=sJ z9c5a_#Ts-x7Fx!8LtD9qWWDLaI=Q|gRD=2ZI9Cb9qwP+${}>+E&0EKDzv-pCg-qhf zMv+Nb&}px#L5}cBwDq{`V3hAmK90=O(?H%ed7aGEa|g~m8PztQI4;TnqK>>9^;2TZ zDFiMozdkM*Zm0-;jK@hMN{1MV60Ufgab3OLE_silU zwktmJS2mWV7VIct2Z074yKP9al|{S3qle3=^q@<&-`p&M3ro0o_i#W=$iDF5ILXp2 zlTJjUlCXpgOBOuqC8vS;2a&JB``hhedG7%cXKMQzoj9z=-TKHWA##xr--_EX>vQ_i zL0=mvmbJwY7YniC7#?%sjHw0G**$WBnb=KnLeF)B#<2ENWP!;9=4p`|8eVyy|uS*f!Sy4BK6>IxMa zdc`!Zd(||SA9ZpS?ooFjyBI|tGXrxcu%Qt=GWWDEkh?ADZuJln6)^lp9#|7D=(;k0 zP-LLO(l!$V)Q(kLtZBAdUV;`M9v#~nE<8GlbO!lxrTZ}Q^YQOSikq*yMLfPb@#Ckz zzZOyFZq1{t>bl$#ePJ39Es>>18e9oAL;Nt~HcNXMl;x0~tCv!{w*5{n%P+{8Nlkp~ zSM%Q2Trx$@*e=FgvOa+~)ng4iAtGf`&ik8(4?4tLKxnm*#Ym_Oukb*0OpdbuQQ0EL zvgh40Li(pcfk}yw?Bp;kehNU;`RVE2Bjq%%$zG@w*i+fi$g|(zGDi{C)@B+@5B_($ z>wjym6n;k6Cse*xL07j^2h)Ep)J5=w-vm~%CM+SH>a7})A4I;Rm12|45D_OLRK zdE`y@U#ykiN131#WXSB!b#ofmlCXioHs-G9?%UG%Y2D=nKW5>%mGcDzrRTJdJ)QmJ z^v0E>r}wzEULc$z=?5eE^ExAcXNO>EPr!|11td0N*Nvmg;)|FK6bUfGzenZG49asd z!D3A{2=F-ctG3q(>!w6w(4)y%Oey*LrkDLoj?xWJZ%h8Nm>}?IBI)r!IcjX&);b=J z@A(QjJnlzti}B&Hhnz;wUH<588S5(=gM|0-C!X!K0f&3ywo`#cRDr=w``5lq~=Bv7$QGLGIt z$?LUZbh*2wD2WK?etMgei@q29t`I#04su^68S!-Xj31N0(*hlq1M=Or& z`yrlXGb|ouOG>(A!5=FP0FVs6)qQEf3@_#n{1(-dJpMH!dHbIqM(fC;=VpSy4No{G zV~+g4=Uovp26> zDo8WuVBE=;a&44wXr>vvc3~|_ypv<6?Yui9_13VIJYLaf)iG`ycqKeGejRjKHqbSo zfv7(iji#sdC$dHz_F|ks5Vz6*nRMt-3MJxc6y0#uSFWLwC)YRq3UoQr9cT>HAkE+r z3Qbl_f(oMgAm=Uv7M*E98tQm$cGM{$O%dXOP)5n+OXWLhc)x^kpb13n%(|kdVlSpH zxyh+Q_Sf^`%n$bfQA+We{*0L%EX`tr(mIae{p^L7tF{zWjaJnNc3L!NU`d;?)B2?? zX?`Gj60BPIhKi8g(vofXq^0HiM|?5=qX(NdSJ(9MHQ~lj1j=T$J$mTx8SS#F_ihxf zx=MvPn)N^K%(czxcm&yt^pryQSaW1v;g|J^Cfl+$il*&6k!}?n0KDU7H*5e7+6;5B z5U1-prZlb){c86&`Q1)J;SLV+jFR!d>ebL98J~>5nPc(wWlq( zx#V(HJJ_wsVV2JAb3bqfa&W$rGwvZCCsg}KD6#E8#yk!xUT1_F0@YBDv(tbW*mhOog%;A zVMXBN*nx5R#D&K82~Go9=92_p>faWm2%tQL{7LW#8s_;%_Kr*0N@z+l0bcNQxPH}# zn&3ZN4=*{EXgQXcGXVVUM(KhI6%Q%_CTd8GUZmRJhW%p=z~!HmtM_}MA`a$#VHJaj znkW51&&S|I_yYad@oR47J<(d-ExSaTE&@iv?6PA*qzM?Y6MFro5 z<)#L5IH~OKgQwKO5DH?H@6Fed6&X*T(eATCcOlJhXWxwdeeP3$FNP8|5n9&V2>RQGILD;HH=W z!KqW|fnt}QVEt4NGtwx0`Jc}gR%LpN_-DWMrI22QZC+lD7xL6kR>du z>P^dy$2pn5xg)(g_P!kX22P~a{TXkILYWzu6l|kmE>Q_@`A@0oeb3k`g-kAg##(D; zesfElVVXOE#y|u^qU!Oho6Z!dA{NEciPIvDiVX-?TC!n|?6 z5BoXD$!)qs&iJk1lr8f7-%jNnLFaK5JXmv7yS=bdE;}QY5GFu#tbu<< zNin;ai~0d^VAJMe34aGxJ5DQc-tmlM=~lZW!w3~XZ?pO^7S+FVLOuRj|*ZVV4nY+n}YBIP(^dk%3!?tzy{O>&h^TrWB7 zNTlUvWv;%xbh;23S6e{5AETgGDf?5S?6L%>Qo)9+c7z>Qyu*o13Cki>qKS&=+zaKl zVMT}KefX67C-wYiJV*tqp?x!?l3}wqK}J-p8YV;&mRd_;?*O?HYMe2q!?(@Mse@bQ z9lO|ykLn4Vzo8UJJpn4RiTPlJoOxzX{Z;!Ske?=u!PtSZHSc6fH!9}NlOSG0vwjJ- zoZCepLGEbf0zLzFbC>|`1=H&#xzU4vU_MVmz7FotP0d&;65#3v9|eE@X<~cX+RR2f ztKIzKVq~P|L{CiLT3_Ks(gpX-dD3@0NGbVDtUwA9;u8&JKvg>3w{2dYCu15>xd}aK zs3E-V;qdugo;ejU$=>7E9C;mE2OHILKXBD72Z1}VAy_gw4LVLq`Xj%vUg~c6B&RZb{3@hx5{EQ1 zOd>`xm+i_0y;rCtX{eEvCllY*%i^Z$4*+*g7E_ml0MGM5I10UoN>B7mSgu`EaqjbC zu~vmMnQ)Ctm)8Ib6SyQN_35|k`2CTIElaLXieG3)!*8pPslelv?pj)XV3zsf+skL| z?zazXR=&E!G!T>wpcqCjtJaSzT4y%-_1oMKs;}=d-iCcvg;Te?zt{;}^k;X&19L;q ziiUGvJt}BA-s=V<1E*EfQ6J$yPIEoEd$=ysiEf7yk@rfBRR5DZ44(Q`DN z23#fbm+9JL00F`nW=ayDKG}j|UZ;M_z;kv^3di_!&K^6#Dh*YS zjI}U>rc$vwDsI%;--`UBK%nWAgAE@@9s z`#*b&%r+a8X>u_p1@vi|1s^2JI@i%d!&LOqXg8vaQ#=aWe3C7 zl!_i-_(S^vvH~0LG`(x=_SrE9lehA(vYjE@eaEDnLJ|@=M`WdT$i4jmiTL?RQ|n4c z3peyA)*z_ITwy%zsR3WrA3nCn7jeX*DP<%KGUH(qi^*3}gqXRPI0&L_w?(s}A5K^_>E5&eTo}^MGhF=|B3}*eVF` zV`D%V>W9k54ZQhK`v zgM6>FwxExDqa$}446OpUTq@He1xSl3sPD6g(?Hps>~BYd!%_tD8nvOJ0_BfKCX#oL zcT;KED|R(mr`fi;vb#0cCl5FE(ti)xlm~%N_BD?KOMsaaCG|JuMkBW2+g=^>AswD} z8sqBw9ituf#VOrc7vcvL2ZlTY@ASPzJiR{t-r}cx#3}4ZTE2rY``2)`{WW<>SrV?W1s5S+l5&W(YtAmCy&F@H}qW7D6ur5kSD$?Mi(Rz z%u%o)B#=q)IK1KyH}PC&L}@{(C6?B9I+2wXJM3z(%ae?_S~Lv;SG@jm3ofEHj$x12 zh`76Ml&~W&@Q;{-_w|I`cU&eaPK≀-2PVwZ%V_MK51L3r6IACr{Pp#dk{w#x-JRkmld%p15oQ)cN&wqUFVzkchtG%D&{ zfS*VB=%H#g$r6eVh{6!hOJkiY*4(x|{L<2BKvi(N9dHYARu)Kdy6(Gq^0-@up>YDJ zx;V3CJ!fN!%3*D;CVD(CeZ@Oce=~ir?{5JRF|CHo6S>$AYgme>7QWxSH$PPe(crRl zTe;_W*$K#V3DlUW*-x!cBG_OrRJMdFp{!l)8@5v7Vw;8!xRip+%sf(Jy5`y##iE;r9dr`p7hZt5oIM`sEAq#rBi4XGY4X!Be1 zb-njM#?l$x*G`fp4F)5(^%l}TglKoQGZXZ)d&dsImY$7$9M6^hP(5{@(Lz7SM#M(n z!kbsqO);;(=!%s$$!%2sTtkUofZ$+H5V&4ZE*(Sv#m?o5hPG;TV-}5xhKBZ*KZxl6 b$0dUumq~2fU9kye3{6R1U9L>lH0XZ-{q|{& From 27a8cf8dad898437e8b1c4967607828cadfa8530 Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 10:51:00 +0000 Subject: [PATCH 216/386] fix --- .../OneBuy/src/Resources/views/product-detail.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index c1b08a601..ed72e1f65 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -287,7 +287,7 @@ function getQueryParameterTop(param) {

@lang('onebuy::app.product.order.Secure Checkout')
- +
$package_product) { ?> From db0a3038afb43641eccd17a6c0af7b4a4980320c Mon Sep 17 00:00:00 2001 From: Steve Date: Thu, 22 Feb 2024 12:50:56 +0000 Subject: [PATCH 217/386] fix many --- .../Http/Controllers/ProductV2Controller.php | 4 ++ .../OneBuy/src/Resources/lang/de/app.php | 8 ++-- .../views/footer-container-de.blade.php | 2 +- .../views/footer-container-es.blade.php | 2 +- .../views/footer-container-fr.blade.php | 2 +- .../views/footer-container-gb.blade.php | 2 +- .../views/footer-container-us.blade.php | 2 +- .../src/Resources/views/payments.blade.php | 8 +--- .../Resources/views/product-detail.blade.php | 43 +++++++++++++------ 9 files changed, 46 insertions(+), 27 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index f00c86291..79d0afd3f 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -227,6 +227,10 @@ public function detail($slug, Request $request) { $product_category_id = intval($product_category); } + // $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); + // $attributes = $productViewHelper->getConfigurationConfig($product); + // var_dump($attributes); + if(empty($product_attributes)) { $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index d5fcc6b7b..047d5669a 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -19,10 +19,10 @@ 'complete_secure_purchase' => 'Jetzt bezahlen', ], 'step' => [ - 'Select Quantity' => 'Wählen Sie die Menge', - 'Payment' => 'Zahlung', - 'Shipping Information' => 'Versand', - 'Place Order' => 'Bestellung aufgeben', + 'Select Quantity' => 'Produkt', + 'Payment' => 'Attribute', + 'Shipping Information' => 'Lieferanschrift', + 'Place Order' => 'Zahlung', ], "order" => [ 'Express Checkout' => 'Express-Kaufabwicklung', diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php index f820ae6f7..8b77a9daf 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-de.blade.php @@ -41,7 +41,7 @@ Impressum
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php index f820ae6f7..8b77a9daf 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-es.blade.php @@ -41,7 +41,7 @@ Impressum
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php index f820ae6f7..252252f18 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-fr.blade.php @@ -41,7 +41,7 @@ Impressum
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php index a0fe139b0..63bf8c69b 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php @@ -41,7 +41,7 @@
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php index a0fe139b0..63bf8c69b 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-us.blade.php @@ -41,7 +41,7 @@
diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php index 38ee7ba47..c787624ac 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/payments.blade.php @@ -26,11 +26,9 @@
-

-

+
@lang('onebuy::app.product.payment.klarna.description')
-

@@ -59,11 +57,9 @@
-

-

+
@lang('onebuy::app.product.payment.paypal.description')
-

diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index ed72e1f65..7a02b9339 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -186,6 +186,10 @@ function getQueryParameterTop(param) {
+
+ + +
-
+
@lang("onebuy::app.product.Savings")
-
+
@lang("onebuy::app.product.piece")
From f5565971d04f6348d600e5a1cb87836a618cb125 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 08:02:34 +0000 Subject: [PATCH 239/386] fix --- packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php index 3a4c604d4..7feedb4af 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php @@ -66,7 +66,7 @@ 'Item' => 'Article', 'SELECT YOUR' => 'CHOISISSEZ LE VÔTRE', 'All transactions are secure and encrypted' => 'Toutes les transactions sont sécurisées et cryptées', - 'Hatmeo offers 30' => "Hatme offre une garantie de 30 jours sur tous les achats non utilisés. Renvoyez-nous simplement le ou les articles dans leur emballage d'origine et recevez un remboursement complet ou un remplacement, moins les frais d'expédition.", + 'Hatmeo offers 30' => "Botma offre une garantie de 30 jours sur tous les achats non utilisés. Renvoyez-nous simplement le ou les articles dans leur emballage d'origine et recevez un remboursement complet ou un remplacement, moins les frais d'expédition.", ], 'footer' => [ 'Shipping Delivery' => 'expédition', From 775dc2455b22411f28a8a479d24b1149504691d2 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 08:29:06 +0000 Subject: [PATCH 240/386] fix lang --- packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php index d3be031cc..ba7fad9aa 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php @@ -64,7 +64,7 @@ 'Subtotal' => 'Subtotal', '30 DAY GUARANTEE' => '30 DAY GUARANTEE', 'What customers are saying about' => 'What customers are saying about', - 'Frequently Asked Questions' => 'Frequently Asked Questions', + 'Frequently Asked Questions' => 'Answers to Common Questions', 'JUST NOW' => 'JUST NOW', 'COMPLETE SECURE PURCHASE' => 'COMPLETE SECURE PURCHASE', 'Item' => 'Item', From eeccbbd37d847fed9a46eb6380d7e4f68babbb28 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 09:12:26 +0000 Subject: [PATCH 241/386] fix the shopify sync --- .../Shopify/src/Console/Commands/Product/Get.php | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 687765ed9..0d11ad0e0 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -66,10 +66,6 @@ public function __construct( $this->shopify_store_id = config('shopify.shopify_store_id'); $this->lang = config('shopify.store_lang'); $this->category_id = 9; - - - - parent::__construct(); } @@ -80,12 +76,13 @@ public function __construct( */ public function handle() { - $shopify_pro_id = $this->option('prod_id'); if(empty($shopify_pro_id)) { $this->error("prod id is empty"); return false; } + $this->info($this->lang); + //exit; // locales $this->locales = core()->getAllLocales()->pluck('code')->toArray(); @@ -194,16 +191,16 @@ public function syncProductToLocal($shopify_pro_id) { if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; if(strpos($option['name'], "尺码") !==false) $attr_id = 24; if(strpos($option['name'], "Length") !==false) $attr_id = 24; + if(strpos($option['name'], "größe") !==false) $attr_id = 24; if(strpos($option['name'], "Color") !==false) $attr_id = 23; if(strpos($option['name'], "color") !==false) $attr_id = 23; if(strpos($option['name'], "Couleur") !==false) $attr_id = 23; if(strpos($option['name'], "颜色") !==false) $attr_id = 23; if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; - //var_dump($option['name'], $attr_id); exit; - //if($option['position']==2) $attr_id = 24; + if(strpos($option['name'], "farbe") !==false) $attr_id = 23; + if(empty($attr_id)) { - $this->error(json_encode($item)); - Log::info(json_encode($item)); + $this->error($option['name']); $error = 1; continue; //exit; From 96072a8fe9099a0273676f357613696be5869b5b Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 09:16:32 +0000 Subject: [PATCH 242/386] fix lang --- packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 0d11ad0e0..c1b0f62d3 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -189,6 +189,7 @@ public function syncProductToLocal($shopify_pro_id) { if(strpos($option['name'], "Size")!==false) $attr_id = 24; if(strpos($option['name'], "size")!==false) $attr_id = 24; if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; + if(strpos($option['name'], "grÖsse")!==false) $attr_id = 24; if(strpos($option['name'], "尺码") !==false) $attr_id = 24; if(strpos($option['name'], "Length") !==false) $attr_id = 24; if(strpos($option['name'], "größe") !==false) $attr_id = 24; From ef89c568cebdbafdf799549e4c8fcaf20a8cd63f Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 09:20:53 +0000 Subject: [PATCH 243/386] fix lang --- packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php | 2 +- packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php | 2 +- packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php | 2 +- packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php | 2 +- .../OneBuy/src/Resources/views/product-detail.blade.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index e32917d0c..b522716cf 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -66,7 +66,7 @@ 'Item' => 'Produkt', 'SELECT YOUR' => '', 'All transactions are secure and encrypted' => 'Alle Transaktionen sind sicher und verschlüsselt', - 'Hatmeo offers 30' => 'Hatme bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', + 'Hatmeo offers 30' => ' bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', ], 'footer' => [ 'Shipping Delivery' => 'Versand & Lieferung', diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php index ba7fad9aa..66a83d9ef 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/en/app.php @@ -70,7 +70,7 @@ 'Item' => 'Item', 'SELECT YOUR' => 'SELECT YOUR', 'All transactions are secure and encrypted' => 'All transactions are secure and encrypted', - 'Hatmeo offers 30' => 'YooJe offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', + 'Hatmeo offers 30' => 'offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', ], 'footer' => [ 'Shipping Delivery' => 'Shipping Delivery', diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php index 435485011..c69c0826c 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php @@ -63,7 +63,7 @@ 'Item' => 'Item', 'SELECT YOUR' => 'SELECT YOUR', 'All transactions are secure and encrypted' => 'All transactions are secure and encrypted', - 'Hatmeo offers 30' => 'Hatmeo offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', + 'Hatmeo offers 30' => ' offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', ], 'footer' => [ 'Shipping Delivery' => 'Envío y Entrega', diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php index 7feedb4af..7995b85c8 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/fr/app.php @@ -66,7 +66,7 @@ 'Item' => 'Article', 'SELECT YOUR' => 'CHOISISSEZ LE VÔTRE', 'All transactions are secure and encrypted' => 'Toutes les transactions sont sécurisées et cryptées', - 'Hatmeo offers 30' => "Botma offre une garantie de 30 jours sur tous les achats non utilisés. Renvoyez-nous simplement le ou les articles dans leur emballage d'origine et recevez un remboursement complet ou un remplacement, moins les frais d'expédition.", + 'Hatmeo offers 30' => "offre une garantie de 30 jours sur tous les achats non utilisés. Renvoyez-nous simplement le ou les articles dans leur emballage d'origine et recevez un remboursement complet ou un remplacement, moins les frais d'expédition.", ], 'footer' => [ 'Shipping Delivery' => 'expédition', diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index 895afb5cb..a179e3708 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -590,7 +590,7 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.order.30 DAY GUARANTEE'): - @lang('onebuy::app.product.order.Hatmeo offers 30')
+@lang('onebuy::app.product.brand') @lang('onebuy::app.product.order.Hatmeo offers 30')
From b1e97842a634729c7d5f140f1047594b6569d985 Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 09:21:22 +0000 Subject: [PATCH 244/386] fix lang --- packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php index b522716cf..2c848029e 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/de/app.php @@ -66,7 +66,7 @@ 'Item' => 'Produkt', 'SELECT YOUR' => '', 'All transactions are secure and encrypted' => 'Alle Transaktionen sind sicher und verschlüsselt', - 'Hatmeo offers 30' => ' bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', + 'Hatmeo offers 30' => 'bietet eine 30-tägige Garantie auf alle unbenutzten Einkäufe. Senden Sie den/die Artikel einfach in der Originalverpackung an uns zurück und erhalten Sie eine volle Rückerstattung oder einen Ersatz, abzüglich Versandkosten.', ], 'footer' => [ 'Shipping Delivery' => 'Versand & Lieferung', From e9df81efdf3f624050e856bebcbfbfdb5e7094ba Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 09:35:52 +0000 Subject: [PATCH 245/386] fix add es --- .../OneBuy/src/Resources/lang/es/app.php | 99 ++++++++++--------- 1 file changed, 51 insertions(+), 48 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php index c69c0826c..42b0553da 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/lang/es/app.php @@ -1,69 +1,72 @@ [ + 'Savings' => 'Savings', + 'piece' => 'piece', + 'brand' => 'YooJe', 'payment' => [ 'creditCard' => [ - 'title' => 'Credit card', - 'card_number' => 'Card number', - 'Expiry' => 'Expiry', + 'title' => 'Tarjeta de crédito', + 'card_number' => 'Número de tarjeta', + 'Expiry' => 'Expiración', 'cvc' => 'CVC', ], 'paypal' => [ 'title' => 'PayPal', - 'description' => 'After you click “Pay with PayPal,” you will be redirected to PayPal to safely complete your purchase.' + 'description' => 'Después de hacer clic en "Pagar con PayPal", será redirigido a PayPal para completar su compra de forma segura.' ], 'klarna' => [ 'title' => 'klarna', - 'description' => 'After you click “Pay Now”, you will be redirected to Klarna to safely complete your purchase.' + 'description' => 'Después de hacer clic en "Pagar ahora", será redirigido a Klarna para completar su compra de forma segura.' ], - 'complete_secure_purchase' => 'COMPLETELY SAFE PURCHASE', + 'complete_secure_purchase' => 'COMPRA COMPLETAMENTE SEGURA', ], 'step' => [ - 'Select Quantity' => 'Select Quantity', - 'Payment' => 'Payment', - 'Shipping Information' => 'Shipping Information', - 'Place Order' => 'Place Order', + 'Select Quantity' => 'Selecciona la cantidad', + 'Payment' => 'Pago', + 'Shipping Information' => 'Información de envío', + 'Place Order' => 'Realizar pedido', ], "order" => [ - 'Express Checkout' => 'Express Checkout', - 'Secure Checkout' => 'Secure Checkout', - 'RECOMMENDED DEAL' => 'RECOMMENDED DEAL', - 'Shipping' => 'Shipping', - 'Or Pay With Credit Card' => 'Or Pay With Credit Card', - 'Credit Card Information' => 'Credit Card Information', - 'Your Card Info is invaild' => 'Your Card Info is invaild', - 'GUARANTEED' => 'GUARANTEED', - 'SAFE' => 'SAFE', - 'CHECKOUT' => 'CHECKOUT', - 'Enter your contact information' => 'Enter your contact information', - 'Street Address' => 'Street Address', - 'Phone Number' => 'Phone Number', - 'Last Name' => 'Last Name', - 'First Name' => 'First Name', - 'Email' => 'Email', - 'City' => 'City', - 'Country' => 'Country', - 'State/Province' => 'State/Province', - 'Zip/Postal Code' => 'Zip/Postal Code', - 'Order Summary' => 'Order Summary', - 'EDIT' => 'EDIT', - 'QTY' => 'QTY', - 'Refund policy' => 'Refund policy', - 'Privacy Policy' => 'Privacy Policy', + 'Express Checkout' => 'Chequeo rápido', + 'Secure Checkout' => 'Pago seguro', + 'RECOMMENDED DEAL' => 'OFERTA RECOMENDADA', + 'Shipping' => 'Envío', + 'Or Pay With Credit Card' => 'O pagar con tarjeta de crédito', + 'Credit Card Information' => 'Información de tarjeta de crédito', + 'Your Card Info is invaild' => 'La información de su tarjeta no es válida', + 'GUARANTEED' => 'GARANTIZADA', + 'SAFE' => 'SEGURO', + 'CHECKOUT' => 'VERIFICAR', + 'Enter your contact information' => 'Ingrese su información de contacto', + 'Street Address' => 'Dirección', + 'Phone Number' => 'Número de teléfono', + 'Last Name' => 'Apellido', + 'First Name' => 'Nombre de pila', + 'Email' => 'Correo electrónico', + 'City' => 'Ciudad', + 'Country' => 'País', + 'State/Province' => 'Provincia del estado', + 'Zip/Postal Code' => 'Código Postal/Código Postal', + 'Order Summary' => 'Resumen del pedido', + 'EDIT' => 'EDITAR', + 'QTY' => 'CANTIDAD', + 'Refund policy' => 'Politica De Reembolso', + 'Privacy Policy' => 'Política De Privacidad', 'Total' => 'Total', - 'Coupon' => 'Coupon', - 'Shipping Insurance' => 'Shipping Insurance', - 'Discount' => 'Discount', - 'Subtotal' => 'Subtotal', - '30 DAY GUARANTEE' => '30 DAY GUARANTEE', - 'What customers are saying about' => 'What customers are saying about', - 'Frequently Asked Questions' => 'Frequently Asked Questions', - 'JUST NOW' => 'JUST NOW', - 'COMPLETE SECURE PURCHASE' => 'COMPLETE SECURE PURCHASE', - 'Item' => 'Item', - 'SELECT YOUR' => 'SELECT YOUR', - 'All transactions are secure and encrypted' => 'All transactions are secure and encrypted', - 'Hatmeo offers 30' => ' offers a 30-day guarantee on all unused purchases. Simply return the item(s) to us in the original packaging and receive a full refund or replacement, less shipping costs.', + 'Coupon' => 'Cupón', + 'Shipping Insurance' => 'Seguro de envió', + 'Discount' => 'Descuento', + 'Subtotal' => 'Total parcial', + '30 DAY GUARANTEE' => 'GARANTÍA DE 30 DÍAS', + 'What customers are saying about' => 'Lo que dicen los clientes sobre', + 'Frequently Asked Questions' => 'Preguntas frecuentes', + 'JUST NOW' => 'EN ESTE MOMENTO', + 'COMPLETE SECURE PURCHASE' => 'COMPRA SEGURA COMPLETA', + 'Item' => 'Artículo', + 'SELECT YOUR' => 'SELECCIONA TU', + 'All transactions are secure and encrypted' => 'Todas las transacciones son seguras y encriptadas', + 'Hatmeo offers 30' => ' ofrece una garantía de 30 días en todas las compras no utilizadas. Simplemente devuélvanos los artículos en el embalaje original y reciba un reembolso completo o un reemplazo, menos los costos de envío.', ], 'footer' => [ 'Shipping Delivery' => 'Envío y Entrega', From 57c315846255383e6fa1f8e2397eeb3622a9e9ac Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 10:03:10 +0000 Subject: [PATCH 246/386] fix the brand --- packages/Nicelizhi/OneBuy/src/Config/onebuy.php | 1 + .../OneBuy/src/Http/Controllers/ProductController.php | 3 ++- .../OneBuy/src/Resources/views/product-detail.blade.php | 2 +- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php index ea203e2db..8e5f3bdc4 100644 --- a/packages/Nicelizhi/OneBuy/src/Config/onebuy.php +++ b/packages/Nicelizhi/OneBuy/src/Config/onebuy.php @@ -3,6 +3,7 @@ 'countries' => env('ONEBUY_COUNTRIES'), 'lang' => env('ONEBUY_DEFAULT_LANG'), 'default_country' => env('ONEBUY_DEFAULT_COUNTRY'), + 'brand' => env('ONEBUY_BRAND', 'Hatme'), 'airwallex' => [ 'method' => [ 'card', diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 3e5df7d83..26e7a1890 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -306,10 +306,11 @@ public function detail($slug, Request $request) { $payments = config('onebuy.payments'); // config the payments status $payments_default = config('onebuy.payments_default'); + $brand = config('onebuy.brand'); //var_dump($default_country);exit; - return view('onebuy::product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default')); + return view('onebuy::product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default','brand')); } public function cms($slug, Request $request) { diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index a179e3708..9ff87e61a 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -590,7 +590,7 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.order.30 DAY GUARANTEE'): -@lang('onebuy::app.product.brand') @lang('onebuy::app.product.order.Hatmeo offers 30')
+ @lang('onebuy::app.product.order.Hatmeo offers 30')
From db5ee660d7bf4f330151f070c324f8b8eeca06db Mon Sep 17 00:00:00 2001 From: Steve Date: Fri, 23 Feb 2024 10:06:30 +0000 Subject: [PATCH 247/386] fix en --- .../OneBuy/src/Resources/views/footer-container-gb.blade.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php index 63bf8c69b..98e68e731 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/footer-container-gb.blade.php @@ -1,6 +1,6 @@ @@ -394,7 +394,7 @@ function getQueryParameterTop(param) {
@lang('onebuy::app.product.order.Credit Card Information'):
- +
- +
@@ -596,13 +596,13 @@ function getQueryParameterTop(param) { @lang('onebuy::app.product.order.Privacy Policy') .
- +
@lang('onebuy::app.product.order.30 DAY GUARANTEE'): - @lang('onebuy::app.product.order.Hatmeo offers 30')
+ @lang('onebuy::app.product.order.Hatmeo offers 30')
@@ -748,7 +748,7 @@ function getQueryParameterTop(param) { .
- +
@@ -761,7 +761,7 @@ function getQueryParameterTop(param) {
- + From 0ff7c18c8bb11c0bd03b20827c33a5ec1080dd78 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Feb 2024 15:14:51 +0000 Subject: [PATCH 257/386] fix upgrade --- app/Console/Kernel.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index ece352b1e..19c99ec2e 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -24,8 +24,10 @@ class Kernel extends ConsoleKernel */ protected function schedule(Schedule $schedule) { - $schedule->command('invoice:cron')->dailyAt('3:00'); - $schedule->command('product:index --type=price')->dailyAt('24:00'); + # $schedule->command('invoice:cron')->dailyAt('3:00'); + # $schedule->command('product:index --type=price')->dailyAt('23:59'); + $schedule->command('shopify:order:post')->everyFiveMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每五分钟投递一次 + $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping(); // shopify 订单同步 1个小时同步一次 } /** From 727123dd1a2cc51dc2169bbab814a4bbbab58f84 Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Feb 2024 15:19:21 +0000 Subject: [PATCH 258/386] disable the shopify order get --- app/Console/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 19c99ec2e..54c47d502 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -27,7 +27,7 @@ protected function schedule(Schedule $schedule) # $schedule->command('invoice:cron')->dailyAt('3:00'); # $schedule->command('product:index --type=price')->dailyAt('23:59'); $schedule->command('shopify:order:post')->everyFiveMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每五分钟投递一次 - $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping(); // shopify 订单同步 1个小时同步一次 + # $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping(); // shopify 订单同步 1个小时同步一次 } /** From 63537d794017b46faa0e4838329017c9f11ec46e Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 24 Feb 2024 15:22:57 +0000 Subject: [PATCH 259/386] change the shopify order post --- app/Console/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 54c47d502..1350d93cf 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,7 +26,7 @@ protected function schedule(Schedule $schedule) { # $schedule->command('invoice:cron')->dailyAt('3:00'); # $schedule->command('product:index --type=price')->dailyAt('23:59'); - $schedule->command('shopify:order:post')->everyFiveMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每五分钟投递一次 + $schedule->command('shopify:order:post')->everyThirtyMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每三十分钟投递一次 # $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping(); // shopify 订单同步 1个小时同步一次 } From e8e726f691c8bd6994a2d54baa79df05815b8997 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 25 Feb 2024 11:43:35 +0000 Subject: [PATCH 260/386] product cacche --- .../OneBuy/src/Http/Controllers/ProductController.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 26e7a1890..5024e7b62 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -971,8 +971,10 @@ private function makeProducts($product, $nums = array()) { //var_dump($product->id);exit; $cache_key = "product_ext_".$product->id."_".count($nums); $package_products = Cache::get($cache_key); + + $shipping_price_key = "shipping_price"; - if(true) { + if(empty($package_products)) { //if(empty($package_products)) { //if($package_products) { $package_products = []; From bbb46850e9f8220e065fe2f1314141b687e9f2e4 Mon Sep 17 00:00:00 2001 From: Steve Date: Sun, 25 Feb 2024 11:50:58 +0000 Subject: [PATCH 261/386] fix the shipping price --- .../src/Http/Controllers/ProductController.php | 8 +++++++- .../src/Http/Controllers/ProductV2Controller.php | 14 +++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 5024e7b62..aff6f78d6 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -973,6 +973,12 @@ private function makeProducts($product, $nums = array()) { $package_products = Cache::get($cache_key); $shipping_price_key = "shipping_price"; + $shipping_price = Cache::get($shipping_price_key); + if(empty($shipping_price)) { + //core()->getConfigData('sales.payment_methods.airwallex.apikey'); + $shipping_price = core()->getConfigData('sales.carriers.flatrate.default_rate'); + Cache::put($shipping_price_key, $shipping_price, 36000); + } if(empty($package_products)) { //if(empty($package_products)) { @@ -1014,7 +1020,7 @@ private function makeProducts($product, $nums = array()) { $package_product['tip1'] = $tip1_price."% "; $tip2_price = round($package_product['new_price'] / $i, 2); $package_product['tip2'] = core()->currency($tip2_price)."/"; - $package_product['shipping_fee'] = 9.99; + $package_product['shipping_fee'] = $shipping_price; // shipping price $popup_info['name'] = null; $popup_info['old_price'] = null; $popup_info['new_price'] = null; diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 90d2e06b5..647d05d12 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -1002,9 +1002,17 @@ private function makeProducts($product, $nums = array()) { //var_dump($product->id);exit; $cache_key = "product_ext_".$product->id."_".count($nums); $package_products = Cache::get($cache_key); + + $shipping_price_key = "shipping_price"; + $shipping_price = Cache::get($shipping_price_key); + if(empty($shipping_price)) { + //core()->getConfigData('sales.payment_methods.airwallex.apikey'); + $shipping_price = core()->getConfigData('sales.carriers.flatrate.default_rate'); + Cache::put($shipping_price_key, $shipping_price, 36000); + } - if(true) { - //if(empty($package_products)) { + //if(true) { + if(empty($package_products)) { //if($package_products) { $package_products = []; $productBaseImage = product_image()->getProductBaseImage($product); @@ -1043,7 +1051,7 @@ private function makeProducts($product, $nums = array()) { $package_product['tip1'] = $tip1_price."% Savings"; $tip2_price = round($package_product['new_price'] / $i, 2); $package_product['tip2'] = core()->currency($tip2_price)."/piece"; - $package_product['shipping_fee'] = 9.99; + $package_product['shipping_fee'] = $shipping_price; $popup_info['name'] = null; $popup_info['old_price'] = null; $popup_info['new_price'] = null; From c0294a96c7ac94647c31b91e05f48a36fb136681 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 26 Feb 2024 01:01:27 +0000 Subject: [PATCH 262/386] fix the data between --- app/Console/Kernel.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 1350d93cf..1809bbb0a 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -26,8 +26,8 @@ protected function schedule(Schedule $schedule) { # $schedule->command('invoice:cron')->dailyAt('3:00'); # $schedule->command('product:index --type=price')->dailyAt('23:59'); - $schedule->command('shopify:order:post')->everyThirtyMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每三十分钟投递一次 - # $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping(); // shopify 订单同步 1个小时同步一次 + $schedule->command('shopify:order:post')->everyFiveMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每三十分钟投递一次 + $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping()->between('9:00', '19:00');; // shopify 订单同步 1个小时同步一次 } /** From 748c98bfbaee18c3db634a75ca0a13f66d5dcec4 Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 26 Feb 2024 01:05:54 +0000 Subject: [PATCH 263/386] add time zone --- app/Console/Kernel.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 1809bbb0a..cdcfeed4c 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -27,7 +27,7 @@ protected function schedule(Schedule $schedule) # $schedule->command('invoice:cron')->dailyAt('3:00'); # $schedule->command('product:index --type=price')->dailyAt('23:59'); $schedule->command('shopify:order:post')->everyFiveMinutes()->withoutOverlapping(); // 投递成功的订单到shopify ,每三十分钟投递一次 - $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping()->between('9:00', '19:00');; // shopify 订单同步 1个小时同步一次 + $schedule->command('shopify:order:get --force=true')->hourly()->withoutOverlapping()->timezone('Asia/Shanghai')->between('9:00', '19:00');; // shopify 订单同步 1个小时同步一次 } /** From 92ffeb88db9c516a1a74275896162f820d0eed1b Mon Sep 17 00:00:00 2001 From: Steve Date: Mon, 26 Feb 2024 01:12:38 +0000 Subject: [PATCH 264/386] fix the product detail --- .../Resources/views/product-detail.blade.php | 22 ++----------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php index a3fad042b..e1b858d44 100644 --- a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail.blade.php @@ -32,9 +32,6 @@ - - @@ -42,9 +39,6 @@ - - - - - -
@@ -502,9 +524,7 @@ @lang('onebuy::app.product.order.EDIT')
-
- -
+
@lang('onebuy::app.product.order.QTY'): @@ -513,6 +533,9 @@
+
  • + +
  • @@ -2389,7 +2412,7 @@ function changeOrderSummary() { console.log(currentValue); console.log(index); console.log(arr); - sku_html += products[index].attribute_name + " / " + products[index].amount + "
    "; + sku_html += products[index].attribute_name + " / " + products[index].amount + "
    "; }) $('.js-sku').html(sku_html); From d4ca65083be4f6e90ea9aa4392701d78a78be325 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 02:31:12 +0000 Subject: [PATCH 372/386] fix new sku for it --- .../Nicelizhi/Shopify/src/Console/Commands/Product/Get.php | 6 ++++-- .../Shopify/src/Console/Commands/Product/GetV2.php | 2 +- .../Shopify/src/Providers/ShopifyServiceProvider.php | 1 + 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 9edcd3222..36d0d39a9 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -30,7 +30,7 @@ class Get extends Command * * @var string */ - protected $description = 'Get Products List or a product shopify:product:get {--prod_id=} {--force=}'; + protected $description = 'Get Products List or a product shopify:product:get {--prod_id=} {--force=} color and size'; private $shopify_store_id = ""; @@ -308,6 +308,7 @@ public function syncProductToLocal($shopify_pro_id) { //var_dump(count($shopifyVariants)); $newShopifyVarants = []; + $compare_at_price = '0.00'; foreach($shopifyVariants as $sv => $shopifyVariant) { //var_dump($shopifyVariant); $newkey = $shopifyVariant['product_id']; @@ -332,6 +333,7 @@ public function syncProductToLocal($shopify_pro_id) { $newShopifyVarant['option1'] = $shopifyVariant['option1']; $newShopifyVarant['option2'] = $shopifyVariant['option2']; $newShopifyVarants[$newkey] = $newShopifyVarant; + $compare_at_price = $shopifyVariant['compare_at_price']; } //var_dump($newShopifyVarants);exit; @@ -371,7 +373,7 @@ public function syncProductToLocal($shopify_pro_id) { $categories[] = 5; $newVariant['categories'] = $categories; $newVariant['guest_checkout'] = 1; - $newVariant['compare_at_price'] = $item['compare_at_price']; + $newVariant['compare_at_price'] = $compare_at_price; $newVariants[$variant['id']] = $newVariant; } diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index 3d21a16a0..a59e75527 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -29,7 +29,7 @@ class GetV2 extends Command * * @var string */ - protected $description = 'Get Products List V2 {--prod_id=}'; + protected $description = 'Get Products List V2 shopify:product:getv2 {--prod_id=} 1个属性内容'; private $shopify_store_id = ""; diff --git a/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php b/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php index 45e1b49f4..2535a8399 100644 --- a/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php +++ b/packages/Nicelizhi/Shopify/src/Providers/ShopifyServiceProvider.php @@ -87,6 +87,7 @@ protected function registerCommands(): void $this->commands([ \Nicelizhi\Shopify\Console\Commands\Product\Get::class, \Nicelizhi\Shopify\Console\Commands\Product\GetV2::class, + \Nicelizhi\Shopify\Console\Commands\Product\GetV3::class, \Nicelizhi\Shopify\Console\Commands\Product\Post::class, \Nicelizhi\Shopify\Console\Commands\Product\Put::class, \Nicelizhi\Shopify\Console\Commands\Product\Delete::class, From 259aa67cb9289f40e1d3121571756d7cfa49bfd0 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 02:31:59 +0000 Subject: [PATCH 373/386] fix new sku for it --- .../src/Console/Commands/Product/GetV3.php | 582 ++++++++++++++++++ 1 file changed, 582 insertions(+) create mode 100644 packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php new file mode 100644 index 000000000..f2fe99973 --- /dev/null +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php @@ -0,0 +1,582 @@ +shopify_store_id = config('shopify.shopify_store_id'); + $this->lang = config('shopify.store_lang'); + $this->category_id = 9; + parent::__construct(); + } + + /** + * Execute the console command. + * + * @return mixed + */ + public function handle() + { + $shopify_pro_id = $this->option('prod_id'); + if(empty($shopify_pro_id)) { + $this->error("prod id is empty"); + return false; + } + $force = $this->option('force'); + $this->info($this->lang); + //exit; + + // locales + $this->locales = core()->getAllLocales()->pluck('code')->toArray(); + + $client = new Client(); + + $shopifyStore = Cache::get("shopify_store_".$this->shopify_store_id); + + if(empty($shopifyStore)){ + $shopifyStore = $this->ShopifyStore->where('shopify_store_id', $this->shopify_store_id)->first(); + Cache::put("shopify_store_".$this->shopify_store_id, $shopifyStore, 3600); + } + + if(is_null($shopifyStore)) { + $this->error("no store"); + return false; + } + + $shopify = $shopifyStore->toArray(); + + $shopifyProduct = \Nicelizhi\Shopify\Models\ShopifyProduct::where("product_id", $shopify_pro_id)->first(); + if(!is_null($shopifyProduct) && $force) { + if($force==true) { + \Nicelizhi\Shopify\Models\ShopifyProduct::where("product_id", $shopify_pro_id)->delete(); + }else{ + $this->error($shopify_pro_id." have imported!"); + return false; + } + + } + //exit; + /** + * + * @link https://shopify.dev/docs/api/admin-rest/2023-10/resources/product#get-products?ids=632910392,921728736 + * + */ + $created_at_min = date("Y-m-d")."T00:00:00-00:00"; + $response = $client->get($shopify['shopify_app_host_name'].'/admin/api/2023-10/products.json?ids='.$shopify_pro_id.'&limit=10&fields=id,title,variants,options,images,product_type,body_html,tags,admin_graphql_api_id,collection_id', [ + 'headers' => [ + 'Content-Type' => 'application/json', + 'Accept' => 'application/json', + 'X-Shopify-Access-Token' => $shopify['shopify_admin_access_token'], + ] + ]); + + $body = json_decode($response->getBody(), true); + + $body = $response->getBody(); + //Log::info($body); + $body = json_decode($body, true); + //var_dump($body);exit; + foreach($body['products'] as $key=>$item) { + //var_dump($item['collection_id']);exit; + + $shopifyProduct = \Nicelizhi\Shopify\Models\ShopifyProduct::where("product_id", $item['id'])->first(); + if(is_null($shopifyProduct)) { + $shopifyProduct = new \Nicelizhi\Shopify\Models\ShopifyProduct(); + $item['product_id'] = $item['id']; + unset($item['id']); + $item['shopify_store_id'] = $this->shopify_store_id; + $shopifyProduct::create($item); + }else{ + //$shopifyProduct::where("product_id", $item['id'])->update($item); + } + } + + + $this->syncProductToLocal($shopify_pro_id); + + // 处理目录权限 + $this->Permissions(); + + } + + protected function Permissions() { + $local_image_path = "storage/product/"; + $path = public_path($local_image_path); + $execPath = "chown www:www ". $path."* -R"; + $this->error($execPath); + //exit; + exec($execPath); + } + + + + /** + * + * sync product to local product + * + */ + public function syncProductToLocal($shopify_pro_id) { + $items = \Nicelizhi\Shopify\Models\ShopifyProduct::where("shopify_store_id", $this->shopify_store_id)->where("product_id", $shopify_pro_id)->get(); + foreach($items as $key=>$item) { + // if($item['product_id']!='8126562107640') continue; + $this->info($item['product_id']); + $options = $item->options; + $shopifyVariants = $item->variants; + $shopifyImages = $item->images; + $color = []; + $size = []; + $error = 0; + + $shopifyImageMap = []; + foreach($shopifyImages as $key=>$shopifyImage) { + $shopifyImageMap[$shopifyImage['id']] = $shopifyImage['src']; + } + + //var_dump($shopifyImageMap); + + // skus add first + foreach($options as $kk => $option) { + $option['name'] = strtolower($option['name']); + $attr_id = 0; + if(strpos($option['name'], "Size")!==false) $attr_id = 24; + if(strpos($option['name'], "size")!==false) $attr_id = 24; + if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; + if(strpos($option['name'], "grÖsse")!==false) $attr_id = 24; + if(strpos($option['name'], "尺码") !==false) $attr_id = 24; + if(strpos($option['name'], "Length") !==false) $attr_id = 24; + if(strpos($option['name'], "größe") !==false) $attr_id = 24; + if(strpos($option['name'], "Color") !==false) $attr_id = 23; + if(strpos($option['name'], "color") !==false) $attr_id = 23; + if(strpos($option['name'], "Couleur") !==false) $attr_id = 23; + if(strpos($option['name'], "颜色") !==false) $attr_id = 23; + if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; + if(strpos($option['name'], "farbe") !==false) $attr_id = 23; + + if(empty($attr_id)) { + $this->error($option['name']); + $error = 1; + continue; + //exit; + } + $this->info("attr id ". $attr_id); + + $values = $option['values']; + foreach($values as $kky => $value) { + $this->info($value); + if($value==35 && $attr_id==23) { + var_dump($item);exit; + } + //ba_attribute_options + $attr_option = AttributeOption::where("attribute_id", $attr_id)->where("admin_name", $value)->first(); + if(is_null($attr_option)) { + $attr_option = new AttributeOption(); + $attr_option->attribute_id = $attr_id; + $attr_option->admin_name = $value; + $attr_option->save(); + $attribute_option_id = $attr_option->id; + }else{ + $attribute_option_id = $attr_option->id; + } + + //var_dump($attr_opt_tran);exit; + foreach($this->locales as $kl => $locale) { + $attr_opt_tran = AttributeOptionTranslation::where("attribute_option_id", $attribute_option_id)->where("locale", $locale)->first(); + if(is_null($attr_opt_tran)) { + $attr_opt_tran = new AttributeOptionTranslation(); + if($locale==$this->lang) { + $attr_opt_tran->label = $value; + } else{ + $attr_opt_tran->label = ""; + } + $attr_opt_tran->locale = $locale; + $attr_opt_tran->attribute_option_id = $attribute_option_id; + $attr_opt_tran->save(); + } + } + if($attr_id==23) $color[$attribute_option_id] = $attribute_option_id; //array_push($color, $attribute_option_id); + if($attr_id==24) $size[$attribute_option_id] = $attribute_option_id; + } + } + + if($error==1) continue; + + + + // add product + + $data = []; + $data['attribute_family_id'] = 1; + $data['sku'] = $item['product_id']; + $data['type'] = "configurable"; + $super_attributes['color'] = $color; + $super_attributes['size'] = $size; + $data['super_attributes'] = $super_attributes; + //$data['family'] = []; + + //var_dump($data);exit; + Event::dispatch('catalog.product.create.before'); + + // check product info + $product = $this->productRepository->where("sku", $item['product_id'])->first(); + if(is_null($product)) { + $product = $this->productRepository->create($data); + $id = $product->id; + }else{ + $id = $product->id; + } + Event::dispatch('catalog.product.create.after', $product); + + $updateData = []; + $updateData['product_number'] = ""; + $updateData['name'] = $item['title']; + $updateData['url_key'] = $item['product_id']; + $updateData['short_description'] = $item['title']; + $updateData['description'] = $item['title']; + $updateData['new'] = 1; + $updateData['featured'] = 1; + $updateData['visible_individually'] = 1; + $updateData['status'] = 1; + $updateData['guest_checkout'] = 1; + $updateData['channel'] = "default"; + $updateData['locale'] = $this->lang; + $categories[] = $this->category_id; + $updateData['categories'] = $categories; + + $updateData['description'] = $item['body_html']; + + $updateData['compare_at_price'] = $item['compare_at_price']; + + $variants = $variantCollection = $product->variants()->get()->toArray(); + + //var_dump(count($shopifyVariants)); + + $newShopifyVarants = []; + $compare_at_price = '0.00'; + $skuMap = []; + foreach($shopifyVariants as $sv => $shopifyVariant) { + //var_dump($shopifyVariant); + $newkey = $shopifyVariant['product_id']; + $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); + $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); + + if(is_null($color) || is_null($size)) { + $this->info("error"); + var_dump($color, $size, $shopifyVariant); + exit; + } + + $newkey .="_".$color->id."_".$size->id; + + $newShopifyVarant = []; + + $newShopifyVarant['id'] = $shopifyVariant['id']; + $newShopifyVarant['price'] = $shopifyVariant['price']; + $newShopifyVarant['title'] = $shopifyVariant['title']; + $newShopifyVarant['weight'] = $shopifyVariant['weight']; + $newShopifyVarant['sku'] = $shopifyVariant['sku']; + $newShopifyVarant['option1'] = $shopifyVariant['option1']; + $newShopifyVarant['option2'] = $shopifyVariant['option2']; + $newShopifyVarants[$newkey] = $newShopifyVarant; + if(!empty($shopifyVariant['compare_at_price'])) $compare_at_price = $shopifyVariant['compare_at_price']; + + //var_dump($shopifyImages); + $newShopifyVarant['image_src'] = $shopifyImageMap[$shopifyVariant['image_id']]; + $newShopifyVarant['sku_image_id'] = $shopifyVariant['image_id']; + + $skuMap[$shopifyVariant['id']] = $shopifyVariant['image_id']; + //var_dump($shopifyVariant,$newShopifyVarant);exit; + } + + //var_dump($compare_at_price); + + //var_dump($newShopifyVarants);exit; + + /** + * + * variants[440][sku]: 8007538966776-variant-1375-1376 + * variants[440][name]: Variant 1375 1376 + * variants[440][price]: 0.0000 + * variants[440][weight]: 0 + * variants[440][status]: 1 + * variants[440][color]: 1375 + * variants[440][size]: 1376 + * variants[440][inventories][1]: 0 + * + * + */ + $newVariants = []; + $newVariantsImageMap = []; // image maps; + foreach($variants as $k => $variant) { + //Log::info(json_encode($variant)); + //var_dump($variant); + $newkey = $item['product_id']."_".$variant['color']."_".$variant['size']; + if($variant['size']=='1403') { + //var_dump($variant);exit; + } + $this->info($newkey); + if(!isset($newShopifyVarants[$newkey])) continue; + //var_dump($newkey);exit; + $newVariant['sku'] = $item['product_id'].'-'.$newShopifyVarants[$newkey]['id']; + $newVariant['name'] = $newShopifyVarants[$newkey]['title']; + $newVariant['price'] = $newShopifyVarants[$newkey]['price']; + $newVariant['weight'] = "1000"; + $newVariant['status'] = 1; + $newVariant['color'] = $variant['color']; + $newVariant['size'] = $variant['size']; + $newVariant['inventories'][1] = 1000; + $categories[] = 5; + $newVariant['categories'] = $categories; + $newVariant['guest_checkout'] = 1; + $newVariant['compare_at_price'] = $compare_at_price; + $newVariants[$variant['id']] = $newVariant; + + //$newVariantsImageMap[$variant] + + //var_dump($newVariant); exit; + } + + //var_dump(count($newVariants));exit; + + $updateData['variants'] = $newVariants; + + // images + /** + * + * + * + * images[files][32]: + * images[files][]: (二进制) + * + * + */ + + $arrContextOptions=array( + "ssl"=>array( + "verify_peer"=>false, + "verify_peer_name"=>false, + ), + ); + // $images = []; + // foreach($shopifyImages as $key=>$shopifyImage) { + + // //var_dump($shopifyImage); + // $info = pathinfo($shopifyImage['src']); + + // //var_dump($shopifyImage); + + // $this->info($info['filename']); + + + // //var_dump($info);exit; + // $image_path = "product/".$id."/".$info['filename'].".webp"; + // $local_image_path = "storage/".$image_path; + // $this->info(public_path($local_image_path)); + // if(!file_exists(public_path($local_image_path))) { + // $this->error("copy [ ".$local_image_path); + // $this->info($shopifyImage['src']); + // //var_dump($shopifyImage['src'],"hello"); + // $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + // //var_dump($contents); + // Storage::disk("images")->put($local_image_path, $contents); + // sleep(1); + // //exit; + // //var_dump($local_image_path);exit; + // } + // $images[] = $image_path; + // } + + $product = $this->productRepository->update($updateData, $id); + + Event::dispatch('catalog.product.update.after', $product); + + //var_dump($shopifyImages);exit; + + foreach($shopifyImages as $key=>$shopifyImage) { + + //var_dump($shopifyImage); + $info = pathinfo($shopifyImage['src']); + + //var_dump($shopifyImage); + + $this->info($info['filename']); + + $image_path = "product/".$id."/".$info['filename'].".webp"; + $local_image_path = "storage/".$image_path; + $this->info(public_path($local_image_path)); + if(!file_exists(public_path($local_image_path))) { + $this->error("copy [ ".$local_image_path); + $this->info($shopifyImage['src']); + $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + Storage::disk("images")->put($local_image_path, $contents); + sleep(1); + } + $images[$shopifyImage['id']] = $image_path; + //var_dump($shopifyImage); + } + + //var_dump($images); + + //exit; + + foreach($images as $key=>$image) { + $checkImg = ProductImage::where("product_id", $id)->where("path", $image)->first(); + if(is_null($checkImg)) { + $checkImg = new ProductImage(); + $checkImg->product_id = $id; + $checkImg->path = $image; + $checkImg->type = "images"; + $checkImg->save(); + } + } + + //var_dump($skuMap);exit; + + //$variants = $variantCollection = $product->variants()->get()->toArray(); + + //更新对应的分类 + $sku_products = $this->productRepository->where("parent_id", $id)->get(); + foreach($sku_products as $key=>$sku) { + + $sku_code = explode('-',$sku->sku); + + //var_dump($sku_code);exit; + + $this->info("process ".$sku->id); + + Event::dispatch('catalog.product.create.after', $sku); + + $updateData = []; + + $updateData['new'] = 1; + $updateData['featured'] = 1; + $updateData['visible_individually'] = 1; + $updateData['status'] = 1; + $updateData['guest_checkout'] = 1; + $updateData['channel'] = "default"; + $updateData['locale'] = $this->lang; + $categories[] = $this->category_id; + $updateData['categories'] = $categories; + + $this->productRepository->update($updateData, $sku->id); + + Event::dispatch('catalog.product.update.after', $sku); + + $images = []; + //var_dump($shopifyImages, $sku,$skuMap[$sku_code[1]], $shopifyImageMap[$skuMap[$sku_code[1]]]);exit; + $shopifyImages[] = [ + 'src' => $shopifyImageMap[$skuMap[$sku_code[1]]] + ]; + foreach($shopifyImages as $key=>$shopifyImage) { + + //var_dump($shopifyImage); + $info = pathinfo($shopifyImage['src']); + + //var_dump($shopifyImage); + + $this->info($info['filename']); + + $image_path = "product/".$sku->id."/".$info['filename'].".webp"; + $local_image_path = "storage/".$image_path; + $this->info(public_path($local_image_path)); + if(!file_exists(public_path($local_image_path))) { + $this->error("copy [ ".$local_image_path); + $this->info($shopifyImage['src']); + $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); + Storage::disk("images")->put($local_image_path, $contents); + sleep(1); + } + $images[] = $image_path; + } + + foreach($images as $key=>$image) { + $checkImg = ProductImage::where("product_id", $sku->id)->where("path", $image)->first(); + if(is_null($checkImg)) { + $checkImg = new ProductImage(); + $checkImg->product_id = $sku->id; + $checkImg->path = $image; + $checkImg->type = "images"; + $checkImg->save(); + } + } + } + + + // exit; + + + sleep(1); + //var_dump($product);exit; + + + //var_dump($product);exit; + + // add product_attr + + + // add product_images + // add product_sku + + + + } + } +} From 0f0f6170ea9186d8d155eca2ebf55a57d8896e29 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 03:12:47 +0000 Subject: [PATCH 374/386] fix add new product type --- .../src/Console/Commands/Product/GetV3.php | 299 +----------------- 1 file changed, 15 insertions(+), 284 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php index f2fe99973..431237efe 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV3.php @@ -181,6 +181,7 @@ public function syncProductToLocal($shopify_pro_id) { $this->info($item['product_id']); $options = $item->options; $shopifyVariants = $item->variants; + $shopifyImages = $item->images; $color = []; $size = []; @@ -191,92 +192,26 @@ public function syncProductToLocal($shopify_pro_id) { $shopifyImageMap[$shopifyImage['id']] = $shopifyImage['src']; } - //var_dump($shopifyImageMap); - - // skus add first - foreach($options as $kk => $option) { - $option['name'] = strtolower($option['name']); - $attr_id = 0; - if(strpos($option['name'], "Size")!==false) $attr_id = 24; - if(strpos($option['name'], "size")!==false) $attr_id = 24; - if(strpos($option['name'], "GRÖSSE")!==false) $attr_id = 24; - if(strpos($option['name'], "grÖsse")!==false) $attr_id = 24; - if(strpos($option['name'], "尺码") !==false) $attr_id = 24; - if(strpos($option['name'], "Length") !==false) $attr_id = 24; - if(strpos($option['name'], "größe") !==false) $attr_id = 24; - if(strpos($option['name'], "Color") !==false) $attr_id = 23; - if(strpos($option['name'], "color") !==false) $attr_id = 23; - if(strpos($option['name'], "Couleur") !==false) $attr_id = 23; - if(strpos($option['name'], "颜色") !==false) $attr_id = 23; - if(strpos($option['name'], "FARBE") !==false) $attr_id = 23; - if(strpos($option['name'], "farbe") !==false) $attr_id = 23; - - if(empty($attr_id)) { - $this->error($option['name']); - $error = 1; - continue; - //exit; - } - $this->info("attr id ". $attr_id); - - $values = $option['values']; - foreach($values as $kky => $value) { - $this->info($value); - if($value==35 && $attr_id==23) { - var_dump($item);exit; - } - //ba_attribute_options - $attr_option = AttributeOption::where("attribute_id", $attr_id)->where("admin_name", $value)->first(); - if(is_null($attr_option)) { - $attr_option = new AttributeOption(); - $attr_option->attribute_id = $attr_id; - $attr_option->admin_name = $value; - $attr_option->save(); - $attribute_option_id = $attr_option->id; - }else{ - $attribute_option_id = $attr_option->id; - } - - //var_dump($attr_opt_tran);exit; - foreach($this->locales as $kl => $locale) { - $attr_opt_tran = AttributeOptionTranslation::where("attribute_option_id", $attribute_option_id)->where("locale", $locale)->first(); - if(is_null($attr_opt_tran)) { - $attr_opt_tran = new AttributeOptionTranslation(); - if($locale==$this->lang) { - $attr_opt_tran->label = $value; - } else{ - $attr_opt_tran->label = ""; - } - $attr_opt_tran->locale = $locale; - $attr_opt_tran->attribute_option_id = $attribute_option_id; - $attr_opt_tran->save(); - } - } - if($attr_id==23) $color[$attribute_option_id] = $attribute_option_id; //array_push($color, $attribute_option_id); - if($attr_id==24) $size[$attribute_option_id] = $attribute_option_id; - } + if(count($options) > 1 || count($shopifyVariants) > 1) { + $this->error("please be sure your options values,pls don't have more than one"); + exit; } - - if($error==1) continue; - - // add product + $sku = $item['product_id'].'-'.$shopifyVariants[0]['id']; + $data = []; $data['attribute_family_id'] = 1; - $data['sku'] = $item['product_id']; - $data['type'] = "configurable"; - $super_attributes['color'] = $color; - $super_attributes['size'] = $size; - $data['super_attributes'] = $super_attributes; - //$data['family'] = []; + $data['sku'] = $sku; + $data['type'] = "simple"; + //var_dump($data);exit; Event::dispatch('catalog.product.create.before'); // check product info - $product = $this->productRepository->where("sku", $item['product_id'])->first(); + $product = $this->productRepository->where("sku", $sku)->first(); if(is_null($product)) { $product = $this->productRepository->create($data); $id = $product->id; @@ -303,101 +238,13 @@ public function syncProductToLocal($shopify_pro_id) { $updateData['description'] = $item['body_html']; - $updateData['compare_at_price'] = $item['compare_at_price']; + $updateData['compare_at_price'] = $shopifyVariants[0]['compare_at_price']; + $updateData['price'] = $shopifyVariants[0]['price']; + $updateData['weight'] = !empty($shopifyVariants[0]['weight']) ? $shopifyVariants[0]['weight'] : 1000 ; + //var_dump($updateData, $item);exit; $variants = $variantCollection = $product->variants()->get()->toArray(); - //var_dump(count($shopifyVariants)); - - $newShopifyVarants = []; - $compare_at_price = '0.00'; - $skuMap = []; - foreach($shopifyVariants as $sv => $shopifyVariant) { - //var_dump($shopifyVariant); - $newkey = $shopifyVariant['product_id']; - $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); - $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); - - if(is_null($color) || is_null($size)) { - $this->info("error"); - var_dump($color, $size, $shopifyVariant); - exit; - } - - $newkey .="_".$color->id."_".$size->id; - - $newShopifyVarant = []; - - $newShopifyVarant['id'] = $shopifyVariant['id']; - $newShopifyVarant['price'] = $shopifyVariant['price']; - $newShopifyVarant['title'] = $shopifyVariant['title']; - $newShopifyVarant['weight'] = $shopifyVariant['weight']; - $newShopifyVarant['sku'] = $shopifyVariant['sku']; - $newShopifyVarant['option1'] = $shopifyVariant['option1']; - $newShopifyVarant['option2'] = $shopifyVariant['option2']; - $newShopifyVarants[$newkey] = $newShopifyVarant; - if(!empty($shopifyVariant['compare_at_price'])) $compare_at_price = $shopifyVariant['compare_at_price']; - - //var_dump($shopifyImages); - $newShopifyVarant['image_src'] = $shopifyImageMap[$shopifyVariant['image_id']]; - $newShopifyVarant['sku_image_id'] = $shopifyVariant['image_id']; - - $skuMap[$shopifyVariant['id']] = $shopifyVariant['image_id']; - //var_dump($shopifyVariant,$newShopifyVarant);exit; - } - - //var_dump($compare_at_price); - - //var_dump($newShopifyVarants);exit; - - /** - * - * variants[440][sku]: 8007538966776-variant-1375-1376 - * variants[440][name]: Variant 1375 1376 - * variants[440][price]: 0.0000 - * variants[440][weight]: 0 - * variants[440][status]: 1 - * variants[440][color]: 1375 - * variants[440][size]: 1376 - * variants[440][inventories][1]: 0 - * - * - */ - $newVariants = []; - $newVariantsImageMap = []; // image maps; - foreach($variants as $k => $variant) { - //Log::info(json_encode($variant)); - //var_dump($variant); - $newkey = $item['product_id']."_".$variant['color']."_".$variant['size']; - if($variant['size']=='1403') { - //var_dump($variant);exit; - } - $this->info($newkey); - if(!isset($newShopifyVarants[$newkey])) continue; - //var_dump($newkey);exit; - $newVariant['sku'] = $item['product_id'].'-'.$newShopifyVarants[$newkey]['id']; - $newVariant['name'] = $newShopifyVarants[$newkey]['title']; - $newVariant['price'] = $newShopifyVarants[$newkey]['price']; - $newVariant['weight'] = "1000"; - $newVariant['status'] = 1; - $newVariant['color'] = $variant['color']; - $newVariant['size'] = $variant['size']; - $newVariant['inventories'][1] = 1000; - $categories[] = 5; - $newVariant['categories'] = $categories; - $newVariant['guest_checkout'] = 1; - $newVariant['compare_at_price'] = $compare_at_price; - $newVariants[$variant['id']] = $newVariant; - - //$newVariantsImageMap[$variant] - - //var_dump($newVariant); exit; - } - - //var_dump(count($newVariants));exit; - - $updateData['variants'] = $newVariants; - // images /** * @@ -415,34 +262,7 @@ public function syncProductToLocal($shopify_pro_id) { "verify_peer_name"=>false, ), ); - // $images = []; - // foreach($shopifyImages as $key=>$shopifyImage) { - - // //var_dump($shopifyImage); - // $info = pathinfo($shopifyImage['src']); - - // //var_dump($shopifyImage); - - // $this->info($info['filename']); - - - // //var_dump($info);exit; - // $image_path = "product/".$id."/".$info['filename'].".webp"; - // $local_image_path = "storage/".$image_path; - // $this->info(public_path($local_image_path)); - // if(!file_exists(public_path($local_image_path))) { - // $this->error("copy [ ".$local_image_path); - // $this->info($shopifyImage['src']); - // //var_dump($shopifyImage['src'],"hello"); - // $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); - // //var_dump($contents); - // Storage::disk("images")->put($local_image_path, $contents); - // sleep(1); - // //exit; - // //var_dump($local_image_path);exit; - // } - // $images[] = $image_path; - // } + $product = $this->productRepository->update($updateData, $id); @@ -487,96 +307,7 @@ public function syncProductToLocal($shopify_pro_id) { $checkImg->save(); } } - - //var_dump($skuMap);exit; - - //$variants = $variantCollection = $product->variants()->get()->toArray(); - - //更新对应的分类 - $sku_products = $this->productRepository->where("parent_id", $id)->get(); - foreach($sku_products as $key=>$sku) { - - $sku_code = explode('-',$sku->sku); - - //var_dump($sku_code);exit; - - $this->info("process ".$sku->id); - - Event::dispatch('catalog.product.create.after', $sku); - - $updateData = []; - - $updateData['new'] = 1; - $updateData['featured'] = 1; - $updateData['visible_individually'] = 1; - $updateData['status'] = 1; - $updateData['guest_checkout'] = 1; - $updateData['channel'] = "default"; - $updateData['locale'] = $this->lang; - $categories[] = $this->category_id; - $updateData['categories'] = $categories; - - $this->productRepository->update($updateData, $sku->id); - - Event::dispatch('catalog.product.update.after', $sku); - - $images = []; - //var_dump($shopifyImages, $sku,$skuMap[$sku_code[1]], $shopifyImageMap[$skuMap[$sku_code[1]]]);exit; - $shopifyImages[] = [ - 'src' => $shopifyImageMap[$skuMap[$sku_code[1]]] - ]; - foreach($shopifyImages as $key=>$shopifyImage) { - - //var_dump($shopifyImage); - $info = pathinfo($shopifyImage['src']); - - //var_dump($shopifyImage); - - $this->info($info['filename']); - - $image_path = "product/".$sku->id."/".$info['filename'].".webp"; - $local_image_path = "storage/".$image_path; - $this->info(public_path($local_image_path)); - if(!file_exists(public_path($local_image_path))) { - $this->error("copy [ ".$local_image_path); - $this->info($shopifyImage['src']); - $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); - Storage::disk("images")->put($local_image_path, $contents); - sleep(1); - } - $images[] = $image_path; - } - - foreach($images as $key=>$image) { - $checkImg = ProductImage::where("product_id", $sku->id)->where("path", $image)->first(); - if(is_null($checkImg)) { - $checkImg = new ProductImage(); - $checkImg->product_id = $sku->id; - $checkImg->path = $image; - $checkImg->type = "images"; - $checkImg->save(); - } - } - } - - - // exit; - - sleep(1); - //var_dump($product);exit; - - - //var_dump($product);exit; - - // add product_attr - - - // add product_images - // add product_sku - - - } } } From e0b6b60e101fb99735acbee484de17c3967112c4 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 04:56:58 +0000 Subject: [PATCH 375/386] #107 add simple product checkout page --- .../Http/Controllers/ProductController.php | 28 +- .../Http/Controllers/ProductV3Controller.php | 364 +++ packages/Nicelizhi/OneBuy/src/Http/routes.php | 11 + .../views/product-detail-v3.blade.php | 2668 +++++++++++++++++ 4 files changed, 3060 insertions(+), 11 deletions(-) create mode 100644 packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV3Controller.php create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v3.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php index 9186fca8d..c7d5ae468 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductController.php @@ -337,12 +337,15 @@ public function order_add_sync(Request $request) { //var_dump($product); $product['quantity'] = $product['amount']; $product['selected_configurable_option'] = $product['variant_id']; - $attr_ids = explode(',', $product['attr_id']); - foreach($attr_ids as $key=>$attr_id) { - $attr = explode('_', $attr_id); - $super_attribute[$attr[0]] = $attr[1]; + if(!empty($product['attr_id'])) { + $attr_ids = explode(',', $product['attr_id']); + foreach($attr_ids as $key=>$attr_id) { + $attr = explode('_', $attr_id); + $super_attribute[$attr[0]] = $attr[1]; + } + + $product['super_attribute'] = $super_attribute; } - $product['super_attribute'] = $super_attribute; //Log::info("add product into cart ". json_encode($product)); $cart = Cart::addProduct($product['product_id'], $product); @@ -538,13 +541,16 @@ public function order_addr_after(Request $request) { //var_dump($product); $product['quantity'] = $product['amount']; $product['selected_configurable_option'] = $product['variant_id']; - $attr_ids = explode(',', $product['attr_id']); - foreach($attr_ids as $key=>$attr_id) { - $attr = explode('_', $attr_id); - $super_attribute[$attr[0]] = $attr[1]; + if(!empty($product['attr_id'])) { + $attr_ids = explode(',', $product['attr_id']); + foreach($attr_ids as $key=>$attr_id) { + $attr = explode('_', $attr_id); + $super_attribute[$attr[0]] = $attr[1]; + } + + $product['super_attribute'] = $super_attribute; } - - $product['super_attribute'] = $super_attribute; + //Log::info("add product into cart ". json_encode($product)); $cart = Cart::addProduct($product['product_id'], $product); if ( diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV3Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV3Controller.php new file mode 100644 index 000000000..fbb6b02cd --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV3Controller.php @@ -0,0 +1,364 @@ +productRepository->findBySlug($slugOrPath); + Cache::put($cache_key, $product, 3600); + } + + if ( + ! $product + || ! $product->visible_individually + || ! $product->url_key + || ! $product->status + ) { + abort(404); + } + + //visitor()->visit($product); + + $refer = $request->input("refer"); + + if(!empty($refer)) { + $request->session()->put('refer', $refer); + }else{ + $refer = $request->session()->get('refer'); + } + + // 四个商品的价格情况 + $package_products = []; + $productBaseImage = product_image()->getProductBaseImage($product); + $package_products = $this->makeProducts($product, [2,1,3,4]); + + // 获取 faq 数据 + $redis = Redis::connection('default'); + + // skus 数据 + $skus = []; + + + + $product_attributes = []; + + $cache_key = "product_attributes_".$product->id; + $product_attributes = Cache::get($cache_key); + + + $product_attributes = []; + if(empty($product_attributes)) { + //if(true) { + + $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); + $attributes = $productViewHelper->getConfigurationConfig($product); + + + $productSizeImage = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 32, + ]); + + //获取到他底部的商品内容 + // $attributes = $this->productRepository->getSuperAttributes($product); + $product_attr_sort_cache_key = "product_attr_sort_23_".$product->id; + $product_attr_sort = $redis->hgetall($product_attr_sort_cache_key); // get sku sort + + foreach($attributes['attributes'] as $key=>$attribute) { + //var_dump($attribute); + $attribute['name'] = $attribute['code']; + $options = []; + foreach($attribute['options'] as $kk=>$option) { + // 获取商品图片内容 + $is_sold_out = false; + if($attribute['id']==23) { + $new_id = $option['products'][0]; + $new_product = $this->productRepository->find($new_id); + $NewproductBaseImage = product_image()->getProductBaseImage($new_product); + $option['image'] = @$NewproductBaseImage['large_image_url']; + $option['big_image'] = @$NewproductBaseImage['large_image_url']; + + }else{ + $option['image'] = $productBaseImage['large_image_url']; + $option['large_image'] = @$productBaseImage['large_image_url']; + } + + // 判断是否有对应的尺码内容 + + $option['is_sold_out'] = $is_sold_out; + $option['name'] = $option['label']; + unset($option['admin_name']); + + if($attribute['id']==23 && !empty($product_attr_sort)) { + $sort = isset($product_attr_sort[$option['id']]) ? intval($product_attr_sort[$option['id']]) : 4 ; + $option['sort'] = $sort; + $options[$sort] = $option; + }else{ + $options[] = $option; + } + //var_dump($options); + } + + //var_dump($options); + //array_multisort($options,) + //var_dump($options); + ksort($options); + + $tip = ""; + $tip_img = ""; + if($attribute['id']==24) { + $tip = trans('onebuy::app.product.Size Chart'); + if(isset($productSizeImage->text_value)) $tip_img = $productSizeImage->text_value; + if(empty($tip_img)) $tip = ""; + } + + $attribute['tip'] = $tip; + $attribute['tip_img'] = $tip_img; + + unset($attribute['translations']); //去掉多余的数据内容 + //var_dump($options); + $attribute['options'] = $options; + $attribute['image'] = $productBaseImage['large_image_url']; + $attribute['large_image'] = $productBaseImage['large_image_url']; + + $product_attributes[] = $attribute; + } + + Cache::put($cache_key, json_encode($product_attributes), 36000); + + }else{ + $product_attributes = json_decode($product_attributes, JSON_OBJECT_AS_ARRAY); + } + + rsort($product_attributes); + //商品的背景图片获取 + + $productBgAttribute = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 29, + ]); + + + $productBgAttribute_mobile = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 30, + ]); + + + $app_env = config("app.env"); + + //var_dump($productBgAttribute); + + + $faqItems = $redis->hgetall($this->faq_cache_key); + ksort($faqItems); + $comments = $redis->hgetall($this->cache_prefix_key."product_comments_".$product['id']); + //获取 paypal smart key + $paypal_client_id = core()->getConfigData('sales.payment_methods.paypal_smart_button.client_id'); + + + //支持的区域 + $countries = config("countries"); + + $default_country = config('onebuy.default_country'); + + $airwallex_method = config('onebuy.airwallex.method'); + + $payments = config('onebuy.payments'); // config the payments status + + $payments_default = config('onebuy.payments_default'); + $brand = config('onebuy.brand'); + + $gtag = config('onebuy.gtag'); + + $fb_ids = config('onebuy.fb_ids'); + $ob_adv_id = config('onebuy.ob_adv_id'); + + return view('onebuy::product-detail-v3', compact('gtag','app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default','brand','fb_ids','ob_adv_id')); + } + + /** + * + * generation products for page + * @param product + * @param array nums + * + */ + + private function makeProducts($product, $nums = array()) { + + //var_dump($product->id);exit; + $cache_key = "product_ext_".$product->id."_".count($nums); + $package_products = Cache::get($cache_key); + + $shipping_price_key = "shipping_price"; + $shipping_price = Cache::get($shipping_price_key); + if(empty($shipping_price)) { + //core()->getConfigData('sales.payment_methods.airwallex.apikey'); + $shipping_price = core()->getConfigData('sales.carriers.flatrate.default_rate'); + Cache::put($shipping_price_key, $shipping_price, 36000); + } + + if(empty($package_products)) { + //if(empty($package_products)) { + //if($package_products) { + $package_products = []; + $productBaseImage = product_image()->getProductBaseImage($product); + + //source price + + $productBgAttribute_price = $this->productAttributeValueRepository->findOneWhere([ + 'product_id' => $product->id, + 'attribute_id' => 31, + ]); + $source_price = 0; + if(!is_null($productBgAttribute_price)) $source_price = $productBgAttribute_price->float_value; + if(empty($source_price)) { + return abort(404); + } + + foreach($nums as $key=>$i) { + + $package_product = []; + $package_product['id'] = $i; + $package_product['name'] = $i."x " . $product->name; + $package_product['image'] = $productBaseImage['medium_image_url']; + $package_product['amount'] = $i; + //$package_product['old_price'] = $productPrice['regular']['price'] * $i; + $price = $this->getCartProductPrice($product,$product->id, $i); + $package_product['old_price'] = round($source_price * $i, 2); + $package_product['old_price_format'] = core()->currency($package_product['old_price']); + //$package_product['new_price'] = "3.23" * $i; + if ($i==2) $discount = 0.8; + if ($i==3) $discount = 0.7; + if ($i==4) $discount = 0.6; + if ($i==1) $discount = 1; + $package_product['new_price'] = $this->getCartProductPrice($product,$product->id, $i) * $discount; + $package_product['new_price_format'] = core()->currency($package_product['new_price']) ; + $tip1_price = (1 - round(($package_product['new_price'] / $package_product['old_price']), 2)) * 100; + $package_product['tip1'] = $tip1_price."% "; + $tip2_price = round($package_product['new_price'] / $i, 2); + $package_product['tip2'] = core()->currency($tip2_price)."/"; + $package_product['shipping_fee'] = $shipping_price; // shipping price + $popup_info['name'] = null; + $popup_info['old_price'] = null; + $popup_info['new_price'] = null; + $popup_info['img'] = null; + $package_product['popup_info'] = $popup_info; + $package_products[] = $package_product; + } + + Cache::put($cache_key, json_encode($package_products), 36000); + //var_dump("hello"); + return $package_products; + } + + return json_decode($package_products, JSON_OBJECT_AS_ARRAY); + } + + /** + * + * + * 计算商品在具体的数量的时候的价格,主要是考虑到会有购物车折扣的情况下 + * + * @param int $product_id + * @param int $qty + * + * @return float price + * + */ + private function getCartProductPrice($product, $product_id, $qty) { + //清空购车动作 + Cart::deActivateCart(); + //添加对应的商品到购物车中 + $productViewHelper = new \Webkul\Product\Helpers\ConfigurableOption(); + + $attributes = $productViewHelper->getConfigurationConfig($product); + //var_dump($attributes);exit; + $AddcartProduct = []; + + $AddcartProduct['quantity'] = $qty; + + foreach($attributes['attributes'] as $key=>$attribute) { + $super_attribute[$attribute['id']] = $attribute['options'][0]['id']; + } + + $cart = Cart::addProduct($product['product_id'], $AddcartProduct); + + //获取购车中商品价格返回 + $cart = Cart::getCart(); + + //var_dump($cart); exit; + + //清空购车动作 + Cart::deActivateCart(); + + return $cart->grand_total; + + } + + + +} diff --git a/packages/Nicelizhi/OneBuy/src/Http/routes.php b/packages/Nicelizhi/OneBuy/src/Http/routes.php index 17cbcb70b..fc81754ef 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/routes.php +++ b/packages/Nicelizhi/OneBuy/src/Http/routes.php @@ -3,6 +3,7 @@ use Illuminate\Support\Facades\Route; use Nicelizhi\OneBuy\Http\Controllers\ProductController; use Nicelizhi\OneBuy\Http\Controllers\ProductV2Controller; +use Nicelizhi\OneBuy\Http\Controllers\ProductV3Controller; // default Route::group(['middleware' => ['locale', 'theme', 'currency','web']], function () { @@ -44,3 +45,13 @@ }); +// v3 + +Route::group(['middleware' => ['locale', 'theme', 'currency','web']], function () { + + Route::get('onebuy/v3/{slug}', [ProductV3Controller::class, 'detail']) + ->name('onebuy.v3.product.page') + ->middleware('cacheResponse'); + + +}); diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v3.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v3.blade.php new file mode 100644 index 000000000..3ea45a287 --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v3.blade.php @@ -0,0 +1,2668 @@ +@inject ('reviewHelper', 'Webkul\Product\Helpers\Review') +@inject ('productViewHelper', 'Webkul\Product\Helpers\View') + +@php + $productBaseImage = product_image()->getProductBaseImage($product); +@endphp + + + + + {{ trim($product->meta_title) != "" ? $product->meta_title : $product->name }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +@lang('onebuy::app.product.step.Select Quantity')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Payment')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Shipping Information')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Place Order')
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + @lang('onebuy::app.product.order.Secure Checkout')
    +
    + +
    +
    + $package_product) { ?> +
    + +
    + +
    + @lang('onebuy::app.product.order.RECOMMENDED DEAL')
    +
    + +
    +
    + +
    +
    +
    +
    + .png" /> +
    + + +
    + +
    @lang("onebuy::app.product.Savings")
    +
    +
    + +
    @lang("onebuy::app.product.piece")
    +
    +
    +
    + +
    +
    +
    + +
    +
    + @lang('onebuy::app.product.order.Express Checkout')
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +@lang('onebuy::app.product.order.Shipping')
    +
    +@lang('onebuy::app.product.order.Enter your contact information'). +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    + +
    + + + +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +@lang('onebuy::app.product.order.Order Summary')
    +
    + +
    +
    +
    + +@lang('onebuy::app.product.order.Subtotal'): + + +
    +
    + +@lang('onebuy::app.product.order.Discount'): + + +
    +
    + +@lang('onebuy::app.product.order.Shipping'): + + +
    + + +
    + +@lang('onebuy::app.product.order.Total'): + + +
    +
    +
    + +
    +
    +
    +
    + + + + +
    +@lang('onebuy::app.product.step.Payment')
    +
    +@lang('onebuy::app.product.order.All transactions are secure and encrypted'). +
    + +@include("onebuy::payments-".strtolower($default_country)) + + +
    + +
    +
    +
    + + + + + + + +
    +
    + +
    + +
    + +
    + + @lang('onebuy::app.product.order.What customers are saying about') +
    + +
    + +
    + $comment) { + $comment = json_decode($comment); + //var_dump($comment);exit; + ?> +
    +
    +
    +

    name, 0, 1);?>

    +

    name;?>

    +

    + Verified Buyer +

    +
    +
    +
    + +
    +
    +
    + +
    + title;?> + +

    content;?>

    + +
    +
    + + + +
    + + +
    + +
    + + +
    + +
    + + @lang('onebuy::app.product.order.Frequently Asked Questions') + +
    + +
    + + $item) { + $item = json_decode($item); + ?> + +
    + +

    + + + +

    + +
    + +
    + + a;?> + +
    + +
    + +
    + + + +
    + +
    +
    + +
    + +
    +@include('onebuy::footer-container-'.strtolower($default_country)) +
    +
    +
    +
    +product image +
    +
    +
    + firstName + lastName + . from + location +
    + just purchased: + product name +
    +
    @lang('onebuy::app.product.order.JUST NOW')
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From d814d258bcca7c92efa5f8f8bf7264cf3c0ba438 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 05:50:35 +0000 Subject: [PATCH 376/386] add document --- ...(\345\215\225\345\261\236\346\200\247).md" | 4 +- ...(\346\227\240\345\261\236\346\200\247).md" | 72 +++++++++++++++++++ 2 files changed, 74 insertions(+), 2 deletions(-) create mode 100644 "docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" diff --git "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\345\215\225\345\261\236\346\200\247).md" "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\345\215\225\345\261\236\346\200\247).md" index db280f7fb..1b2315760 100644 --- "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\345\215\225\345\261\236\346\200\247).md" +++ "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\345\215\225\345\261\236\346\200\247).md" @@ -57,7 +57,7 @@ onebuy:import:products:comment {--prod_id=} {--force=} ``` ## 获取商品的 checkout 连接 ``` -https://www.example.com/onebuy/v1/{$shopify_id} +https://www.example.com/onebuy/v2/{$shopify_id} ``` > 参数是否正常打开,如果可以打开,验证下对应的内容是否都有。验证内容事项 @@ -78,4 +78,4 @@ Value 为排序ID 比如 0,1,2,3 2)查看 Banner, img size, 评论, FAQ,SKU 图片是否正确,价格是否正常。 3)快递费用的查看,没有平台的快递费用可能不一样的情况,这块数据需要到后台快递栏目中修改与查看 4)查看对应的协议内容,文档是否正常,这块数据是基于每个本地数据库与对应的区域来获取识别的 - +5)因为此商品为单品,从而会需要添加上1件,2件,多件商品的商品图片,从而可以更好的展示效果 \ No newline at end of file diff --git "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" new file mode 100644 index 000000000..5503b1220 --- /dev/null +++ "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" @@ -0,0 +1,72 @@ +--- +title: 如何基于Shopify创建一个推广商品 (无属性) +tags: + - Larave + - Compose + - Php + - Shopify + - OneBuy +categories: + - 产品 + - 使用手册 +date: 2024-03-03 14:23:12 +description: 如何基于Shopify创建一个推广商品 (无属性) +lang: zh-CN +--- +这篇文章主要是描述基于shopify的商品,实现与 shopify 与 店铺的对接实现生成 checkout 页面 + +# 获取商品 + +## 获取全部商品 + +``` +php artisan shopify:product:get +``` +> 获取对应Shopify平台的全部商品的内容到本地数据库 shopify_products + +## 获取指定商品ID的商品 + +``` +shopify:product:getv3 {--prod_id=} +``` +> 获取shopify 上莫个商品到本地数据库, 对于需要单属性的实现,可以参考 + +### 获取指定商品ID的商品参数 +1) prod_id 表示 shopify 的商品ID,具体Shopify ID的获取,可以通过 **获取全部商品** 来查看,对应的数据会保存到 shopify_products 表。 +2) force 表示是否强制处理,对于有一些数据已经在本地上存在后,需要使用这个方法去强制获取最新的 Shopify 商品数据内容,再做更新 +3)**现在默认导入到本地是划分到一个有优惠活动的栏目中,对于有需要的不同分类,需要在代码上面做下手动的修改** + +## 验证后台是否有对于的商品,商品图片,商品SKU这些内容 +1)在完成上面的操作的时候,就会发现后台已经有了基于 Shopify 的ID 为基础的商品内容存在,这个时候,对于有banner 和 size ,销售价格,商品SKU图片的需要调整的,都会在商品后台去调整。 +2)对于新的一个平台,需要添加上 FAQ, 商品的 Comments 内容,对应的已经提供了具体的模板,上传到对应的服务器 +Faq 上传的位置与文件名称 +``` +./storage/imports/faq.xlsx +``` +执行 FAQ 脚本内容的导入 force 是针对与前面已经有了需要做更新处理 **数据保存在 Redis中** +``` +onebuy:import:faq {--force=} +``` +商品评论,其中 3140 是本地数据库对应商品的 ID +``` +./storage/imports/comments_3140.xlsx +``` +执行 商品 评论内容的导入 prod_id 这个是 本地数据库的商品ID, force 是针对前面已经有了对应的内容,做了对应的调整,会做老的评论删除,重新更新新的评论到服务器 **数据保存在 Redis中** +``` +onebuy:import:products:comment {--prod_id=} {--force=} +``` +## 获取商品的 checkout 连接 +``` +https://www.example.com/onebuy/v3/{$shopify_id} +``` +> 参数是否正常打开,如果可以打开,验证下对应的内容是否都有。验证内容事项 + + + +## 验证 checkout页面 是否工作正常 +1)发起商品支付,是否有报错情况。 +2)FAQ,SKU 图片是否正确,价格是否正常。 +3)快递费用的查看,没有平台的快递费用可能不一样的情况,这块数据需要到后台快递栏目中修改与查看 +4)查看对应的协议内容,文档是否正常,这块数据是基于每个本地数据库与对应的区域来获取识别的 +5)因为此商品为单品,从而会需要添加上1件,2件,多件商品的商品图片,从而可以更好的展示效果 + From 5dc9ccf5dcc3a073c9c287bbd1c5d3132baac366 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 05:52:27 +0000 Subject: [PATCH 377/386] update document --- ...25\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" index 5503b1220..1ddd5c334 100644 --- "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" +++ "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" @@ -9,7 +9,7 @@ tags: categories: - 产品 - 使用手册 -date: 2024-03-03 14:23:12 +date: 2024-03-13 13:23:12 description: 如何基于Shopify创建一个推广商品 (无属性) lang: zh-CN --- From 144a1170f6a959039ba91240b7a5f657e53770a0 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 05:54:35 +0000 Subject: [PATCH 378/386] fix --- .github/workflows/phpmd.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/.github/workflows/phpmd.yml b/.github/workflows/phpmd.yml index 0431f7238..e098b4c82 100644 --- a/.github/workflows/phpmd.yml +++ b/.github/workflows/phpmd.yml @@ -18,9 +18,15 @@ name: PHPMD on: push: branches: [ "main" ] + paths-ignore: + - .github/** + - docs/** pull_request: # The branches below must be a subset of the branches above branches: [ "main" ] + paths-ignore: + - .github/** + - docs/** schedule: - cron: '26 22 * * 3' From c24275cb7bc775b7b414fdcd55ab75c6eb55dc8a Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 05:55:45 +0000 Subject: [PATCH 379/386] update document --- ...25\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" index 1ddd5c334..a3d5fc658 100644 --- "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" +++ "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" @@ -29,7 +29,7 @@ php artisan shopify:product:get ``` shopify:product:getv3 {--prod_id=} ``` -> 获取shopify 上莫个商品到本地数据库, 对于需要单属性的实现,可以参考 +> 获取shopify 上莫个商品到本地数据库, 对于需要无属性的实现,可以参考 ### 获取指定商品ID的商品参数 1) prod_id 表示 shopify 的商品ID,具体Shopify ID的获取,可以通过 **获取全部商品** 来查看,对应的数据会保存到 shopify_products 表。 From ecadaa2c3a3c956bcaa8b59c51a989aa5b0ebee4 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 05:58:19 +0000 Subject: [PATCH 380/386] update document --- ...06\345\223\201(\346\227\240\345\261\236\346\200\247).md" | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" index a3d5fc658..2bcef44c1 100644 --- "a/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" +++ "b/docs/source/_posts/\345\246\202\344\275\225\345\237\272\344\272\216Shopify\345\210\233\345\273\272\344\270\200\344\270\252\346\216\250\345\271\277\345\225\206\345\223\201(\346\227\240\345\261\236\346\200\247).md" @@ -15,7 +15,7 @@ lang: zh-CN --- 这篇文章主要是描述基于shopify的商品,实现与 shopify 与 店铺的对接实现生成 checkout 页面 -# 获取商品 +# 商品获取 ## 获取全部商品 @@ -55,7 +55,7 @@ onebuy:import:faq {--force=} ``` onebuy:import:products:comment {--prod_id=} {--force=} ``` -## 获取商品的 checkout 连接 +# 获取商品的 checkout 连接 ``` https://www.example.com/onebuy/v3/{$shopify_id} ``` @@ -63,7 +63,7 @@ https://www.example.com/onebuy/v3/{$shopify_id} -## 验证 checkout页面 是否工作正常 +# 验证 checkout页面 是否工作正常 1)发起商品支付,是否有报错情况。 2)FAQ,SKU 图片是否正确,价格是否正常。 3)快递费用的查看,没有平台的快递费用可能不一样的情况,这块数据需要到后台快递栏目中修改与查看 From fa9d5881e205cc9262ce1cf587e5fdf8b70a7936 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 06:07:50 +0000 Subject: [PATCH 381/386] update about --- docs/source/about/index.md | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/docs/source/about/index.md b/docs/source/about/index.md index b85b86a2d..ec29d2dc3 100644 --- a/docs/source/about/index.md +++ b/docs/source/about/index.md @@ -4,6 +4,8 @@ date: 2023-12-01 10:00:30 lang: zh-CN --- +## About Author + ### Hi 👋,I'm Steve @@ -15,3 +17,35 @@ lang: zh-CN xxl4's github top languages + +## About Project +> Nexa Merchant is a ecommerce open source, it's build base on laravel and vite,you can use it build self ecommerce online website,or use it build a ecommerce SASS. + +### Project Module + +#### Admin + +#### Products + +#### Order + +#### Market + +#### Sales + +#### Catelog + +#### Shipping + +#### Tax + +#### User + +#### SocialShare + +#### Payment + +#### FPC + +#### CMS + From 66a335d124c9dcf720ff908266a069389431bba6 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 07:29:46 +0000 Subject: [PATCH 382/386] fixshopifyy sync image count --- .../src/Console/Commands/Product/Get.php | 23 +++++++++---------- .../src/Console/Commands/Product/GetV2.php | 13 ++++------- 2 files changed, 15 insertions(+), 21 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php index 36d0d39a9..60b6e4e56 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/Get.php @@ -301,7 +301,9 @@ public function syncProductToLocal($shopify_pro_id) { $updateData['description'] = $item['body_html']; - $updateData['compare_at_price'] = $item['compare_at_price']; + // $updateData['compare_at_price'] = $item['compare_at_price']; + $updateData['compare_at_price'] = $shopifyVariants[0]['compare_at_price']; + $updateData['price'] = $shopifyVariants[0]['price']; $variants = $variantCollection = $product->variants()->get()->toArray(); @@ -401,22 +403,16 @@ public function syncProductToLocal($shopify_pro_id) { $images = []; foreach($shopifyImages as $key=>$shopifyImage) { - //var_dump($shopifyImage); $info = pathinfo($shopifyImage['src']); - //var_dump($shopifyImage); $this->info($info['filename']); - - - //var_dump($info);exit; $image_path = "product/".$id."/".$info['filename'].".webp"; $local_image_path = "storage/".$image_path; $this->info(public_path($local_image_path)); if(!file_exists(public_path($local_image_path))) { $this->error("copy [ ".$local_image_path); $this->info($shopifyImage['src']); - //var_dump($shopifyImage['src'],"hello"); $contents = file_get_contents($shopifyImage['src'], false, stream_context_create($arrContextOptions)); //var_dump($contents); Storage::disk("images")->put($local_image_path, $contents); @@ -433,11 +429,8 @@ public function syncProductToLocal($shopify_pro_id) { foreach($shopifyImages as $key=>$shopifyImage) { - //var_dump($shopifyImage); $info = pathinfo($shopifyImage['src']); - //var_dump($shopifyImage); - $this->info($info['filename']); $image_path = "product/".$id."/".$info['filename'].".webp"; @@ -452,8 +445,11 @@ public function syncProductToLocal($shopify_pro_id) { } $images[] = $image_path; } - + $max_image_count = 3; + $i=0; foreach($images as $key=>$image) { + $i++; + if($max_image_count < $i) continue; $checkImg = ProductImage::where("product_id", $id)->where("path", $image)->first(); if(is_null($checkImg)) { $checkImg = new ProductImage(); @@ -510,8 +506,11 @@ public function syncProductToLocal($shopify_pro_id) { } $images[] = $image_path; } - + $max_image_count = 3; + $i = 0; foreach($images as $key=>$image) { + $i++; + if($max_image_count < $i) continue; $checkImg = ProductImage::where("product_id", $sku->id)->where("path", $image)->first(); if(is_null($checkImg)) { $checkImg = new ProductImage(); diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index a59e75527..6dad5c974 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -296,7 +296,9 @@ public function syncProductToLocal($shopify_pro_id) { $updateData['description'] = $item['body_html']; - $updateData['compare_at_price'] = $item['compare_at_price']; + //$updateData['compare_at_price'] = $item['compare_at_price']; + $updateData['compare_at_price'] = $shopifyVariants[0]['compare_at_price']; + $updateData['price'] = $shopifyVariants[0]['price']; $variants = $variantCollection = $product->variants()->get()->toArray(); @@ -411,15 +413,9 @@ public function syncProductToLocal($shopify_pro_id) { $images = []; foreach($shopifyImages as $key=>$shopifyImage) { - //var_dump($shopifyImage); $info = pathinfo($shopifyImage['src']); - //var_dump($shopifyImage); - $this->info($info['filename']); - - - //var_dump($info);exit; $image_path = "product/".$id."/".$info['filename'].".webp"; $local_image_path = "storage/".$image_path; $this->info(public_path($local_image_path)); @@ -431,8 +427,7 @@ public function syncProductToLocal($shopify_pro_id) { //var_dump($contents); Storage::disk("images")->put($local_image_path, $contents); sleep(1); - //exit; - //var_dump($local_image_path);exit; + } $images[] = $image_path; } From 1e8a79c5683103415161a38c98a530f9bfb5c202 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 09:08:34 +0000 Subject: [PATCH 383/386] fix onebuy v2 --- .../Http/Controllers/ProductV2Controller.php | 750 +----------------- 1 file changed, 3 insertions(+), 747 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 69c5bdd7f..70e46d01c 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -343,652 +343,12 @@ public function detail($slug, Request $request) { $fb_ids = config('onebuy.fb_ids'); + $gtag = config('onebuy.gtag'); - return view('onebuy::v2.product-detail', compact('app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default','brand','fb_ids')); - } - - public function cms($slug, Request $request) { - \Debugbar::disable(); /* 开启后容易出现前端JS报错的情况 */ - - $page = $this->cmsRepository->findByUrlKeyOrFail($slug); - - return view('onebuy::cms.page')->with('page', $page); - - } - - // 完成订单生成动作 - public function order_add_sync(Request $request) { - //var_dump($request->all()); - - $payment_method = $request->input('payment_method'); - - $input = $request->all(); - - $refer = $request->session()->get('refer'); - Log::info("refer checkout v1 ".$refer); - - - $products = $request->input("products"); - // 添加到购物车 - Cart::deActivateCart(); - foreach($products as $key=>$product) { - //var_dump($product); - $product['quantity'] = $product['amount']; - $product['selected_configurable_option'] = $product['variant_id']; - $attr_ids = explode(',', $product['attr_id']); - foreach($attr_ids as $key=>$attr_id) { - $attr = explode('_', $attr_id); - $super_attribute[$attr[0]] = $attr[1]; - } - $product['super_attribute'] = $super_attribute; - //Log::info("add product into cart ". json_encode($product)); - $cart = Cart::addProduct($product['product_id'], $product); - - if ( - is_array($cart) - && isset($cart['warning']) - ) { - return new JsonResource([ - 'message' => $cart['warning'], - ]); - } - - } - // 添加地址内容 - $addressData = []; - $addressData['billing'] = []; - $address1 = []; - array_push($address1, $input['address']); - $addressData['billing']['city'] = $input['city']; - $addressData['billing']['country'] = $input['country']; - $addressData['billing']['email'] = $input['email']; - $addressData['billing']['first_name'] = $input['first_name']; - $addressData['billing']['last_name'] = $input['second_name']; - //undefined+ - $input['phone_full'] = str_replace('undefined+','', $input['phone_full']); - $addressData['billing']['phone'] = $input['phone_full']; - $addressData['billing']['postcode'] = $input['code']; - $addressData['billing']['state'] = $input['province']; - $addressData['billing']['use_for_shipping'] = true; - $addressData['billing']['address1'] = $address1; - $addressData['shipping'] = []; - $addressData['shipping']['isSaved'] = false; - $address1 = []; - array_push($address1, ""); - $addressData['shipping']['address1'] = $address1; - - $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); - - $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); - - - //return response()->json($addressData); - - //var_dump($addressData);exit; - - - //Cart::saveCustomerAddress($addressData); - - if ( - Cart::hasError() - || ! Cart::saveCustomerAddress($addressData) - ) { - return new JsonResource([ - 'redirect' => true, - 'data' => route('shop.checkout.cart.index'), - ]); - } - - - //处理配送方式 - $shippingMethod = "free_free"; // 包邮 - $shippingMethod = "flatrate_flatrate"; - // Cart::saveShippingMethod($shippingMethod); - - if ( - Cart::hasError() - || ! $shippingMethod - || ! Cart::saveShippingMethod($shippingMethod) - ) { - return response()->json([ - 'redirect_url' => route('shop.checkout.cart.index'), - ], Response::HTTP_FORBIDDEN); - } - - Cart::collectTotals(); - - if($payment_method=="airwallex_klarna") $payment_method = "airwallex"; - - // 获取支付信息 - - if($payment_method=='airwallex') { - //处理支付方式 - $payment = []; - $payment['description'] = $payment_method."-".$refer; - $payment['method'] = $payment_method; - $payment['method_title'] = $payment_method."-".$refer; - $payment['sort'] = "2"; - // Cart::savePaymentMethod($payment); - - if ( - Cart::hasError() - || ! $payment - || ! Cart::savePaymentMethod($payment) - ) { - return response()->json([ - 'redirect_url' => route('shop.checkout.cart.index'), - ], Response::HTTP_FORBIDDEN); - } - - // 生成订单, - Cart::collectTotals(); - $this->validateOrder(); - $cart = Cart::getCart(); - $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - // Cart::deActivateCart(); - // Cart::activateCartIfSessionHasDeactivatedCartId(); - // 跳转到支付 - $data['result'] = 200; - $data['order'] = $order; - if ($order) { - $orderId = $order->id; - $transactionManager = $this->airwallex->createPaymentOrder($cart, $order->id); - - $data['client_secret'] = $transactionManager->client_secret; - $data['payment_intent_id'] = $transactionManager->id; - $data['currency'] = $transactionManager->currency; - $data['country'] = $input['country']; - } - - return response()->json($data); - } - - if($payment_method=='paypal_standard') { - //处理支付方式 - $payment = []; - $payment['description'] = "PayPal-".$refer; - $payment['method'] = "paypal_standard"; - $payment['method_title'] = "PayPal standard Button-".$refer; - $payment['sort'] = "1"; - // Cart::savePaymentMethod($payment); - - if ( - Cart::hasError() - || ! $payment - || ! Cart::savePaymentMethod($payment) - ) { - return response()->json([ - 'message' => 'save payment error', - ]); - } - - Cart::collectTotals(); - - $this->validateOrder(); - - $cart = Cart::getCart(); - - $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - - if ($redirectUrl = Payment::getRedirectUrl($cart)) { - $paypalStandard = app('Webkul\Paypal\Payment\Standard'); - $data = []; - $data['success'] = true; - $data['redirect'] = $redirectUrl; - $data['redirect_url'] = $redirectUrl; - $data['form'] = $paypalStandard->getFormFields(); - $data['pay_url'] = $paypalStandard->getPaypalUrl(); - $data['result'] = 200; - return response()->json($data); - } - - // $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - - // Cart::deActivateCart(); - - // Cart::activateCartIfSessionHasDeactivatedCartId(); - - // session()->flash('order', $order); - - // return new JsonResource([ - // 'success' => true, - // 'redirect' => true, - // 'redirect_url' => route('shop.checkout.onepage.success'), - // ]); - } - - // 商品更新到购物车中。http://45.79.79.208:8002/api/checkout/cart - // 订单基于购物车中的商品完成订单生成 - - } - - // paypal 生成订单动作 - /** - * - * @link https://gist.github.com/nicelizhi/76d2a09692459c1a22388366c5861521 input params - * @return - */ - public function order_addr_after(Request $request) { - $input = $request->all(); - - Log::info("order addr after ".json_encode($input)); - - $refer = $request->session()->get('refer'); - Log::info("refer checkout v1 ".$refer); - - $products = $request->input("products"); - // 添加到购物车 - Cart::deActivateCart(); - foreach($products as $key=>$product) { - //var_dump($product); - $product['quantity'] = $product['amount']; - $product['selected_configurable_option'] = $product['variant_id']; - $attr_ids = explode(',', $product['attr_id']); - foreach($attr_ids as $key=>$attr_id) { - $attr = explode('_', $attr_id); - $super_attribute[$attr[0]] = $attr[1]; - } - - $product['super_attribute'] = $super_attribute; - Log::info("add product into cart ". json_encode($product)); - $cart = Cart::addProduct($product['product_id'], $product); - if ( - is_array($cart) - && isset($cart['warning']) - ) { - return new JsonResource([ - 'message' => $cart['warning'], - ]); - } - } - // 添加地址内容 - $addressData = []; - $addressData['billing'] = []; - $address1 = []; - array_push($address1, $input['address']); - $addressData['billing']['city'] = $input['city']; - $addressData['billing']['country'] = $input['country']; - $addressData['billing']['email'] = $input['email']; - $addressData['billing']['first_name'] = $input['first_name']; - $addressData['billing']['last_name'] = $input['second_name']; - $input['phone_full'] = str_replace('undefined+','', $input['phone_full']); - $addressData['billing']['phone'] = $input['phone_full']; - $addressData['billing']['postcode'] = $input['code']; - $addressData['billing']['state'] = $input['province']; - $addressData['billing']['use_for_shipping'] = true; - $addressData['billing']['address1'] = $address1; - $addressData['shipping'] = []; - $addressData['shipping']['isSaved'] = false; - $address1 = []; - array_push($address1, ""); - $addressData['shipping']['address1'] = $address1; - - $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); - - $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); - - Log::info("paypal pay ".$refer.'--'.json_encode($addressData)); - - - if ( - Cart::hasError() - || ! Cart::saveCustomerAddress($addressData) - ) { - return new JsonResource([ - 'redirect' => true, - 'data' => route('shop.checkout.cart.index'), - ]); - } - - - //处理配送方式 - $shippingMethod = "free_free"; // 包邮 - $shippingMethod = "flatrate_flatrate"; - // Cart::saveShippingMethod($shippingMethod); - - if ( - Cart::hasError() - || ! $shippingMethod - || ! Cart::saveShippingMethod($shippingMethod) - ) { - return response()->json([ - 'redirect_url' => route('shop.checkout.cart.index'), - ], Response::HTTP_FORBIDDEN); - } - - Cart::collectTotals(); - - //处理支付方式 - $payment = []; - $payment['description'] = "PayPal-".$refer; - $payment['method'] = "paypal_smart_button"; - $payment['method_title'] = "PayPal Smart Button-".$refer; - $payment['sort'] = "1"; - // Cart::savePaymentMethod($payment); - - if ( - Cart::hasError() - || ! $payment - || ! Cart::savePaymentMethod($payment) - ) { - return response()->json([ - 'redirect_url' => route('shop.checkout.cart.index'), - ], Response::HTTP_FORBIDDEN); - } - - - /* - Cart::collectTotals(); - - $this->validateOrder(); - - $cart = Cart::getCart(); - - $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - - Cart::deActivateCart(); - - Cart::activateCartIfSessionHasDeactivatedCartId(); - */ - - try { - $order = $this->smartButton->createOrder($this->buildRequestBody()); - $data = []; - $data['order'] = $order; - $data['code'] = 200; - $data['result'] = 200; - return response()->json($order); - } catch (\Exception $e) { - return response()->json(json_decode($e->getMessage()), 400); - } - - // return response()->json($order); - } - - - /** - * - * - * - */ - public function confirm(Request $request) { - $payment_intent_id = $request->input("payment_intent_id"); - $order_id = $request->input("order_id"); - - $order = $this->orderRepository->find($order_id); - - $transactionManager = $this->airwallex->confirmPayment($payment_intent_id, $order); - - $data = []; - $data['payment'] = $transactionManager; - $data['code'] = 200; - $data['result'] = 200; - $data['order_id'] = $order_id; - $data['order_id'] = $order_id; - return response()->json($data); - - } - - /** - * - * 订单状态查询 - * - */ - public function order_status(Request $request) { - - $refer = $request->session()->get('refer'); - Log::info("refer checkout v1 ".$refer); - - try { - $order = $this->smartButton->getOrder(request()->input('orderData.orderID')); - // return response()->json($order); - - - Log::info("paypal ".json_encode($order)); - Log::info("paypal request ".json_encode($request->all())); - - $order = (array)$order; - - //var_dump($order); - - $purchase_units = (array)$order['result']->purchase_units; - $input = (array)$purchase_units[0]->shipping; - $payer = (array)$order['result']->payer; - $payment_source = (array)$order['result']->payment_source; - $payment_source_paypal = (array)$payment_source['paypal']; - - Log::info("paypal source".json_encode($payment_source)); - Log::info("paypal source paypal".json_encode($payment_source_paypal)); - - // 添加地址内容 - $addressData = []; - $addressData['billing'] = []; - $address1 = []; - array_push($address1, $input['address']->address_line_1); - $addressData['billing']['city'] = isset($input['address']->admin_area_1) ? $input['address']->admin_area_1 : ""; - $addressData['billing']['country'] = $input['address']->country_code; - $addressData['billing']['email'] = $payer['email_address']; - $addressData['billing']['first_name'] = $payer['name']->given_name; - $addressData['billing']['last_name'] = $payer['name']->surname; - $national_number = isset($payment_source_paypal['phone_number']) ? $payment_source_paypal['phone_number']->national_number : ""; - $addressData['billing']['phone'] = $national_number; - $addressData['billing']['postcode'] = isset($input['address']->postal_code) ? $input['address']->postal_code : ""; - $addressData['billing']['state'] = isset($input['address']->admin_area_2) ? $input['address']->admin_area_2 : ""; - $addressData['billing']['use_for_shipping'] = true; - $addressData['billing']['address1'] = $address1; - $addressData['shipping'] = []; - $addressData['shipping']['isSaved'] = false; - $address1 = []; - array_push($address1, ""); - $addressData['shipping']['address1'] = $address1; - - $addressData['billing']['address1'] = implode(PHP_EOL, $addressData['billing']['address1']); - - $addressData['shipping']['address1'] = implode(PHP_EOL, $addressData['shipping']['address1']); - - Log::info("address data-".$refer.'--'.json_encode($addressData)); - - if ( - Cart::hasError() - || ! Cart::saveCustomerAddress($addressData) - ) { - return new JsonResource([ - 'redirect' => true, - 'data' => route('shop.checkout.cart.index'), - ]); - } - - $this->smartButton->captureOrder(request()->input('orderData.orderID')); - return $this->saveOrder(); - } catch (\Exception $e) { - return response()->json($e->getMessage()); - return response()->json(json_decode($e->getMessage()), 400); - } - - } - - /** - * Saving order once captured and all formalities done. - * - * @return \Illuminate\Http\Response - */ - protected function saveOrder() - { - if (Cart::hasError()) { - return response()->json(['redirect_url' => route('shop.checkout.cart.index')], 403); - } - - try { - Cart::collectTotals(); - - $this->validateOrder(); - - $order = $this->orderRepository->create(Cart::prepareDataForOrder()); - - $this->orderRepository->update(['status' => 'processing'], $order->id); - - if ($order->canInvoice()) { - $this->invoiceRepository->create($this->prepareInvoiceData($order)); - } - - Cart::deActivateCart(); - - session()->flash('order', $order); - - return response()->json([ - 'success' => true, - ]); - } catch (\Exception $e) { - session()->flash('error', trans('shop::app.common.error')); - - throw $e; - } - } - - /** - * Prepares order's invoice data for creation. - * - * @param \Webkul\Sales\Models\Order $order - * @return array - */ - protected function prepareInvoiceData($order) - { - $invoiceData = ['order_id' => $order->id]; - - foreach ($order->items as $item) { - $invoiceData['invoice']['items'][$item->id] = $item->qty_to_invoice; - } - - return $invoiceData; - } - - protected function buildRequestBody() - { - $cart = Cart::getCart(); - - $billingAddressLines = $this->getAddressLines($cart->billing_address->address1); - - $data = [ - 'intent' => 'CAPTURE', - 'application_context' => [ - //'shipping_preference' => 'NO_SHIPPING', - 'shipping_preference' => 'GET_FROM_FILE', // 用户选择自己的地址内容 - ], - - 'purchase_units' => [ - [ - 'amount' => [ - 'value' => $this->smartButton->formatCurrencyValue((float) $cart->sub_total + $cart->tax_total + ($cart->selected_shipping_rate ? $cart->selected_shipping_rate->price : 0) - $cart->discount_amount), - 'currency_code' => $cart->cart_currency_code, - - 'breakdown' => [ - 'item_total' => [ - 'currency_code' => $cart->cart_currency_code, - 'value' => $this->smartButton->formatCurrencyValue((float) $cart->sub_total), - ], - - 'shipping' => [ - 'currency_code' => $cart->cart_currency_code, - 'value' => $this->smartButton->formatCurrencyValue((float) ($cart->selected_shipping_rate ? $cart->selected_shipping_rate->price : 0)), - ], - - 'tax_total' => [ - 'currency_code' => $cart->cart_currency_code, - 'value' => $this->smartButton->formatCurrencyValue((float) $cart->tax_total), - ], - - 'discount' => [ - 'currency_code' => $cart->cart_currency_code, - 'value' => $this->smartButton->formatCurrencyValue((float) $cart->discount_amount), - ], - ], - ], - - 'items' => $this->getLineItems($cart), - ], - ], - ]; - - if (! empty($cart->billing_address->phone)) { - $data['payer']['phone'] = [ - 'phone_type' => 'MOBILE', - - 'phone_number' => [ - 'national_number' => $this->smartButton->formatPhone($cart->billing_address->phone), - ], - ]; - } - - if ( - $cart->haveStockableItems() - && $cart->shipping_address - ) { - //$data['application_context']['shipping_preference'] = 'SET_PROVIDED_ADDRESS'; - - /* - $data['purchase_units'][0] = array_merge($data['purchase_units'][0], [ - 'shipping' => [ - 'address' => [ - 'address_line_1' => current($billingAddressLines), - 'address_line_2' => last($billingAddressLines), - 'admin_area_2' => $cart->shipping_address->city, - 'admin_area_1' => $cart->shipping_address->state, - 'postal_code' => $cart->shipping_address->postcode, - 'country_code' => $cart->shipping_address->country, - ], - ], - ]); - */ - } - - return $data; - } - - /** - * Return cart items. - * - * @param string $cart - * @return array - */ - protected function getLineItems($cart) - { - $lineItems = []; - - foreach ($cart->items as $item) { - $lineItems[] = [ - 'unit_amount' => [ - 'currency_code' => $cart->cart_currency_code, - 'value' => $this->smartButton->formatCurrencyValue((float) $item->price), - ], - 'quantity' => $item->quantity, - 'name' => $item->name, - 'sku' => $item->sku, - 'category' => $item->getTypeInstance()->isStockable() ? 'PHYSICAL_GOODS' : 'DIGITAL_GOODS', - ]; - } - - return $lineItems; - } - - /** - * Return convert multiple address lines into 2 address lines. - * - * @param string $address - * @return array - */ - protected function getAddressLines($address) - { - $address = explode(PHP_EOL, $address, 2); + $ob_adv_id = config('onebuy.ob_adv_id'); - $addressLines = [current($address)]; - if (isset($address[1])) { - $addressLines[] = str_replace(["\r\n", "\r", "\n"], ' ', last($address)); - } else { - $addressLines[] = ''; - } - - return $addressLines; + return view('onebuy::product-detail-v2', compact('gtag','app_env','product','package_products', 'product_attributes', 'skus','productBgAttribute','productBgAttribute_mobile','faqItems','comments','paypal_client_id','default_country','airwallex_method','payments','payments_default','brand','fb_ids','ob_adv_id')); } /** @@ -1110,15 +470,7 @@ private function getCartProductPrice($product, $product_id, $qty) { $AddcartProduct['super_attribute'] = $super_attribute; //var_dump($super_attribute);exit; - //var_dump($AddcartProduct);exit; - // $attr_ids = explode(',', $product['attr_id']); - // foreach($attr_ids as $key=>$attr_id) { - // $attr = explode('_', $attr_id); - // $super_attribute[$attr[0]] = $attr[1]; - // } - //$AddcartProduct['super_attribute'] = $super_attribute; - //var_dump($AddcartProduct);exit; $cart = Cart::addProduct($product['product_id'], $AddcartProduct); @@ -1134,101 +486,5 @@ private function getCartProductPrice($product, $product_id, $qty) { } - /** - * Validate order before creation. - * - * @return void|\Exception - */ - public function validateOrder() - { - $cart = Cart::getCart(); - - $minimumOrderAmount = core()->getConfigData('sales.order_settings.minimum_order.minimum_order_amount') ?: 0; - - if ( - auth()->guard('customer')->check() - && auth()->guard('customer')->user()->is_suspended - ) { - throw new \Exception(trans('shop::app.checkout.cart.suspended-account-message')); - } - - if ( - auth()->guard('customer')->user() - && ! auth()->guard('customer')->user()->status - ) { - throw new \Exception(trans('shop::app.checkout.cart.inactive-account-message')); - } - - if (! $cart->checkMinimumOrder()) { - throw new \Exception(trans('shop::app.checkout.cart.minimum-order-message', ['amount' => core()->currency($minimumOrderAmount)])); - } - - if ($cart->haveStockableItems() && ! $cart->shipping_address) { - throw new \Exception(trans('shop::app.checkout.cart.check-shipping-address')); - } - - if (! $cart->billing_address) { - throw new \Exception(trans('shop::app.checkout.cart.check-billing-address')); - } - - if ( - $cart->haveStockableItems() - && ! $cart->selected_shipping_rate - ) { - throw new \Exception(trans('shop::app.checkout.cart.specify-shipping-method')); - } - - if (! $cart->payment) { - throw new \Exception(trans('shop::app.checkout.cart.specify-payment-method')); - } - } - - /*** - * - * - */ - public function checkout_success(Request $request) { - \Debugbar::disable(); /* 开启后容易出现前端JS报错的情况 */ - $product = []; - $fb_ids = config('onebuy.fb_ids'); - return view('onebuy::checkout-success', compact('product','fb_ids')); - } - - public function order_query(Request $request) { - $order_id = $request->input("id"); - - $order = $this->orderRepository->find($order_id); - if(is_null($order)) { - return new JsonResource([ - 'order_id' => 0, - 'info' => [], - ]); - } - - return new JsonResource([ - 'order_id' => $order_id, - 'info' => $order, - ]); - } - - public function recommended_query(Request $request) { - - $checkout_path = $request->input("checkout_path"); - $recommended_info = []; - return new JsonResource([ - 'checkout_path' => $checkout_path, - 'recommended_info' => $recommended_info, - 'recommended_info_title' => 'recommended_info_title' - ]); - - } - - public function order_log(Request $request) { - Log::info("request ". json_encode($request->all())); - $session_data = $request->session()->all(); - Log::info("session ". json_encode($session_data)); - $refer = $request->cookie('refer'); - Log::info("cookie refer ". $refer); - } } \ No newline at end of file From 8c613a33b70434b93eeb8b23cd221563cc67a191 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 09:08:51 +0000 Subject: [PATCH 384/386] fix onebuy v2 --- .../views/product-detail-v2.blade.php | 2761 +++++++++++++++++ 1 file changed, 2761 insertions(+) create mode 100644 packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v2.blade.php diff --git a/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v2.blade.php b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v2.blade.php new file mode 100644 index 000000000..4a5366a4e --- /dev/null +++ b/packages/Nicelizhi/OneBuy/src/Resources/views/product-detail-v2.blade.php @@ -0,0 +1,2761 @@ +@inject ('reviewHelper', 'Webkul\Product\Helpers\Review') +@inject ('productViewHelper', 'Webkul\Product\Helpers\View') + +@php + $productBaseImage = product_image()->getProductBaseImage($product); +@endphp + + + + + {{ trim($product->meta_title) != "" ? $product->meta_title : $product->name }} + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    + + +
    +
    +
    +
    +
    +
    +
    + + + +
    +
    +@lang('onebuy::app.product.step.Select Quantity')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Payment')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Shipping Information')
    +
    +
    +
    +
    +
    +
    + + + +
    +
    + @lang('onebuy::app.product.step.Place Order')
    +
    +
    +
    +
    +
    +
    +
    +
    + +
    + @lang('onebuy::app.product.order.Secure Checkout')
    +
    + +
    +
    + $package_product) { ?> +
    + +
    + +
    + @lang('onebuy::app.product.order.RECOMMENDED DEAL')
    +
    + +
    +
    + +
    +
    +
    + + +
    + +
    @lang("onebuy::app.product.Savings")
    +
    +
    + +
    @lang("onebuy::app.product.piece")
    +
    +
    +
    + +
    +
    +
    + +
    +
    + @lang('onebuy::app.product.order.Express Checkout')
    +
    +
    + +
    +
    +
    +
    +
    +
    +
    +
    + +
    +
    +@lang('onebuy::app.product.order.Shipping')
    +
    +@lang('onebuy::app.product.order.Enter your contact information'). +
    +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    + +
    + + + +
    +
    + + + +
    +
    +
    + + + +
    +
    + + + +
    +
    + + + +
    +
    +
    +
    +
    +
    +@lang('onebuy::app.product.order.Order Summary')
    +
    + +
    +
    +
    + +@lang('onebuy::app.product.order.Subtotal'): + + +
    +
    + +@lang('onebuy::app.product.order.Discount'): + + +
    +
    + +@lang('onebuy::app.product.order.Shipping'): + + +
    + + +
    + +@lang('onebuy::app.product.order.Total'): + + +
    +
    +
    + +
    +
    +
    +
    + + + + +
    +@lang('onebuy::app.product.step.Payment')
    +
    +@lang('onebuy::app.product.order.All transactions are secure and encrypted'). +
    + +@include("onebuy::payments-".strtolower($default_country)) + + +
    + +
    +
    +
    + + + + + + + +
    +
    + +
    + +
    + +
    + + @lang('onebuy::app.product.order.What customers are saying about') +
    + +
    + +
    + $comment) { + $comment = json_decode($comment); + //var_dump($comment);exit; + ?> +
    +
    +
    +

    name, 0, 1);?>

    +

    name;?>

    +

    + Verified Buyer +

    +
    +
    +
    + +
    +
    +
    + +
    + title;?> + +

    content;?>

    + +
    +
    + + + +
    + + +
    + +
    + + +
    + +
    + + @lang('onebuy::app.product.order.Frequently Asked Questions') + +
    + +
    + + $item) { + $item = json_decode($item); + ?> + +
    + +

    + + + +

    + +
    + +
    + + a;?> + +
    + +
    + +
    + + + +
    + +
    +
    + +
    + +
    +@include('onebuy::footer-container-'.strtolower($default_country)) +
    +
    +
    +
    +product image +
    +
    +
    + firstName + lastName + . from + location +
    + just purchased: + product name +
    +
    @lang('onebuy::app.product.order.JUST NOW')
    +
    +
    +
    +
    +
    +
    +
    + +
    + +
    +
    +
    +
    +
    +
    + +
    +
    +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file From b5d2c407fdd336f429c8ce408979f5666ddb0a00 Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 09:09:16 +0000 Subject: [PATCH 385/386] fix onebuy v2 --- .../src/Console/Commands/Product/GetV2.php | 44 +++++++++---------- 1 file changed, 20 insertions(+), 24 deletions(-) diff --git a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php index 6dad5c974..b86a821b8 100644 --- a/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php +++ b/packages/Nicelizhi/Shopify/src/Console/Commands/Product/GetV2.php @@ -37,6 +37,8 @@ class GetV2 extends Command private $lang = null; + private $attr_id = 0; + private $locales = [ 'us', 'en', @@ -204,6 +206,7 @@ public function syncProductToLocal($shopify_pro_id) { //exit; } $this->info("attr id ". $attr_id); + if(!empty($attr_id)) $this->attr_id = $attr_id; $values = $option['values']; foreach($values as $kky => $value) { @@ -263,8 +266,6 @@ public function syncProductToLocal($shopify_pro_id) { $data['type'] = "configurable"; $data['super_attributes'] = $super_attributes; - // var_dump($data); - //var_dump($data);exit; Event::dispatch('catalog.product.create.before'); @@ -306,24 +307,15 @@ public function syncProductToLocal($shopify_pro_id) { //var_dump(count($shopifyVariants)); + var_dump($shopifyVariants); + $newShopifyVarants = []; foreach($shopifyVariants as $sv => $shopifyVariant) { //var_dump($shopifyVariant); $newkey = $shopifyVariant['product_id']; - if(!empty($color)) $color = AttributeOption::where("attribute_id", 23)->where("admin_name", $shopifyVariant['option1'])->first(); + if(!empty($attr_id)) $attr = AttributeOption::where("attribute_id", $this->attr_id)->where("admin_name", $shopifyVariant['option1'])->first(); - if(!empty($size)) $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); - - - - // if(is_null($color) || is_null($size)) { - // $this->info("error"); - // var_dump($color, $size, $shopifyVariant); - // exit; - // } - - - //$newkey .="_".$color->id."_".$size->id; + //if(!empty($size)) $size = AttributeOption::where("attribute_id", 24)->where("admin_name", $shopifyVariant['option2'])->first(); $newShopifyVarant = []; @@ -332,19 +324,16 @@ public function syncProductToLocal($shopify_pro_id) { $newShopifyVarant['title'] = $shopifyVariant['title']; $newShopifyVarant['weight'] = $shopifyVariant['weight']; $newShopifyVarant['sku'] = $shopifyVariant['sku']; - if(!is_null($color) && !empty($color)) { - $newkey .="_".$color->id; + if(!empty($attr)) { + $newkey .="_".$attr->id; $newShopifyVarant['option1'] = $shopifyVariant['option1']; } - if(!is_null($size) && !empty($size)) { - $newkey .="_".$size->id; - $newShopifyVarant['option2'] = $shopifyVariant['option2']; - } + //var_dump($newkey); $newShopifyVarants[$newkey] = $newShopifyVarant; } - //var_dump($newShopifyVarants);exit; + //var_dump($newShopifyVarants, $newShopifyVarant);exit; /** * @@ -360,6 +349,7 @@ public function syncProductToLocal($shopify_pro_id) { * */ $newVariants = []; + //var_dump($variants);exit; foreach($variants as $k => $variant) { $newkey = $item['product_id']; @@ -457,8 +447,11 @@ public function syncProductToLocal($shopify_pro_id) { } $images[] = $image_path; } - + $max_image_count = 3; + $i=0; foreach($images as $key=>$image) { + $i++; + if($max_image_count < $i) continue; $checkImg = ProductImage::where("product_id", $id)->where("path", $image)->first(); if(is_null($checkImg)) { $checkImg = new ProductImage(); @@ -515,8 +508,11 @@ public function syncProductToLocal($shopify_pro_id) { } $images[] = $image_path; } - + $max_image_count = 3; + $i=0; foreach($images as $key=>$image) { + $i++; + if($max_image_count < $i) continue; $checkImg = ProductImage::where("product_id", $sku->id)->where("path", $image)->first(); if(is_null($checkImg)) { $checkImg = new ProductImage(); From 8f1bce2961662942a8d5d34ceb814489f051562b Mon Sep 17 00:00:00 2001 From: Steve Date: Wed, 13 Mar 2024 09:24:38 +0000 Subject: [PATCH 386/386] fix saving bug --- .../OneBuy/src/Http/Controllers/ProductV2Controller.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php index 70e46d01c..4b245f031 100644 --- a/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php +++ b/packages/Nicelizhi/OneBuy/src/Http/Controllers/ProductV2Controller.php @@ -410,9 +410,11 @@ private function makeProducts($product, $nums = array()) { $package_product['new_price'] = $this->getCartProductPrice($product,$product->id, $i) * $discount; $package_product['new_price_format'] = core()->currency($package_product['new_price']) ; $tip1_price = (1 - round(($package_product['new_price'] / $package_product['old_price']), 2)) * 100; - $package_product['tip1'] = $tip1_price."% Savings"; + //$package_product['tip1'] = $tip1_price."% Savings"; + $package_product['tip1'] = $tip1_price."% "; $tip2_price = round($package_product['new_price'] / $i, 2); - $package_product['tip2'] = core()->currency($tip2_price)."/piece"; + //$package_product['tip2'] = core()->currency($tip2_price)."/piece"; + $package_product['tip2'] = core()->currency($tip2_price)."/"; $package_product['shipping_fee'] = $shipping_price; $popup_info['name'] = null; $popup_info['old_price'] = null;