WorldFirst (万里汇) API 对接指南:Shopify卖家 技术实操

  • A+
所属分类:国际汇款指南
摘要

本指南专为 Shopify 卖家设计,详细介绍了如何通过技术实操步骤,将 WorldFirst (万里汇) 的支付服务 API 对接到自己的 Shopify 店铺中,以实现收款、资金管理等功能的自动化和优化。

一、H2: WorldFirst API 对接的优势与场景

【H2: WorldFirst API 对接的优势与场景】

在全球化与数字化浪潮下,企业对资金流转的效率、安全性和全球化覆盖提出了更高要求。WorldFirst API接口的深度对接,已成为企业优化跨境支付流程、拓展国际市场的核心驱动力。它不仅是一个支付工具,更是企业财务系统与全球金融网络无缝融合的桥梁,通过技术赋能,重塑企业与全球市场的连接方式。

【H3: 核心优势:效率重塑与成本优化】

API对接的首要价值在于将支付能力内化,实现效率的指数级提升。通过API,企业可将收款、付款、换汇、退款等功能深度集成至自有ERP、电商平台或财务软件中,彻底告别传统手动操作的繁琐流程。这不仅大幅缩短了资金处理周期,更从根本上杜绝了人为录入差错,提升了财务数据的准确性。同时,无缝的内嵌体验避免了用户跳转至第三方支付页面,保障了交易流程的连贯性与品牌的专业度。更重要的是,自动化流程显著降低了对财务人力的依赖,长期来看有效削减了运营成本。结合WorldFirst的全球账户网络和实时汇率,企业还能获得更具竞争力的费率与结算效率,实现成本与效益的双重优化。

【H3: 关键应用场景:赋能多行业生态】

WorldFirst API的通用性与灵活性,使其能够精准赋能多元化的商业场景。在跨境电商领域,无论是平台卖家还是独立站商家,均可通过API实现全球多币种订单的自动化收款与结算,并能一键完成向海外供应商的批量付款,极大简化了跨境资金管理。对于SaaS及线上服务平台,API提供了“支付即服务”(PaaS)的解决方案,可将订阅费、增值服务费等支付模块无缝整合,提升客户支付体验。在传统B2B贸易与制造业,API对接解决了大额、高频的跨境货款支付难题,支持自动化处理供应商发票与付款计划,优化供应链金融。此外,对于在线教育、自由职业平台等新兴业态,API能够实现对全球讲师或合作者的佣金进行精准、批量的自动化发放,有效支撑其全球化人才战略。

content related visual

二、H2: 对接前准备:必备的账户与材料

任何成功的系统或平台对接,都始于周密的前期准备。缺乏必要的账户与材料,将直接导致流程中断或延期,甚至对接失败。为了确保对接过程顺畅高效,必须在启动前系统性地完成以下准备工作。本章节将详细梳理对接前必须准备的账户与材料清单,涵盖资质、技术及法务三个核心层面。

1. 基础资质与账户注册

这是所有对接工作的起点,旨在验证合作方的合法性与身份真实性。未完成基础资质审核,后续所有步骤均无法推进。

  • 企业主体资质:若以企业名义进行对接,需准备清晰、在有效期内的《营业执照》扫描件或照片,确保统一社会信用代码、法人信息、经营范围等关键信息清晰可见。此外,通常还需提供法定代表人身份证正反面照片。部分平台(如金融、支付类)可能进一步要求提供《开户许可证》或《基本存款账户信息》以验证对公账户。
  • 个人开发者资质:针对个人开发者或小型应用,主要需提供本人实名认证的身份证正反面照片及个人银行卡信息。平台将通过这些信息完成个人身份的核实,用于后续的收益结算与责任追溯。
  • 核心账户注册:在目标平台(如开放平台、合作伙伴中心)完成账户注册是所有操作的前提。注册时应使用企业公共邮箱或核心负责人稳定的个人邮箱,并设置符合安全规范的密码。此账户将作为后续申请API权限、查看文档、管理应用及财务结算的唯一入口,务必妥善保管。

content related visual

2. 技术对接关键材料

