美文网首页
前端 -PC 端-支付流程

前端 -PC 端-支付流程

作者: 云高风轻 | 来源:发表于2022-10-17 22:18 被阅读0次

    1. 前言

    1. 之前写的移动端支付 是基于vue3+H5的,可能封装的比较多点,导致看不太懂,今天来个 简单的, 深入浅出
    2. 详细的微信支付 流程 比如申请账号 建议看 微信支付官方文档
    3. 这里仅以微信支付为例,其他平台都差不多,看官方文档就行
    4. 这里使用的是vue2+elementUI

    2. 支付产品

    1. 支付产品列表 微信支付产品列表.png
    2. 我这里只选择 Native支付,方式不通用
    3. Native支付是指商户系统按微信支付协议生成支付二维码,用户再用微信“扫一扫”完成支付的模式。
      该模式适用于PC网站、实体店单品或订单、媒体广告支付等场景。 开发文档

    3. 获取产品列表

    1. 发起产品列表请求
                productListApi().then(response => {
                    this.productList = response.data.productList
                })
    
    1. 为了方便,减少阅读难度 没有使用async/await
    2. productListApi 自然是封装的 api接口

    4. 下单业务

    4.1 下单接口

    1. 用户下单
                        //调用统一下单接口
                        wxNativePayApi(this.payOrder.productId).then(response => {
                            this.codeUrl = response.data.codeUrl
                            this.orderNo = response.data.orderNo
                            this.codeDialogVisible = true
    
                            // 启动定时器
                            this.timer = setInterval(() => {
                                this.queryOrderStatus()
                            }, 3000)
                        })
    
    1. wxNativePayApi() 是 支付Native支付接口
    2. 支付需要 产品列表返回的每条产品的产品id
    3. codeDialogVisible 控制显示 支付二维码的
    4. orderNo 这次下单的 订单号/订单 id
    5. codeUrl 回调url
    6. native下单接口

    4.2 支付二维码
            <!-- 微信支付二维码 -->
            <el-dialog :visible.sync="codeDialogVisible" :show-close="false" @close="closeDialog" width="350px" center>
                <qriously :value="codeUrl" :size="300" />
                使用微信扫码支付
            </el-dialog>
    
    1. vue-qriously 生成二维码的
    2. value就是 下单 接口返回的回调url

    4.3 订单状态

    1. 支付成功,弹出 支付成功提示
    2. 支付失败,弹出 支付失败提示
    3. 所以 下单成功后 写了个定时器 轮询订单状态
    4. 根据不同的状态做不同的操作
    1. 订单状态
                // 查询订单状态
                queryOrderStatus() {
                    queryOrderStatusApi(this.orderNo).then(response => {
                        console.log('查询订单状态:' + response.code)
                        // 支付成功后的页面跳转
                        if (response.code === 0) {
                            console.log('清除定时器')
                            clearInterval(this.timer)
                            // 三秒后跳转到订单列表
                            setTimeout(() => {
                                this.$router.push({
                                    path: '/orders'
                                })
                            }, 3000)
                        }
                    })
                }
    
    1. queryOrderStatusApi() 订单状态查询
    2. 参数就是 下单时候返回的订单id/订单号 orderNo

    以上就是完整的支付流程 选择产品---下单---支付


    5. 支付相关的其他接口

    5.1 取消订单

    1. 用户可以主动取消订单
    2. 管理员 也可以在 订单管理页面进行 订单取消
    3. 所以这个接口也是必须的
          wxPayCancelApi(orderNo).then(response => {
            this.$message.success(response.message)
            // 取消成功可以做对应的 操作 比如 刷新订单列表
          })
    
    1. wxPayCancelApi()取消订单接口
    2. 参数是 取消订单的 订单号/订单idorderNo

    5.2 退款

    1. 用户不满意全额退款 哈哈😭😭
    2. 各种退款理由都有 ,所以 这个接口也必须有,谁让用户是上帝呢
    3. 退款接口
          wxPayRefundsApi(this.orderNo, this.reason).then(response => {
            console.log('response', response)
               //退款成功 可以刷新 订单列表
          })
    
    1. wxPayRefundsApi() 退款 api
    2. 需要的参数1: 是 退款订单的 订单号/订单idorderNo
    3. 需要的参数2: 是 退款原因 比如不喜欢 ;买错了;

    6. 订单接口

    1. 订单状态管理 上边都用到了
    2. 订单列表 上边都用到了

    7. 下载账单

    1. 有时候需要进行 下载账单的操作
    2. 这个下载只针对 我这个服务器的写法
    3. 只提供一种方式
          downloadBillApi(this.billDate, type).then(response => {
            console.log(response)
            const element = document.createElement('a')
            element.setAttribute('href', 
            'data:application/vnd.ms-excel;charset=utf-8,' + 
            encodeURIComponent(response.data.result)  )
            
            element.setAttribute('download', this.billDate + '-' + type)
            element.style.display = 'none'
            element.click()
          })
    
    1. downloadBillApi() 下载账单接口
    2. 需要的参数1: 是 需要下载的账单日期 注意格式
        <el-date-picker v-model="billDate" value-format="yyyy-MM-dd" placeholder="选择账单日期" />
    
    1. 需要的参数2: 是 账单类型
      比如:交易账单 ,还是资金账单

    8. 后记

    1. 这是个简易的 pc端支付 流程,应该会比之前更清晰吧
    2. 其实主要就是 调接口,最好 前端也要看下支付流程,方便和服务器人员沟通

    参考资料

    微信支付官方文档
    vue-qriously
    native下单接口


    初心

    我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
    如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
    共勉

    相关文章

      网友评论

          本文标题:前端 -PC 端-支付流程

          本文链接:https://www.haomeiwen.com/subject/aiwdzrtx.html