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
端支付 流程,应该会比之前更清晰吧- 其实主要就是 调接口,最好 前端也要看下支付流程,方便和服务器人员沟通