Shopify Checkout UI Extensions

结账界面的UI扩展允许应用开发者构建自定义功能,商家可以在结账流程的定义点安装,包括产品信息、运输、支付、订单摘要和Shop Pay。

Shopify官方在去年2024年使用结账扩展取代了checkout.liquid,并将于2025年8月28日彻底停用checkout.liquid。

步骤1:初始化shopify app和checkout ui extension

npm init @shopify/app@latest
cd your-app
npm run shopify app generate extension

步骤2:配置checkout extension的shopify.extension.toml文件

Configuration

当创建一个扩展checkout ui扩展时,shopify.extension.toml 文件会自动生成在扩展目录中。该文件包含了扩展的配置信息,其中包括扩展名称、扩展目标、元字段、功能以及设置定义。

配置扩展点

Checkout-ui-extensions targets

checkout ui可配置多个扩展点,每个扩展点出现在结账的不同的位置(UI出现的位置)

可配置多个

api_version = "2025-01"[[extensions]]
type = "ui_extension"
name = "My checkout extension"
handle = "checkout-ui"[[extensions.targeting]]target = "purchase.checkout.block.render"module = "./Checkout.jsx"[[extensions.targeting]]target = "purchase.checkout.payment-method-list.render-after"module = "./Payment.jsx"

扩展点展示UI出现的位置,构建UI请遵循

Checkout-ui-extensions components

只能使用官方提供好的UI组件库

配置API访问权限

Checkout-ui-extensions apis

不同的API对于权限的要求不同,不敏感数据是不需要访问权限的

敏感数据如用户的身份信息就需要访问权限

要想请求敏感数据请按照如下操作进行编辑后台配置

如下配置

选择需要使用到的用户信息提交表单即可,如果不确定直接全选一步到位就好了,在配置过后,配置入口将不再出现。

定义扩展的“能力”

Configuration

PropertyDescription
api_access允许您的扩展程序查询 Storefront API。
network_access允许扩展访问外部网络,如fetch访问接口
block_progress允许阻止买家结账,当配置了此配置,需在checkout配置后台选择开启此app的阻止结账的功能按钮
collect_buyer_consent允许您的扩展程序收集买家对特定政策(例如短信营销)的同意。
# ...[extensions.capabilities]
api_access = true
network_access = true
block_progress = true[extensions.capabilities.collect_buyer_consent]
sms_marketing = true
customer_privacy = true# ...

开启了network_access,需开启app配置后台的“access network”才可生效。

配置自定义表单

Configuration

这个类似于shopify liquid schema settings,配置代码不同,使用方式类似,可以自定义文案等。 

[settings][[settings.fields]]key = "banner_title"type = "single_line_text_field"name = "Banner title"description = "Enter a title for the banner"

步骤3:代码编写

需要具有React的代码编写能力

import {reactExtension,BlockStack,InlineStack,Button,Image,Text,
} from '@shopify/ui-extensions-react/checkout';export default reactExtension('purchase.checkout.block.render',() => <Extension />,
);function Extension() {return (<InlineStack><Image source="/url/for/image" /><BlockStack><Text size="large">Heading</Text><Text size="small">Description</Text></BlockStack><ButtononPress={() => {console.log('button was pressed');}}>Button</Button></InlineStack>);
}

步骤4:提交代码

app deploy

shopify app deploy

shopify app deploy --message <value> 可添加版本发布的日志备注,仅供团队成员参考。

步骤5:开启本地服务并为客户商店安装并测试。

步骤6:测试完毕后部署App到生产环境

Deploy to a hosting service

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/74470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

华为HCIE方向那么多应该如何选择?

在华为认证体系里&#xff0c;HCIE作为最高等级的认证&#xff0c;是ICT领域专业实力的有力象征。HCIE设置了多个细分方向&#xff0c;这些方向宛如不同的专业赛道&#xff0c;为期望在ICT行业深入发展的人提供了丰富的选择。今天&#xff0c;咱们就来好好聊聊华为HCIE方向的相…

