Stripe支付流程

article/2025/4/20 3:39:48

   近几天因为公司的项目中遇到了需要支持给国外本土支付提供支持,经过调研了市面上几款的产品后选择了stripe支付

由于资料比较少没有太多讨论,慢慢查看官方文档以下是我对官方文档梳理和对接过程中的一些经验和理解记录了下来

 

关于Stripe

Stripe是一家提供给个人或公司在网上接受付款服务的科技公司 ,支持可以在无需开设商家账户的情况下在网上接受付款。Stripe在付款后两天内等候期检查交易所涉及的公司,以防止潜在的诈骗,然后Stripe便会把资金发送到收款人的户口 而且Stripe还可以支持使用比特币付款

 

Stripe的优势

  • Stripe接受135类型的货币
  • Stripe对所有交易都采用统一费率,这使它透明且易于理解,统一费率是2.9%+ $ 0.30
  • api接口便于对接调试,只需要少量代码就可以完成功能

 

  理解

  Stripe的支付和操作大部分都掌握在我们自己手里,使用stripe提供的Checkout可以安全的收集和标记卡信息,创建嵌入式支付表单,将表单提交到服务端,然后调用他提供的api就可以完成支付 整个过程非常简洁方便

  Stipe不像支付宝和微信支付那样,他不存在订单的概念,只管支付本笔交易操作

  但他的设计流程都是大同小异大致情况:

  • 客户端通过stripe提供的Checkout插件收集付款所需要的信息
  • 将信息传递给服务端,服务端收集整理后请求stripe提供的所需api
  • 在stripe官方配置页配置各事件的webhook
  • 先验签 通过后根据不同事件先回应stripe 然后在处理我们自己的业务操作

 

Stripe集成

  1. 在官方https://stripe.com/申请注册账户 按照官方的提示操作成功页面

 

    2.支付方式采用信用卡支付

          当我们遇到一个新东西的时候,仔细的查看官方文档往往可以解决我们80%的问题 ,stripe文档写的还是很有好的,当你注册后,查看官方文档里面给的案列测试代码的时候,所有的变量都是关于你自身的真实数据。

 

  信用卡支付方式

第一步直接在页面里面添加一个form表单,其中一些属性是变量值

<form action="serverApi" method="POST"><scriptsrc="https://checkout.stripe.com/checkout.js" class="stripe-button"data-key="pk_test_k7wYXLcKJqGM75Ag25Kiwx"data-amount="500"data-name="UVIC Limited"data-description="Example charge"data-image="https://stripe.com/img/documentation/checkout/marketplace.png"data-locale="auto"data-currency="gbp"></script>

     成功嵌入后我们点击提交会看到这个弹框页面  卡号和信息在官方都有测试信息

 

 

第二步直接请求付款接口  (下面是我写的node案例的部分代码)

 async createCharges() {const {ctx} = thisconst orderId = ctx.query.order_idctx.tryThrow(!orderId, 'orderId miss')const orderResult = await this.service.emall.order.getOrderDetail(orderId)ctx.tryThrow(!orderResult, 'order not exist')const data = _.pick(ctx.request.body, ['stripeToken', 'stripeEmail'])const result = await stripe(this.config.stripe.key).charges.create({amount: (orderResult.SKUs[0].price) * 100,currency: 'gbp',source: data.stripeToken,receipt_email: this.config.stripe.receiptEmail,metadata: {order_id: orderId}})ctx.body = result}

详情和返回结果请查看:https://stripe.com/docs/api/charges/create

返回的信息有很多每个字段的描述都有详细介绍,当然我们对于其中几个属性还是要重点提出

 amount代表的金额是以分为单位

 metadata是可以存储一些其他对你以后有用的信息(在hook的时候会把数据在返回给你)敏感信息(个人身份信息,卡详细信  息等不要存储)

 status表示的状态

 

 

 第三步在官网设置事件的webhook    https://dashboard.stripe.com/account/webhooks

使用webhooks作用:

  • 付款成功后,可以修改业务信息
  • 付款失败时向客户发送电子邮件或信息告知
  • 支付转账时记录会计分录
  • 或者任何修改账户的操作都会告知

注意测试的时候点击View test data查看测试数据不然设置的信息都是正式版

webhook事件有两种选择一种是监听所有事件然后我们自己根据处理一种是可以选择监听

 

在上一步中我们调用了stripe.charges.create()函数,我们需要监听和charges等一些有关事件

不管stripe.charges.create()函数调用的成功与否都会返回给我们事件,当然我们也不能

盲目的接收,首先要先验证这个请求是不是stripe官方发出还是第三方发出的

验证方式官方也是提供了两种一种官方用法一种是自定义 (当然推荐官方的 省时 省力 省心就对了)

