предисловие
В связи с потребностями компании разработаныShopify
Плагин приложения записывает его сам. Кратко представитьShopify
, это канадский разработчик программного обеспечения для электронной коммерции, основанный Тобиасом Люком со штаб-квартирой в Оттаве, столице Канады, который предоставляет сервисное программное обеспечение.Shopify
ЯвляетсяSaaS
Система корзины покупок в этой области подходит для трансграничной электронной коммерции для создания независимой станции Пользователи могут заплатить определенную плату за создание собственного интернет-магазина с использованием различных тем / шаблонов.
Поскольку документы на официальном сайте за границей тоже на английском языке, это кажется немного сложным (Маленькие школьники ограниченно владеют английским языком 🤣🤣). Но после этого должен быть китайский.Сейчас на многих страницах китайский.
Вилка должна быть рекомендована для официальныхReact
изnext.js
Фреймворки рендеринга на стороне сервера иnode.js
Использовать в качестве внутреннего языкаGraphQL
разработка. как никогда не связывалсяGraphQL
Я быстро добавил волну знаний. Позже я споткнулся на всем пути и, наконец, теперь я понимаю общую идею. В конце концов, я все еще используюnode
В качестве основной программы входа убедитесь, что подключаемый модуль приложения получает соответствующиеaccess_token
и адрес магазина. какие еще запросыShopify
интерфейс не работаетGraphQL
вместо этого используетсяResfulApi
Пусть работают серверные рабочие, а затем я запрашиваю внутренний интерфейс для выполнения ряда операций. (Ознакомившись с ним в конце, все проверки оставлены для внутренних операций, и я могу использовать различные фреймворки на внешнем интерфейсе вместо того, чтобы просто использоватьnext.js
).
Зарегистрируйтесь для получения предварительных условий разработки
- Создайте
Shopify
учетная запись разработчикаКак показано вdevelopers.shopify.com/Аккаунт, связанный с регистрацией веб-сайта. - в связанных
partners
На странице создается магазин (для последующей разработки приложения) и приложение- При создании приложений есть пользовательские приложения и общедоступные приложения, как показано на рисунке:Как правило, я считаю, что все мы создаем общедоступные приложения, и приложения, которые я разработал до сих пор, также относятся к общедоступным типам.
URL
и соответствующие редиректыURL
Это должно быть написано, потому что я не зарегистрировал доменное имя или что-то еще, поэтому я использовал его в это время.ngrok
Проникновение в интранет также используется при официальном внедрении разработки. Здесь мы заполняемURL
будем использовать с вамиngrok
Выставленный адрес соответствует, но используйтеnode
изkoa
Во фреймворке есть специальное промежуточное ПО, которое также используется официально, после доменного имени добавляются адреса редиректа.shopify/auth
Например: URL-адрес:https://30aca829.ngrok.io
, URL-адрес перенаправления:https://30aca829.ngrok.io/shopify/auth/
(Компьютер перезагружается и снова выставляется, этот адрес нужно заполнить заново, а потомkoa
Промежуточное ПО перейдет кhttps://30aca829.ngrok.io/shopify/auth/
Выполните соответствующие операции проверки. (Это у черного входа). Код загрузится в последовательности, и потом мы его не будем использоватьkoa
В качестве адреса входа вы можете заполнить все, что хотите.) - Создание завершено (очень важно получить соответствующий ключ!! Очень важно!! Как разработчику прочитать данные и запросить официальную
api
использовать)Эти шаги являются почти предпосылкой.После успешной регистрации заполните ее, а затем последует ряд операций с кодом.
- При создании приложений есть пользовательские приложения и общедоступные приложения, как показано на рисунке:Как правило, я считаю, что все мы создаем общедоступные приложения, и приложения, которые я разработал до сих пор, также относятся к общедоступным типам.
Написание программ среды разработки
-
Создайте каталог проекта (пример-приложение) и используйте
npm
Инициализировать каталог проектаnpm init -y
-
Установить связанные зависимости
npm install --save react react-dom next
-
потому что он использует
next.js
Поэтому, если вы не знакомы с ним, вам нужно посмотреть официальную документацию.nextjs.frontendx.cn/Создать файл
pages
и создайте новый нижеindex.js
const Index = () => ( <div> <p>Sample app using React and Next.js</p> </div> ); export default Index;
Добавить связанную команду запуска, чтобы открыть
package.json
добавление файла{ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "next", "build": "next build", "start": "next start" } }
Запустите среду разработки
npm run dev
Здесь следует создать
next.js
проект, а затем пристыковался кShopify
-
использовать
ngrok
разоблачить себя3000
порт, потому чтоnext.js
По умолчанию для запуска3000
порт
Затем добавьте его в настройки созданного вами приложения.ngrok http 3000
对应的url
(придется использоватьhttps
) просто заполните вышеurl
-
использовать
node
изkoa
для отображения страницы-
Создайте
env
файл переменной среды и запись в приложение, созданное вышеKEY
SHOPIFY_API_KEY='YOUR API KEY FROM SHOPIFY PARTNERS DASHBOARD' SHOPIFY_API_SECRET_KEY='YOUR API SECRET KEY FROM SHOPIFY PARTNERS DASHBOARD'
-
Связанные с установкой
Shopify
проверкаkoa
промежуточное ПОnpm install --save koa @shopify/koa-shopify-auth dotenv koa-session isomorphic-fetch
-
Создайте
server.js
Напишите соответствующий проверочный кодrequire('isomorphic-fetch'); const dotenv = require('dotenv'); const Koa = require('koa'); const next = require('next'); const { default: createShopifyAuth } = require('@shopify/koa-shopify-auth'); const { verifyRequest } = require('@shopify/koa-shopify-auth'); const session = require('koa-session'); dotenv.config(); // graphql的相关中间件 const { default: graphQLProxy } = require('@shopify/koa-shopify-graphql-proxy'); const { ApiVersion } = require('@shopify/koa-shopify-graphql-proxy'); const port = parseInt(process.env.PORT, 10) || 3000; const dev = process.env.NODE_ENV !== 'production'; const app = next({ dev }); const handle = app.getRequestHandler(); const { SHOPIFY_API_SECRET_KEY, SHOPIFY_API_KEY } = process.env; // 环境变量里读取 api-key与api-secret-key app.prepare().then(() => { const server = new Koa(); server.use(session(server)); server.keys = [SHOPIFY_API_SECRET_KEY]; server.use( createShopifyAuth({ apiKey: SHOPIFY_API_KEY, secret: SHOPIFY_API_SECRET_KEY, scopes: ['read_products', 'write_products'], //填写相关应用api相关请求的权限 afterAuth(ctx) { const { shop, accessToken } = ctx.session; // 通过session拿取相关商店地址以及请求api需要的accessToken ctx.cookies.set('shopOrigin', shop, { httpOnly: false }); ctx.redirect('/'); // 重定向到index首页 }, }), ); server.use(verifyRequest()); server.use(async (ctx) => { await handle(ctx.req, ctx.res); ctx.respond = false; ctx.res.statusCode = 200; return }); server.use(graphQLProxy({version: ApiVersion.October19})) // 这里填写相关api的版本 server.listen(port, () => { console.log(`> Ready on http://localhost:${port}`); // 监听端口 }); });
-
Исправлять
package.json
файл с помощью нашегоserver.js
начать проект{ "scripts": { "test": "echo \"Error: no test specified\" && exit 1", "dev": "node server.js", "start": "NODE_ENV=production node server.js", "build": "next build", } }
Теперь запускаем проект и используем
Вот доменное имяngrok
Открытое доменное имя можно увидетьshop
Заполните адрес нашего магазина, например, мой собственный:https://e44132cd.ngrok.io/auth/inline?shop=jetbn.myshopify.com
После того, как все заполнено
enter
Страница автоматически перескакивает.Отобразилась последняя страница:
-
Попробуйте другие фреймворки
используется до и послеReact
изnext.js
Я разработал два или три приложения. Я чувствую, что это слишком хлопотно для разработки. Ему всегда нужно проникать в интранет, а отображаемые страницы всеShopify
На собственной платформе, и до сих пор очень медленно реагируют после разработки и написания кода. По этой причине я начал метаться и искать другие решения, чтобы посмотреть, смогу ли я перейти к нему после того, как сам его разработал, и пусть проверкаShopify
Серия операций для нашего внутреннего брата. В конце концов, мой выбор внешнего интерфейсаVue
И верификация ставится на бекенд, чтобы я как обычно развивалсяVue
пункт такой же.
Ниже представлен мой чистый интерфейсShopify
Операция проверки используетvue
. (Предпосылка заключается в том, что интранет проникает в элементы, но это не требуется для разработки)
-
Добавить маршрут установки приложения
{ path: '/shopify/install', beforeEnter(to, _from, next) { if (to.query.shop) { //要在域名后添加开发的商店地址 const shop = to.query.shop, scopes = 'read_orders,read_products,write_products', // api权限 // 重定向地址就是在创建应用的时候填写的第二个(重定向URL可以自己随意写了),我这里是域名加/shopify/auth redirect_uri = 'https://' + process.env.VUE_APP_ROOT_URL + '/shopify/auth', // 拼接安装应用地址需要SHOPIFY_API_KEY我填写在我的.env文件中了 install_url = 'http://' + shop + '/admin/oauth/authorize?client_id=' + process.env.VUE_APP_SHOPIFY_API_KEY + '&scope=' + scopes + '&redirect_uri=' + redirect_uri // 本地跳转安装地址 window.location = install_url } else { next({ path: '/error' }) } } },
-
Маршрут проверки перенаправления
{ path: '/shopify/auth', beforeEnter(to, _from, next) { // 通过回调的url获取相关的参数 const shop = to.query.shop, hmac = to.query.hmac, code = to.query.code // 使用SHOPIFY_API_SECRET_KEY验证 并且之后拿取access_token(这步没写) if (shop && hmac && code) { const map = Object.assign({}, to.query) delete map['signature'] delete map['hmac'] const message = querystring.stringify(map) const encrypted = crypto.createHmac('sha256', process.env.VUE_APP_SHOPIFY_API_SECRET_KEY) .update(message) .digest('hex') // const providedHmac = Buffer.from(hmac, 'utf-8') // const generatedHash = Buffer.from(encrypted, 'utf-8') let hashEquals = false try { // later: Auth fails with `crypto.timingSafeEqual` // hashEquals = crypto.timingSafeEqual(generatedHash, providedHmac) hashEquals = hmac === encrypted } catch (e) { hashEquals = false } if (!hashEquals) { next({ path: '/error' }) } else { next('/') } } else { next({ path: '/error' }) } } }
Vue
Эта родственная схема проверки также взята изGithub
Рыбачил выше, специально записал. Забыли конкретный адрес, можете сами поискать, если нужно. 🤣
Суммировать
经过一段时间的熟悉,自己也算又掌握一项新东西了。 НачалоShopify
Разработка приложений для плагинов - это действительно огромная яма.Хотя есть процессы официальной документации, они все на английском и основная конструкция всяapi
все используютGraphQL
Потом я сам перепробовал всякие операции таймаута, и забросил до окончания запроса.ResfulApi
. Затем я столкнулся с проблемой и не смог найти ее в этой книге.Я думал, что это слишком сложно для меня, поэтому мне пришлось стиснуть зубы и найти ее в официальной документации.В конце концов, это были взлеты и падения и, наконец, я знаком с этим.
После этого я обнаружил, что уровень английского слишком важен. Хотя основное содержание документов разработки можно понять, все они сомнительны, а потом переведены. (различные неточности), а потом начинайте заполнять на английском языке. 🤞
Напоследок ставлю несколькоShopify
Часто используемые адреса официальных документов для разработки:
Партнеры Shopify (создание приложения просмотра приложения):vue-composition-api-rfc.netlify.com
Shopify Developers (официальная документация по разработке):developers.shopify.com(создать справочную документацию)
Shopify Polaris (официальная структура пользовательского интерфейса):developers.shopify.com