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

前端实现支付宝沙箱的一种方案

技术:采用vue2+js+vant实现前端支付宝沙箱跳转的一种方案

总体思路:在用户点击支付时,先判断余额是否大于所需付款,如果小则跳转到对应的页面(比如跳转到服务页/余额页让用户去充值同时提示余额不足),如果大则跳转到支付宝沙箱页面输入账号密码进行支付。

例子:

主要关注pay的函数

<!-- 药品订单 --> <div class="menu absolute" v-else> <div class="menu-content"> <van-form label-width="130px" readonly> <van-field v-model="drugMenuInfo.orderDrugNo" name="id" label="订单号" /> <van-field v-model="drugMenuInfo.orderDrugTime" name="orderDate" label="下单日期" /> <van-field name="condition" v-model="drugMenuInfo.deliveryFee" label="配送金额(元)" /> <van-field v-model="drugMenuInfo.accountName" name="price" style="color: #eda6b7;" label="用户名称" /> <van-field name="serveType" v-model="drugMenuInfo.orderDrugPrice" label="订单总金额(元)" /> <van-field name="doctorName" v-model="drugMenuInfo.orderDrugPrice" label="实付金额(元)" /> <van-field name="patientName" v-model="drugMenuInfo.addressName" label="配送地址" /> </van-form> <!-- 是否支付 --> <div class="pay-container absolute"> <div class="content flex-column flex-al-center" style="gap: 10px;"> <!-- 支付按钮 --> <div style="width: 200px;"> <van-button round type="info" block @click="pay()">立即支付</van-button> </div> <!-- <span v-if="" style="color: #a6a6a6; font-size: 12px; text-decoration: underline;" @click="cancelPay()">取消支付</span> --> </div> </div> </div> </div>

因为我这边有俩种订单类型共用一个支付页,根据传入的参数判断订单的类型,然后进行带参跳转,然后可以通过window.open()打开后端设置的支付宝地址(和后端进行商量,进行字符串的拼接)前面的地址是因为我配置了环境配置文件,所以地址可以统一写,然后window.open()第二个参数用_self让浏览器打开另一个新窗口显示支付宝页面(这样不会影响订单页),最后就是支付成功后让页面返回到你的项目的支付成功页,我当时是把我支付成功页的路由给后端让后端配置

环境配置文件如下第一张图,比如env.development是开发环境,env.production是生产环境,

pay() { Dialog.confirm({ title: '提示', message: '确定支付?', }).then(() => { let money = 0 let numNo = undefined if (this.$route.query.orderDrugNo) { money = this.drugMenuInfo.orderDrugPrice numNo = this.drugMenuInfo.orderDrugNo } else { money = this.interViewMenuInfo.orderInquiryPrice numNo = this.interViewMenuInfo.orderInquiryNo } if (this.charge < money) { this.$dialog.confirm({ title: '提示', message: '余额不足', }) .then(() => { this.$router.push({ path: "/serve" }) }) } else { if (this.interViewMenuInfo.orderInquiryId) { console.log(money); window.open(`${process.env.VUE_APP_PROXY_TARGET}/pay/inquiry/pay?money=${money}&numNo=${numNo}`,'_self') } else { console.log(money); window.open(`${process.env.VUE_APP_PROXY_TARGET}/pay/drug/pay?money=${money}&numNo=${numNo}`, '_self') } } }) },
http://www.cnnetsun.cn/news/1675249.html

相关文章:

  • 2026届学术党必备的五大AI科研平台横评
  • OpenCV 颜色空间(RGB/BGR/HSV)超详细用法教程
  • HPE OneView 11.1 - HPE 服务器、存储和网络设备集中管理软件
  • PyCINRAD气象雷达数据处理解决方案:从数据解码到专业可视化的完整技术实现
  • 从GPT-3到ChatGPT:少样本学习的演进之路,给开发者的启示与避坑指南
  • 5大维度重构华硕笔记本控制体验:写给硬件爱好者的GHelper实战指南
  • TEKLauncher:重新定义方舟生存进化游戏管理的智能解决方案
  • CentOS7服务器流量飙升?别慌,用iftop+nload五分钟定位‘吃流量’的进程
  • VueRouter实战:从‘我的音乐’到‘朋友’页面,手把手教你处理组件命名和路由规划的那些坑
  • Trae国内版初体验:用豆包大模型写Python爬虫,比Copilot香吗?
  • Emby高级功能完全解锁指南:emby-unlocked让媒体服务器焕发新生
  • 效率提升:告别卡顿,用快马生成win11右键菜单高效定制工具
  • 5个秘诀让你轻松玩转QtScrcpy:安卓投屏控制从入门到精通
  • __slots__
  • JPEGView:让专业图像处理不再受限于设备与技术门槛
  • C++ 契约编程(Contracts):利用 C++20/23 语法在函数接口强制定义不变式(Invariants)以增强软件鲁棒性
  • 外卖 CPS 佣金结算系统:Java 分布式事务处理与数据一致性保障
  • javaweb在线考试管理系统的设计与实现前台329fgzk
  • 从uboot到内核启动:深度解析【system halted】与解压失败的典型场景
  • 创业公司vs大厂:不同阶段的职业选择逻辑
  • 突破MRI仿真壁垒:开源平台的技术革新与应用指南
  • Qwen3.5-2B部署优化教程:显存占用压至3.2GB的GPU算力适配技巧
  • Python 3.15 新突破:frozendict 带来字典应用新可能
  • [CD33(Siglec-3)] 靶点技术深度解析:免疫抑制机制、ADC药物开发与临床转化
  • Qwen2.5-14B 模型实战指南:从环境配置到高级应用
  • 效率飙升:用快马AI将Apifox的Mock接口自动转化为Vue3前端代码
  • Qwen3-14B WebUI权限分级:管理员/普通用户/只读访客三类角色配置
  • 告别繁琐命令行:用快马ai一键生成jdk环境验证项目原型
  • 猫抓扩展深度诊断指南:从症状到解决方案的系统分析
  • 数字孪生技术的测试方法论:虚拟与现实的同步