0

0

Javascript的支付请求API是什么_怎样用Javascript集成在线支付功能?

狼影

狼影

发布时间:2026-01-03 21:49:02

|

210人浏览过

|

来源于php中文网

原创

PaymentRequest 是浏览器原生的 W3C 标准接口,用于调起系统级支付 UI(如 Apple Pay),仅收集加密支付凭证,不处理扣款;真实交易必须由后端调用 Stripe 等服务商完成。

javascript的支付请求api是什么_怎样用javascript集成在线支付功能?

JavaScript 本身没有内置的“支付请求 API”作为通用支付网关,但浏览器原生支持 PaymentRequest 接口——它是 W3C 标准,用于调起用户设备上的支付界面(如 Apple Pay、Google Pay、Samsung Pay 或银行卡保存信息),**不直接处理资金转账,也不替代 Stripe/PayPal 等服务商的后端集成**。

什么是 PaymentRequest?它能做什么、不能做什么?

这是一个浏览器提供的、面向用户侧的标准化支付弹窗接口。它只负责收集用户确认的支付凭证(如 tokenized card info),不接触卡号明文,也不发起扣款。

  • ✅ 能:唤起系统级支付 UI、校验收货地址/联系方式、返回加密后的支付方法数据(如 tokeninstrumentKey
  • ❌ 不能:直接向银行扣款、处理退款、管理订阅、验证订单金额合法性(这些必须由你自己的后端完成)
  • ⚠️ 注意:PaymentRequest 在 Safari(iOS/macOS)、Chrome(Android/Desktop)、Edge 中支持较好;Firefox 不支持;且仅在 httpslocalhost 下可用

怎样用 PaymentRequest 发起一次前端支付请求?

核心是构造一个 PaymentRequest 实例并调用 .show()。你需要提前准备好商品明细、支持的支付方式、商家配置等。

  • methodData 必须包含至少一种支付方式标识,例如 "basic-card"(通用银行卡)或 "https://apple.com/apple-pay"
  • details 中的 total 是唯一强制字段,displayItemsshippingOptions 可选但推荐提供
  • 调用 .show() 后返回 Promise,成功时得到 PaymentResponse 对象,含 response.detailsresponse.payerEmail
const request = new PaymentRequest([
  {
    supportedMethods: "basic-card",
    data: {
      supportedNetworks: ["visa", "mastercard"],
      supportedTypes: ["credit", "debit"]
    }
  }
], {
  total: { label: "Total", amount: { currency: "USD", value: "29.99" } },
  displayItems: [
    { label: "T-Shirt", amount: { currency: "USD", value: "24.99" } },
    { label: "Tax", amount: { currency: "USD", value: "5.00" } }
  ]
});

request.show()
  .then(response => {
    console.log("支付凭证(需发给后端):", response.details);
    response.complete("success"); // 告诉浏览器支付已确认
  })
  .catch(err => console.error("用户取消或出错:", err));

为什么不能只靠 PaymentRequest 完成在线支付?

因为浏览器不连接银行,也不持有你的商户密钥。所有真实扣款动作必须由你控制的后端服务完成。

Robovision AI
Robovision AI

一个强大的视觉AI管理平台

下载

立即学习Java免费学习笔记(深入)”;

  • PaymentRequest 返回的 response.details 通常只是临时 token(如 cardNumber 是掩码,cardSecurityCode 为空),无法直连银联/Visa
  • 你必须把该响应转发到自己后端,再由后端调用 Stripe、Adyen、支付宝国际版等服务商的 API 完成实际支付创建和确认
  • 常见错误:试图在前端用 fetch 直接调 Stripe 的 /v1/payment_intents —— 这会暴露 secret_key,极其危险
  • 正确链路:前端 → PaymentRequest.show() → 得到 responsePOST /api/pay 到你后端 → 后端用 secret key 调第三方 API → 返回结果给前端

集成第三方 SDK(如 Stripe Elements)更常用,和 PaymentRequest 是什么关系?

Stripe、PayPal、Alipay+ 等都提供自己的 JS SDK,它们内部可能调用 PaymentRequest(如 Stripe 的 stripe.paymentRequestButton()),也可能完全自研 UI。关键区别在于:

  • 使用 Stripe SDK 时,你仍需后端配合创建 PaymentIntent,前端只负责收集卡信息并 confirm
  • PaymentRequest 是标准,但各家实现细节不同(比如 Apple Pay 要求域名绑定、证书签名),而 Stripe 封装了这些
  • 如果你需要同时支持 Apple Pay + Google Pay + 本地银行卡表单,PaymentRequest 可减少重复 UI 开发;但如果只要快速上线,直接用 Stripe Elements 更稳妥

真正容易被忽略的一点:无论用哪种方式,**支付金额、商品描述、用户身份等关键业务参数绝不能只信前端传来的值**——后端必须重新查库校验订单状态、价格、库存,否则会被恶意篡改。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

545

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

372

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

728

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

470

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

394

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

990

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

655

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

547

2023.09.20

python设置中文版教程合集
python设置中文版教程合集

本专题整合了python改成中文版相关教程,阅读专题下面的文章了解更多详细内容。

1

2026.01.05

热门下载

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

精品课程

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

共58课时 | 3.3万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 2万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 2.8万人学习

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

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