stripe支付集成

article/2025/5/3 13:10:33

最近公司要做一下Stripe支付的集成,浅浅地谈一下自己的一点理解

1、stripe是什么?

stripe是第三方的支付平台,就像国内的支付宝、微信支付。。。

stripe官方文档:Developer tools | Stripe Documentation

关于stripe支付,文档写得还是很清楚的

stripe支持三种支付方式

(1)Stripe Checkout

这是stripe提供的页面,可以将用户重定向到这个页面进行一些简单的购买,其余两种方式则可以自定义支付流程

(2)Charges API支付 

这是一种比较旧的支付方式了,缺点也写的比较清楚,无非就是不支持印度、不支持强客户认证(Stripe的强客户认证(SCA)是一种欧洲支付服务指令(PSD2)的要求,旨在增强客户的支付安全性。它要求客户在进行交易时进行额外的身份验证,例如输入密码或使用指纹识别等生物识别技术。这有助于减少欺诈和非法交易。)等等

(3)Payment Intents API

这是stripe推荐的方式,现在我们来比较一下两种方式的优缺点

Source优点:

  1. 简单易用,只需要一个API请求即可完成支付;
  2. 支持多种支付方式,包括信用卡、银行转账等;
  3. 支持多种支付场景,包括一次性支付、订阅等;
  4. 支持多种支付功能,包括支付验证、支付取消等。

Source缺点:

  1. 不支持支付宝、微信支付等流行的支付方式;
  2. 不支持分期付款等复杂的支付场景;
  3. 不支持3D Secure、欺诈检测等支付安全功能;

PaymentIntent优点:

  1. 支持更多的支付方式,包括信用卡、银行转账、支付宝、微信支付等;
  2. 支持更多的支付场景,包括一次性支付、分期付款、订阅等;
  3. 支持更多的支付功能,包括支付验证、支付确认、支付取消等;
  4. 支持更多的支付安全性,包括3D Secure、欺诈检测等。

PaymentIntent缺点:

  1. 需要更多的开发工作,包括前端和后端的开发;
  2. 需要更多的支付流程,包括创建PaymentIntent、确认PaymentIntent、支付等;
  3. 需要更多的支付费用,包括Stripe的手续费和支付渠道的手续费。

2、自定义支付流程这两种方式的处理逻辑

先来说charges API这种方式,这种方式比较简单

import com.stripe.Stripe;
import com.stripe.exception.StripeException;
import com.stripe.model.Charge;
import java.util.HashMap;
import java.util.Map;
public class StripeDemo {    public static void main(String[] args) {// 开发完毕后替换为生产秘钥        Stripe.apiKey = "sk_test_XXXXXXXXXXXXXXXXXXXXXXXX";        Map<String, Object> chargeParams = new HashMap<>();chargeParams.put("amount", 2000);chargeParams.put("currency", "usd");chargeParams.put("source", "tok_visa");chargeParams.put("description", "Test Charge");try {            Charge charge = Charge.create(chargeParams);System.out.println(charge);} catch (StripeException e) {e.printStackTrace();}}
}

如果是正式开发,需要前端收集用户付款的银行卡信息生成stripeToken用于charge对象的创建

第二种Payment Intents API方式 

这种方式的处理流程如下图所示:

首先创建paymentIntent,根据paymentIntent.getClientSecret和用户输入的银行卡信息去调用stripe接口,接下来就是我们正常的业务,支付成功就可以进行正常的业务操作

PaymentIntentCreateParams params =PaymentIntentCreateParams.builder()// 设置要收取的金额.setAmount(amount)// 设置收取的币种.setCurrency("cny").setAutomaticPaymentMethods(PaymentIntentCreateParams.AutomaticPaymentMethods.builder().setEnabled(true).build()).build();// Create a PaymentIntent with the order amount and currencyPaymentIntent paymentIntent = null;try {paymentIntent = PaymentIntent.create(params);} catch (StripeException e) {e.printStackTrace();}CreatePaymentResponse paymentResponse = new CreatePaymentResponse(paymentIntent.getClientSecret());return new Gson().toJson(paymentResponse);

接下来是我们前端处理逻辑,前端接收到后端传递clientSecret和用户输入的银行卡信息去请求stripe接口进行支付

const response = await fetch("/", {method: "POST",headers: { "Content-Type": "application/json" },body: JSON.stringify({ items }),});const { clientSecret } = await response.json();const appearance = {theme: 'stripe',};elements = stripe.elements({ appearance, clientSecret });async function handleSubmit(e) {e.preventDefault();setLoading(true);const { error } = await stripe.confirmPayment({elements,confirmParams: {// Make sure to change this to your payment completion pagereturn_url: "http://localhost:4242/checkout.html",receipt_email: emailAddress,},});const { paymentIntent } = await stripe.retrievePaymentIntent(clientSecret);switch (paymentIntent.status) {case "succeeded":alert("支付成功");break;case "processing":showMessage("Your payment is processing.");break;case "requires_payment_method":showMessage("Your payment was not successful, please try again.");break;default:showMessage("Something went wrong.");break;}

这是前端的部分代码,主要就是获取paymentIntent对象的的clientSecret并收集银行卡信息进行支付,验证支付结果,如果还有业务上的逻辑,就可以根据支付结果进行相应的处理。

文章来源:https://blog.csdn.net/qq_55756037/article/details/129713179
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://chatgpt.dhexx.cn/article/GSMXLXLK.shtml

相关文章

初步认识 Stripe 支付

前言 这段时间在做支付相关的工作&#xff0c;由于业务主要是面向国外的用户&#xff0c;因而就接触了部分国外的支付支付相关的平台。接下来的内容主要是初步看了 Stripe 平台的文档所了解到的基本内容&#xff0c;后面会在使用的过程中不断地进行完善。 基本介绍和与其他支…

Stripe支付流程

近几天因为公司的项目中遇到了需要支持给国外本土支付提供支持&#xff0c;经过调研了市面上几款的产品后选择了stripe支付 由于资料比较少没有太多讨论&#xff0c;慢慢查看官方文档以下是我对官方文档梳理和对接过程中的一些经验和理解记录了下来 关于Stripe Stripe是一家提…

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;它可以…