当资质审核通过后,技术层面的准备工作便成为核心。这些材料是程序间实现安全、稳定通信的基石。

  • API访问凭证:这是程序调用接口的身份标识,通常以“App Key/Secret”或“API Key/Secret”的形式提供。前者(Key)相当于公开的用户名,用于标识应用;后者(Secret)是私密的密码,用于生成请求签名,必须严格保密,不可泄露或硬编码在前端代码中。获取凭证通常需要在开发者后台创建应用并提交审核。
  • 服务器与网络配置:需要准备用于接收平台回调通知的服务器信息,包括但不限于:服务器公网IP地址、用于接收异步通知的回调URL(Callback URL),以及可能需要加入平台IP白名单的出口IP。IP地址与白名单用于建立安全通信通道,防止非法请求。回调URL是接收支付结果、状态变更等关键异步通知的唯一路径,必须保证其公网可访问且响应稳定。
  • 沙箱环境与测试账户:正式上线前,必须在平台提供的沙箱(测试)环境中进行充分的调试与验证。获取测试专用的App Key/Secret、模拟商户/用户账户以及测试数据,用以验证所有接口逻辑的正确性、异常处理机制及签名算法,避免在正式联调时耗费过多时间或对生产环境造成影响。

3. 财务与法务文件

技术与业务流程打通后,财务与法务层面的文件是保障合作长期、合规运行的必要条件。

  • 结算账户信息:准备用于接收业务款项或支付服务费用的对公银行账户信息,包括精确到支行的开户行全称、账户户名(须与营业执照主体一致)以及银行账号。确保信息准确无误,任何偏差都可能导致资金结算失败或延迟。
  • 合作协议与法律文件:根据对接业务性质,可能需要签署或确认一系列法律文件,如《技术服务协议》、《数据保密协议》(NDA)、《合作伙伴框架协议》等。这些文件明确了双方的权利义务、服务等级协议(SLA)、数据所有权及保密条款、违约责任等,是合作的法律基石,需由法务或负责人审阅确认。

content related visual

三、H2: 获取 WorldFirst API 密钥与证书

要集成 WorldFirst 的支付或资金管理功能,首要任务是获取用于身份验证与数据加密的 API 密钥与证书。这是建立系统间安全通信的基石。整个流程在 WorldFirst 商户后台完成,操作严谨,需遵循特定步骤以确保凭证的唯一性与安全性。

1. 前置条件与账户准备

在申请 API 凭证之前,请务必确认以下条件已满足:
第一,您必须拥有一个已通过所有审核(包括 KYC 企业资质认证)的 WorldFirst 商户账户。未完成验证的账户无法访问开发者功能。
第二,登录后台的账户必须具备管理员权限。API 管理功能通常仅对账户管理员开放,普通操作员角色可能无法看到相关菜单选项。
第三,准备好您的应用信息。在创建 API 应用时,系统会要求您填写应用名称、主要用途描述以及用于接收异步通知的回调 URL。请确保该 URL 可被公网访问且已做好技术准备。

content related visual

2. 创建 API 应用并获取凭证

准备工作就绪后,即可按以下步骤生成 API 密钥与证书:
1. 登录并导航:使用管理员账户登录 WorldFirst 商户后台。在侧边栏或顶部导航栏中,找到“开发者中心”、“API 管理”或类似的集成管理模块。
2. 创建应用:点击“创建应用”或“新增 API 凭证”按钮。您将进入一个配置页面,需要填写在准备阶段构思好的应用名称、描述和回调 URL。回调 URL 的准确性至关重要,它将直接影响支付状态等异步通知的接收。
3. 生成与下载凭证:提交应用信息后,系统将立即为您生成一套专属的 API 凭证。这套凭证通常包括:
* API Key (App ID):用于标识您的应用的公开身份,部分接口可能会在请求参数中明文传输。
* API Secret (App Secret):这是您的核心私钥,用于生成请求签名,以验证请求的合法性。请务必注意,API Secret 出于安全考虑,仅在生成时显示一次,之后无法在后台再次查看。
* API 证书:用于双向 TLS 加密通信,确保数据传输链路的绝对安全。系统会提供一个压缩包,内含私钥文件(.key)和公钥证书文件(.pem.crt)。与 API Secret 类似,证书文件也只能下载一次。

3. 安全存储与后续配置

