creem.io 支付对接

对于个人出海而言, 很多人会误以为海外支付和自己无关, 宁愿走国内繁杂的企业挂靠/资质审批流程来搭建收款/付款通道

但事实上海外大量合规支付渠道原生支持个人主体接入, 开通门槛、资料手续、审核难度, 远低于国内必须依托企业主体才能开通支付接口的规则

需要注意: 最好选择靠谱可信的第三方支付商不要只看低汇率, 否则可能会出现金融风控问题(甚至直接跑路)

在网上对比各家支付商之后, 这里选择 creem.io 来说明个人海外支付对接功能

官网(点击Sign跳转输入邮箱验证, 不存在会帮助创建, 手续费 3.9% + $0.4) https://www.creem.io

注意: creem.io 目前是邀请码机制, 也就是需要排队等待 creem.io 通知可以开通账号, 如下图

create

这里就代表正在排队等待审核申请, 一般没有邀请码自然申请时间是很久的, 所以建议选择下面选项

  • Tell us about your business: 可以直接声明自己商品类型申请跳过排队

这里点击之后就是具体主要支付的商品和额度类型:

  • Company Name: 公司|个人组织名称, 必填

  • Website: 提供服务的站点, 可以选择性填写

  • Monthly Processing Volume: 每月交易额度, 一般个人直接选择 0-10K 美元即可

  • Tell us about your business: 商品交易的信息

这里填写好公司|个人组织名称等信息, 如果是个人开发者使用, 商品交易的信息内容填写以下内容(可以直接复制):

1
2
3
4
5
I am an independent developer / indie hacker, 
selling digital products (software, SaaS, templates, code assets, digital goods) globally.
My business is pure online digital sales, no physical goods, no high-risk industries.
All products are legal and compliant.
I need Creem's Merchant of Record, global payment, tax compliance and revenue split services to receive payments safely.

提交之后等待 creem.io 联系即可, 注意留意好你注册邮件内部的垃圾邮箱时候有通知, 一般周期是3~7个工作周处理完

商户账号说明: https://docs.creem.io/merchant-of-record/account-reviews/account-reviews

不过自从 creem.io 后面采用邀请码机制之后就很难发放下来, 现在单纯邀请码在国内平台都要收费200左右, 所以这部分申请速度一直被人诟病

申请完成之后会有邮件通知, 最后进后台创建生成独有商户连接最后就能进入 creem.io 的后台

dashboard

创建商品

申请账号完成之后就是创建我们对外的首个产品, 这里点击管理后台的 Commerce - Products 进入点击 Create Product:

product

这里分为以下需要填写的内容:

  • Product Details: 基础的商品信息

  • Payment Details: 支付的详情信息(包含有货币和支付类型)

  • Product Image(可以暂时不处理): 商品的图片信息

  • Product Features(可以暂时不处理): 商品的特性说明, 比如支付完成自动下载文件和密钥, 用于解锁付费应用等

  • Advanced Options(看情况填写资源): 其他附带的高级字段信息, 支付成功订单附加的支付信息

  • Abandoned Cart Recovery(电商产品推荐开启): 设置购物付款未结算是否提示继续支付, 开启该功能即可自动挽回未结算的购物车订单提升销售额

这里我分步骤说明下应该填写什么信息, 首先是 Product Details:

  • Name: 支付商品名称

  • Return URL(可选): 订单完成之后跳转界面地址(注意:此时并不清楚订单是否完成, 只是支付完成之后跳转页面)

  • Description: 支付商品的信息内容, 支持 markdown 格式文档

Product Details

上面填写以下就会提示 Complete 代表信息没问题, 之后就是 Payment Details 信息, 这里有几种支付类型:

  • Single Payment: 一次性支付类型, 最常见支付类型, 直接付款然后调用发货逻辑

  • Subscription: 订阅会员支付类型, 分为月付/季度/年度会员这种(注意: 订阅服务最开选择 SaaS 会提供含税信息)

支付的货币类型默认有集中 USD(美元)/EUR(欧元)/SEK(瑞典货币), 一般推荐直接采用 USD 做锚定货币, 之后就去商品分类:

  • Digital goods or services: 数字商品或服务(通用大类, 纯线上虚拟产品首选, 如果不清楚商品类型直接选这个)

  • Software as a service (SaaS): 软件即服务(订阅/在线工具/会员/在线系统)

  • Ebooks: 电子书(仅售卖电子书籍/文档/教程PDF)

