跨平台开发支付组件,实现支付宝支付
效果图:
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>
支付流程
一般的支付流程如下:
- 第三方支付提供的开发者平台注册账号、创建应用、申请认证用的证书或者
key
- 前端获取待支付订单ID、支付金额、支付渠道等数据,传递给后端接口
- 后端接口在获取前端传递的数据后,根据支付平台提供文档与支付平台接口进行对接
- 后端与支付平台对接成功后,后端将支付信息再回传给前端
- 前端根据回传的信息引导用户进行支付
在整个支付的过程中前端的任务仍然是调用接口(与调用普通的接口几乎没有差别),真正完成支付任务的其实是后端接口。
支付宝支付
- 自行注册支付宝支付账号
- 在企业中开发时需要创建应用,然而创建应用后还需要一些资质才可以进行支付,无法满足这些资质,好在支付定平台提供了沙箱环境,沙箱环境是协助开发者进行接口开发及主要功能联调的模拟环境,目前仅支持网页/移动应用和小程序两种应用类型。
- 在正式应用或沙箱应用中获取到商家账号、认证证书、APPID、回调地址等。
- 上述的操作其实都是由后端来操作的,这里只是让大家了解一下支付管理后台的相关信息。
父组件使用组件:
<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>
相关文章:

跨平台开发支付组件,实现支付宝支付
效果图: custom-payment : 在生成预付订单之后页面中需要弹出一个弹层,弹层中展示的内容为支付方式(渠道),由用户选择一种支付方式进行支付。 该弹层组件是以扩展组件 uni-popup 为核心的,关于…...
API 接口:为电商行业高效发展注入强劲动力
一、动力之源:API 接口在电商中的角色剖析 在电商行业的广袤版图中,API 接口宛如一台强劲的发动机,是推动其高效发展的核心动力来源。它不再仅仅是一个技术工具,而是成为了连接电商各个环节的 “神经系统”,使得信息、…...

Golang的跨平台开发
Golang的跨平台开发 一、Golang跨平台开发概述 语言是一种开源的编程语言,由Google开发,广泛应用于云计算和网络编程领域。Golang具有并发性好、性能优异、内存管理自动化等特点,因此备受开发者青睐。其中,Golang的跨平台特性使得…...
txt数据转为pdf格式并使用base64解密输出
使用该方法请注意:因为此方法使用了base64解密,需要保证txt中的数据首先用了base64加密,如果只是普通的二进制数据,该方法并不适用 第一步 <dependency><groupId>org.apache.pdfbox</groupId><artifactId&…...

鸿蒙开发-状态+判断+循环
🌈个人主页:前端青山 🔥系列专栏:鸿蒙开发篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来鸿蒙开发篇专栏内容:鸿蒙开发-状态判断循环 目录 1.状态1原始类型 2.引用类型 2.判断 3.循环 1.基本使用…...

基于SSM网上招投标管理系统的设计
管理员账户功能包括:系统首页,个人中心,用户管理,招标者管理,专家管理,项目分类管理,招标项目管理,系统管理 前台账号功能包括:系统首页,个人中心࿰…...

「C/C++」C++ 设计模式 之 单例模式(Singleton)
✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…...

WPF的行为(Behavior)
WPF(Windows Presentation Foundation)是微软.NET框架中用于构建Windows客户端应用程序的UI框架。它提供了一种声明性的方式来定义用户界面,并且支持MVVM(Model-View-ViewModel)设计模式。 在WPF中,“行为…...
SpringBoot框架:闲一品交易平台的新突破
摘 要 随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,闲一品交易平台当然也不能排除在外。闲一品交易平台是以实际运用为开发背景,运用软件工程原理和开发方法&…...
关于AI绘画 | Stable Diffusion 技术专栏推荐文章
AI绘画 | Stable Diffusion 技术专栏推荐文章 引言 随着人工智能技术的发展,AI绘画逐渐成为艺术创作的新潮流。在众多的AI绘画工具中,Stable Diffusion因其强大的功能和易用性受到了广泛的关注。本文将详细介绍由“泰山AI”创建的技术专栏“AI绘画 | S…...
Oracle 第13章:事务处理
在数据库管理系统(DBMS)中,事务处理是一个非常重要的概念,它确保了数据的一致性和可靠性。下面我将解释事务的概念与特性,并讨论如何进行事务管理。 事务的概念与特性 事务是指作为一个工作单元的一组有序的SQL操作。…...

