当前位置: 首页 > news >正文

stripe/paypal

stripe

stripe

前端(不用写代码,拿url地址即可)—获取对应的plan_id,传给后端,后端返回url地址,跳出去进行支付,后端返回回调定位回前端地址,根据返回参数判断是否支付成功即可

沙盒–支付卡号

paypal

react-paypal-js

相关文档
PayPal

需要切换PayPalScriptProvider -option配置
需要再PayPalButtons 在延迟展示(等PayPalScriptProvider 更新完成)
否则会导致按钮无法展示
在这里插入图片描述
查看更新验证

// nextjs 简单示例
import { PayPalScriptProvider, PayPalButtons } from "@paypal/react-paypal-js";
const Plans: React.FC = () => {
// 控制支付按钮刷新--显示
const [showpaypalbutton, setShowpaypalbutton] = useState(true); const [initOptions, setInitOptions] = useState({clientId: process.env.NEXT_PUBLIC_PAYPAL_CLIENT_ID as string,vault: true, // falseintent: "subscription", // capture - subscription})return (
<PayPalScriptProviderkey={`paypal-provider-${paypalInfo.plan_type}`}options={initOptions}>{showpaypalbutton && mode === "subscription" && (<div><PayPalButtonsstyle={{layout: "vertical",}}onCancel={async (data) => {const result = await client_request("/subscription_cancel", "POST", {...data,})messageApi.warning("Payment Cancelled. Thank you for trying!");console.log("onCancel", result);}}createSubscription={async () => {const result = await client_request("/create_subscribe", "POST", { plan: 1 })const _res = result.data as {subscription_id: stringapprove_url: string}console.log("create_order_createSubscription", _res.subscription_id);subscriptionId.current = _res.subscription_idreturn _res.subscription_id}}onApprove={async (data, actions) => {console.log("onApprove", data);const result = await client_request("/subscription_confirm", "POST", {...data,status: "success"})if (result.code === 0) {getPlans()}messageApi.success("Payment Successful! All videos are now unlocked. Enjoy!");return Promise.resolve();}}onError={async (err) => {console.log("onError", err);messageApi.error("Payment Failed. Something went wrong. Please try again.");}}/></div>)}{showpaypalbutton && mode === "one-time" && (<div><PayPalButtonsstyle={{layout: "vertical",}}onCancel={async (data) => {console.log("onCancel", data);const result = await client_request("/subscription_cancel", "POST", {...data,status: "cancel"})messageApi.warning("Payment Cancelled. Thank you for trying!");console.log("onCancel", result);}}createOrder={async (data, actions) => {const result = await client_request("/create_order", "POST", { ...data })const _res = result.data as {order_id: stringapprove_url: string}subscriptionId.current = _res.order_id// if (_res.approve_url) {//   window.open(_res.approve_url, '_blank');// }return _res.order_id}}onApprove={async (data, actions) => {console.log("create_order_onApprove=====", data);const result = await client_request("/order_return", "POST", {...data,status: "success"})if (result.code === 0) {getPlans()}console.log("create_order", result);messageApi.success("Payment Successful! All videos are now unlocked. Enjoy!");return Promise.resolve();}}onError={async (err) => {console.log("onError", err);messageApi.error("Payment Failed. Something went wrong. Please try again.");}}/></div>)}</PayPalScriptProvider>
)
};export default Plans;
http://www.dtcms.com/a/507623.html

相关文章:

  • 机器学习(5)特征缩放与梯度下降收敛
  • 英飞凌推出首款100V aec合格GaN晶体管
  • 李宏毅机器学习笔记27
  • 机器学习作业七
  • openEuler安装jdk,nginx,redis
  • ffmpeg 交叉编译
  • Python编程之面向对象
  • 建设一个网站大概费用门户网站开发工具
  • OpenCV cv::Mat.type() 以及类型数据转换
  • Elasticsearch批量写入50万数据
  • 爬取GitHub开源项目信息并生成词云:从数据抓取到可视化实践
  • 做阀门的网站域名有了怎么建设网站
  • 西安交大Nat. Commun:749.276 cm²认证效率19.50%,通过IEC测试迈向产线
  • 百度站长平台登录网站图片自动轮换怎么做的
  • KuiklyUI 科普:UI 如何映射到 Android View 并完成渲染
  • 【2025-系统规划与管理师】第11章:信息系统治理
  • Python中如何实现数据库迁移
  • 第6部分:使用Netty的常见坑与注意事项
  • 广东企业品牌网站建设价格免费做网站的方法
  • 家政小程序系统开发:打造便捷高效的家政服务平台
  • CVE-2025-57833研究分析
  • 基于西门子proneta软件的网络设备台账自动管理软件
  • 深入大模型-12-Python虚拟环境的管理venv和uv和conda
  • DINOv2分类网络onnxruntime和tensorrt部署
  • 医疗网站建设网站wordpress别名时间戳
  • YOLOv3 深度解析:网络架构、核心改进与目标检测实践
  • 数据防泄露(DLP)综合指南:从基础到实践
  • 福鼎网站开发深圳市工程交易服务网
  • 电厂VR安全事故体验系统:让着火体验从 “看见” 变 “亲历”
  • 万网建设网站wordpress伪静态 page