bootstrap介绍(前端框架)(提供超过40种可复用组件,从导航栏到轮播图,从卡片到弹窗)bootstrap框架

文章目录 Bootstrap框架全解析起源与发展核心特性与优势响应式设计组件丰富度一致性与兼容性 栅格系统深度解析栅格系统工作原理断点设置与响应式策略 组件系统导航组件表单系统 自定义与扩展SASS变量系统构建系统优化 性能优化策略按需加载减少嵌套层级 实践案例&#xff1a;电…

FastGPT原理分析-数据集创建第二步:处理任务的执行

概述 文章《FastGPT原理分析-数据集创建第一步》已经分析了数据集创建的第一步&#xff1a;文件上传和预处理的实现逻辑。本文介绍文件上传后&#xff0c;数据处理任务的具体实现逻辑。 数据集创建总体实现步骤 从上文可知数据集创建总体上来说分为两大步骤&#xff1a; &a…

el-select下拉框,搜索时,若是匹配后的数据有且只有一条,则当失去焦点时,默认选中该条数据

1、使用指令 当所需功能只能通过直接的 DOM 操作来实现时&#xff0c;才应该使用自定义指令。可使用方法2封装成共用函数&#xff0c;但用指令他人复用时比较便捷。 <el-tablev-loading"tableLoading"border:data"tableList"default-expand-allrow-key…

vue中keep-alive组件的使用

keep-alive是vue的内置组件&#xff0c;它的主要作用是对组件进行缓存&#xff0c;避免组件在切换时被重复创建和销毁&#xff0c;从而提高应用的性能和用户体验。它自身不会渲染一个 DOM 元素&#xff0c;也不会出现在父组件链中。使用时&#xff0c;只需要将需要缓存的组件包…

Kafka拦截器

文章目录 1.定义2.生产者拦截器2.1 示例 3.消费者拦截器3.1 示例 1.定义 拦截器主要用于实现clients端的定制化需求&#xff0c;包括消息在生产者发送到 Kafka 或者在消费者接收消息之前进行一些定制化的操作。用于在消息发送和接收的关键步骤中进行拦截和处理。可以修改消息&…

进程间通信(匿名管道) ─── linux第22课

目录 进程间通信 进程间通信目的 进程间通信的发展 进程间通信分类 1. 管道 2. System V IPC 3. POSIX IPC 管道 什么是管道 站在文件描述符角度-深度理解管道 站在内核角度-管道本质 ​编辑 匿名管道 测试匿名管道的读写 匿名管道的四大现象&#xff1a; 匿…

架构思维:通用系统设计方法论_从复杂度分析到技术实现指南

文章目录 Question订单履约原始架构痛点目标架构架构图说明关键设计点优点 设计方法论复杂来源解决方案评估标准从设计原则出发 技术实现 &#xff08;以选型Redis为例&#xff09;Redis消息队列的实现细节高可用设计 总结 Question 我们经常聊如何设计一个比较完善的系统&…

Excel(实战):INDEX函数和MATCH函数、INDEX函数实战题

目录 经典用法两者嵌套查值题目解题分析 INDEX巧妙用法让数组公式&#xff0c;自动填充所有、有数据的行/列INDEX函数和SEQUENCE函数 经典用法两者嵌套查值 题目 根据左表查询这三个人的所有数据 解题分析 INDEX函数的参数&#xff1a;第1个参数是选定查找范围&#xff0c…

ECharts仪表盘-仪表盘25,附视频讲解与代码下载

引言&#xff1a; ECharts仪表盘&#xff08;Gauge Chart&#xff09;是一种类似于速度表的数据可视化图表类型&#xff0c;用于展示单个或多个变量的指标和状态&#xff0c;特别适用于展示指标的实时变化和状态。本文将详细介绍如何使用ECharts库实现一个仪表盘&#xff0c;…

