位置: IT常识 - 正文

app内嵌h5支付功能,跳转支付宝&微信,vue组件(h5支付功能)

编辑:rootadmin
app内嵌h5支付功能,跳转支付宝&微信,vue组件 一、功能梳理

推荐整理分享app内嵌h5支付功能,跳转支付宝&微信,vue组件(h5支付功能),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:小程序内嵌h5支付,h5支付怎么设置,h5支付接口接入教程,h5支付功能,app h5支付,小程序内嵌h5支付,h5支付功能,h5支付功能,内容如对您有帮助,希望把文章链接给更多的朋友!

app内前h5涉及到支付的功能,ios非实物商品实付需要使用ios原生支付方式,实物商品则可以三方支付,主要的实现思路为后端返回跳转支付宝或微信的支付scheme链接,前端进行跳转支付,同时需要实时查询用户的支付状态。

整个过程中复杂的部分在于查询用户支付状态的体验方面,需要保证用户在支付成功、支付失败、跳转支付宝、微信回来或者没有跳转支付宝微信等未知的行为下的用户体验。

组件内容为底部升起的支付选择弹窗,可以选择支付宝或者微信。

二、实现步骤app内嵌h5支付功能,跳转支付宝&微信,vue组件(h5支付功能)

用户进行下单操作,前端调用下单接口,成功则返回三方支付app跳转链接,前端进行跳转

跳转三方app同时进行查询订单接口轮训,实时获取订单状态,轮训时间定位30s,依据需求调整

用户如果支付时间超过了30s未返回我们app的情况下,需要针对此种情况进行处理,捕捉用户返回我们app的情况

三、组件可支配参数&事件设置

设置支持参数2个、事件4个,分别为

参数:

successStatus: {default: '1'}, // 支付成功的状态码,默认1errorStatus: {default: '2'} // 支付失败的状态码,默认2

事件:

@payMoney="payMoney" // 下单事件@payStatus="payStatus" //查询支付状态事件@succcessFunction="succcessFunction" // 成功支付操作@errorFunction="errorFunction" // 失败实付操作四、从支付app返回,事件捕获方法

为了防止用户在支付时间超过我们设置轮训时长情况,需要监听用户从支付app返回当前页面,来进行查询支付状态操作。方法为监听页面显示or隐藏事件

