0

0

使用 Angular 14 实现 Stripe 自定义支付流程

花韻仙語

花韻仙語

发布时间:2025-08-16 21:04:02

|

751人浏览过

|

来源于php中文网

原创

使用 angular 14 实现 stripe 自定义支付流程

本文将介绍如何在 Angular 14 项目中集成 Stripe 支付,并实现自定义支付流程,避免使用 stripe-ngx 库及其默认弹窗样式。我们将重点讲解如何在 Angular 组件中捕获支付成功事件,避免页面跳转,以及解决使用 Stripe JS checkout 时可能遇到的 clientSecret 错误。

集成 Stripe JS 到 Angular 项目

首先,需要在 Angular 项目中引入 Stripe JS 库。可以通过在 index.html 文件中添加以下代码来实现:



  
    
  
  
    
  

或者,在 angular.json 文件中配置 scripts 数组:

"architect": {
  "build": {
    "builder": "@angular-devkit/build-angular:browser",
    "options": {
      "scripts": [
        "node_modules/stripe/stripe-js/dist/stripe.js"
      ]
    }
  }
}

接下来,在需要使用 Stripe 的 Angular 组件中,注入 Stripe 实例。建议创建一个 Stripe 服务来封装 Stripe 相关逻辑,以便在多个组件中复用。

import { Injectable } from '@angular/core';
import { environment } from 'src/environments/environment';

@Injectable({
  providedIn: 'root'
})
export class StripeService {
  stripe: any;

  constructor() {
    this.stripe = Stripe(environment.stripePublicKey); // 替换为你的 Stripe 公钥
  }

  getStripeInstance() {
    return this.stripe;
  }
}

在 environment.ts 文件中配置你的 Stripe 公钥:

export const environment = {
  production: false,
  stripePublicKey: 'pk_test_YOUR_STRIPE_PUBLIC_KEY' // 替换为你的 Stripe 公钥
};

实现自定义支付流程

在组件中,获取 Stripe 实例,并创建支付元素。

import { Component, OnInit, AfterViewInit, ElementRef, ViewChild } from '@angular/core';
import { StripeService } from './stripe.service';

@Component({
  selector: 'app-payment',
  templateUrl: './payment.component.html',
  styleUrls: ['./payment.component.css']
})
export class PaymentComponent implements OnInit, AfterViewInit {
  @ViewChild('cardElement') cardElement: ElementRef;
  stripe: any;
  elements: any;
  card: any;
  emailAddress: string = 'test@example.com'; // 示例邮箱

  constructor(private stripeService: StripeService) {
    this.stripe = this.stripeService.getStripeInstance();
  }

  ngOnInit(): void {
  }

  ngAfterViewInit(): void {
    this.elements = this.stripe.elements();
    this.card = this.elements.create('card');
    this.card.mount(this.cardElement.nativeElement);
  }

  async confirmPayment() {
    const { error } = await this.stripe.confirmPayment({
      elements: this.elements,
      confirmParams: {
        receipt_email: this.emailAddress,
      },
      redirect: "if_required" // 添加 redirect: "if_required"
    });

    if (error && (error.type === "card_error" || error.type === "validation_error")) {
      this.showMessage(error.message);
    } else if (error) {
      this.showMessage("An unexpected error occurred.");
    } else {
      // 支付成功,可以在这里处理后续逻辑
      this.showMessage("Payment succeeded!");
    }
  }

  showMessage(message: string) {
    // 显示消息的逻辑,例如使用 alert 或 Angular Material Snackbar
    alert(message);
  }
}

在 HTML 模板中,添加一个元素用于挂载 Stripe Card Element:

注意事项:

短视频去水印微信小程序
短视频去水印微信小程序

抖猫高清去水印微信小程序,源码为短视频去水印微信小程序全套源码,包含微信小程序端源码,服务端后台源码,支持某音、某手、某书、某站短视频平台去水印,提供全套的源码,实现功能包括:1、小程序登录授权、获取微信头像、获取微信用户2、首页包括:流量主已经对接、去水印连接解析、去水印操作指导、常见问题指引3、常用工具箱:包括视频镜头分割(可自定义时长分割)、智能分割(根据镜头自动分割)、视频混剪、模糊图片高

下载
  • redirect: "if_required":这个配置告诉 Stripe 在需要重定向时才进行重定向,例如进行 3D Secure 验证。

解决 clientSecret 错误

如果在调用 stripe.confirmPayment 时遇到 clientSecret 找不到的错误,请确保以下几点:

  1. clientSecret 的正确获取: clientSecret 是在服务器端创建 PaymentIntent 或 SetupIntent 时生成的。 你需要通过你的后端 API 获取到这个 clientSecret。 确保你的后端代码正确地创建了 PaymentIntent 或 SetupIntent,并将其 clientSecret 返回给前端。

  2. 正确传递 clientSecret: 在调用 stripe.confirmPayment 时,clientSecret 必须正确地传递给 Stripe。 通常,clientSecret 是通过 elements 对象传递的,而不是直接作为参数传递。 确保你正确地创建了 elements 对象,并且已经将其传递给了 stripe.confirmPayment。

  3. 检查 elements 对象: 在调用 stripe.confirmPayment 之前,使用 console.log(this.elements) 检查 elements 对象是否正确创建。 确保 elements 对象包含了 Stripe Card Element 的信息。

示例 (假设从后端获取了 clientSecret):

// ...
async confirmPayment() {
  // 假设 this.clientSecret 从后端获取
  const { error } = await this.stripe.confirmPayment({
    elements: this.elements,
    confirmParams: {
      receipt_email: this.emailAddress,
      // payment_method: {
      //   card: this.card
      // },
      // client_secret: this.clientSecret // 不要在这里直接传递 clientSecret
    },
    redirect: "if_required"
  });

  // ...
}

总结:

通过以上步骤,你可以在 Angular 14 项目中成功集成 Stripe 支付,并实现自定义的支付流程。 关键在于正确地引入 Stripe JS 库,创建 Stripe Card Element,以及正确地调用 stripe.confirmPayment 方法。 注意处理可能出现的错误,例如 clientSecret 找不到的错误,并根据 Stripe 的文档进行调试。 记住,PaymentIntent 或 SetupIntent 的创建和 clientSecret 的获取需要在后端完成,确保安全性。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

420

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

536

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

313

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

77

2025.09.10

js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

515

2023.06.20

js获取当前时间
js获取当前时间

JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

245

2023.07.28

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

340

2023.08.03

js是什么意思
js是什么意思

JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

5334

2023.08.17

2026赚钱平台入口大全
2026赚钱平台入口大全

2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

54

2026.01.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.1万人学习

CSS教程
CSS教程

共754课时 | 25.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号