解决安卓so库异常无法打印堆栈的问题

解决方案&#xff1a; 设置 android:extractNativeLibs"true" 直接在 AndroidManifest.xml 里加上&#xff1a; <applicationandroid:extractNativeLibs"true"> </application>这样&#xff0c;so 文件会被解压&#xff0c;崩溃时可以正常打…

清华大学.智灵动力-《DeepSeek行业应用实践报告》附PPT下载方法

导 读INTRODUCTION 今天分享是由清华大学.智灵动力&#xff1a;《DeepSeek行业应用实践报告》&#xff0c;主要介绍了DeepSeek模型的概述、优势、使用技巧、与其他模型的对比&#xff0c;以及在多个行业中的应用和未来发展趋势。为理解DeepSeek模型的应用和未来发展提供了深入的…

屏幕刷新机制(一):机制

屏幕刷新机制&#xff08;一&#xff09;&#xff1a;机制 屏幕刷新机制&#xff08;二&#xff09;&#xff1a;Choreographer、SurfaceFlinger 综述 屏幕整体刷新机制&#xff1a;就是通过Choreographer、SurfaceFlinger&#xff0c;以垂直同步技术(VSYNC)加三重缓冲技术(T…

VSCODE上ckg_server_linux进程占用CPU过多

现象描述 每次一打开VSCODE&#xff0c;ckg_server_linux进程就启动了&#xff0c;并且一直运行&#xff0c;且占用CPU过高&#xff1b; 推测应该是某个插件的问题导致的&#xff1b; 问题处理 本地搜索了一下&#xff0c;发现是 marscode插件影响的&#xff1b; 禁用marsc…

【大模型理论篇】CogVLM:多模态预训练语言模型

1. 模型背景 前两天我们在《Skywork R1V: Pioneering Multimodal Reasoning with Chain-of-Thought》中介绍了将ViT与推理模型结合构造多模态推理模型的案例&#xff0c;其中提到了VLM的应用。追溯起来就是两篇前期工作&#xff1a;Vision LLM以及CogVLM。 今天准备回顾一下Cog…

Vue 项目编译错误:These dependencies were not found,To install them, you can run...

问题与处理策略 问题描述 运行一个 Vue 项目时&#xff0c;报如下错误 ERROR Failed to compile with 47 errors …

python 模拟登录

在Python中模拟登录通常涉及到发送HTTP请求到服务器&#xff0c;并处理响应。这可以通过多种方式实现&#xff0c;最常见的方法之一是使用requests库。下面是一个简单的示例&#xff0c;展示了如何使用requests库来模拟登录一个网站&#xff08;以一个假想的登录表单为例&#…

优化 Docker 镜像 技巧

优化 Docker 镜像可以提高构建速度、减少镜像大小、提高安全性和效率。以下是一些优化 Docker 镜像的方法&#xff1a; 使用适当的基础镜像 选择合适的基础镜像可以减小镜像大小&#xff0c;并确保基础镜像的安全性和更新性。Alpine、Ubuntu Minimal 等轻量级基础镜像是常用选…

2021年蓝桥杯第十二届CC++大学B组真题及代码

目录 1A&#xff1a;空间&#xff08;填空5分_单位转换&#xff09; 2B&#xff1a;卡片&#xff08;填空5分_模拟&#xff09; 3C&#xff1a;直线&#xff08;填空10分_数学排序&#xff09; 4D&#xff1a;货物摆放&#xff08;填空10分_质因数&#xff09; 5E&#xf…

Python入门基础

python基础类型转换 str()与int()类型转换 name 张三 age 20 print(type(name),type(age))print(我叫name 今年&#xff0c; str(age)岁 )a10 b198.8 cFalse print(type(a),type(b),type(c)) print(str(a),str(b),str(c))s1 128 f198.7 s276.77 ffTrue s3hello print(type(s…