这里还有个 Tax Behaviour(价格是否已含税) 配置, 需要结合业务选取

  • 开启之后支付金额是 价格含税 的最终金额, 在购买之前能够看到税务信息从而明白自身具体支付金额

  • 不开启就是会在用户结账时额外加税, 这也用户在获得账单才可能发现具体的加税的支付金额, 很容易直接投诉

这部分建议直接启用 Tax Behaviour 来避免最后支付纠纷

Payment Details

之后的 Product Image/Product Features/Advanced Options/Abandoned Cart Recovery 可以不用管直接创建

我这里为了看起来正规生成一张 icon 图片来处理

这样就创建我们首个 creem.io 支付商品, 只需要花费 1 美元的支付道具(后面点击 Share 旁边的按钮 Edit Product 编辑):

Created

完成之后就是服务端对接支付的流程, 后续就是自己挂载处理支付系统处理

支付对接

官方参考文档: https://docs.creem.io/getting-started/quickstart

我这边先采用 REST API 调试模式来对接, 后面在按照其他编程语言来处理, 具体都是万变不离其宗

注意: 正式创建订单域名为 https://api.creem.io, 测试订单域名为 https://test-api.creem.io

创建订单发起请求的如下

1
2
3
4
5
6
7
8
9
10
11
12
13
# 这里采用测试域名 
# x-api-key: 你后台创建 API KEY
# product_id: 自己服务端创建的自定义道具ID, 也就是上面创建的商品, 在点击 `Products - 指定道具 - Copy Product ID`
# request_id: 自己服务端创建的自定义订单ID
# success_url: 支付完成之后的回调地址, 也就是国内常用的 notify_url 地址
curl -X POST https://test-api.creem.io/v1/checkouts \
-H "x-api-key: YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"product_id": "prod_YOUR_PRODUCT_ID",
"request_id": "order_123",
"success_url": "https://yoursite.com/success"
}'

如果创建订单成功就会响应以下内容, 需要将用户重定向 checkout_url 支付网页地址:

1
2
3
4
5
6
{
"id": "ch_1QyIQDw9cbFWdA1ry5Qc6I",
"checkout_url": "https://checkout.creem.io/ch_1QyIQDw9cbFWdA1ry5Qc6I",
"product_id": "prod_YOUR_PRODUCT_ID",
"status": "pending"
}

如果用户支付完成就会附带支付参数回调到 success_url 地址, 最后的回调URL内容如下

request
1
https://yoursite.com/success?checkout_id=ch_xxx&order_id=ord_xxx&customer_id=cust_xxx&product_id=prod_xxx

这里面几个回调参数具体代表意义如下, 回调之后验证参数和订单就可以安排服务端发货

查询参数 说明
checkout_id 本次支付所创建结账会话的ID
order_id 支付成功后生成的订单ID
customer_id 客户ID, 根据完成支付的邮箱生成
subscription_id 对应产品的订阅ID
product_id 该支付关联的产品ID
request_id 选填, 创建结账时你自行传入的请求/参考标识ID
signature Creem 使用你的API密钥对以上所有参数进行加密签名, 可供你自行校验真伪

这里先明确这部分概念, 后面将一步一步说明怎么去处理这方面功能, 首先就是创建 API KEY:

ApiKey

这里点击之后会要求提供 KEY 授权范围, 除非要做比较精细的权限区分, 否则可以直接启用 Full Access:

Permissions

这里点击之后就会成功生成 ApiKey, 默认测试模式 KEY 为 creem_test_xxx 格式, 而正式则是 creem_live_yyy

这里跑下测试支付网关请求确认最后带有具体的 id/checkout_url/status=pending 信息, 完成之后移交给客户端渲染即可

signature 需要去验证是否符合, 一般以传入参数 KEY 为正序排列构建成 aa=bb&cc=dd 最后采用 sha256 + API KEY 哈希处理

一般到这步已经能够跑通整个流程, 但是可以看到官方更加推荐 WebHooks 方式来处理异步回调通知, 这部分支付流程相对更加安全

WebHooks 可以对整体服务端做更加细致的白名单安全控制, 资金安全毕竟是最需要关注的