凭证生成后,安全工作才刚刚开始。严禁将 API Secret、私钥等敏感信息直接硬编码在前端代码、版本控制系统(如 Git)或任何不安全的位置。正确的做法是使用环境变量或专业的密钥管理服务(如 AWS Secrets Manager、HashiCorp Vault)来存储它们。同时,请立即返回商户后台的 API 设置页面,将您的服务器出口 IP 地址添加至 IP 白名单。此操作可极大提高账户安全性,防止凭证被盗用后的恶意调用。完成这些配置后,您便可以开始在沙箱环境中测试 API 调用,验证凭证的有效性与集成逻辑的正确性。

content related visual

四、H2: 核心 API 接口详解:支付、查询与退款

本节将深入剖析支付系统中最核心的三个 API 接口:支付、查询与退款。理解这些接口的工作原理、参数含义及异常处理,是构建稳定可靠交易流程的基础。

1. 支付接口:创建交易订单

支付接口是整个交易链路的起点,其核心功能在于根据商户的订单信息生成一笔预支付交易,并返回客户端所需的支付凭证。发起支付请求时,关键请求参数包括:out_trade_no(商户订单号,需保证全局唯一性)、total_fee(订单总金额,单位为分)、subject(商品标题)、trade_type(交易类型,如 APP、JSAPI、Native 等)以及 notify_url(用于接收异步支付结果通知的地址)。接口成功调用后,响应数据中会包含 prepay_id(预支付交易会话标识)或 code_url(二维码链接),客户端依据 trade_type 使用这些信息调起相应的支付组件。开发者必须注意,所有请求与响应均需进行签名校验,以防止数据篡改。此外,应保证接口的幂等性,即使用相同的 out_trade_no 重复请求,不应创建新的订单,而应返回原订单信息。

content related visual

2. 订单查询与退款接口

订单查询接口是获取交易状态的主动轮询手段,也是对账和客诉处理的重要工具。当支付结果异步通知延迟或丢失时,可通过此接口确认订单状态。查询时,通常使用 out_trade_no 或平台返回的 transaction_id 作为唯一标识。响应数据中的 trade_state 字段明确标识了订单的当前状态,如 SUCCESS(支付成功)、NOTPAY(未支付)、CLOSED(已关闭)等。此接口有严格的调用频率限制,不建议用于高频率的前端轮询。

退款接口用于处理资金退还业务,其操作本质是创建一笔新的退款交易。请求时需指定原订单号(out_trade_notransaction_id)、自定义的退款单号(out_refund_no,用于唯一标识退款请求)、退款金额(refund_fee)及退款原因。退款请求提交成功仅表示退款申请已受理,资金处理通常异步进行。最终的退款状态需通过退款异步通知或调用退款查询接口获取。务必注意,退款操作不可逆,且系统需支持对同一笔订单进行多次部分退款,直至退款总额不超过原订单金额。所有接口的调用日志必须妥善记录,便于问题排查与审计。

五、H2: 创建 Shopify 私有应用以处理 API 请求

Shopify 私有应用是访问特定店铺数据的官方渠道,用于实现自动化、定制功能及后端系统集成。与面向公众的定制应用不同,私有应用专为单一店铺设计,无需通过 Shopify 应用商店审核,提供了直接、高效的 API 访问方式。其核心认证机制为基本认证,即通过 API 密钥和 API 密码来建立安全连接,是开发者执行后台任务的首选方案。

content related visual

1. 在 Shopify 后台生成 API 凭据

启用 API 访问的第一步是在 Shopify 管理后台创建并配置一个自定义应用。此过程将生成必要的 API 密钥和密码,并定义应用的数据操作权限。

  1. 导航至开发应用页面:登录 Shopify 后台,点击“应用”,然后选择“开发应用”。如果您是首次访问,可能需要先确认您的开发者身份。

  2. 创建自定义应用:点击“创建自定义应用”按钮。为应用命名,例如“库存同步服务”或“客户数据导出工具”,并选择应用开发者(通常为您自己)。

  3. 配置 Admin API 集成:在应用详情页,找到“配置”部分下的“Admin API 集成”并点击进入。这是最关键的配置环节。在“权限”选项卡中,您必须精确授予应用所需的最小权限。例如,若应用仅需读取产品信息,则勾选“读取产品”即可;如需修改订单,则额外勾选“写入订单”。遵循最小权限原则是保障店铺安全的核心。

  4. 安装应用并保存凭据:配置完权限后,返回应用详情页并点击“安装应用”。确认安装后,Shopify 将显示 API 密钥API 密钥以及 Admin API 访问令牌。请务必注意,API 密码在离开此页面后将无法再次查看。您必须立即将其安全地复制并存储到您的服务器或密钥管理服务中,例如环境变量。

