stripe支付

 使用第一个示例

1、示例中的PRICE_ID需要去Stripe控制台->产品目录创建产品

1、 添加产品

2、点击查看创建的产品详情

 4、这个API ID就是demo中的PRICE_ID

注意:需要注意的是,测试模式和生产模式中的 $stripeSecretKey 需要对应上。简而言之就是不能生产模式的产品API ID 对应测试模式的密钥

 5、示例中的密钥从,Stripe控制台->开发人员->API密钥->密钥  获取

 2、下载示例:

 1、打开项目查看README.md

2、替换public下checkout.php中的配置

复制代码

 1 $checkout_session = \Stripe\Checkout\Session::create([2   'line_items' => [[3     # Provide the exact Price ID (e.g. pr_1234) of the product you want to sell4     'price' => '对应产品目录的API ID',5     'quantity' => 10, // 数量默认为1,我这边产品单价是1,6   ]],7   'mode' => 'payment',  // 结账模式 付款8   'success_url' => $YOUR_DOMAIN . '/success.html', // 支付成功跳转的页面9   'cancel_url' => $YOUR_DOMAIN . '/cancel.html',     // 取消支付跳转的页面
10   'automatic_tax' => [
11     'enabled' => true,
12   ],
13 ]);

复制代码

3、如果要传递自己的自定义参数metadata传递

复制代码

 1 $checkout_session = \Stripe\Checkout\Session::create([2   'line_items' => [[3     # Provide the exact Price ID (e.g. pr_1234) of the product you want to sell4     'price' => '对应产品目录的API ID',5     'quantity' => 10, // 数量默认为1,我这边产品单价是1,6   ]],7   'mode' => 'payment',  // 结账模式 付款8   'success_url' => $YOUR_DOMAIN . '/success.html', // 支付成功跳转的页面9   'cancel_url' => $YOUR_DOMAIN . '/cancel.html',     // 取消支付跳转的页面
10   'automatic_tax' => [
11     'enabled' => true,
12   ],
13   // 元数据
14    'metadata' => [
15         'order_id' => 'you order id',
16          'product_name' => 'prodct name'
17     ]
18 ]);

复制代码

 5、浏览器访问 http://127.0.0.1:4242/checkout.html

6、$20是页面展示的静态金额这边不做详解

 7、拉取支付,测试模式下,可以用Stripe提供的测试卡号

8、支付成功之后,需要Stripe设置WebHook端点来监听事件,

3、Stripe->开发人员->WebHook

1、创建成功之后,点击进去获取密钥签名(用来验证接收的事件的合法性)

复制代码

 1         // 回调端点密钥,从webhook获取2         $endpointSecret = '端点密钥';3         // 获取参数4         $payload = @file_get_contents('php://input');5         $sigHeader = $_SERVER['HTTP_STRIPE_SIGNATURE'];6         // 签名验证7         try {8             $event = Webhook::constructEvent(9                 $payload,
10                 $sigHeader,
11                 $endpointSecret
12             );
13         } catch (SignatureVerificationException $e) {
14             // 签名验证失败
15             log_message('签名验证失败', 'log', 'pay');
16             http_response_code(400);
17             exit();
18         }
19         // 订单处理
20         if ($event->type != 'checkout.session.completed') {
21             log_message('返回的type是:' . $event->type, 'log', 'pay');
22             http_response_code(400);
23             exit();
24         }
25   
26         // todo 此处处理成功之后的业务逻辑
27         
28         // 处理成功返回200状态码
29         http_response_code(200);
30         

复制代码

3、WebHook 端点返回数据示例:

事件数据中,返回的金额是x100的如果要对订单做比对,记得除于100

复制代码

{"id": "evt_你看不见","object": "event","api_version": "2023-10-16","created": 1709170566,"data": {"object": {"id": "cs_test_你看不见","object": "checkout.session","after_expiration": null,"allow_promotion_codes": null,"amount_subtotal": 1000,"amount_total": 1000,"automatic_tax": {"enabled": true,"liability": {"type": "self"},"status": "complete"},"billing_address_collection": null,"cancel_url": "http://localhost:4242/cancel.html","client_reference_id": null,"client_secret": null,"consent": null,"consent_collection": null,"created": 1709170549,"currency": "cny","currency_conversion": null,"custom_fields": [],"custom_text": {"after_submit": null,"shipping_address": null,"submit": null,"terms_of_service_acceptance": null},"customer": null,"customer_creation": "if_required","customer_details": {"address": {"city": null,"country": "CN","line1": null,"line2": null,"postal_code": null,"state": null},"email": "你看不见","name": "你看不见","phone": null,"tax_exempt": "none","tax_ids": []},"customer_email": null,"expires_at": 1709256949,"invoice": null,"invoice_creation": {"enabled": false,"invoice_data": {"account_tax_ids": null,"custom_fields": null,"description": null,"footer": null,"issuer": null,"metadata": {},"rendering_options": null}},"livemode": false,"locale": null,"metadata": {"order_id": "you order id","product_name": "prodct name"},"mode": "payment","payment_intent": "pi_你看不见","payment_link": null,"payment_method_collection": "if_required","payment_method_configuration_details": {"id": "pmc_你看不见","parent": null},"payment_method_options": {},"payment_method_types": ["card","alipay","wechat_pay","link"],"payment_status": "paid","phone_number_collection": {"enabled": false},"recovered_from": null,"setup_intent": null,"shipping_address_collection": null,"shipping_cost": null,"shipping_details": null,"shipping_options": [],"status": "complete","submit_type": null,"subscription": null,"success_url": "http://localhost:4242/success.html","total_details": {"amount_discount": 0,"amount_shipping": 0,"amount_tax": 0},"ui_mode": "hosted","url": null}},"livemode": false,"pending_webhooks": 1,"request": {"id": null,"idempotency_key": null},"type": "checkout.session.completed"
}

复制代码

注意:如果使用Custom payment flow这个示例的话,webhook需要侦听的是 payment_intent.succeeded 事件端点,Custom payment flow示例可以直接定义,不需要创建产品API ID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/675811.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apple OpenELM设备端语言模型

Apple 发布的 OpenELM(一系列专为高效设备上处理而设计的开源语言模型)引发了相当大的争论。一方面,苹果在开源协作和设备端AI处理方面迈出了一步,强调隐私和效率。另一方面,与微软 Phi-3 Mini 等竞争对手相比&#xf…

Angular中创建和使用服务

Angular中的服务 文章目录 Angular中的服务前言一、创建服务二、使用服务 前言 Angular 服务是 Angular 应用程序中用于封装可重用逻辑的类。服务在应用程序的多个组件之间共享数据和功能,而不依赖于应用程序的UI。服务可以用于诸如数据处理、与后端通信、用户身份…

Linux初识

1.操作系统的那点事 (1)结论:操作系统是作软硬件管理的软件; (2)计算机是操作系统,设备驱动,硬件三个相互结合发挥作用的,操作系统是用来管理硬件的,常见的…

免费https证书申请

HTTPS证书,也称为SSL证书(Secure Sockets Layer)或TLS证书(Transport Layer Security),是一种数字证书,用于在互联网通信中确保数据传输的安全性、完整性和真实性。它是基于公钥基础设施&#x…

【Markdown笔记】——扩展语法学习part3 表格脚注标题编号(锚点)列表删除线人物列表(todo列表)emoji等

【Markdown笔记】——扩展语法学习part3 表格&脚注等 MarkdownMarkdown 表格语法表格内容居中、左对齐、右对齐 Markdown 脚注语法Markdown 标题编号语法Markdown 列表语法Markdown 删除线语法Markdown 任务列表语法Markdown 使用 Emoji 表情 前几篇markdown相关博客&#…

S型曲线的几种设计(图像对比度调节)

一般来讲,图像调色模块都会提供“曲线”工具,这是一个极其灵活的功能,绝大部分的调色都可以通过该工具实现,但是曲线功能的交互相对而言比较复杂。出于简便性和效率方面的考量,调色模块往往还会提供一些具有很强的功能…

如何更好地使用Kafka? - 运行监控篇

要确保Kafka在使用过程中的稳定性,需要从kafka在业务中的使用周期进行依次保障。主要可以分为:事先预防(通过规范的使用、开发,预防问题产生)、运行时监控(保障集群稳定,出问题能及时发现&#…

超声波测距传感器--第七天

1.超声波测距 型号:HC-SR04 接线参考:模块除了两个电源引脚外,还有TRIG,ECHO引脚,这两个引脚分别接我们开发板的P1.5和P1.6端 超声波模块是用来测量距离的一种产品,通过发送超声波,利用时间差和声音传播速度,计算模块到前方障碍物的距离。 2. 如何让它发送波: Tri…

微软 AI 研究团队推出 SIGMA:一个开源研究平台,旨在推动混合现实与人工智能交叉领域的研究与创新

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

【知识点随笔分享 | 第十篇】快速介绍一致性Hash算法

前言: 在分布式系统中,数据的分布和负载均衡是至关重要的问题。一致性哈希算法是一种解决这些挑战的有效工具,它在分布式存储、负载均衡和缓存系统等领域得到了广泛应用。 随着互联网规模的不断扩大,传统的哈希算法在面对大规模…

set-cookie字段,cookie文件介绍+原理,如何查看cookie文件,在基于http协议服务器的代码实现,cookie存在问题+解决(会话机制)

目录 Set-Cookie 引入 介绍 原理 描述 图解 保存"cookie文件"的方法 内存级 文件级 查看cookie文件 示例 实现 介绍 代码 核心代码 全部代码 示例 cookie存在的问题 介绍 存在的必要性 如何解决 问题梳理 引入 会话机制 -- 解决信息泄漏…

C#语言核心

一、面向对象基本概念 万物皆对象,用程序来抽象(形容)对象,用面向对象的思想来编程 用中文去形容一类对象,把一类对象的共同点提取出来,然后用程序语言把它翻译过来,带着对象的概念在程序中使…