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

 效果图:

 

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 H5
  window.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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

python debug作业

任务类型任务内容预计耗时闯关任务Leetcode 383(笔记中提交代码与leetcode提交通过截图)20mins闯关任务Vscode连接InternStudio debug笔记10mins可选任务pip安装到指定目录10mins leetcode题目解析&#xff1a; 解题思路 字符统计&#xff1a;使用 Python 的 Counter 类统计 ra…

【PyCharm配置Conda的虚拟环境】

conda create了一个新的虚拟环境&#xff0c;想在PyCharm里面使用这个环境&#xff0c;但是怎么都添加不上。 解决办法&#xff0c;把conda executable选择为conda安装目录下的condabin下的conda.bat文件&#xff0c;成功&#xff01;

加载视频显示 - python 实现

#-*-coding:utf-8-*- # date:2021-03-21 # Author: DataBall - Xian # Function: 加载视频并显示import cv2 if __name__ "__main__":#加载视频cap cv2.VideoCapture(./video/1.mp4)while True:ret, img cap.read()# 获取相机图像if ret True:# 如果 ret 返回值为…

【大数据学习 | kafka】kafka的整体框架与数据结构

1. kafka的整体框架 首先kafka启动以后所有的broker都会向zookeeper进行注册&#xff0c;在/brokers/ids中以列表的形式展示所有的节点&#xff0c;在/controller节点中使用独享锁实现broker的选举&#xff0c;其中一个机器为主节点。其他的为从节点&#xff0c;选举的根本原则…

磁盘的分区

硬盘管理 硬盘的概念 硬盘是一种计算机的存储设备&#xff0c;通常是由一个或多个磁性盘片组成。硬盘既可以安装在计算机的内部&#xff0c;也可以外接计算机 硬盘主要是用来保存数据的 数据包括&#xff1a;操作系统&#xff0c;应用程序&#xff0c;文档多媒体文件等等 计算…

鸿蒙网络编程系列40-TLS数字证书查看及验签示例

1. TLS数字证书验签简介 数字证书的验签是网络编程中一个重要的功能&#xff0c;它保证了数字证书的真实性&#xff0c;在此基础上&#xff0c;我们才可以信任该证书&#xff0c;从而信任基于该证书建立的安全通道&#xff0c;所以说&#xff0c;数字证书的验签是通讯安全的基…

(一)VB 2010 开发环境

VB 2010 开发环境使用VB2010. VB2010界面如图所示起始页&#xff1a;访问项目&#xff0c;团队项目&#xff0c;MSDN帮助资源&#xff08;MSDN&#xff08;Microsoft Developer Network&#xff09;帮助资源是微软公司为开发者提供的一个综合性资源平台&#xff09;新建项目&am…

2小时,我搭建了一整套车间生产看板

大家可能一提到生产看板搭建&#xff0c;要么想到的是高价购买专业软件&#xff0c;要么是觉得搭建过程复杂。其实&#xff0c;真没大家想象的那么难。我自己也不是一名专业的技术开发人员&#xff0c;就是一名普普通通小员工。现在信息社会&#xff0c;只要大家找对路子&#…

三项智能网联汽车强制性国家标准正式发布(附图解)

近日&#xff0c;工业和信息化部组织制定的GB 44495—2024《汽车整车信息安全技术要求》、GB 44496—2024《汽车软件升级通用技术要求》和GB 44497—2024《智能网联汽车 自动驾驶数据记录系统》三项强制性国家标准由国家市场监督管理总局、国家标准化管理委员会批准发布&#x…

021集——批量根据交点分割线(CAD—C#二次开发入门)

如下图所示&#xff0c;红线为分割后的线&#xff08;已挪动&#xff09;&#xff1a; 部分代码如下&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Geometry; using Autodesk.AutoCAD.Runtime; …

数据可视化工具深入学习:Seaborn 与 Plotly 的详细教程

数据可视化工具深入学习&#xff1a;Seaborn 与 Plotly 的详细教程 数据可视化是数据分析中不可或缺的一部分&#xff0c;能够有效地帮助我们理解数据、发现模式和传达信息。在众多可视化工具中&#xff0c;Seaborn 和 Plotly 是两个非常流行且强大的库。本文将深入探讨这两个…

java多线程编程(二)一一>线程安全问题, 单例模式, 解决程线程安全问题的措施

引言&#xff1a; 如果多线程环境下代码运行的结果是符合我们预期的&#xff0c;即在单线程环境应该的结果&#xff0c;则说这个程序是线程安全的 线程安全问题的原因&#xff1a; 一.操作系统的随机调度 &#xff1a; 二.多个线程修改同一个变量&#xff1a; 三.修改操作不是…

ELK之路第四步——整合!打通任督二脉

ELK之路第四步——整合&#xff01;打通任督二脉 前言1.架构2.下载资源3.整合开始1.分别启动三个es2.启动kibana3.新建filebeat_logstash.yml配置文件4.修改logstash的启动配置文件5.启动logstash6.启动filebeat7.Kibana查看 4.结语 前言 在开始本篇之前&#xff0c;你需要用到…

【渗透测试】01-信息收集-名词概念

1、域名 什么是域名? 相当于网站的名字维基百科对域名的解释是&#xff1a;互联网上某一台计算机或计算机组的名称&#xff0c;用于在数据传输时标识计算机的电子方位&#xff08;有时也指地理位置&#xff09;。 网域名称系统&#xff08;Domain Name System&#xff09;有时…

支持ANC的头戴式蓝牙耳机,更有小金标认证,QCY H3 Pro体验

平时听音乐、看视频&#xff0c;大家都想获得更悦耳的音质体验&#xff0c;这时候蓝牙耳机就是性价比更高的一种方案&#xff0c;同时因其无线束缚、便携性高的特点&#xff0c;随时拿出来就能用。更不用说如今国产品牌的蓝牙耳机升级迭代速度非常快&#xff0c;百元的价位就可…

【Golang】Gin框架中跨域问题解决方案

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

Python飞舞蝙蝠

目录 系列文章 写在前面 完整代码 代码分析 写在后面 系列文章 序号直达链接爱心系列1Python制作一个无法拒绝的表白界面2Python满屏飘字表白代码3Python无限弹窗满屏表白代码4Python李峋同款可写字版跳动的爱心5Python流星雨代码6Python漂浮爱心代码7Python爱心光波代码…

【SSM-Day5】SpringMVC入门

【SSM-Day5】SpringMVC入门 Web->Servlet->Servlet容器MVC档案SpringMVC档案SpringMVC核心操作&#x1f4e2;建立连接RequestMapping&#xff1a;实现路由映射Controller/ResponseBody&#xff1a;表示某个类是否可以接收HTTP请求 &#x1f4e2;接收请求1. 直接接收一个请…

ChatGPT在解读历史股票收益预测中的外推和错误校准

论文地址&#xff1a;https://arxiv.org/pdf/2408.16707 原本地址&#xff1a;https://mp.weixin.qq.com/s/gL8ZTnpS0xJy7Qc73QEaGw 摘要 本文研究了大型语言模型&#xff08;LLM&#xff09;如何解释历史股票回报&#xff0c;并将其预测与众包股票排名平台的估计进行了比较。…

binlog 介绍

公司使用的数据库是 glodendb https://www.zte.com.cn/china/solutions_latest/goldendb.html#idpart01 最近自动化投产对一张 28w 的表进行全表 update、投产前已经是知道这个数据量的、认为没有问题、也没有在测试环境进行测试。 结果投产那天直接报错 这个 transaction_max…