下面的代码片段也是我写的测试案例的代码操作  详细查看官网:https://stripe.com/docs/webhooks/signatures

  return async function (ctx, next) {let sig = ctx.request.header['stripe-signature']try {stripe(ctx.app.config.stripe.key).webhooks.constructEvent(Buffer.from(ctx.request.rawBody), sig, ctx.app.config.stripe.endpointSecret)const eventType = ctx.request.body.typeif (knownEvents[eventType]) {return knownEvents[eventType](ctx, next)}else {return next()}}catch (err) {ctx.status = 400return next()}}

 

stripe.webhooks.constructEvent(req.body, sig, endpointSecret);

注意点:

  •     调用这个函数成功就验签通过失败就不通过不需要返回处理
  •     req.body一定要是原始数据请求体

 

当我们验证成功之后会收到charge.succeeded事件进行下一步处理,

stripe会调用我们预留的url把信息传递回来 我们来大致看一下body返回的东西

还有一些头或者其他信息可以自己测试的时候打印看下:

我们要先仔细观察下他事件返回的数据结构 其中metadata里面就是我们调用的时候添加的附加信息

在这里会返回很重要的一个属性是type事件类型,我们可以根据这个值做相应处理处理我们自己的业务

 

其实整个流程还是蛮简单的当然他还包含很多其他功能和对接其他平台 有兴趣的可以了解下

案例代码我正在整理过几天会发布到github上大家相互学习

 

如果你想咨询了解更多问题方案解答,请扫描关注下方二维码发送消息回复,第一时间为你解答

 

 


http://chatgpt.dhexx.cn/article/E7xx2vOm.shtml

相关文章

Stripe国际支付简介及API对接

文章目录 一、了解Stripe支付二、Stripe注册流程三、Stripe API 特点3.1 Apikey3.2 Idempotent Requests 幂等请求3.3 两种付款方式 四、Stripe 支付核心API4.1 Token4.2 Customer4.3 Card4.4 Source4.5 charge4.6 PaymentIntents4.7 PaymentMethod 五、完整Stripe支付代码 一、…

mingw(msys2)编译ffmpeg

mingw(msys2)编译ffmpeg 首先要确保pacman环境是最新的&#xff0c;否则会出现莫名其妙的问题&#xff0c;可以执行“pacman -Syu”更新包 安装mingw: pacman -S gcc mingw-w64-i686-toolchain yasm mingw-w64-i686-SDL2 //mingw32 pacman -S gcc mingw-w64-x86_64-toolchai…

Hyperscan Windows 编译指南

Hyperscan Windows 编译指南 Hyperscan 源码下载&#xff1a;https://www.hyperscan.io/准备环境&#xff1a; Windows 10 X64 Cygwin : https://www.cygwin.com/ CMake&#xff1a;https://cmake.org/ Visual Studio 2017 Python (2.7 版本) Boost : https://www.boost…

Hyperscan 5.4.0 安装教程 (CentOS7环境)

参考&#xff1a;Getting Started — Hyperscan 5.4.0 documentationhttp://intel.github.io/hyperscan/dev-reference/getting_started.html 目录 1.下载 2.安装环境配置 2.1 硬件需求 2.2 软件需求 3.安装 3.1 创建构建目录 3.2 设置编译选项 3.3 构建hyperscan 4.安…

Hyperscan 安装

源码下载 Ragel &#xff1a;http://www.colm.net/files/ragel/ragel-6.9.tar.gz boost &#xff1a;http://downloads.sourceforge.net/project/boost/boost/1.60.0/boost_1_60_0.tar.gz hyperscan &#xff1a; https://download.csdn.net/download/u014608280/12745509 第…

centos 8 编译安装hyperscan

一、编译安装环境配置 官方文档&#xff1a; http://intel.github.io/hyperscan/dev-reference/getting_started.html 1.1硬件配置 配置参数CPUIntel Xeon Gold 5218R CPU 2.10GHzCPU核数8核 注&#xff1a;需要满足以下条件 1、X86架构 2、Supplemental Streaming SIMD E…

ubuntu20.04下源码安装hyperscan库安装记录

安装测试环境&#xff1a; vmware-ubuntu20.04&#xff0c;gcc 4.8.5&#xff0c;ragel-6.10.tar.gz&#xff0c;boost_1_69_0.tar.gz&#xff0c;hyperscan-5.1.0.tar.gz 1.安装ragel&#xff08;必须的依赖包&#xff09;1MB&#xff1a; 下载地址&#xff1a;http://www.…

基于CentOS 8 系统环境下的 Snort 3 安装指南

O、 阅读要求 本教程并不适合初学者&#xff0c;大家在阅读本文之前&#xff0c;需具备CentOS 8 Linux、Snort 2.9的成功安装经验。本次安装对网络依赖很大&#xff0c;所以大家一定要将网络状态调节好&#xff0c;本指南介绍的内容&#xff0c;仅在测试环境中使用。 一、环境…

