最近公司要做一下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并收集银行卡信息进行支付,验证支付结果,如果还有业务上的逻辑,就可以根据支付结果进行相应的处理。

stripe支付集成相关推荐

  1. 美国Stripe支付Android端集成流程

    上家公司想要拓展自己在新加坡的市场,打算做一个新加坡本地的生活服务应用,其中少不了的就是支付了.国外支付这块一直是个头疼的问题.想用Google Wallet吧,但它是采用NFC接触式交易,想要进行线 ...

  2. php集成Stripe支付,海外支付stripe对接支付

    发表于 2017-03-15 09:35:49 by 月小升 strip https:// data-key="pk_test_wIAv7SdDJV2B6zPPUdnXnJCd" ...

  3. php集成Stripe支付插件,Stripe支付对接

    一.由于文档丢失原因,我就直接上代码了. 这个Stripe支付可以支持多个币种,我下面就采用"HDK"来参照支付先上一个支付效果图 提示:先上代码,在说明博主自己理解的流程. 一. ...

  4. MFCard:易用的信用卡支付集成类库

    原文链接:https://github.com/MobileFirstInc/MFCard MFCard:易用的信用卡支付集成类库.# 为开源点赞# -- 由 SwiftLanguage 分享 MFC ...

  5. stripe支付使用指南_Stripe vs Braintree:终极指南

    stripe支付使用指南 If you're developing an app that needs to accept payments, you'll likely consider Strip ...

  6. Stripe支付简介和前端js调用

    最近公司正在做一个国际版APP,涉及到海外支付,调研过Paypal.Skrill.BrainTree.Stripe(可参考海外移动支付方案对比),最终 选择了Stripe支付.Stripe特点如下: ...

  7. 【Android】Stripe支付

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 一.Stripe是什么? 二.使用步骤 1.引入库 2.配置publishable key 来和Stripe通讯 3.创建 ...

  8. 初步认识 Stripe 支付

    前言 这段时间在做支付相关的工作,由于业务主要是面向国外的用户,因而就接触了部分国外的支付支付相关的平台.接下来的内容主要是初步看了 Stripe 平台的文档所了解到的基本内容,后面会在使用的过程中不 ...

  9. stripe支付_如何在Stripe上设计支付逻辑(并将其应用)

    stripe支付 Payment logic is central to any product that deals with money. After all, a well-designed p ...

最新文章

  1. poj2756(高精度加减)
  2. .NET Core使用NPOI导出复杂Word详解
  3. 【算法分析与设计】数组循环移位问题
  4. Flutter从入门到进阶
  5. python之format函数学习
  6. 简单的idea非maven项目引入jar包
  7. ntpdate 时间同步
  8. Linux 2.6内核配置说明(10----Device Drivers设备驱动程序)
  9. python 特征选择方法_机器学习小窍门:Python 帮你进行特征选择
  10. android 短信列表优化,android listview优化几种写法详细介绍
  11. java 什么是成员变量_java成员变量和方法的含义是什么?异同点有哪些?
  12. Medical image segmentation
  13. 鲤鱼精的Python学习笔记(一)
  14. 代码特效插件pycharm
  15. Simulink仿真---Park变换、反Park变换
  16. 单词2016.8.3
  17. linux资源共享方法
  18. linux与windows的语音视频聊天?不容易啊
  19. ​​​​​​​深度学习在场景文字识别技术中的应用综述
  20. [附源码]Java计算机毕业设计SSM高校教材管理系统

热门文章

  1. 学生宿舍管理系统之概念结构设计
  2. dapper mysql 拓展_Dapper.Common基于Dapper的开源LINQ超轻量扩展
  3. 攻防世界-----web知识点总结
  4. Python:写了一个简易的同/环比分析器
  5. 以小麦胚芽之名,智膳堂创造膳食升级新图景
  6. 算法的特性和设计要求
  7. 9位院士及12位专家联合发表长文:人工智能的进展、挑战与未来
  8. 计算机等级二级 领慧,计算机二级考试真题-Word-领慧讲堂大学生人生规划海报...
  9. SpringCloud使用熔断器Hystrix
  10. 虹膜识别论文5:DeepIrisNet2 2019年 学习心得