{"id":425867,"date":"2024-07-09T15:10:57","date_gmt":"2024-07-09T15:10:57","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=425867"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=425867","title":{"rendered":"<span>\u041a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 OpenCart \u0434\u043b\u044f \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u0413\u0434\u0435-\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0435\u0441\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u043d\u0435\u0433\u043e\u0446\u0438\u0430\u043d\u0442 XXI \u0432\u0435\u043a\u0430. \u0423 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043b\u044b\u0445 \u0438\u0434\u0435\u0439, \u043d\u043e \u043c\u0430\u043b\u043e \u0437\u043e\u043b\u043e\u0442\u044b\u0445 \u0434\u0443\u0431\u043b\u043e\u043d\u043e\u0432 \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0448\u0435\u043b\u044c\u043a\u0435. \u041d\u0430\u0448 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 OpenCart.\u00a0<\/p>\n<p>\u0418 \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0438\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430, \u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.\u00a0<\/p>\n<p>\u041d\u0430\u0448 \u0433\u0435\u0440\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d. \u041c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0432 \u0431\u0435\u0434\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f OpenCart 4 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0451\u043c \u0432\u044b\u0437\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e API.\u00a0<\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS \u0447\u0435\u0440\u0435\u0437 API \u041c\u0422\u0421 Exolve, \u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e REST API.<\/p>\n<p>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"#a1\">\u0421\u0442\u0430\u0432\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a2\">\u0413\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a21\">OpenCart<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a22\">\u041c\u0422\u0421 Exolve API<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a3\">\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a31\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043c\u043e\u0434\u0443\u043b\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a32\">\u041a\u043e\u0434 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a321\">\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a322\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a323\">\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a33\">\u041a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a34\">\u0421\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a4\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a41\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a42\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"a1\" id=\"a1\"><\/a><\/p>\n<h2>\u0421\u0442\u0430\u0432\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443<\/h2>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 checkout \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u0437\u0430\u043a\u0430\u0437;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0433\u0430\u0437\u0438\u043d \u0432\u044b\u0437\u0432\u0430\u043b API \u041c\u0422\u0421 Exolve;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0422\u0421 Exolve \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/310\/1f4\/72a\/3101f472a3bf17ea0e616410cc4f3c7d.png\" alt=\"\u0421\u0445\u0435\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\" title=\"\u0421\u0445\u0435\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f\" width=\"779\" height=\"347\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/310\/1f4\/72a\/3101f472a3bf17ea0e616410cc4f3c7d.png\"\/><\/p>\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0435\u0440\u0441\u0438\u044e OpenCart 4.0.2.3.\u00a0<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.2+ \u0432 OpenCart \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0439 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0434 OpenCart <a href=\"https:\/\/github.com\/opencart\/opencart\/wiki\/Events-System\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/u><\/a> \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/github.com\/bosonbeard\/mts-habr\/tree\/main\/opencart\/opc_send_sms\"><u>GitHub<\/u><\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041c\u0422\u0421 Exolve \u0438 \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"a2\" id=\"a2\"><\/a><\/p>\n<h2>\u0413\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f<\/h2>\n<p><a class=\"anchor\" name=\"a21\" id=\"a21\"><\/a><\/p>\n<h3>OpenCart<\/h3>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 OpenCart. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c OpenCart 4.0.2.3, \u043d\u0430 PHP 8.1, \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a22\" id=\"a22\"><\/a><\/p>\n<h3>\u041c\u0422\u0421 Exolve API<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c SMS, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/exolve.ru\/\"><u>\u041c\u0422\u0421 Exolve<\/u><\/a>. \u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e 300 \u0440\u0443\u0431\u043b\u0435\u0439, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u00ab\u0437\u0430 \u0433\u043b\u0430\u0437\u0430\u00bb<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 API Token.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438\u0442\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440.<\/p>\n<\/li>\n<\/ol>\n<p>\u042f \u0443\u0436\u0435 \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u0444\u043b\u043e\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041c\u0422\u0421 Exolve \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 <a href=\"https:\/\/habr.com\/ru\/companies\/ru_mts\/articles\/739078\/\"><u>SMS \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 GitHub<\/u><\/a><em>. <\/em>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041b\u041a \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/docs.exolve.ru\/docs\/ru\/quick-start\/\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a3\" id=\"a3\"><\/a><\/p>\n<h2>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/h2>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440\u0430. \u042f \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0438 \u0441 OpenCart \u044f \u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438\u0437 \u0447\u0443\u0436\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u042d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p><a class=\"anchor\" name=\"a31\" id=\"a31\"><\/a><\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043c\u043e\u0434\u0443\u043b\u044f)<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f Opencart 4 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Model View Controller (MVC). \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u0443\u043a\u0432\u0443 l \u2013 Language.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0410\u0434\u043c\u0438\u043d \u043f\u0430\u043d\u0435\u043b\u044c \u2013 \u043f\u0430\u043f\u043a\u0430 admin;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u2013 \u043f\u0430\u043f\u043a\u0430 catalog.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0451 \u0440\u0430\u0437\u0434\u0435\u043b\u044b system \u0438 image.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e, \u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0430\u043f\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>controller \u2013 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>model \u2013 \u0441\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445);<\/p>\n<\/li>\n<li>\n<p>view \u2013 \u0441\u043b\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>language \u2013 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b <strong>install.json<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u0445.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/ae4\/b3f\/4d4\/ae4b3f4d4181b5f021290ac4c5f31f51.png\" alt=\"\u0422\u0438\u043f\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f OpenCart\" title=\"\u0422\u0438\u043f\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f OpenCart\" width=\"786\" height=\"514\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ae4\/b3f\/4d4\/ae4b3f4d4181b5f021290ac4c5f31f51.png\"\/><\/p>\n<div><figcaption>\u0422\u0438\u043f\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f OpenCart<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043f\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c. <br \/>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u043f\u043e\u043a model.<br \/>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c, \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a API \u041c\u0422\u0421 Exolve. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c controller.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/2ad\/cdf\/a08\/2adcdfa087bb20d84a77a669658ce2c6.png\" alt=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"300\" height=\"295\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/2ad\/cdf\/a08\/2adcdfa087bb20d84a77a669658ce2c6.png\"\/><\/p>\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"a32\" id=\"a32\"><\/a><\/p>\n<h3>\u041a\u043e\u0434 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438<\/h3>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435, \u0443\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f OpenCart 4. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u044f \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.\u00a0<\/p>\n<p>\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/bosonbeard\/mts-habr\/tree\/main\/opencart\/opc_send_sms\"><u>GitHub<\/u><\/a>.<\/p>\n<p>\u041d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <strong>opc send_sms. <\/strong>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435<strong> <\/strong>\u044d\u0442\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434. \u0412\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0430\u0434\u043e. \u041d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <strong>opc_send_sms.ocmod.zip.<\/strong><\/p>\n<p><a class=\"anchor\" name=\"a321\" id=\"a321\"><\/a><\/p>\n<h4>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p><strong>\/admin\/controller\/module\/send_sms.php<\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php \/**  * Extension name: Send SMS  * Descrption: Using this extension we will a send sms via MTS Exolve API after make order.  * Author: BosonBeard.   *   *\/ namespace Opencart\\Admin\\Controller\\Extension\\OpcSendSms\\Module;  use \\Opencart\\System\\Helper AS Helper;  class SendSMS extends \\Opencart\\System\\Engine\\Controller {             \/**    * index    *    * @return void    *\/    public function index(): void {       $this->load->language('extension\/opc_send_sms\/module\/send_sms');       $this->document->setTitle($this->language->get('heading_title'));        $data['breadcrumbs'] = [];        $data['breadcrumbs'][] = [          'text' => $this->language->get('text_home'),          'href' => $this->url->link('common\/dashboard','user_token='              .$this->session->data['user_token'])       ];        $data['breadcrumbs'][] = [          'text' => $this->language->get('text_extension'),          'href' => $this->url->link('marketplace\/extension','user_token='          .$this->session->data['user_token'] . '&amp;type=module')       ];        if (!isset($this->request->get['module_id'])) {          $data['breadcrumbs'][] = [             'text' => $this->language->get('heading_title'),             'href' => $this->url->link('extension\/opc_send_sms\/module\/send_sms','user_token='.              $this->session->data['user_token'])       ];       } else {          $data['breadcrumbs'][] = [             'text' => $this->language->get('heading_title'),             'href' => $this->url->link('extension\/opc_send_sms\/module\/send_sms','user_token='.              $this->session->data['user_token'] . '&amp;module_id=' . $this->request->get['module_id'])       ];       }                 \/\/ configuration save URL       $data['save'] = $this->url->link('extension\/opc_send_sms\/module\/send_sms.save', 'user_token=' . $this->session->data['user_token']);                 \/\/ back to previous page URL       $data['back'] = $this->url->link('marketplace\/extension', 'user_token=' . $this->session->data['user_token'] . '&amp;type=module');        \/\/ getting settings fields from extension configuration       $data['module_opc_send_sms_status'] = $this->config->get('module_opc_send_sms_status');       $data['module_opc_send_sms_token'] = $this->config->get('module_opc_send_sms_token');       $data['module_opc_send_sms_phone'] = $this->config->get('module_opc_send_sms_phone');       $data['module_opc_send_sms_text'] = $this->config->get('module_opc_send_sms_text');         $data['header'] = $this->load->controller('common\/header');       $data['column_left'] = $this->load->controller('common\/column_left');       $data['footer'] = $this->load->controller('common\/footer');        $this->response->setOutput($this->load->view('extension\/opc_send_sms\/module\/send_sms', $data));    }           \/**    * save method    *    * @return void    *\/    public function save(): void {       $this->load->language('extension\/opc_send_sms\/module\/send_sms');       $json = [];        if (!$this->user->hasPermission('modify', 'extension\/opc_send_sms\/module\/send_sms')) {       $json['error']['warning'] = $this->language->get('error_permission');       }        if (!isset($this->request->post['module_opc_send_sms_token'])) {          $json['error']['api-key'] = $this->language->get('error_api_token');       }       if (!isset($this->request->post['module_opc_send_sms_phone'])) {          $json['error']['api-key'] = $this->language->get('error_api_phone');       }     if (!$json) {       $this->load->model('setting\/setting');              \/\/ saving configuration       $this->model_setting_setting->editSetting('module_opc_send_sms_status', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_token', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_phone', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_text', $this->request->post);        $json['success'] = $this->language->get('text_success');    }     $this->response->addHeader('Content-Type: application\/json');    $this->response->setOutput(json_encode($json));    }        \/**    * install method    *    * @return void    *\/    public function install() {       \/\/ registering events to show menu       $this->__registerEvents();    }     \/**    * __registerEvents    *    * @return void    *\/    protected function __registerEvents() {        \/\/ check_event    $this->load->model('setting\/event');    if ($this->model_setting_event->getEventByCode('SendCheckoutSmsMtsExolve')) {       \/\/ The event exists, delete older version.       $this->model_setting_event->deleteEventByCode('SendCheckoutSmsMtsExolve');    }        \/\/ events array      $events   = array();      $events[] = array(        'code'        => \"SendCheckoutSmsMtsExolve\",        'trigger'     => \"catalog\/model\/checkout\/order\/addHistory\/before\",        'action'      => \"extension\/opc_send_sms\/event\/event\",        'description' => \"Send SMS after checkout via MTS Exolve\",        'status'      => 1,        'sort_order'  => 0,     );            \/\/ loading event model     $this->load->model('setting\/event');     foreach($events as $event){             \/\/ registering events in DB             $this->model_setting_event->addEvent($event);     }   }  }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u043c\u0441\u044f \u043d\u0430 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u0445.\u00a0<\/p>\n<p><code>namespace Opencart\\Admin\\Controller\\Extension\\OpcSendSms\\Module;<\/code><\/p>\n<p>\u041d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 namespace. \u042f \u0442\u043e\u0447\u043d\u043e \u043d\u0435 \u043d\u0430\u0448\u0435\u043b \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043f\u043e\u0447\u0435\u043c\u0443 \u0442\u0430\u043a, \u043d\u043e \u043a\u043e\u0440\u0440\u0435\u043a\u0442\u043d\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442, \u0442\u043e\u043b\u044c\u043a\u043e \u0435\u0441\u043b\u0438 \u0443\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0441\u0451 \u0432 PascalCase. \u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043c\u043e\u0434\u0443\u043b\u044f <strong>opc_send_sms<\/strong>, \u0447\u0442\u043e\u0431\u044b \u043f\u0435\u0440\u0435\u0432\u0435\u0441\u0442\u0438 \u0435\u0433\u043e \u0432 PascalCase \u0443\u0431\u0435\u0440\u0435\u043c \u0432\u0441\u0435 \u0441\u0438\u043c\u0432\u043e\u043b\u044b \u00ab_\u00bb \u0438 \u043a\u0430\u0436\u0434\u043e\u0435 \u043d\u043e\u0432\u043e\u0435 \u0441\u043b\u043e\u0432\u043e \u043d\u0430\u0447\u043d\u0435\u043c \u0441 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0443\u043a\u0432\u044b. \u041f\u043e\u043b\u0443\u0447\u0438\u043c OpcSendSms.<\/p>\n<p>\u0424\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u043e\u0442 \u043d\u0430\u0447\u0430\u043b\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0438\u00a0 <code>public function index(): void\u00a0 \u0434\u043e \u00a0\u00ab\/\/ getting settings fields from extension configuration\u00bb<\/code> \u2014 \u0442\u0438\u043f\u043e\u0432\u0430\u044f \u043b\u043e\u0433\u0438\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f. \u041e\u043d\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u0430\u0433\u043e\u043b\u043e\u0432\u043a\u0430, \u00ab\u0445\u043b\u0435\u0431\u043d\u044b\u0445 \u043a\u0440\u043e\u0448\u0435\u043a\u00bb, \u043b\u043e\u0433\u0438\u043a\u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u043d\u0430 \u043f\u0440\u043e\u0448\u043b\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 \u0438 \u0442.\u043f. \u0415\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u043c\u043e\u0434\u0443\u043b\u044c, \u0432\u0430\u043c \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u043f\u043e\u043c\u0435\u043d\u044f\u0442\u044c \u0430\u0434\u0440\u0435\u0441\u0430 \u043d\u0430 \u0441\u0432\u043e\u0438, \u0431\u0435\u0437 \u0433\u043b\u0443\u0431\u043e\u043a\u043e\u0433\u043e \u043f\u043e\u0433\u0440\u0443\u0436\u0435\u043d\u0438\u044f \u0432 \u043b\u043e\u0433\u0438\u043a\u0443.<\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0431\u043b\u043e\u043a:\u00a0\u00a0\u00a0\u00a0<\/p>\n<pre><code>\u00a0\/\/ getting settings fields from extension configuration  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['module_opc_send_sms_status'] = $this->config->get('module_opc_send_sms_status');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['module_opc_send_sms_token'] = $this->config->get('module_opc_send_sms_token');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['module_opc_send_sms_phone'] = $this->config->get('module_opc_send_sms_phone');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$data['module_opc_send_sms_text'] = $this->config->get('module_opc_send_sms_text');<\/code><\/pre>\n<p>\u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u044d\u0442\u0438\u0445 \u043f\u043e\u043b\u0435\u0439 \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a35\/275\/cb5\/a35275cb5fa2466644d7f739f5c6aab6.png\" alt=\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f\" title=\"\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f\" width=\"1075\" height=\"624\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a35\/275\/cb5\/a35275cb5fa2466644d7f739f5c6aab6.png\"\/><\/p>\n<div><figcaption>\u0420\u0435\u0434\u0430\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043c\u0435\u0442\u043e\u0434\u0435 <code>public function save(): void<\/code><em>, <\/em>\u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u043d\u0430\u0436\u0430\u0442\u0438\u044f \u043d\u0430 \u043a\u043d\u043e\u043f\u043a\u0443 \u00ab\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c\u00bb  \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c  \u0431\u043b\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043e\u0448\u0438\u0431\u043e\u043a:<\/p>\n<pre><code class=\"php\">\u00a0\u00a0if (!$this->user->hasPermission('modify', 'extension\/opc_send_sms\/module\/send_sms')) {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$json['error']['warning'] = $this->language->get('error_permission');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (!isset($this->request->post['module_opc_send_sms_token'])) {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$json['error']['api-key'] = $this->language->get('error_api_token');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (!isset($this->request->post['module_opc_send_sms_phone'])) {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$json['error']['api-key'] = $this->language->get('error_api_phone');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}<\/code><\/pre>\n<p>\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u0435 if \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u043f\u0440\u0430\u0432\u0430 \u043d\u0430 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f.\u00a0<\/p>\n<p>\u0412\u043e \u0432\u0442\u043e\u0440\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044f API key.<\/p>\n<p>\u0412 \u0442\u0440\u0435\u0442\u044c\u0435\u043c \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d \u043b\u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u041c\u0422\u0421 Exolve, \u0441 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0431\u0443\u0434\u0435\u0442 \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u043e SMS.<\/p>\n<p>\u0412 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0448\u0438\u0431\u043a\u0438 \u043c\u044b \u043f\u043e\u043a\u0430\u0437\u044b\u0432\u0430\u0435\u043c \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0438\u0437 \u0444\u0430\u0439\u043b\u0430 \u0432 \u043f\u0430\u043f\u043a\u0435 language.php. \u041d\u043e \u043e\u0431 \u044d\u0442\u043e\u043c \u043d\u0435\u043c\u043d\u043e\u0433\u043e \u043f\u043e\u0437\u0436\u0435.<\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0435\u0441\u043b\u0438 \u0432\u044b \u0431\u0443\u0434\u0435\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0451 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0442\u043e \u043d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0437\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439.<\/p>\n<pre><code>$this->model_setting_setting->editSetting('module_opc_send_sms_status', $this->request->post); $this->model_setting_setting->editSetting('module_opc_send_sms_token', $this->request->post); $this->model_setting_setting->editSetting('module_opc_send_sms_phone', $this->request->post); $this->model_setting_setting->editSetting('module_opc_send_sms_text', $this->request->post);<\/code><\/pre>\n<p>\u0418 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435, \u0447\u0442\u043e \u0441\u0442\u043e\u0438\u0442 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 \u043a\u043e\u0434\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u2013 \u044d\u0442\u043e \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0431\u044b\u0442\u0438\u044f \u0441 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u043e\u0439 SMS.<\/p>\n<p>\u041f\u043e-\u0445\u043e\u0440\u043e\u0448\u0435\u043c\u0443, \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043e\u0431\u044b\u0442\u0438\u044f, \u0432\u044b\u0437\u0432\u0430\u0432 \u043c\u0435\u0442\u043e\u0434 <code>addEvent<\/code>\u0438\u0437 \u043b\u044e\u0431\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430 \u0432 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0435 OpenCart 4. \u041d\u043e \u0441\u0430\u043c\u043e \u0441\u043e\u0431\u043e\u0439, \u0442\u0430\u043a \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0435 \u0441\u0442\u043e\u0438\u0442, \u043a\u0430\u043a \u043c\u0438\u043d\u0438\u043c\u0443\u043c, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043b\u043e\u0434\u0438\u0442\u044c \u0434\u0443\u0431\u043b\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0439 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435.<\/p>\n<p>\u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043c\u044b \u0431\u0443\u0434\u0435\u043c \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043d\u043e\u0432\u043e\u0435 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u0432 \u043c\u043e\u043c\u0435\u043d\u0442 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043f\u0440\u0438 \u0432\u044b\u0437\u043e\u0432\u0435 \u043c\u0435\u0442\u043e\u0434\u0430 <code>__registerEvents()<\/code>.<\/p>\n<p>\u0412\u043d\u0430\u0447\u0430\u043b\u0435 \u043c\u044b \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c, \u0435\u0441\u0442\u044c \u043b\u0438 \u0443\u0436\u0435 \u0432 \u0441\u0438\u0441\u0442\u0435\u043c\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0435 <code>SendCheckoutSmsMtsExolve<\/code>. \u0415\u0441\u043b\u0438 \u0435\u0441\u0442\u044c, \u0442\u043e \u0443\u0434\u0430\u043b\u044f\u0435\u043c, \u0443\u0441\u0442\u0440\u0430\u043d\u044f\u044f \u0434\u0443\u0431\u043b\u0438.<\/p>\n<pre><code>protected function __registerEvents() {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ check_event  \u00a0\u00a0\u00a0$this->load->model('setting\/event');  \u00a0\u00a0\u00a0if ($this->model_setting_event->getEventByCode('SendCheckoutSmsMtsExolve')) {  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ The event exists, delete older version.  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this->model_setting_event->deleteEventByCode('mSendCheckoutSmsMtsExolve');  \u00a0\u00a0\u00a0}<\/code><\/pre>\n<p>\u0414\u0430\u043b\u0435\u0435 \u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0435\u043c \u043c\u0430\u0441\u0441\u0438\u0432 \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041d\u043e \u0432 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u043d \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432\u0441\u0435\u0433\u043e \u0438\u0437 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430.<\/p>\n<pre><code>$events[] = array(  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'code'\u00a0 \u00a0 \u00a0 \u00a0 => \"SendCheckoutSmsMtsExolve_\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'trigger' \u00a0 \u00a0 => \"catalog\/model\/checkout\/order\/addHistory\/before\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'action'\u00a0 \u00a0 \u00a0 => \"extension\/opc_send_sms\/event\/event\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'description' => \"Send SMS after checkout via MTS Exolve\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'status'\u00a0 \u00a0 \u00a0 => 1,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'sort_order'\u00a0 => 0,  \u00a0\u00a0\u00a0\u00a0);<\/code><\/pre>\n<p>\u041e\u043d \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u0447\u0442\u043e \u043c\u044b \u0443\u0432\u0438\u0434\u0438\u043c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u0439.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/106\/b77\/82d\/106b7782d85bda59f8c594397c186b0e.png\" alt=\"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438\" title=\"\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438\" width=\"847\" height=\"571\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/106\/b77\/82d\/106b7782d85bda59f8c594397c186b0e.png\"\/><\/p>\n<div><figcaption>\u0423\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u043e\u0431\u044b\u0442\u0438\u044f\u043c\u0438<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"a322\" id=\"a322\"><\/a><\/p>\n<h4>\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/h4>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0435\u0440\u0435\u0439\u0434\u0435\u043c \u043a \u044f\u0437\u044b\u043a\u043e\u0432\u043e\u043c\u0443 \u0444\u0430\u0439\u043b\u0443.<\/p>\n<p><strong>admin\/language\/en-gb\/module\/send_sms.php<\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php \/\/ Heading $_['heading_title']    = 'MTS Exolve send SMS';  \/\/ Text $_['text_extension']   = 'Extensions'; $_['text_success']     = 'Success: You have modified show menu module!'; $_['text_edit']        = 'Edit Show Menu Module';  \/\/ Entry $_['entry_status']     = 'Status'; $_['entry_api_token']  = 'MTS Exolve API Key'; $_['entry_api_phone']  = 'MTS Exolve sender phone'; $_['entry_text']       = 'SMS text template';  \/\/ Error $_['error_permission'] = 'Warning: You do not have permission to modify this module!'; $_['error_api_token']  = 'MTS Exolve API Key Required'; $_['error_api_phone']  = 'MTS Exolve sender phone Required';<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 <code>save()<\/code> \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0431\u044b\u043b\u043e \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u0435 \u043e\u0431 \u043e\u0448\u0438\u0431\u043a\u0435 <code>$this->language->get('error_api_phone')<\/code>. \u0422\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043d\u0435\u0433\u043e \u043c\u044b \u0432\u043e\u0437\u044c\u043c\u0435\u043c \u043a\u0430\u043a \u0440\u0430\u0437 \u0438\u0437 \u044d\u0442\u043e\u0433\u043e \u0444\u0430\u0439\u043b\u0430. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435: \u00abMTS Exolve sender phone Required\u00bb.<\/p>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0444\u0430\u0439\u043b \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0438\u043b\u0438 \u043f\u043e-\u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b.<\/p>\n<p><a class=\"anchor\" name=\"a323\" id=\"a323\"><\/a><\/p>\n<h4>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/h4>\n<p><strong>admin\/view\/template\/module\/send_sms.twig<\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">{{ header }}{{ column_left }} &lt;div id=\"content\">    &lt;div class=\"page-header\">       &lt;div class=\"container-fluid\">      &lt;div class=\"float-end\">         &lt;button type=\"submit\" form=\"form-module\" data-bs-toggle=\"tooltip\" title=\"{{ button_save }}\" class=\"btn btn-primary\">                &lt;i class=\"fa-solid fa-save\">&lt;\/i>             &lt;\/button>                       &lt;a href=\"{{ back }}\" data-bs-toggle=\"tooltip\" title=\"{{ button_back }}\" class=\"btn btn-light\">                &lt;i class=\"fa-solid fa-reply\">&lt;\/i>             &lt;\/a>          &lt;\/div>                    &lt;h1>{{ heading_title }}&lt;\/h1>                   &lt;ol class=\"breadcrumb\">         {% for breadcrumb in breadcrumbs %}           &lt;li class=\"breadcrumb-item\">                  &lt;a href=\"{{ breadcrumb.href }}\">{{ breadcrumb.text }}&lt;\/a>                              &lt;\/li>         {% endfor %}      &lt;\/ol>       &lt;\/div>    &lt;\/div>    &lt;div class=\"container-fluid\">       &lt;div class=\"card\">      &lt;div class=\"card-header\">             &lt;i class=\"fa-solid fa-pencil\">&lt;\/i> {{ text_edit }}          &lt;\/div>       &lt;div class=\"card-body\">             &lt;form id=\"form-module\" action=\"{{ save }}\" method=\"post\" data-oc-toggle=\"ajax\">         &lt;div class=\"row mb-3\">                    &lt;label for=\"input-status\" class=\"col-sm-2 col-form-label\">                      {{ entry_status }}                    &lt;\/label>            &lt;div class=\"col-sm-10\">               &lt;div class=\"form-check form-switch form-switch-lg\">               &lt;input type=\"hidden\" name=\"module_opc_send_sms_status\" value=\"0\"\/>                &lt;input type=\"checkbox\" name=\"module_opc_send_sms_status\" value=\"1\"                 id=\"input-status\" class=\"form-check-input\"{% if module_opc_send_sms_status %} checked{% endif %}\/>               &lt;\/div>            &lt;\/div>         &lt;\/div>          &lt;div class=\"row mb-3 required\">          &lt;label class=\"col-sm-2 col-form-label\" for=\"input-api_token\">{{ entry_api_token }}&lt;\/label>          &lt;div class=\"col-sm-10\">            &lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_api_token }}\"             name=\"module_opc_send_sms_token\" value=\"{{ module_opc_send_sms_token }}\">            &lt;div id=\"error-api-token\" class=\"invalid-feedback\">&lt;\/div>          &lt;\/div>        &lt;\/div>          &lt;div class=\"row mb-3 required\">          &lt;label class=\"col-sm-2 col-form-label\" for=\"input-api_phone\">{{ entry_api_phone }}&lt;\/label>          &lt;div class=\"col-sm-10\">            &lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_api_phone }}\"             name=\"module_opc_send_sms_phone\" value=\"{{ module_opc_send_sms_phone }}\">            &lt;div id=\"error-api-phone\" class=\"invalid-feedback\">&lt;\/div>          &lt;\/div>        &lt;\/div>          &lt;div class=\"row mb-3 required\">          &lt;label class=\"col-sm-2 col-form-label\" for=\"input-text\">{{ entry_text }}&lt;\/label>          &lt;div class=\"col-sm-10\">            &lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_text }}\"             name=\"module_opc_send_sms_text\" value=\"{{ module_opc_send_sms_text }}\">           &lt;p>Use %order_id% to place varible. &lt;br> E.g. Your order %order_id% created.&lt;\/p>          &lt;\/div>        &lt;\/div>          &lt;\/form>      &lt;\/div>       &lt;\/div>    &lt;\/div> &lt;\/div> {{ footer }} <\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0430\u0439\u043b \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u0442\u043e, \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430 \u043d\u0430\u0441\u0442\u0440\u043e\u0435\u043a \u043c\u043e\u0434\u0443\u043b\u044f \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438. \u041c\u044b \u0443\u0436\u0435 \u0432\u0438\u0434\u0435\u043b\u0438 \u0435\u0451, \u043a\u043e\u0433\u0434\u0430 \u0438\u0441\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043b\u0438 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440.<\/p>\n<pre><code>\u00a0\u00a0&lt;form id=\"form-module\" action=\"{{ save }}\" method=\"post\" data-oc-toggle=\"ajax\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row mb-3\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label for=\"input-status\" class=\"col-sm-2 col-form-label\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{{ entry_status }}  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/label>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-sm-10\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"form-check form-switch form-switch-lg\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"hidden\" name=\"module_opc_send_sms_status\" value=\"0\"\/>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"checkbox\" name=\"module_opc_send_sms_status\" value=\"1\"\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0id=\"input-status\" class=\"form-check-input\"{% if module_opc_send_sms_status %} checked{% endif %}\/>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row mb-3 required\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label class=\"col-sm-2 col-form-label\" for=\"input-api_token\">{{ entry_api_token }}&lt;\/label>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-sm-10\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_api_token }}\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name=\"module_opc_send_sms_token\" value=\"{{ module_opc_send_sms_token }}\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"error-api-token\" class=\"invalid-feedback\">&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row mb-3 required\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label class=\"col-sm-2 col-form-label\" for=\"input-api_phone\">{{ entry_api_phone }}&lt;\/label>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-sm-10\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_api_phone }}\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name=\"module_opc_send_sms_phone\" value=\"{{ module_opc_send_sms_phone }}\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div id=\"error-api-phone\" class=\"invalid-feedback\">&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"row mb-3 required\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;label class=\"col-sm-2 col-form-label\" for=\"input-text\">{{ entry_text }}&lt;\/label>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;div class=\"col-sm-10\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;input type=\"text\" class=\"form-control\" placeholder=\"{{ entry_text }}\"  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0name=\"module_opc_send_sms_text\" value=\"{{ module_opc_send_sms_text }}\">  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;p>Use %order_id% to place varible. &lt;br> E.g. Your order %order_id% created.&lt;\/p>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/div>  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0&lt;\/form><\/code><\/pre>\n<p>\u042d\u0442\u043e\u0442 \u0444\u0440\u0430\u0433\u043c\u0435\u043d\u0442 \u043a\u043e\u0434\u0430 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u0437\u0430 \u043f\u043e\u043b\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0432\u043e\u0434\u0438\u043c \u0434\u0430\u043d\u043d\u044b\u0435. \u0415\u0441\u043b\u0438 \u0432\u044b \u0440\u0435\u0448\u0438\u0442\u0435 \u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435, \u0442\u043e \u0441\u043a\u043e\u0440\u0435\u0435 \u0432\u0441\u0435\u0433\u043e \u0438\u043c\u0435\u043d\u043d\u043e \u044d\u0442\u043e\u0442 \u0431\u043b\u043e\u043a \u0432\u0430\u043c \u043f\u0440\u0435\u0434\u0441\u0442\u043e\u0438\u0442 \u0438\u0437\u043c\u0435\u043d\u0438\u0442\u044c \u0432 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c.<\/p>\n<p><a class=\"anchor\" name=\"a33\" id=\"a33\"><\/a><\/p>\n<h3>\u041a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/h3>\n<p>\u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0433\u043e\u0432\u043e\u0440\u0438\u043b, \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u043c\u044b \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u043e\u0432, \u0442\u0440\u0435\u0431\u0443\u044e\u0449\u0438\u0445 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0438\u043b\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u0431\u0430\u0437\u044b \u0434\u0430\u043d\u043d\u044b\u0445. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u0432\u0441\u0451, \u0447\u0442\u043e \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u044d\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0435 \u043b\u043e\u0433\u0438\u043a\u0443 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f <em>SendCheckoutSmsMtsExolve<\/em>, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u044b \u0440\u0430\u043d\u0435\u0435 \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438 \u0432 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438.<\/p>\n<p>\u0421\u043e\u0431\u044b\u0442\u0438\u0435 \u0431\u0443\u0434\u0435\u0442 \u0441\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u043f\u0435\u0448\u043d\u043e\u0433\u043e \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430.<\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0444\u0430\u0439\u043b:<\/p>\n<p><strong>catalog\/controller\/event\/event.php<\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c.<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php \/**  * Extension name: Send SMS  * Descrption: Using this extension we will a send sms via MTS Exolve API after make order.  * Author: BosonBeard.   *   *\/ namespace Opencart\\Catalog\\Controller\\Extension\\OpcSendSms\\Event;  class Event extends \\Opencart\\System\\Engine\\Controller {     \/**      * index      * Event trigger: catalog\/model\/checkout\/order\/addHistory\/before      * @param  mixed $route      * @param  mixed $data      * @param  mixed $output      * @return void      *\/     public function index(&amp;$route = false, &amp;$data = array(), &amp;$output = array()): void {          \/\/ get data from OpenCart          $order_id = \"none\";         $this->load->model('setting\/setting');          if (isset($this->session->data['order_id']))             {                     $order_id = $this->session->data['order_id'];             }                   \/\/ get data from OpenCart         $customer_phone = $this->customer->getTelephone();            \/\/ get data from extension opc_send_sms          $sender_phone =  $this->config->get('module_opc_send_sms_phone');         $token =  $this->config->get('module_opc_send_sms_token');         $text_raw =  $this->config->get('module_opc_send_sms_text');                  if (!$text_raw)         {             $text_raw = \"Order $order_id created.\";         }             $text = str_replace('%order_id%',$order_id,$text_raw);          \/\/ send request to MTS Exolve API         $curl = curl_init();          curl_setopt_array($curl, array(         CURLOPT_URL => 'https:\/\/api.exolve.ru\/messaging\/v1\/SendSMS',         CURLOPT_RETURNTRANSFER => true,         CURLOPT_ENCODING => '',         CURLOPT_MAXREDIRS => 10,         CURLOPT_TIMEOUT => 0,         CURLOPT_FOLLOWLOCATION => true,         CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,         CURLOPT_CUSTOMREQUEST => 'POST',         CURLOPT_POSTFIELDS =>'{         \"number\": \"'.$sender_phone.'\",         \"destination\": \"'.$customer_phone.'\",         \"text\": \"'.$text.'\"          }         ',         CURLOPT_HTTPHEADER => array(             'Content-Type: application\/json',             \"Authorization: Bearer $token\"             ),         ));         $response = curl_exec($curl);         curl_close($curl);              }      \/**      * getTemplateBuffer      *      * @param  mixed $route      * @param  mixed $event_template_buffer      * @return string      *\/     protected function getTemplateBuffer($route, $event_template_buffer) {          \/\/ if there already is a modified template from view\/*\/before events use that one         if ($event_template_buffer) {             return $event_template_buffer;         }     } }<\/code><\/pre>\n<\/p>\n<\/div>\n<\/details>\n<p>\u041c\u044b \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c \u0434\u0432\u0430 \u0431\u043b\u043e\u043a\u0430 \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0438.<\/p>\n<pre><code>\u00a0\u00a0$order_id = \"none\";  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$this->load->model('setting\/setting');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (isset($this->session->data['order_id']))  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$order_id = $this->session->data['order_id']; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ get data from OpenCart  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$customer_phone = $this->customer->getTelephone();\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\/\/ get data from extension opc_send_sms\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$sender_phone =\u00a0 $this->config->get('module_opc_send_sms_phone');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$token =\u00a0 $this->config->get('module_opc_send_sms_token');  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$text_raw =\u00a0 $this->config->get('module_opc_send_sms_text');\u00a0\u00a0\u00a0\u00a0\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0if (!$text_raw)  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0{ \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$text_raw = \"Order $order_id created.\"; \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}\u00a0\u00a0\u00a0\u00a0  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$text = str_replace('%order_id%',$order_id,$text_raw);<\/code><\/pre>\n<p>\u00a0\u0412 \u043f\u0435\u0440\u0432\u043e\u043c \u0431\u043b\u043e\u043a\u0435 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u0434\u0430\u043d\u043d\u044b\u0435 \u0438\u0437 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430: \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430 \u0438 \u0442\u0435\u043b\u0435\u0444\u043e\u043d \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0441\u043e\u0437\u0434\u0430\u043b\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u043e\u0435 \u043d\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435.<\/p>\n<p>\u0412\u0442\u043e\u0440\u043e\u0439 \u0431\u043b\u043e\u043a \u0435\u0449\u0435 \u043f\u0440\u043e\u0449\u0435, \u044d\u0442\u043e \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0430 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043a \u043c\u0435\u0442\u043e\u0434\u0443 https:\/\/api.exolve.ru\/messaging\/v1\/SendSMS MTS Exolve API (<a href=\"https:\/\/docs.exolve.ru\/docs\/ru\/api-reference\/sms-api\/sending-sms\/\"><u>\u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044e<\/u><\/a>).<\/p>\n<p>\u041a\u043e\u0434 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0441\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d Postman. \u042f \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0434\u0441\u0442\u0430\u0432\u0438\u043b \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u044b\u0435 \u0432 \u0437\u0430\u043f\u0440\u043e\u0441.<\/p>\n<pre><code>\u00a0\/\/ send request to MTS Exolve API  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$curl = curl_init();  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_setopt_array($curl, array(  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_URL => 'https:\/\/api.exolve.ru\/messaging\/v1\/SendSMS',  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_RETURNTRANSFER => true,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_ENCODING => '',  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_MAXREDIRS => 10,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_TIMEOUT => 0,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_FOLLOWLOCATION => true,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_CUSTOMREQUEST => 'POST',  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_POSTFIELDS =>'{  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"number\": \"'.$sender_phone.'\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"destination\": \"'.$customer_phone.'\",  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"text\": \"'.$text.'\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0}  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0',  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0CURLOPT_HTTPHEADER => array(  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0'Content-Type: application\/json', \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\"Authorization: Bearer $token\" \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0),  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0));  \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0$response = curl_exec($curl); \u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0curl_close($curl); \u00a0\u00a0\u00a0}<\/code><\/pre>\n<p><a class=\"anchor\" name=\"a34\" id=\"a34\"><\/a><\/p>\n<h3>\u0421\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/h3>\n<p>\u041f\u0440\u0435\u0436\u0434\u0435 \u0447\u0435\u043c \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u043d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0444\u0430\u0439\u043b install.json.<\/p>\n<pre><code>{  \u00a0\u00a0\u00a0\"name\": \"MTS Exolve checkout SMS notification \",  \u00a0\u00a0\u00a0\"version\": \"0.1\",  \u00a0\u00a0\u00a0\"author\": \"bosonbeard\",  \u00a0\u00a0\u00a0\"link\": \"hhttps:\/\/github.com\/bosonbeard\/mts-habr\"  }<\/code><\/pre>\n<p>\u041f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0431\u043e\u0440\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043e\u0447\u0435\u043d\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439. \u041d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0440\u043e\u0441\u0442\u043e \u0437\u0430\u043f\u0430\u043a\u043e\u0432\u0430\u0442\u044c \u0432\u0441\u0435 \u043f\u0430\u043f\u043a\u0438 \u0432 \u0430\u0440\u0445\u0438\u0432 \u0441 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 <strong>{\u0438\u043c\u044f \u043c\u043e\u0434\u0443\u043b\u044f}.ocmod.zip<\/strong>.<\/p>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 opc_send_sms.ocmod.zip. \u0415\u0441\u043b\u0438 \u0432\u044b \u043e\u0448\u0438\u0431\u0435\u0442\u0435\u0441\u044c \u0432 \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0438 \u0430\u0440\u0445\u0438\u0432\u0430, \u0442\u043e \u043f\u043e\u0441\u043b\u0435 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u043c\u043e\u0434\u0443\u043b\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0448\u0438\u0431\u043a\u0438.<\/p>\n<p>\u041f\u0440\u0438\u043c\u0435\u0440 \u0430\u0440\u0445\u0438\u0432\u0430 \u0434\u043b\u044f \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/287\/81c\/a3e\/28781ca3e3073809518a1f30633b7eb3.png\" alt=\"\u0410\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0410\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"392\" height=\"198\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/287\/81c\/a3e\/28781ca3e3073809518a1f30633b7eb3.png\"\/><\/p>\n<div><figcaption>\u0410\u0440\u0445\u0438\u0432 \u0441 \u0444\u0430\u0439\u043b\u0430\u043c\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"a4\" id=\"a4\"><\/a><\/p>\n<h2>\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443<\/h2>\n<p><a class=\"anchor\" name=\"a41\" id=\"a41\"><\/a><\/p>\n<h3>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/h3>\n<p>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438:<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/265\/f05\/6cf\/265f056cf4701d96665102680c8da6a5.png\" alt=\"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"1073\" height=\"303\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/265\/f05\/6cf\/265f056cf4701d96665102680c8da6a5.png\"\/><\/p>\n<div><figcaption>\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041f\u043e\u0441\u043b\u0435 \u0437\u0430\u0433\u0440\u0443\u0437\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0435\u0433\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/056\/dcb\/e38\/056dcbe383f05c6a685a6fc82d83e673.png\" alt=\"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"795\" height=\"181\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/056\/dcb\/e38\/056dcbe383f05c6a685a6fc82d83e673.png\"\/><\/p>\n<div><figcaption>\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0414\u0430\u043b\u0435\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u043f\u0435\u0440\u0435\u0439\u0442\u0438 \u0432 \u0441\u043f\u0438\u0441\u043e\u043a \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044b\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439. \u041c\u044b \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043b\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0441 \u0442\u0438\u043f\u043e\u043c \u00ab\u043c\u043e\u0434\u0443\u043b\u044c\u00bb, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0431\u0443\u0434\u0435\u043c \u0438\u0441\u043a\u0430\u0442\u044c \u0432 \u043e\u0434\u043d\u043e\u0438\u043c\u0435\u043d\u043d\u043e\u043c \u0440\u0430\u0437\u0434\u0435\u043b\u0435.<\/p>\n<p>\u041d\u0430\u043c \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043c\u043e\u0434\u0443\u043b\u044c.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/8c0\/2b5\/8c1\/8c02b58c10b2b28b983445f8c432f4af.png\" alt=\"\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"823\" height=\"71\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/8c0\/2b5\/8c1\/8c02b58c10b2b28b983445f8c432f4af.png\"\/><\/p>\n<div><figcaption>\u041f\u0435\u0440\u0435\u0445\u043e\u0434 \u043a \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u0410 \u0437\u0430\u0442\u0435\u043c \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u0435\u0433\u043e \u0438 \u0437\u0430\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/a6b\/5c1\/446\/a6b5c1446de8ef3b6b8b8a3757ce0baa.png\" alt=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" title=\"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f\" width=\"861\" height=\"568\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/a6b\/5c1\/446\/a6b5c1446de8ef3b6b8b8a3757ce0baa.png\"\/><\/p>\n<div><figcaption>\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435 \u043d\u0430 <em>%order_id%<\/em>. \u0412 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0435 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0430 \u0434\u0430\u043d\u043d\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u043d\u0430 \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e OpenCart \u0441 \u043d\u043e\u043c\u0435\u0440\u043e\u043c \u0442\u0435\u043a\u0443\u0449\u0435\u0433\u043e \u0437\u0430\u043a\u0430\u0437\u0430 order_id. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0443 \u0434\u0440\u0443\u0433\u0438\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438.<\/p>\n<p>\u0412\u0430\u0436\u043d\u044b\u0439 \u043c\u043e\u043c\u0435\u043d\u0442: \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0430 SMS \u043c\u043e\u0436\u043d\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043d\u0430 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0432\u044b \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043b\u0438\u0441\u044c \u0432 MT\u0421 Exolve. \u041e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u0435 \u0441\u043d\u0438\u043c\u0430\u0435\u0442\u0441\u044f \u043f\u043e\u0441\u043b\u0435 \u0437\u0430\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0433\u043e\u0432\u043e\u0440\u0430.<\/p>\n<p>\u041d\u0435 \u0437\u0430\u0431\u0443\u0434\u044c\u0442\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442.<\/p>\n<p><a class=\"anchor\" name=\"a42\" id=\"a42\"><\/a><\/p>\n<h3>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/h3>\n<p>\u041e\u0441\u0442\u0430\u043b\u043e\u0441\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0437\u0430\u043a\u0430\u0437 \u0438 \u0443\u0431\u0435\u0434\u0438\u0442\u0441\u044f, \u0447\u0442\u043e SMS \u043f\u0440\u0438\u0448\u043b\u043e.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/d04\/0f3\/712\/d040f3712a57bb642bc928e375351e36.png\" alt=\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u0430\" title=\"\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u0430\" width=\"911\" height=\"685\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/d04\/0f3\/712\/d040f3712a57bb642bc928e375351e36.png\"\/><\/p>\n<div><figcaption>\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 \u0437\u0430\u043a\u0430\u0437\u0430<\/figcaption><\/div>\n<\/figure>\n<p>\u0417\u0430\u043a\u0430\u0437 \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/efd\/464\/9bb\/efd4649bbf2941e84312432c9c26e105.png\" alt=\"\u0417\u0430\u043a\u0430\u0437 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\" title=\"\u0417\u0430\u043a\u0430\u0437 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d\" width=\"762\" height=\"300\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/efd\/464\/9bb\/efd4649bbf2941e84312432c9c26e105.png\"\/><\/p>\n<div><figcaption>\u0417\u0430\u043a\u0430\u0437 \u0441\u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u043d<\/figcaption><\/div>\n<\/figure>\n<p>\u041e \u0447\u0435\u043c \u043d\u0430\u043c \u043f\u0440\u0438\u0448\u043b\u043e SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/57e\/996\/cd9\/57e996cd957c45bc78076df8b36e39e4.png\" alt=\"SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\" title=\"SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435\" width=\"576\" height=\"253\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/57e\/996\/cd9\/57e996cd957c45bc78076df8b36e39e4.png\"\/><\/p>\n<div><figcaption>SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435<\/figcaption><\/div>\n<\/figure>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0441\u0430\u043c\u043e\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u043d\u043e \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f OpenCart 4 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0441\u043e\u0431\u044b\u0442\u0438\u0439. \u041d\u043e \u0435\u0441\u043b\u0438 \u0432\u0430\u043c \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u044e\u0442\u0441\u044f \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0438, \u043c\u043e\u0436\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 <a href=\"https:\/\/github.com\/bosonbeard\/mts-habr\/tree\/main\/opencart\/opc_send_sms\"><u>GitHub<\/u><\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043f\u043e\u043f\u0440\u043e\u0431\u043e\u0432\u0430\u0442\u044c \u0435\u0433\u043e \u043d\u0430 \u0441\u0432\u043e\u0451\u043c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435.<\/p>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0441\u0442\u0430\u0442\u044c\u044f \u0431\u044b\u043b\u0430 \u0434\u043b\u044f \u0432\u0430\u0441 \u043f\u043e\u043b\u0435\u0437\u043d\u043e\u0439. \u0411\u0443\u0434\u0443 \u0440\u0430\u0434 \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432\u0430\u0448\u0438 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0438.<\/p>\n<\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><!----><br \/> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/827168\/\"> https:\/\/habr.com\/ru\/articles\/827168\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e. \u0413\u0434\u0435-\u0442\u043e \u043d\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0440\u0430\u0445 \u043d\u0430\u0448\u0435\u0439 \u0441\u0442\u0440\u0430\u043d\u044b \u0435\u0441\u0442\u044c \u0431\u043b\u0430\u0433\u043e\u0440\u043e\u0434\u043d\u044b\u0439 \u043d\u0435\u0433\u043e\u0446\u0438\u0430\u043d\u0442 XXI \u0432\u0435\u043a\u0430. \u0423 \u043d\u0435\u0433\u043e \u043c\u043d\u043e\u0433\u043e \u0441\u0432\u0435\u0442\u043b\u044b\u0445 \u0438\u0434\u0435\u0439, \u043d\u043e \u043c\u0430\u043b\u043e \u0437\u043e\u043b\u043e\u0442\u044b\u0445 \u0434\u0443\u0431\u043b\u043e\u043d\u043e\u0432 \u0432 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u043e\u043c \u043a\u043e\u0448\u0435\u043b\u044c\u043a\u0435. \u041d\u0430\u0448 \u043f\u0440\u0435\u0434\u043f\u0440\u0438\u043d\u0438\u043c\u0430\u0442\u0435\u043b\u044c \u0432\u044b\u0431\u0440\u0430\u043b \u0434\u043b\u044f \u0441\u0435\u0431\u044f \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u0430\u043c\u044b\u0445 \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u043d\u044b\u0445 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u044b\u0445 \u0434\u0432\u0438\u0436\u043a\u043e\u0432 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u0432 \u0420\u043e\u0441\u0441\u0438\u0438 OpenCart.\u00a0<\/p>\n<p>\u0418 \u0432\u0440\u043e\u0434\u0435 \u0432\u0441\u0451 \u0438\u0434\u0435\u0442 \u0445\u043e\u0440\u043e\u0448\u043e, \u043d\u043e \u0445\u043e\u0447\u0435\u0442\u0441\u044f \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0445 \u0444\u0443\u043d\u043a\u0446\u0438\u0439, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043f\u043e\u0441\u043b\u0435 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430, \u0434\u0430 \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u043e\u043a\u0443\u043f\u0430\u0442\u044c \u043f\u043b\u0430\u0442\u043d\u044b\u0435 \u043c\u043e\u0434\u0443\u043b\u0438.\u00a0<\/p>\n<p>\u041d\u0430\u0448 \u0433\u0435\u0440\u043e\u0439 \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442 \u0438\u0441\u043a\u0430\u0442\u044c \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044e \u043e \u0442\u043e\u043c, \u043a\u0430\u043a \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0441\u0432\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d. \u041c\u044b \u0441 \u0432\u0430\u043c\u0438 \u043d\u0435 \u043c\u043e\u0436\u0435\u043c \u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0432 \u0431\u0435\u0434\u0435. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0442\u0443\u0442\u043e\u0440\u0438\u0430\u043b, \u043a\u0430\u043a \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f OpenCart 4 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u043d\u0451\u043c \u0432\u044b\u0437\u043e\u0432 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e API.\u00a0<\/p>\n<p>\u0420\u0430\u0437\u0431\u0435\u0440\u0443 \u043f\u0440\u0438\u043c\u0435\u0440 \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0438 SMS \u0447\u0435\u0440\u0435\u0437 API \u041c\u0422\u0421 Exolve, \u043d\u043e \u0432 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0435 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u044b \u0441\u0442\u0430\u0442\u044c\u0438 \u0441 \u043d\u0435\u0431\u043e\u043b\u044c\u0448\u0438\u043c\u0438 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u043a\u0430\u043c\u0438 \u043f\u043e\u0434\u043e\u0439\u0434\u0443\u0442 \u0434\u043b\u044f \u0432\u044b\u0437\u043e\u0432\u0430 \u043b\u044e\u0431\u043e\u0433\u043e \u0434\u0440\u0443\u0433\u043e\u0433\u043e REST API.<\/p>\n<p>\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435:<\/p>\n<ul>\n<li>\n<p><a href=\"#a1\">\u0421\u0442\u0430\u0432\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a2\">\u0413\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a21\">OpenCart<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a22\">\u041c\u0422\u0421 Exolve API<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a3\">\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a31\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043c\u043e\u0434\u0443\u043b\u044f)<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a32\">\u041a\u043e\u0434 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a321\">\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a322\">\u041f\u0435\u0440\u0435\u0432\u043e\u0434<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a323\">\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a33\">\u041a\u043e\u0434 \u0434\u043b\u044f \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a34\">\u0421\u0431\u043e\u0440\u043a\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<li>\n<p><a href=\"#a4\">\u041f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u043c \u0440\u0430\u0431\u043e\u0442\u0443<\/a><\/p>\n<ul>\n<li>\n<p><a href=\"#a41\">\u0423\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0430<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"#a42\">\u041f\u0440\u043e\u0432\u0435\u0440\u043a\u0430<\/a><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a class=\"anchor\" name=\"a1\" id=\"a1\"><\/a><\/p>\n<h2>\u0421\u0442\u0430\u0432\u0438\u043c \u0437\u0430\u0434\u0430\u0447\u0443<\/h2>\n<p>\u0421\u0435\u0433\u043e\u0434\u043d\u044f \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u0434\u043b\u044f \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u0446\u0435\u043d\u0430\u0440\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c \u043d\u0430 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0435 checkout \u0443\u0441\u043f\u0435\u0448\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u043b \u0437\u0430\u043a\u0430\u0437;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0430\u0433\u0430\u0437\u0438\u043d \u0432\u044b\u0437\u0432\u0430\u043b API \u041c\u0422\u0421 Exolve;<\/p>\n<\/li>\n<li>\n<p>\u041c\u0422\u0421 Exolve \u043e\u0442\u043f\u0440\u0430\u0432\u0438\u043b SMS \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044e.<\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\">\n<div><figcaption>\u0421\u0445\u0435\u043c\u0430 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p>\u041e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c\u0441\u044f \u0431\u0443\u0434\u0435\u043c \u043d\u0430 \u0441\u0430\u043c\u0443\u044e \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044e\u044e \u043d\u0430 \u043c\u043e\u043c\u0435\u043d\u0442 \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0438 \u0441\u0442\u0430\u0442\u044c\u0438 \u0432\u0435\u0440\u0441\u0438\u044e OpenCart 4.0.2.3.\u00a0<\/p>\n<p>\u041d\u0430\u0447\u0438\u043d\u0430\u044f \u0441 \u0432\u0435\u0440\u0441\u0438\u0438 2.2+ \u0432 OpenCart \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0441\u043e\u0431\u044b\u0442\u0438\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c \u0438\u043b\u0438 \u0437\u0430\u043c\u0435\u043d\u0438\u0442\u044c \u043b\u043e\u0433\u0438\u043a\u0443 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0438\u043b\u0438 \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0430 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430. \u041f\u0440\u043e\u0431\u043b\u0435\u043c\u0430 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u043d\u0430 \u043c\u043e\u0439 \u0441\u0443\u0431\u044a\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0439 \u0432\u0437\u0433\u043b\u044f\u0434, \u0434\u043b\u044f \u043d\u043e\u0432\u0438\u0447\u043a\u0430 \u0432 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0435 \u043f\u043e\u0434 OpenCart <a href=\"https:\/\/github.com\/opencart\/opencart\/wiki\/Events-System\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u044f<\/u><\/a> \u043f\u043e \u0434\u0430\u043d\u043d\u043e\u0439 \u0442\u0435\u043c\u0435 \u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0431\u043e\u043b\u044c\u0448\u0435 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432, \u0447\u0435\u043c \u043e\u0442\u0432\u0435\u0442\u043e\u0432. \u0418\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043d\u0430\u0431\u0440\u043e\u0441\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0431\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0433\u043e \u043c\u043e\u0434\u0443\u043b\u044f.<\/p>\n<p>\u041c\u043e\u0434\u0443\u043b\u044c \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0441\u044f \u0432\u043f\u043e\u043b\u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u043d\u044b\u043c. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0435\u0433\u043e \u0441\u043a\u0430\u0447\u0430\u0442\u044c \u0441 <a href=\"https:\/\/github.com\/bosonbeard\/mts-habr\/tree\/main\/opencart\/opc_send_sms\"><u>GitHub<\/u><\/a>, \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0441\u0432\u043e\u0438 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041c\u0422\u0421 Exolve \u0438 \u0441\u043c\u0435\u043b\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c.<\/p>\n<p><a class=\"anchor\" name=\"a2\" id=\"a2\"><\/a><\/p>\n<h2>\u0413\u043e\u0442\u043e\u0432\u0438\u043c\u0441\u044f<\/h2>\n<p><a class=\"anchor\" name=\"a21\" id=\"a21\"><\/a><\/p>\n<h3>OpenCart<\/h3>\n<p>\u041c\u044b \u043d\u0435 \u0431\u0443\u0434\u0435\u043c \u0440\u0430\u0441\u0441\u043c\u0430\u0442\u0440\u0438\u0432\u0430\u0442\u044c \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 OpenCart. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433-\u043f\u0440\u043e\u0432\u0430\u0439\u0434\u0435\u0440\u043e\u043c OpenCart 4.0.2.3, \u043d\u0430 PHP 8.1, \u0431\u0435\u0437 \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0438 \u0440\u0443\u0441\u0438\u0444\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u0434\u0440\u0443\u0433\u0438\u0445 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0439.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a22\" id=\"a22\"><\/a><\/p>\n<h3>\u041c\u0422\u0421 Exolve API<\/h3>\n<p>\u0414\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0442\u044c SMS, \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f:<\/p>\n<ol>\n<li>\n<p>\u0417\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u0443\u0439\u0442\u0435\u0441\u044c \u043d\u0430 \u0441\u0430\u0439\u0442\u0435 <a href=\"https:\/\/exolve.ru\/\"><u>\u041c\u0422\u0421 Exolve<\/u><\/a>. \u0418 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 \u0431\u0435\u0441\u043f\u043b\u0430\u0442\u043d\u043e 300 \u0440\u0443\u0431\u043b\u0435\u0439, \u0434\u043b\u044f \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u0414\u043b\u044f \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438 \u0438 \u043e\u0442\u043b\u0430\u0434\u043a\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0430\u043c \u0445\u0432\u0430\u0442\u0438\u0442 \u00ab\u0437\u0430 \u0433\u043b\u0430\u0437\u0430\u00bb<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u0435 \u043d\u043e\u043c\u0435\u0440 \u0442\u0435\u043b\u0435\u0444\u043e\u043d\u0430.<\/p>\n<\/li>\n<li>\n<p>\u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435.<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u0443\u0447\u0438\u0442\u0435 API Token.<\/p>\n<\/li>\n<li>\n<p>\u041f\u0440\u0438\u043e\u0431\u0440\u0435\u0442\u0438\u0442\u0435 \u0441\u0442\u0430\u0440\u0442\u043e\u0432\u044b\u0439 \u043d\u043e\u043c\u0435\u0440.<\/p>\n<\/li>\n<\/ol>\n<p>\u042f \u0443\u0436\u0435 \u043a\u0440\u0430\u0442\u043a\u043e \u0440\u0430\u0437\u0431\u0438\u0440\u0430\u043b \u0444\u043b\u043e\u0443 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041c\u0422\u0421 Exolve \u0432 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043a\u0443 <a href=\"https:\/\/habr.com\/ru\/companies\/ru_mts\/articles\/739078\/\"><u>SMS \u0432 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0432 GitHub<\/u><\/a><em>. <\/em>\u0414\u0435\u0442\u0430\u043b\u044c\u043d\u043e \u0441 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u041b\u041a \u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0432 <a href=\"https:\/\/docs.exolve.ru\/docs\/ru\/quick-start\/\"><u>\u043e\u0444\u0438\u0446\u0438\u0430\u043b\u044c\u043d\u043e\u0439 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0438\u0438<\/u><\/a>.\u00a0<\/p>\n<p><a class=\"anchor\" name=\"a3\" id=\"a3\"><\/a><\/p>\n<h2>\u041f\u0438\u0448\u0435\u043c \u043a\u043e\u0434<\/h2>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u0442\u0440\u0430\u0434\u0438\u0446\u0438\u043e\u043d\u043d\u043e\u0433\u043e \u0434\u0438\u0441\u043a\u043b\u0435\u0439\u043c\u0435\u0440\u0430. \u042f \u043d\u0435 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0441\u0442, \u0438 \u0441 OpenCart \u044f \u0437\u043d\u0430\u043a\u043e\u043c \u043f\u043e\u0432\u0435\u0440\u0445\u043d\u043e\u0441\u0442\u043d\u043e. \u041c\u043d\u043e\u0433\u0438\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u044f \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u0438\u0437 \u0447\u0443\u0436\u0438\u0445 \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u043e\u0432 \u0438 \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043b \u043f\u043e\u0434 \u0441\u0435\u0431\u044f. \u042d\u0442\u043e \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043e\u043d\u0446\u0435\u043f\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0434\u043e\u0440\u0430\u0431\u043e\u0442\u0430\u0442\u044c \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0434\u0440\u0443\u0433\u0438\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p>\n<p><a class=\"anchor\" name=\"a31\" id=\"a31\"><\/a><\/p>\n<h3>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f (\u043c\u043e\u0434\u0443\u043b\u044f)<\/h3>\n<p>\u0412 \u043e\u0431\u0449\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u043b\u044f Opencart 4 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0430 \u043d\u0430 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Model View Controller (MVC). \u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u044f\u0445 \u0435\u0449\u0435 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u044e\u0442 \u0431\u0443\u043a\u0432\u0443 l \u2013 Language.<\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u0438 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0434\u0435\u043b\u044f\u0442\u0441\u044f \u043d\u0430 \u0434\u0432\u0435 \u0441\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0435:<\/p>\n<ul>\n<li>\n<p>\u0410\u0434\u043c\u0438\u043d \u043f\u0430\u043d\u0435\u043b\u044c \u2013 \u043f\u0430\u043f\u043a\u0430 admin;<\/p>\n<\/li>\n<li>\n<p>\u041f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u0447\u0430\u0441\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442-\u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0430 \u2013 \u043f\u0430\u043f\u043a\u0430 catalog.<\/p>\n<\/li>\n<\/ul>\n<p>\u0412 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0432 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u0441\u0442\u0440\u0435\u0442\u0438\u0442\u044c\u0441\u044f \u0435\u0449\u0451 \u0440\u0430\u0437\u0434\u0435\u043b\u044b system \u0438 image.<\/p>\n<p>\u0415\u0441\u043b\u0438 \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u044c \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u043e, \u0442\u043e \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u0438\u0437 \u044d\u0442\u0438\u0445 \u0440\u0430\u0437\u0434\u0435\u043b\u043e\u0432 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0441\u0432\u043e\u0438 \u043a\u043b\u044e\u0447\u0435\u0432\u044b\u0435 \u043f\u0430\u043f\u043a\u0438:<\/p>\n<ul>\n<li>\n<p>controller \u2013 \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0431\u0438\u0437\u043d\u0435\u0441-\u043b\u043e\u0433\u0438\u043a\u0430;<\/p>\n<\/li>\n<li>\n<p>model \u2013 \u0441\u043b\u043e\u0439 \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0434\u0430\u043d\u043d\u044b\u043c\u0438 (\u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043a \u0431\u0430\u0437\u0435 \u0434\u0430\u043d\u043d\u044b\u0445);<\/p>\n<\/li>\n<li>\n<p>view \u2013 \u0441\u043b\u043e\u0439 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f, \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446 \u0438 \u0431\u043b\u043e\u043a\u043e\u0432.<\/p>\n<\/li>\n<li>\n<p>language \u2013 \u043f\u0435\u0440\u0435\u0432\u043e\u0434 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0435 \u044f\u0437\u044b\u043a\u0438.<\/p>\n<\/li>\n<\/ul>\n<p>\u041e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u043e\u0442\u043c\u0435\u0442\u0438\u043c \u043b\u0435\u0436\u0430\u0449\u0438\u0439 \u0432 \u043a\u043e\u0440\u043d\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0444\u0430\u0439\u043b <strong>install.json<\/strong>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0445\u0440\u0430\u043d\u0438\u0442\u0441\u044f \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0438 \u0438 \u0435\u0433\u043e \u0430\u0432\u0442\u043e\u0440\u0430\u0445.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>\u0422\u0438\u043f\u043e\u0432\u0430\u044f \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f OpenCart<\/figcaption><\/div>\n<\/figure>\n<p>\u0412 \u043d\u0430\u0448\u0435\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043d\u0430\u0431\u043e\u0440 \u043f\u0430\u043f\u043e\u043a \u0431\u0443\u0434\u0435\u0442 \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u043c. <br \/>\u0412\u043e-\u043f\u0435\u0440\u0432\u044b\u0445, \u043c\u044b \u043d\u0438\u0433\u0434\u0435 \u043d\u0435 \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u043c \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u0441 \u0431\u0430\u0437\u043e\u0439 \u0434\u0430\u043d\u043d\u044b\u0445, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u0443 \u043d\u0430\u0441 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043f\u0430\u043f\u043e\u043a model.<br \/>\u0412\u043e-\u0432\u0442\u043e\u0440\u044b\u0445, \u0432 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u0441\u043a\u043e\u0439 \u0447\u0430\u0441\u0442\u0438 \u043d\u0430\u043c \u043d\u0435 \u043d\u0430\u0434\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c, \u043c\u044b \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u043c \u0437\u0430\u043f\u0440\u043e\u0441 \u043a API \u041c\u0422\u0421 Exolve. \u041f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c controller.<\/p>\n<p>\u0412\u043e\u0442 \u043a\u0430\u043a \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u043d\u0430\u0448\u0435\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f:<\/p>\n<figure class=\"\">\n<div><figcaption>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430 \u0440\u0430\u0437\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f<\/figcaption><\/div>\n<\/figure>\n<p><a class=\"anchor\" name=\"a32\" id=\"a32\"><\/a><\/p>\n<h3>\u041a\u043e\u0434 \u0434\u043b\u044f \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438<\/h3>\n<p>\u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u0434. \u041d\u043e \u043f\u0440\u0435\u0436\u0434\u0435, \u0443\u0442\u043e\u0447\u043d\u044e, \u0447\u0442\u043e \u044f \u043d\u0435 \u043f\u043e\u0433\u0440\u0443\u0436\u0430\u043b\u0441\u044f \u0433\u043b\u0443\u0431\u043e\u043a\u043e \u0432 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0434\u043b\u044f OpenCart 4. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u0435\u0449\u0438 \u044f \u043f\u043e\u0437\u0430\u0438\u043c\u0441\u0442\u0432\u043e\u0432\u0430\u043b \u043f\u043e \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0438 \u0438 \u043d\u0435 \u043d\u0430 100% \u043f\u043e\u043d\u0438\u043c\u0430\u044e, \u043a\u0430\u043a \u043e\u043d\u0438 \u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0442.\u00a0<\/p>\n<p>\u041e\u0437\u043d\u0430\u043a\u043e\u043c\u0438\u0442\u0441\u044f \u0441 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u043c \u043a\u043e\u0434\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u043d\u0430 <a href=\"https:\/\/github.com\/bosonbeard\/mts-habr\/tree\/main\/opencart\/opc_send_sms\"><u>GitHub<\/u><\/a>.<\/p>\n<p>\u041d\u0430\u0448 \u043c\u043e\u0434\u0443\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0437\u044b\u0432\u0430\u0442\u044c\u0441\u044f <strong>opc send_sms. <\/strong>\u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435<strong> <\/strong>\u044d\u0442\u043e \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u0441\u043a\u0430\u044f \u043a\u043e\u0440\u043d\u0435\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043b\u0435\u0436\u0438\u0442 \u0432\u0435\u0441\u044c \u043a\u043e\u0434. \u0412\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0435\u0451 \u0432 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u043d\u0435 \u043d\u0430\u0434\u043e. \u041d\u043e \u043d\u0430\u0437\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043f\u043a\u0438 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c, \u043a\u043e\u0433\u0434\u0430 \u0431\u0443\u0434\u0435\u043c \u0444\u043e\u0440\u043c\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0430\u0440\u0445\u0438\u0432 \u0441 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435\u043c <strong>opc_send_sms.ocmod.zip.<\/strong><\/p>\n<p><a class=\"anchor\" name=\"a321\" id=\"a321\"><\/a><\/p>\n<h4>\u041a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440<\/h4>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0444\u0430\u0439\u043b \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430 \u0430\u0434\u043c\u0438\u043d-\u043f\u0430\u043d\u0435\u043b\u0438 \u043f\u043e \u0430\u0434\u0440\u0435\u0441\u0443:<\/p>\n<p><strong>\/admin\/controller\/module\/send_sms.php<\/strong><\/p>\n<p>\u041f\u043e\u043b\u043d\u044b\u0439 \u043a\u043e\u0434 \u0444\u0430\u0439\u043b\u0430 \u043f\u043e\u0434 \u0441\u043f\u043e\u0439\u043b\u0435\u0440\u043e\u043c<\/p>\n<details class=\"spoiler\">\n<summary>\u0420\u0430\u0437\u0432\u0435\u0440\u043d\u0443\u0442\u044c \u043a\u043e\u0434<\/summary>\n<div class=\"spoiler__content\">\n<pre><code class=\"php\">&lt;?php \/**  * Extension name: Send SMS  * Descrption: Using this extension we will a send sms via MTS Exolve API after make order.  * Author: BosonBeard.   *   *\/ namespace Opencart\\Admin\\Controller\\Extension\\OpcSendSms\\Module;  use \\Opencart\\System\\Helper AS Helper;  class SendSMS extends \\Opencart\\System\\Engine\\Controller {             \/**    * index    *    * @return void    *\/    public function index(): void {       $this->load->language('extension\/opc_send_sms\/module\/send_sms');       $this->document->setTitle($this->language->get('heading_title'));        $data['breadcrumbs'] = [];        $data['breadcrumbs'][] = [          'text' => $this->language->get('text_home'),          'href' => $this->url->link('common\/dashboard','user_token='              .$this->session->data['user_token'])       ];        $data['breadcrumbs'][] = [          'text' => $this->language->get('text_extension'),          'href' => $this->url->link('marketplace\/extension','user_token='          .$this->session->data['user_token'] . '&amp;type=module')       ];        if (!isset($this->request->get['module_id'])) {          $data['breadcrumbs'][] = [             'text' => $this->language->get('heading_title'),             'href' => $this->url->link('extension\/opc_send_sms\/module\/send_sms','user_token='.              $this->session->data['user_token'])       ];       } else {          $data['breadcrumbs'][] = [             'text' => $this->language->get('heading_title'),             'href' => $this->url->link('extension\/opc_send_sms\/module\/send_sms','user_token='.              $this->session->data['user_token'] . '&amp;module_id=' . $this->request->get['module_id'])       ];       }                 \/\/ configuration save URL       $data['save'] = $this->url->link('extension\/opc_send_sms\/module\/send_sms.save', 'user_token=' . $this->session->data['user_token']);                 \/\/ back to previous page URL       $data['back'] = $this->url->link('marketplace\/extension', 'user_token=' . $this->session->data['user_token'] . '&amp;type=module');        \/\/ getting settings fields from extension configuration       $data['module_opc_send_sms_status'] = $this->config->get('module_opc_send_sms_status');       $data['module_opc_send_sms_token'] = $this->config->get('module_opc_send_sms_token');       $data['module_opc_send_sms_phone'] = $this->config->get('module_opc_send_sms_phone');       $data['module_opc_send_sms_text'] = $this->config->get('module_opc_send_sms_text');         $data['header'] = $this->load->controller('common\/header');       $data['column_left'] = $this->load->controller('common\/column_left');       $data['footer'] = $this->load->controller('common\/footer');        $this->response->setOutput($this->load->view('extension\/opc_send_sms\/module\/send_sms', $data));    }           \/**    * save method    *    * @return void    *\/    public function save(): void {       $this->load->language('extension\/opc_send_sms\/module\/send_sms');       $json = [];        if (!$this->user->hasPermission('modify', 'extension\/opc_send_sms\/module\/send_sms')) {       $json['error']['warning'] = $this->language->get('error_permission');       }        if (!isset($this->request->post['module_opc_send_sms_token'])) {          $json['error']['api-key'] = $this->language->get('error_api_token');       }       if (!isset($this->request->post['module_opc_send_sms_phone'])) {          $json['error']['api-key'] = $this->language->get('error_api_phone');       }     if (!$json) {       $this->load->model('setting\/setting');              \/\/ saving configuration       $this->model_setting_setting->editSetting('module_opc_send_sms_status', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_token', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_phone', $this->request->post);       $this->model_setting_setting->editSetting('module_opc_send_sms_text', $this->request->post);        $json['success'] = $this->language->get('text_success');    }     $this->response->addHeader('Content-Type: application\/json');    $this->response->setOutput(json_encode($json));    }        \/**    * install method    *    * @return void    *\/    public function install() {       \/\/ registering events to show menu       $this->__registerEvents();    }     \/**    * __registerEvents    *    * @return void    *\/    protected function __registerEvents() {        \/\/ check_event    $this->load->model('setting\/event');    if ($this->model_setting_event->getEventByCode('SendCheckoutSmsMtsExolve')) {       \/\/ The event exists, delete older version.       $this->model_setting_event->deleteEventByCode('SendCheckoutSmsMtsExolve');    }        \/\/ events array      $events   = array();      $events[] = array(        'code'        => \"SendCheckoutSmsMtsExolve\",        'trigger'     => \"catalog\/model\/checkout\/order\/addHistory\/before\",        'action'      => \"extension\/opc_send_sms\/event\/event\",        'description' => \"Send SMS after checkout via MTS Exolve\",        'status'      => 1,        'sort_order'  => 0,     );            \/\/ loading event model<\/code><\/pre>\n<\/div>\n<\/details>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-425867","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/425867","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=425867"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/425867\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=425867"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=425867"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=425867"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}