2. 配置 API 客户端并执行第一个请求

获取 API 凭据后,即可在任何后端或命令行环境中发起 API 请求。Shopify 使用 HTTP 基本认证,其中 API 密钥作为用户名,API 密码作为密码。

curl -X GET "https://{your_shop_name}.myshopify.com/admin/api/2023-10/products.json" \
-u "{api_key}:{api_password}"

请将 {your_shop_name}{api_key}{api_password} 替换为您的实际信息。请求头的 Authorization 字段会被自动格式化为 Basic <base64_encoded_credentials>。成功执行后,服务器将返回一个包含产品数据的 JSON 对象。

在编程语言中,如使用 Python 的 requests 库,配置同样简便:

import requests

api_key = "your_api_key"
password = "your_api_password"
shop_name = "your_shop_name"
api_version = "2023-10"

url = f"https://{shop_name}.myshopify.com/admin/api/{api_version}/products.json"
response = requests.get(url, auth=(api_key, password))

print(response.json())

通过这种方式,您的私有应用便具备了与 Shopify 服务器进行安全、可靠通信的能力,为后续的数据同步、自动化流程奠定了基础。

content related visual

六、H2: 技术实操:构建支付请求与回调处理

与第三方支付网关的集成的核心是两个关键环节:主动发起支付请求和被动处理支付结果回调。这一过程要求极高的严谨性和安全性,任何环节的疏漏都可能导致资金损失或订单状态混乱。以下将详细拆解这两个环节的技术实现要点。

1. 构建支付请求:参数封装与签名

构建支付请求是整个支付流程的起点,本质上是向支付网关提供的特定API端点发送一个包含交易信息的HTTP请求,通常为POST方法。此过程的第一步是参数封装。请求体必须包含一系列核心业务参数,例如:out_trade_no(商户系统内部的唯一订单号)、total_amount(订单总金额,需精确到分)、subject(商品标题或交易摘要)以及notify_url(用于接收异步回调通知的服务器地址)。此外,根据不同场景,可能还需附加用户标识、商品详情、扩展信息等参数。

封装完成后,最关键的步骤是生成签名。签名是保障通信安全、防止请求被篡改的核心机制。其标准流程通常包括:1)将所有非空请求参数(除去sign本身)按照参数名ASCII码从小到大排序;2)使用特定分隔符(如“&”)和“键=值”格式拼接成待签名字符串;3)在字符串首尾加上商户密钥(App Secret);4)对整个字符串进行指定哈希算法(如MD5、SHA256或RSA)运算,最终得到签名字符串。此签名值作为一个名为sign的参数,与其他业务参数一同提交至支付网关。网关会使用完全相同的算法和密钥验证签名,只有通过验证的请求才会被受理。

content related visual

2. 处理支付回调:验证与幂等性保障

支付回调是支付网关在用户支付完成后,向商户系统预设的notify_url发送的异步服务器端请求,用于通知最终的支付结果。处理回调的第一原则是“永不信任,始终验证”。收到回调数据后,必须立即进行签名校验,校验方式与请求签名生成过程完全一致。从回调参数中提取sign和所有业务参数,按照相同的规则在本地重新计算签名,并与回调中的sign进行比对。任何签名不匹配的回调都应直接丢弃,并记录为可疑攻击。

验证通过后,进入业务逻辑处理阶段,此时必须保障操作的幂等性。由于网络原因,支付网关可能多次发送同一笔交易的成功回调。如果处理不当,会导致重复发货、多次充值等严重问题。实现幂等性的标准做法是:在执行任何业务操作(如更新订单状态、增加用户余额)之前,先根据回调中的商户订单号(out_trade_no)查询数据库中该订单的当前状态。如果订单状态已是“已支付”或“处理完成”,则说明该回调已被处理过,系统应立即向网关返回一个表示成功的响应(如返回特定字符串"SUCCESS"),并终止后续流程。只有当订单状态为“待支付”时,才执行更新操作,并在数据库事务完成后,同样返回成功响应给支付网关,告知其通知已妥收,无需重试。

