前端 -PC 端-支付流程
2022-10-17 本文已影响0人
云高风轻
1. 前言
2. 支付产品
- 支付产品列表 微信支付产品列表.png
- 我这里只选择
Native
支付,方式不通用Native
支付是指商户系统按微信支付协议生成支付二维码
,用户再用微信“扫一扫
”完成支付的模式。
该模式适用于PC
网站、实体店单品或订单、媒体广告支付等场景。 开发文档
3. 获取产品列表
- 发起产品列表请求
productListApi().then(response => {
this.productList = response.data.productList
})
- 为了方便,减少阅读难度 没有使用
async/await
productListApi
自然是封装的 api接口
4. 下单业务
4.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)
})
wxNativePayApi()
是 支付Native
支付接口- 支付需要 产品列表返回的每条产品的
产品id
codeDialogVisible
控制显示 支付二维码的orderNo
这次下单的 订单号/订单 idcodeUrl
回调url
- native下单接口
4.2 支付二维码
<!-- 微信支付二维码 -->
<el-dialog :visible.sync="codeDialogVisible" :show-close="false" @close="closeDialog" width="350px" center>
<qriously :value="codeUrl" :size="300" />
使用微信扫码支付
</el-dialog>
- vue-qriously 生成二维码的
value
就是下单
接口返回的回调url
4.3 订单状态
- 支付成功,弹出 支付成功提示
- 支付失败,弹出 支付失败提示
- 所以 下单成功后 写了个定时器
轮询
订单状态- 根据不同的状态做不同的操作
- 订单状态
// 查询订单状态
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)
}
})
}
queryOrderStatusApi()
订单状态查询- 参数就是 下单时候返回的订单id/订单号
orderNo
以上就是完整的支付流程 选择产品---下单---支付
5. 支付相关的其他接口
5.1 取消订单
- 用户可以主动
取消订单
- 管理员 也可以在 订单管理页面进行
订单取消
- 所以这个接口也是必须的
wxPayCancelApi(orderNo).then(response => {
this.$message.success(response.message)
// 取消成功可以做对应的 操作 比如 刷新订单列表
})
wxPayCancelApi()
取消订单接口- 参数是 取消订单的 订单号/订单id
orderNo
5.2 退款
- 用户不满意全额退款 哈哈😭😭
- 各种退款理由都有 ,所以 这个接口也必须有,谁让用户是上帝呢
- 退款接口
wxPayRefundsApi(this.orderNo, this.reason).then(response => {
console.log('response', response)
//退款成功 可以刷新 订单列表
})
wxPayRefundsApi()
退款 api- 需要的参数1: 是 退款订单的 订单号/订单id
orderNo
- 需要的参数2: 是 退款原因 比如不喜欢 ;买错了;
6. 订单接口
- 订单状态管理 上边都用到了
- 订单列表 上边都用到了
7. 下载账单
- 有时候需要进行 下载账单的操作
- 这个下载只针对 我这个服务器的写法
- 只提供一种方式
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()
})
downloadBillApi()
下载账单接口- 需要的参数1: 是 需要下载的账单日期 注意格式
<el-date-picker v-model="billDate" value-format="yyyy-MM-dd" placeholder="选择账单日期" />
- 需要的参数2: 是 账单类型
比如:交易账单 ,还是资金账单
8. 后记
- 这是个简易的
pc
端支付 流程,应该会比之前更清晰吧- 其实主要就是 调接口,最好 前端也要看下支付流程,方便和服务器人员沟通