msys2+mingw64+ragel安装

[msys2mingw64ragel安装] [简介] 这几天部门老大让解析几个东西&#xff0c;要求用ragel编写&#xff0c;在Windows环境下&#xff0c;要运用到mingw64&#xff0c;安装时发现mingw里没有pacman&#xff0c;需要现安装&#xff0c;然后发现Wget也没有。。。&#xff0c;所以改…

Ragel State Machine Compiler 的速度测试

据说Ragel生成的自动机程序&#xff0c;速度飞快&#xff0c;特地测试了一下&#xff0c;所得结果如下。 测试环境&#xff1a; VC6 Release下编译 测试规模&#xff1a; 一亿次 测试用例&#xff1a; Ragel编译r_atoi.rl文件 vs crt lib的 atoi函数 测试结果&…

Hello Ragel -- 生成状态机的神器

Ragel 是个很 NB 的能生成状态机的编译器&#xff0c;而且支持一堆语言&#xff1a;C、C、Object-C、C#、D、Java、Go 以及 Ruby。 原来的文本解析器是用正则表达式实现的&#xff0c;随着状态&#xff08;if-else&#xff09;越来越多&#xff0c;修改越来越麻烦。。。 安装 M…

嵌入式系统开发流程

一、嵌入式系统开发流程 1、系统需求分析&#xff1a;根据需求&#xff0c;确定设计任务和设计目标&#xff0c;指定设计说明书。 2、体系结构设计&#xff1a;描述系统如何实现所述的功能需求&#xff0c;包括对硬件、软件和执行装置的功能划分以及系统的软件、硬件选型。 …

嵌入式系统开发设计

嵌入式系统开发设计 嵌入式系统设计的主要任务是定义系统的功能、决定系统的架构&#xff0c;并将功能映射到系统实现架构上。系统架构既包括软件系统架构也包括硬件系统架构。 嵌入式系统设计具有以下特点&#xff1a; 软、硬件协同并行开发&#xff1b; 微处理器的类型多种…

嵌入式系统的概念,嵌入式系统的组成及特点,嵌入式系统的基本开发流程

1. 嵌入式系统的概念 嵌入式系统( Embedded system) , 是一种 "完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。 2 . 嵌入式系统的组…

配置嵌入式系统开发环境(教程)

配置嵌入式系统开发环境 前言一. 安装VMware Workstation&#xff1f;二、在虚拟机中安装Windows XP镜像1.创建虚拟机启动虚拟机进入PE系统 关于pdf中预实验的补充说明 前言 嵌入式实时操作系统及应用开发&#xff08;第三版&#xff09;罗蕾主编光盘镜像 链接&#xff1a;htt…

嵌入式Linux系统开发笔记(七)

嵌入式Linux系统开发笔记&#xff08;七&#xff09; 七、U-Boot基础 1.概述 在移植 Linux之前我们需要先移植一个 bootloader 代码&#xff0c;这个 bootloader 代码用于启动 Linux 内核&#xff0c; bootloader有很多&#xff0c;常用的就是 U-Boot。 移植好 U-Boot 以后再…

迅为-iMX6ULL开发板原创嵌入式开发文档系统化学习

iTOP-IMX6ULL核心板采用单核Cortex-A7架构&#xff0c;主频高达528 MHz&#xff0c;CPU集成电源管理&#xff0c;146 PIN引脚全部引出。核心板接口引出串口8路、CAN 2路、网口2路、I2C1路、SPI 2路、PWM8路、ADC5路、USB1路等功能。核心板在IMX6UL开发板上进行了深度优化&#…

Vxworks嵌入式开发系统入门基础概念学习

1.VxWorks应用 自动化设备、工业控制&#xff08;实时性好&#xff09;、军用设备以及消费电子。 2.实时性 实时性包括硬实时、软实时。硬实时系统有一个刚性的、不可改变的deadlines&#xff0c;它不允许任何超出deadlines的错误。而软实时是一个柔性灵活的&#xff0c;它可以…

嵌入式系统的开发流程

嵌入式系统的开发流程 摘要&#xff1a;本文以 HHARM9-EDU为例&#xff0c;简要说明一下嵌入式系统的开发流程。 整个流程很简单&#xff0c;流程图如下&#xff1a; 一、配置Linux及MINIGUI ①配置Linux&#xff1a; 由于 HHARM9-EDU推荐使用Redhat 9&#xff0c;所以这里只介…

嵌入式开发系统的简介

小白日志&#xff08;一&#xff09; 嵌入式开发系统的简介 嵌入式系统是一种以硬件为载体&#xff0c;以计算机技术为基础&#xff0c;以应用程序为核心&#xff0c;满足特定功能、要求以及应用环境的专用计算机系统。所谓“嵌入式”&#xff0c;顾名思义&#xff0c;嵌入到…