前端 -PC 端-支付流程

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下单接口


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理,如有错误,道友们一起沟通交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,591评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,448评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,823评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,204评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,228评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,190评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,078评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,923评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,334评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,550评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,727评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,428评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,022评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,672评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,826评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,734评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,619评论 2 354

推荐阅读更多精彩内容