reloadState () {// 添加监听器if (typeof document.hidden !== 'undefined') {this.hidden = 'hidden';this.visibilityChange = 'visibilitychange';} else if (typeof document.mozHidden !== 'undefined') {this.hidden = 'mozHidden';this.visibilityChange = 'mozvisibilitychange';} else if (typeof document.msHidden !== 'undefined') {this.hidden = 'msHidden';this.visibilityChange = 'msvisibilitychange';} else if (typeof document.webkitHidden !== 'undefined') {this.hidden = 'webkitHidden';this.visibilityChange = 'webkitvisibilitychange';}document.addEventListener(this.visibilityChange, this.forceUpdate);},forceUpdate () {if (document.visibilityChange === this.hidden) {} else {this.searchTimer();}},五、组件源码<template><div class="pay-info"><div class="pay-content"><span class="pay-left"><img class="pay-icon" src="../assets/zfb.png" alt=""> 支付宝支付</span><img class="radio-icon" src="../assets/radio2.svg" alt=""></div><div class="pay-content"><span class="pay-left"><img class="pay-icon" src="../assets/wx.png" alt=""> 微信支付</span><img class="radio-icon" src="../assets/radio2.svg" alt=""></div><div class="pay-button" @click="payFun"><span>支付</span></div><div class="loading-dom" v-if="loadingPay">支付中<van-loading color="#ffffff" style="margin-left: 5px"/></div></div></template><script type="text/javascript">export default {data () {return {isApp: !!browers.appUA,timer: null,loadingPay: false,orderNo: '', // 订单号payStatus: '' // 订单支付状态};},props: {successStatus: {default: '1'}, // 支付成功的状态码,默认1errorStatus: {default: '2'} // 支付失败的状态码,默认2},mounted () {this.$once('hook:beforeDestroy', () => {clearInterval(this.timer);this.timer = null;});},methods: {reloadState () {// 添加监听器if (typeof document.hidden !== 'undefined') {this.hidden = 'hidden';this.visibilityChange = 'visibilitychange';} else if (typeof document.mozHidden !== 'undefined') {this.hidden = 'mozHidden';this.visibilityChange = 'mozvisibilitychange';} else if (typeof document.msHidden !== 'undefined') {this.hidden = 'msHidden';this.visibilityChange = 'msvisibilitychange';} else if (typeof document.webkitHidden !== 'undefined') {this.hidden = 'webkitHidden';this.visibilityChange = 'webkitvisibilitychange';}document.addEventListener(this.visibilityChange, this.forceUpdate);},forceUpdate () {if (document.visibilityChange === this.hidden) {} else {this.searchTimer();}},payFun () {this.$emit('payMoney', (res) => {this.reloadState();// 下单接口的回调,执行轮训结果this.orderNo = res.order_no;this.loadingPay = true;this.searchPay();// 监听从其他app返回,为了解决从支付宝回来不轮训的问题setTimeout(() => {location.href = res.pay_address;}, 200);});},searchPay () {this.$emit('payStatus', (res) => {if (this.payStatus === '') {this.searchTimer();}// 下单接口的回调,执行轮训结果this.payStatus = res;});},searchTimer() {if (this.timer) {return;}if (this.orderNo) {let times = 0;this.searchPay();if (this.payStatus === '') {this.timer = setInterval(res => {times++;this.searchPay();if (this.payStatus === this.$props.successStatus) {clearInterval(this.timer);this.timer = null;this.loadingPay = false;document.removeEventListener(this.visibilityChange, this.forceUpdate);// 支付成功事件this.$emit('succcessFunction', (res) => {});}if (this.payStatus === this.$props.errorStatus) {clearInterval(this.timer);this.timer = null;this.loadingPay = false;document.removeEventListener(this.visibilityChange, this.forceUpdate);// 支付失败事件this.$emit('errorFunction', (res) => {});}if (times > 30) {this.$toast('未查询到支付状态,请重新支付');clearInterval(this.timer);this.timer = null;this.loadingPay = false;document.removeEventListener(this.visibilityChange, this.forceUpdate);}}, 1000);}}}}};</script><style lang="less" scoped>.pay-info {.pay-content {background: #fff;display: flex;align-items: center;justify-content: space-between;padding: 8px 0;font-size: 28px;color: #222;.pay-left {display: flex;align-items: center;}.pay-icon {width: 60px;height: 60px;margin-right: 10px}.radio-icon {width: 34px;height: 34px;}}.pay-button {width: 100%;text-align: center;margin-top: 30px;span {display: inline-block;background: #4e88f6;color: #fff;width: 100%;font-size: 32px;height: 88px;line-height: 88px;border-radius: 50px;display: inline-block;}}.loading-dom {width: 100%;height: 100vh;background: rgba(0,0,0,.5);color: #fff;text-align: center;font-size: 34px;font-weight: 500;position: fixed;display: flex;align-items: center;justify-content: center;top: 0;left: 0}}</style>六、父组件调用<Pay    @payMoney="payMoney"    @payStatus="payStatus"    @succcessFunction="succcessFunction"    @errorFunction="errorFunction"    :success-status='1'    :error-status='2'></Pay>// 下单事件payMoney (callback) {this.$axios.post(`url`, params).then((res) => {let data = res.data;if (Number(data.code) === 0) {// 执行支付操作,跳转url,结果回调给收银台组件this.currentOrder = data.data.order_no;callback(data.data);} else {this.$toast(data.message);}}).catch((e) => {});},// 轮训状态接口payStatus (callback) {this.$axios.get(`url`).then((res) => {let data = res.data;if (Number(data.code) === 0) {// 执行支付结果查询,结果回调给收银台组件callback(data.data.pay_result);if (data.data.list && data.data.list.length) {this.resultData = data.data.list;}} else {this.$toast(data.message);}}).catch((e) => {});},succcessFunction () {// 支付成功父组件操作事件this.$toast('支付成功');// 先弹出支付成功提示,延时1秒出结果弹窗setTimeout(() => {// 支付成功后刷新一下接口}, 1000);},errorFunction () {// 支付失败父组件操作事件this.$toast('支付失败,请重新发起支付');},
本文链接地址:https://www.jiuchutong.com/zhishi/298634.html 转载请保留说明!

上一篇:用JSP简单的写一个登录注册页面(编写jsp程序,实现简易计算机)

下一篇:视听场景理解经典任务(视听结合的景物描写)

  • 励志小故事20则(励志小故事2021)

    励志小故事20则(励志小故事2021)

  • 华为nova9怎么设置指纹锁(华为nova9怎么设置来电闪光灯)

    华为nova9怎么设置指纹锁(华为nova9怎么设置来电闪光灯)

  • 华为荣耀10是多大的屏幕(华为荣耀10是多大的手机屏幕)

    华为荣耀10是多大的屏幕(华为荣耀10是多大的手机屏幕)

  • 网易云如何自定义壁纸(网易云如何自定义)

    网易云如何自定义壁纸(网易云如何自定义)

  • iphone11在哪关闭自动旋转(苹果11怎样关掉)

    iphone11在哪关闭自动旋转(苹果11怎样关掉)

  • 网盘是什东西(网盘是啥东西)

    网盘是什东西(网盘是啥东西)

  • 苹果i5处理器和i7差距大吗(苹果i5处理器和i7处理器哪个好)

    苹果i5处理器和i7差距大吗(苹果i5处理器和i7处理器哪个好)

  • 华为手表gt2与荣耀手表2的区别(华为手表gt2荣耀手机能用吗)

    华为手表gt2与荣耀手表2的区别(华为手表gt2荣耀手机能用吗)

  • 三星手机启动安全模式怎样解除(三星手机启动安全设置)

    三星手机启动安全模式怎样解除(三星手机启动安全设置)

  • 拼多多商家服务费扣点是多少(拼多多商家服务态度不好,如何处罚)

    拼多多商家服务费扣点是多少(拼多多商家服务态度不好,如何处罚)

  • 快充一夜会损害电池吗(快充充电一晚上会损坏手机电池吗)

    快充一夜会损害电池吗(快充充电一晚上会损坏手机电池吗)

  • 人工智能是由什么呈现出来的智能型(人工智能是由什么呈现出来的智能性)

    人工智能是由什么呈现出来的智能型(人工智能是由什么呈现出来的智能性)

  • 电脑space键是哪个(电脑上的space键是哪个)

    电脑space键是哪个(电脑上的space键是哪个)

  • minidp接口是干啥的(minidp接口图标带d)

    minidp接口是干啥的(minidp接口图标带d)

  • 华为p10怎么打开屏幕朗读器(华为p10怎么打开任务窗口)

    华为p10怎么打开屏幕朗读器(华为p10怎么打开任务窗口)

  • 苹果手机充电口有液体怎么办(苹果手机充电口进水提示无法充电)

    苹果手机充电口有液体怎么办(苹果手机充电口进水提示无法充电)

  • 微信免密支付在哪里关(微信分付在哪里开通)

    微信免密支付在哪里关(微信分付在哪里开通)

  • wps表格删除多余格子(wps表格删除多余的空白页面)

    wps表格删除多余格子(wps表格删除多余的空白页面)

  • 快手怎么可以申请工会(快手申请号怎么申请)

    快手怎么可以申请工会(快手申请号怎么申请)

  • 手机qq怎么临时对话(qq登录新手机怎么恢复聊天记录)

    手机qq怎么临时对话(qq登录新手机怎么恢复聊天记录)

  • 微信文件损坏什么情况(微信出现文件损坏是手机的事还是微信的事)

    微信文件损坏什么情况(微信出现文件损坏是手机的事还是微信的事)

  • s6edge的电话转移怎么恢复(转移手机上的电话号码)

    s6edge的电话转移怎么恢复(转移手机上的电话号码)

  • 怎么样删除空白页(怎么样删除空白行)

    怎么样删除空白页(怎么样删除空白行)

  • dra-tl00是什么型号(dra-aloo是什么型号)

    dra-tl00是什么型号(dra-aloo是什么型号)

  • 手机wps宋体怎样设置(手机wps字体怎么调宋体)

    手机wps宋体怎样设置(手机wps字体怎么调宋体)

  • 马来西亚电话卡怎么激活(马来西亚电话卡哪种好)

    马来西亚电话卡怎么激活(马来西亚电话卡哪种好)

  • 在win10中,经常提示虚拟内存不足的原因是什么?(在windows中,经常有一些菜单选项呈暗灰色)

    在win10中,经常提示虚拟内存不足的原因是什么?(在windows中,经常有一些菜单选项呈暗灰色)

  • 【YOLOV5-6.x讲解】YOLO5.0VS6.0版本对比+模型设计(yolov5解析)

    【YOLOV5-6.x讲解】YOLO5.0VS6.0版本对比+模型设计(yolov5解析)

  • AI热潮的发展,既有机遇也有挑战!(ai当前的发展)

    AI热潮的发展,既有机遇也有挑战!(ai当前的发展)

  • 银行委托贷款上征信吗
  • 个税手续费返还政策最新规定2023
  • 房产税税额怎么算
  • 广告费和业务宣传费的区别是什么
  • 查询不到已经上市的股票
  • 预付账款在贷方是谁欠谁
  • 忘记先抄税再申报了怎么办
  • 个税申报本期收入包括社保吗
  • 银联交易手续费
  • 蓝字发票作废流程视频
  • 应付账款明细账模板
  • 亏本销售商品如何做其会计分录?
  • 手工开具发票
  • 三八妇女节要求小班幼儿到校怎么分享
  • 员工工作服计入劳保费吗
  • 资本公积转增实收资本所有者权益会变吗
  • 公共基础设施折旧年限表 20
  • 隔月的发票能作废吗
  • 有哪些方法可以判断乳剂的类型
  • 增值税防伪税控系统采用什么技术保护涉税信息
  • win10删除所有内容是什么意思
  • 车间工人工资计入
  • 个人出租车辆给公司个人所得税
  • 外资股东是什么意思
  • windows10显示文件格式
  • Mac怎么强制关闭程序
  • u盘怎么安装软件
  • 新公司成立前期费用
  • safe software
  • php数组转js数组
  • 天窗漏进来的水去哪了
  • 增值税多交可以退税吗
  • 小规模纳税人工资要每月申报
  • css经典面试题
  • spring boot s
  • ie11已经为了帮助保护您的计算机而关闭此网页
  • mysql+php
  • 纳税人有什么义务
  • 固定资产月末怎么结转
  • 公司注册完成以后需要做哪些事情
  • 外包食堂可以开专票吗
  • 上月购进固定资产次月退货已开具红字发票如何入账
  • 小规模纳税人要缴纳哪些税
  • 帝国cms怎么样
  • 资产处置收益的账务处理
  • 运输发票抵扣税额怎么算
  • 房产税土地税会减免吗
  • 预留印鉴章是什么章
  • 经营租赁方式租入再转租的建筑物
  • 周转材料怎么做分录
  • 给客户的回扣怎么表达
  • 逐步测试法计算内含报酬率
  • 出售固定资产怎样报增值税申报表
  • 双倍余额递减法计提折旧公式
  • 商业汇票的会计核算
  • 以前年度损益调整结转到哪里
  • 小规模纳税人申报增值税的操作流程
  • 教育费附加免征文件
  • 小规模纳税人增值税计算公式
  • 旅客运输进项税申报漏了
  • 会计软件包括
  • sqlserver字符串转换成数字
  • 国内的windows是正版吗
  • win8安全中心在哪
  • freebsd重启命令
  • winxp共享打印机win11
  • win7如何运行命令
  • sbdrvdet.exe - sbdrvdet是什么进程 有什么用
  • Win10系统CMD有哪些新功能? Win10 CMD命令提示符的七大使用技巧
  • 遍历目录文件
  • js递增数字
  • python并发和并行
  • django批量上传图片
  • python怎么读取中文txt文本
  • netbeans12.0安装教程
  • 税务局的前身是什么
  • 举报电话12345管用吗
  • 人人财富最新消息
  • 跨市变更税务登记要多久
  • 地税局和税务局一样吗
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设