七、H2: 沙箱环境测试:模拟真实交易流程

沙箱环境是连接开发与生产部署的关键桥梁,它通过模拟真实世界的交易流程,在隔离、安全的环境中全面检验系统功能、性能与稳定性。此阶段的目标是尽早发现并修复潜在缺陷,最大限度地降低线上发布风险。 rigorous的沙箱测试不仅是技术验证,更是对业务逻辑健壮性的终极考验。

content related visual

1. 环境搭建与数据隔离

构建高保真沙箱环境是测试成功的前提。首先,环境配置必须与生产环境高度一致,包括服务器规格、操作系统、数据库版本及中间件配置,确保测试结果的参考价值。其次,必须实现严格的数据隔离。沙箱环境应使用独立的数据库实例,所有测试数据均为虚拟或脱敏生成,严禁与生产环境有任何数据层面的物理或逻辑连接。API网关需配置独立的路由规则,将所有测试请求精准导向沙箱服务端点。通过这种配置镜像、数据隔离和API路由的三重保障,确保测试活动对生产系统零干扰。

2. 核心交易链路全流程验证

在稳固的沙箱基础上,需对核心交易流程进行端到端的严格验证。这包括从用户前端操作到后端服务处理的完整闭环。测试用例需覆盖:用户发起订单、系统调用支付接口、模拟第三方支付网关的成功或异步回调、验证订单状态的准确变更、触发库存扣减与积分增减、以及生成物流通知等所有关键节点。每一个环节,数据库记录的准确性、消息队列(MQ)通知的及时性与正确性、缓存的同步更新情况,都必须被自动或手动校验。通过模拟真实用户的行为路径,确保业务逻辑的每一个分支都运行无误。

content related visual

3. 异常场景与压力测试

真实交易充满不确定性,沙箱测试必须覆盖异常与极限情况。异常场景模拟是检验系统容错能力的核心,需主动制造支付超时、网络中断、第三方接口返回非预期错误码、数据库连接失败等故障,观察系统的降级策略、重试机制和告警响应是否符合预期。与此同时,压力测试不可或缺。利用压测工具模拟高并发用户请求,如秒杀场景下的瞬时订单洪流,持续监控系统的响应时间、吞吐量(TPS)、CPU及内存使用率。此举旨在定位性能瓶颈,验证系统在峰值负载下的表现,并为生产环境的资源配置和容量规划提供精确数据支持。

八、H2: 从测试到生产:API 配置上线切换

API 从测试环境迁移至生产环境,绝非简单的代码部署,其核心风险在于配置切换。一个错误的配置项,如数据库地址或第三方密钥,足以导致线上服务中断。因此,建立一套严谨、自动化的配置切换流程,是保障服务稳定性的生命线。整个过程必须以“零信任、可追溯、易回滚”为原则,杜绝任何人为操作的随意性。

content related visual

1. 上线前准备与核对清单

在执行切换之前,准备工作必须做到万无一失。首先是环境隔离与配置区分,确保测试与生产环境的配置文件或配置中心命名空间完全独立,杜绝任何交叉引用的可能。其次,必须执行严格的配置差异比对。利用脚本或工具,逐行比对测试与生产环境的配置模板,生成差异报告。报告中需明确列出所有需要变更的项,如数据库连接串、缓存地址、日志级别、告警开关以及各类 API 密钥,并交由至少两人交叉审核。对于敏感信息,如数据库密码和私钥,绝不允许明文存储在代码库或配置文件中,必须通过 HashiCorp Vault 或 AWS Secrets Manager 等专用密钥管理系统进行存取,上线时由部署脚本动态注入。

2. 配置切换的核心流程

切换过程必须实现全自动化,并具备原子性。理想的流程如下:CI/CD 流水线在触发部署时,根据目标环境(生产)拉取对应的配置模板。随后,流水线从密钥管理系统中获取生产环境的敏感信息,与模板合并生成最终的配置实例。该实例应先被推送到一个临时位置,待完整性校验通过后,再通过原子操作(如文件移动或配置中心的发布API)替换线上生效的配置。整个配置的生成与推送过程必须在配置中心(如 Nacos, Apollo)中进行版本化标记,每次发布都关联唯一的版本号和发布人信息,形成不可篡改的变更记录,为后续审计与追溯提供依据。这种自动化流程确保了配置切换的快速、准确与一致性。

