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 sell
 4     '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 sell
 4     '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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【嵌入式必读】一文彻底理解PID自整定及PID自整定代码设计

文章目录 1. 前言2. PID简介3. 常用的PID自整定方法3.1 临界度比例法3.2 衰减曲线法 4. 继电反馈整定法原理4.1 继电反馈自整定的基本思想4.2 继电反馈自整定原理 5. 算法设计5.1 振荡的生成5.2 提取出临界周期 T c T_c Tc​和振荡波形幅值 A A A5.3 计算出PID参数 6 原代码6.1…

【Linux】Docker 安装部署 Nacos

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~ 个人主页:.29.的博客 学习社区:进去逛一逛~ 【Linux】Docker 安装部署 Nacos docker搜索na…

如何获得一个Oracle 23ai数据库(Virtual Appliance)

准确的说,是Oracle 23ai Free Developer版,因为企业版目前只在云上(OCI和Azure)和ECC上提供。 方法包括3种,本文介绍第1种: Virtual ApplianceRPM安装Docker 从此处下载虚拟机。 可以看到虚拟机需要4G内…

武汉星起航:精准布局,卓越服务——运营交付团队领跑亚马逊

在全球电商浪潮中,亚马逊平台以其独特的商业模式和全球化的市场布局,吸引了无数商家和创业者的目光。在这个充满机遇的市场中,武汉星起航电子商务有限公司凭借其专业的运营交付团队,以其独特的五对一服务体系和精准的战略布局&…

CSS学习笔记之基础教程(一)

1、CSS语法 CSS 规则集(rule-set)由选择器和声明块组成: 选择器指向您需要设置样式的 HTML 元素。 声明块包含一条或多条用分号分隔的声明。 每条声明都包含一个 CSS 属性名称和一个值,以冒号分隔。 多条 CSS 声明用分号分隔…

【Linux】文件内容相关的命令,补充:管道符

1、查看文件内容 (1-1)查看文件内容:cat,tac,head,tail 查看文件内容cat 文件名查看文件内容并显示行号cat -n 文件名倒着查看文件内容(从最后一行开始)tac 文件名查看文件前10行…

Pycharm远程同步的mapping与sync

用Pycharm进行项目远程部署的时候会遇到两个同步文件,一个是点击 tools—>deployment—>configration——>mapping 一个是链接虚拟环境的时候会有一个sync,那么这两种同步有什么区别呢? 区别就是,2包括1,要用…

GORM的常见命令

文章目录 一、什么是GORM?二、GORM连接mysql以及AutoMigrate创建表三、查询1、检索此对象是否存在于数据库(First,Take,Last方法)2、Find()方法检索3、根据指定字段查询 四、更新1、Save() 保存多个字段2、更新单个字段 五、删除 一、什么是G…

QT截图程序,可多屏幕截图

截图程序&#xff0c;支持多屏幕时跨屏幕截图。截图使用setMask达到镂空效果&#xff0c;截图后会有预览和保存功能。截图时按下Esc可退出。 mainwindow.ui mainwindow.cpp #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> …

docker jenkins 部署springboot项目

1、创建jenkins容器 1&#xff0c;首先&#xff0c;我们需要创建一个 Jenkins 数据卷&#xff0c;用于存储 Jenkins 的配置信息。可以通过以下命令创建一个数据卷&#xff1a; docker volume create jenkins_data启动 Jenkins 容器并挂载数据卷&#xff1a; docker run -dit…

搞定 TS 装饰器,让你写 Node 接口更轻松

前言 亲爱的小伙伴&#xff0c;你好&#xff01;我是 嘟老板。你是否用过 TypeScript 呢&#xff1f;对 装饰器 了解多少呢&#xff1f;有没有实践应用过呢&#xff1f;今天我们就来聊聊 装饰器 的那点事儿&#xff0c;看看它有哪些神奇的地方。 什么是装饰器 咱们先来看一段…

密码学《图解密码技术》 记录学习 第十三章

目录 第十三章 13.1 本章学习的内容 13.2 PGP 简介 13.2.1 什么是 PGP 13.2.2 关于 OpenPGP 13.2.3关于GNU Privacy Guard 13.2.4 PGP 的功能 公钥密码 数字签名 单向散列函数 证书 压缩 文本数据 大文件的拆分和拼合 13.3 生成密钥对 13.4 加密与解密 13.4.1 加密 生成…

Qt | QComboBox(组合框)

01、上节回顾 Qt 基础教程合集02、QComBox 一、QComboBox 类(下拉列表、组合框) 1、QComboBox 类是 QWidget 类的直接子类,该类实现了一个组合框 2、QComboBox 类中的属性 ①、count:const int 访问函数:int count() const; 获取组合框中的项目数量,默认情况下,对于空…

js 图片渐变

1. 点击图片&#xff0c;使其渐变为另一张图片 通过定义keyframes来创建一个淡入淡出的动画效果。当图片被点击时&#xff0c;先添加淡出动画使图片透明度从0渐变到1&#xff0c;然后在1秒后切换图片源并添加淡入动画使新图片透明度从0渐变到1&#xff0c;实现图片渐变效果。 …

光伏SRM供应商管理解决方案

供应商管理是光伏企业中重要的一环&#xff0c;通过SRM管理供应商&#xff0c;可以提高产品质量&#xff0c;降低采购成本&#xff0c;并集成供应链&#xff0c;提高核心竞争力。 一、搭建管理系统 分为供应商和商户&#xff0c;供应商需要完善基本信息、类别、等级、产品概要…

2005-2021年全国各地级市生态环境注意力/环保注意力数据(根据政府报告文本词频统计)

2005-2021年全国各地级市生态环境注意力/环保注意力数据&#xff08;根据政府报告文本词频统计&#xff09; 2005-2021年全国各地级市生态环境注意力/环保注意力数据&#xff08;根据政府报告文本词频统计&#xff09; 1、时间&#xff1a;2005-2021年 2、范围&#xff1a;2…

记一些内存取证题

生活若循规蹈矩&#xff0c;我们便随心而动 1.Suspicion 给了俩文件 python2 vol.py -f mem.vmem imageinfo 查看可疑进程 python2 vol.py -f mem.vmem --profileWinXPSP2x86 pslist 发现可疑进程TrueCrypt.exe 把这个进程提取出来。memdump -p 进程号 -D 目录 python2 vol…

Ypay源支付6.9无授权聚合免签系统可运营源码

Ypay源支付6.9无授权聚合免签系统可运营源码 效果图说明安装说明后台 部分源码领取源码下期更新预报 效果图 YPay是一款专为个人站长设计的聚合免签系统&#xff0c;YPay基于高性能的ThinkPHP 6.1.2 Layui PearAdmin架构&#xff0c;提供了实时监控和管理的功能&#xff0c;让…

GhostNetV2 Enhance Cheap Operation with Long-Range Attention 论文学习

论文地址&#xff1a;https://arxiv.org/abs/2211.12905 代码地址&#xff1a;https://github.com/huawei-noah/Efficient-AI-Backbones/tree/master/ghostnetv2_pytorch 解决了什么问题&#xff1f; 在计算机视觉领域&#xff0c;深度神经网络在诸多任务上扮演着重要角色。为…

Linux —— 信号(3)

Linux —— 信号&#xff08;3&#xff09; Core dump为什么core默认是被关闭的阻塞信号信号其他相关常见概念信号递达信号未决信号阻塞两者的区别信号的结构 信号集操作函数一个简单使用例子sigpending的使用例子 我们今天接着来了解信号&#xff1a; Core dump 大家不知道有…