跨平台开发支付组件,实现支付宝支付

 效果图:

 

custom-payment : 在生成预付订单之后页面中需要弹出一个弹层,弹层中展示的内容为支付方式(渠道),由用户选择一种支付方式进行支付。

该弹层组件是以扩展组件 uni-popup 为核心的,关于 uni-popup 组件的使用文档请查看这里,这里只介绍我们用到的部分:

  • type 属性,指定弹层出现的位置
  • is-mask-click 是否允许点击蒙层关闭弹层
  • maskClick 点击弹层时触发事件

custom-payment 代码:

<!-- components/custom-payment/custom-payment.vue -->
<script lang="ts" setup>
import { ref } from 'vue'// 在线支付弹层
const paymentPopup = ref()// 打开弹层
const open = () => {paymentPopup.value.open()
}
// 关闭弹层
const close = () => {paymentPopup.value.close()
}// 2.把方法暴露出去给外部使用
defineExpose({open,close
})//3. 处理选择支付渠道
const paymentMethod = ref()
const paymentChannel = [{title: '微信支付',thumb: '/static/images/wechatpay-icon.png',},{title: '支付宝支付',thumb: '/static/images/alipay-icon.png',},
]
const changePayment = (index: number) => {paymentMethod.value = index
}const emit = defineEmits<{(e: 'close'): void(e: 'confirm', index: number): void
}>()</script>
<template><uni-popup :is-mask-click="false" ref="paymentPopup" type="bottom" @maskClick="emit('close')"><view class="payment-container"><view class="payment-header"><text class="title">选择支付方式</text><uni-icons class="uni-icons-close" size="18" color="#333" type="closeempty" @click="emit('close')" /></view><view class="order-amount">¥ {{ amount.toFixed(2) }} </view><uni-list :border="false"><uni-list-item clickable v-for="(item, index) in paymentChannel" :key="index" :title="item.title":thumb="item.thumb" @click="changePayment(index)"><template #footer><uni-icons v-if="paymentMethod === index" size="26" color="#16C2A3" type="checkbox-filled" /><uni-icons v-else size="26" color="#d1d1d1" type="circle" /></template></uni-list-item></uni-list><button class="uni-button" @click="emit('confirm', paymentMethod)">立即支付</button></view></uni-popup>
</template><style lang="scss">
.payment-container {min-height: 400rpx;border-radius: 30rpx 30rpx 0 0;background-color: #fff;padding: 10rpx 30rpx 40rpx;.payment-header {height: 88rpx;line-height: 88rpx;text-align: center;margin-bottom: 20rpx;font-size: 32rpx;color: #333;position: relative;}.uni-icons-close {position: absolute;top: 2rpx;right: 0;}.order-amount {padding: 10rpx 0 10rpx;text-align: center;font-size: 40rpx;color: #333;}:deep(.uni-list-item__container) {padding: 40rpx 0 !important;}:deep(.uni-list-item--hover) {background-color: #fff !important;}:deep(.uni-list-item__icon) {margin-right: 0;}.uni-button {margin-top: 40rpx;}
}
</style>

 

 支付流程

一般的支付流程如下:

  1. 第三方支付提供的开发者平台注册账号、创建应用、申请认证用的证书或者 key
  2. 前端获取待支付订单ID、支付金额、支付渠道等数据,传递给后端接口
  3. 后端接口在获取前端传递的数据后,根据支付平台提供文档与支付平台接口进行对接
  4. 后端与支付平台对接成功后,后端将支付信息再回传给前端
  5. 前端根据回传的信息引导用户进行支付

在整个支付的过程中前端的任务仍然是调用接口(与调用普通的接口几乎没有差别),真正完成支付任务的其实是后端接口。

支付宝支付
  1. 自行注册支付宝支付账号
  2. 在企业中开发时需要创建应用,然而创建应用后还需要一些资质才可以进行支付,无法满足这些资质,好在支付定平台提供了沙箱环境,沙箱环境是协助开发者进行接口开发及主要功能联调的模拟环境,目前仅支持网页/移动应用和小程序两种应用类型。
  3. 在正式应用或沙箱应用中获取到商家账号、认证证书、APPID、回调地址等。
  4. 上述的操作其实都是由后端来操作的,这里只是让大家了解一下支付管理后台的相关信息。

父组件使用组件:

 <script lang="ts" setup>// 弹层选择支付渠道customPaymentRef.value.open()//  处理支付渠道组件的自定义事件const onPaymentConfirm = async (index: number) => {if (index === undefined) return uni.showToast({ title: '请选择支付方式', icon: 'none' })if (index === 0) return uni.showToast({ title: '暂不支持微信支付', icon: 'none' })//  调用后端接口const { payUrl } = await orderPayApi({orderId: orderId.value,paymentMethod: index + '',payCallback: 返回地址})// #ifdef H5window.location.href = payUrl// #endif// #ifdef MP-WEIXIN// 引导用户支付(wx.requestPayment 小程序)// wx.requestPayment({//   // 4 个参数// })// #endif}
//  关闭支付弹层
const onPaymentClose = async () => {const res = await uni.showModal({title: '关闭支付',content: '取消支付将无法获得医生回复,医生接诊名额有限,是否确认关闭?',cancelText: '仍要关闭',cancelColor: '#848484',confirmText: '继续支付',confirmColor: '#16C2A3',})if (!res.confirm) {customPaymentRef.value.close()uni.reLaunch({url: '/pages/index/index',})}
}</script><template><!-- 支付渠道弹层 --><custom-payment   ref="customPaymentRef"@close="onPaymentClose" @confirm="onPaymentConfirm" />
</template>

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

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

相关文章

usb学习笔记

1 学习链接 https://zhuanlan.zhihu.com/p/683251257https://zhuanlan.zhihu.com/p/683251257控制传输固定使用端点0 &#xff0c;枚举过程使用大量的控制传输&#xff0c;可参考后文中枚举过程的实际报文。控制传输为了保证配置数据的传输的有效性&#xff0c;使用了指令再确…

uniapp一键打包

1.先安装python环境&#xff0c; 2.复制这几个文件到uniapp项目里面 3.修改自己证书路径&#xff0c;配置文件路径什么的 4.在文件夹页面双击buildController.py或者cmd直接输入buildController.py 5.python报错&#xff0c;哪个依赖缺少安装哪个依赖 6.执行不动的话&…

基于Python的B站视频数据分析与可视化

基于Python的B站视频数据分析与可视化 爬取视频、UP主信息、视频评论 功能列表 关键词搜索指定帖子ID爬取指定UP主的主页爬取支持评论爬取生成评论词云图支持数据存在数据库支持可视化 部分效果演示 爬取的UP主信息 关键词搜索爬取 指定UP主的主页爬取 指定为黑马的了 爬取视…

图文并茂教你如何发布自己的NPM包(GitHub Packages npm 包发布)

前情提要 发布包到npm也好&#xff0c;到github packages仓库也好&#xff0c;都是一样的道理&#xff0c;只是仓库地址不一样而已&#xff0c;本文是将npm包发布到了GitHub Packages~ GitHub Packages 简介 GitHub Packages 是一种软件包托管服务&#xff0c;和npm类似&…

WPS设置下拉选项,下拉菜单如何添加

在物料参数工作表输入内容 然后选中要设置下拉选项的单元格 点击数据-》下拉列表 然后选中物料参数的A列就行了

小程序弹窗滑动穿透问题

<!-- page-meta 只能是页面内的第一个节点 --> <page-meta page-style"{{ show ? overflow: hidden; : }}" />

无人机避障——2D栅格地图pgm格式文件路径规划代码详解

代码和测试效果请看上一篇博客&#xff1a; 无人机避障——使用三维PCD点云生成的2D栅格地图PGM做路径规划-CSDN博客 更换模型文件.dae&#xff1a; 部分模型文件可以从这里下载&#xff1a; https://github.com/ethz-asl/rotors_simulator/wiki 将原先代码中的car.dae文件…

iPhone当U盘使用的方法 - iTunes共享文件夹无法复制到电脑怎么办 - 如何100%写入读出

效果图 从iPhone复制文件夹到windows电脑 步骤windows 打开iTunes通过USB连接iPhone和电脑手机允许授权iTunes中点击手机图标&#xff0c;进入到点击左边“文件共享”&#xff0c;在右边随便选择一个App&#xff08;随意...&#xff09;写入U盘&#xff1a;拖动电脑的文件&am…

python 爬虫抓取百度热搜

实现思路&#xff1a; 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…

【保姆级教程】Linux服务器本地部署Trilium+Notes笔记结合内网穿透远程在线协作

文章目录 前言1. 安装docker与docker-compose2. 启动容器运行镜像3. 本地访问测试4.安装内网穿透5. 创建公网地址6. 创建固定公网地址 前言 今天和大家分享一款在G站获得了26K的强大的开源在线协作笔记软件&#xff0c;Trilium Notes的中文版如何在Linux环境使用docker本地部署…

整合 flatten-maven-plugin 插件:解决子模块单独打包失败问题

整合 flatten-maven-plugin 插件&#xff1a;解决子模块单独打包失败问题 解决问题 我们来解决 Maven 多模块工程中&#xff0c;如果在父 pom 中定义了统一版本号 revision &#xff0c;单独对某个子模块执行 clean package 打包失败的问题。 [ERROR] Failed to execute goa…

PLC是如何扫描程序的?各位电气人都了解吗?

学习PLC必须要深刻理解PLC的扫描过程和执行原理&#xff0c;才能可靠无误的编写程序。通俗的讲PLC程序是从上往下&#xff0c;从左往右顺序循环扫描执行&#xff0c;它需要三个过程才真正输出实现外部动作。 第一步&#xff0c;先把外接的开关信号状态批量刷新到I输入映像区。 …

基于BLE的商业综合体室内定位导航系统的设计与实现

在大型商业综合体中&#xff0c;消费者常常因复杂的布局而感到困惑&#xff0c;如何高效、精准地引导顾客到达目标位置&#xff0c;成为提升购物体验的关键。BLE技术凭借其低功耗、高稳定性和广泛的设备兼容性&#xff0c;成为构建室内定位导航系统的理想选择。本文将详细探讨商…

CSS浮雕效果

效果图&#xff1a; HTML源码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Documen…

音视频入门基础:FLV专题(18)——Audio Tag简介

一、引言 根据《video_file_format_spec_v10_1.pdf》第75页&#xff0c;如果某个Tag的Tag header中的TagType值为8&#xff0c;表示该Tag为Audio Tag&#xff1a; 这时StreamID之后紧接着的就是AudioTagHeader&#xff0c;也就是说这时Tag header之后的就是AudioTagHeader&…

《掌控Linux:全面解析用户与组管理的奥秘》

目录 引言 用户与组管理 一、理解用户账户和组 二、Linux用户账户及其类型 三、超级用户权限 &#xff08;一&#xff09;Ubuntu的sudo命令 1、使用su命令临时改变用户身份 2、sudo命令用于切换用户身份执行 四、用户配置文件 &#xff08;一&#xff09;用户账户配置…

exp:CVE-2024-2961将phpfilter任意文件读取提升为远程代码执行(RCE)

该exp来自于https://raw.githubusercontent.com/ambionics/cnext-exploits/main/cnext-exploit.py在原基础上添加了一个小改动&#xff0c;使其更加通用 修改后的exp顶部资源失效则https://www.123865.com/s/kN7jVv-uccLd 之前的命令行参数为 使用方式是python exp.py url com…

玄机-应急响应- Linux入侵排查

一、web目录存在木马&#xff0c;请找到木马的密码提交 到web目录进行搜索 find ./ type f -name "*.php" | xargs grep "eval(" 发现有三个可疑文件 1.php看到密码 1 flag{1} 二、服务器疑似存在不死马&#xff0c;请找到不死马的密码提交 被md5加密的…

Thread类及线程的核心操作

一. Thread类的常见构造方法 1. Thread() Thread类无参的构造方法, 用于创建Thread类的实例对象. 2. Thread(String name) 带一个参数的Thread类构造方法, 创建一个线程对象, 并给其命名. [注]: 如果不专门给线程命名, 那么线程默认的名字就是Thread-0, Thread-1, Thread-…

云腾五洲的智联引擎是什么?

智联引擎是成都云腾五洲科技有限公司旗下的数智化转型服务平台&#xff0c;它提供云边协同的分布式物联网平台引擎服务。这一平台以其强大的功能和灵活性&#xff0c;为全行业提供数智化转型的新动力&#xff0c;帮助企业在数智化升级中实现持续增长。 核心能力 智联引擎的核心…