String的长度有限,而我对你的思念却无限延伸
公主请阅 1. 为什么学习string类?2. string类的常用接口2.1 string类对象的常见构造2.1.1 string 2.2 operator[]2.3 迭代器2.4 auto自动推导数据类型2.5 范围for2.6 迭代器第二层2.7 size和length获取字符串的长度2.8 max_size 获取这个字符串能设置的最大长度2.9 …...
二叉树的后序遍历
给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。 示例 1: 输入:root [1,null,2,3] 输出:[3,2,1] 解释: 示例 2: 输入:root [1,2,3,4,5,null,8,null,null,6,7,9] 输出…...

Nvidia未来的Blackwell Ultra GPU将更名为B300系列
据TrendForce报道,英伟达(Nvidia)计划将其Blackwell Ultra产品线重新命名为B300系列,以更好地与即将推出的B100和B200产品进行区分。Blackwell Ultra系列将是一个具有更高性能的升级版本。但据报道,这种升级后的内存配…...

BUUCTF靶场Misc练习
在BUUCTF中,你需要留意各种关于涉及 flag{ } 的信息。只要找的到flag,你就算成功。本文记录我刷BUUCTF的Misc类方法和个人感悟。 Misc第一题 签到 题解在题目中,如图所示 flag是 flag{buu_ctf} 第二题 (题目如图所示ÿ…...
ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算——从0基础到15个案例实战
从无人机监测农田到卫星数据支持气候研究,空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。然而,对于许多专业人士而言,如何高效地处理、分析和应用遥感数据仍是一个充满挑战的课题。本教程应运而生,致力于为您搭建一…...

Flume采集Kafka数据到Hive
版本: Kafka:2.4.1 Flume:1.9.0 Hive:3.1.0 Kafka主题准备: Hive表准备:确保hive表为:分区分桶、orc存储、开启事务 Flume准备: 配置flume文件: /opt/datasophon/flume-1…...
大语言模型训练与推理模型构建源码解读(huggingface)
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、llama训练模型构建源码解读1、模型构建代码(自己搭建)2、训练模型3、模型调用方法4、训练模型init方法(class LlamaForCausalLM(LlamaPreTrainedModel))5、训练模型forward方法(class Llam…...

第三十三篇:TCP协议如何避免/减少网络拥塞,TCP系列八
一、流量控制 一般来说,我们总是希望数据传输得更快一些,但是如果发送方把数据发送得太快,接收方可能来不及接收,造成数据的丢失,数据重发,造成网络资源的浪费甚至网络拥塞。所谓的流量控制(fl…...

并发编程(2)——线程管控
目录 二、day2 1. 线程管控 1.1 归属权转移 1.2 joining_thread 1.2.1 如何使用 joining_thread 1.3 std::jthread 1.3.1 零开销原则 1.3.2 线程停止 1.4 容器管理线程对象 1.4.1 使用容器 1.4.2 如何选择线程运行数量 1.5 线程id 二、day2 今天学习如何管理线程&a…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

循环冗余码校验CRC码 算法步骤+详细实例计算
通信过程:(白话解释) 我们将原始待发送的消息称为 M M M,依据发送接收消息双方约定的生成多项式 G ( x ) G(x) G(x)(意思就是 G ( x ) G(x) G(x) 是已知的)࿰…...
IP如何挑?2025年海外专线IP如何购买?
你花了时间和预算买了IP,结果IP质量不佳,项目效率低下不说,还可能带来莫名的网络问题,是不是太闹心了?尤其是在面对海外专线IP时,到底怎么才能买到适合自己的呢?所以,挑IP绝对是个技…...

[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...

莫兰迪高级灰总结计划简约商务通用PPT模版
莫兰迪高级灰总结计划简约商务通用PPT模版,莫兰迪调色板清新简约工作汇报PPT模版,莫兰迪时尚风极简设计PPT模版,大学生毕业论文答辩PPT模版,莫兰迪配色总结计划简约商务通用PPT模版,莫兰迪商务汇报PPT模版,…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...
Python竞赛环境搭建全攻略
Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...