content related visual

3. 上线后验证与回滚预案

配置发布成功不代表任务完成,即刻的验证至关重要。部署脚本应自动触发健康检查,如调用服务的 /health 端点,确认服务已按新配置正常启动。同时,监控系统应立即关注核心业务指标,如 API 响应时间(P99)、错误率和下游依赖的连接状态,任何异常波动都应触发即时告警。更重要的是,必须预先制定并演练回滚预案。回滚操作应与发布一样简单,通常是在配置中心一键选择上一个稳定版本即可完成。团队必须明确回滚的触发条件(如错误率超过阈值)和执行人,确保在出现问题时,能在最短时间内恢复服务,将影响降至最低。

九、H2: 安全最佳实践与常见错误排查

安全是系统性工程,需将最佳实践融入开发运维全周期,并掌握高效的问题排查方法。构建坚不可摧的系统不仅在于防范已知的攻击,更在于建立快速发现和响应未知威胁的机制。

content related visual

1. 纵深防御:构建安全体系

单一安全层易被突破,纵深防御通过多层独立、冗余的安全措施提升系统韧性。网络层,应利用防火墙设置严格的访问控制列表(ACL),通过VPC或子网隔离不同安全级别的服务,并部署DDoS防护服务。应用层,必须遵循最小权限原则,为不同角色配置精细化的权限控制(RBAC),对所有用户输入进行严格的验证和过滤,并对输出内容进行编码以防止注入攻击。数据层,静态数据应采用AES-256等强加密算法存储,传输过程全程启用TLS 1.2以上协议,对展示给用户的敏感信息进行脱敏处理。此外,定期使用工具扫描和更新第三方依赖库,及时修复已知漏洞,是纵深防御体系中不可或缺的一环。每一层既是屏障也是警报,即使一层失守,其他层仍能有效阻止或减缓攻击。

2. 常见漏洞剖析与修复

SQL注入:源于未对用户输入进行过滤或参数化查询,导致攻击者可拼接并执行恶意SQL命令,窃取或篡改数据。修复:必须始终坚持使用预编译语句或ORM框架,彻底将SQL代码与用户数据分离,杜绝动态拼接SQL。

跨站脚本攻击(XSS):攻击者将恶意脚本注入可信网页。反射型XSS通过URL参数诱骗用户点击,存储型XSS则将脚本存入数据库影响所有访问用户,DOM型XSS则通过客户端脚本修改页面DOM。修复:对所有不可信的用户输入在输出到HTML时进行HTML实体编码,输出到JavaScript时进行JS编码,输出到样式时进行CSS编码。同时,启用严格的内容安全策略(CSP)能有效限制脚本的来源和执行。

跨站请求伪造(CSRF):诱导已登录用户在不知情的情况下,向目标网站发送非预期的恶意请求。修复:核心手段是使用Anti-CSRF Token,为每个用户会话生成唯一令牌,并在关键请求中验证该令牌。验证HTTP头的RefererOrigin字段可作为辅助防御手段。

content related visual

3. 日志审计与入侵检测

有效的安全运营始于可追溯的日志。必须记录所有关键事件,包括但不限于用户登录/登出(尤其是失败尝试)、权限变更、数据增删改、核心API调用详情及服务器错误。日志应包含结构化的时间戳、源IP、用户标识、操作内容、请求参数及响应状态码。通过ELK Stack、Splunk等集中式日志系统聚合分析,利用SIEM平台建立自动化告警规则,实时检测异常行为,如短时间内大量失败登录、非工作时间的特权操作、异常的数据导出请求等。关键异常应立即通过短信、电话等方式触发告警。必须建立标准化的应急响应流程(SOP),确保告警发生后能迅速定位威胁源、隔离受影响系统、清除恶意载荷,并进行事后复盘,持续优化检测规则与防御策略。同时,日志文件本身需防篡改,并配置严格的访问控制,防止攻击者清除痕迹。

  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: