# 2、发起支付
使用 vk-uni-pay
组件的优势
- 1、自动请求云函数
- 2、自动识别H5、小程序、APP,抹平不同平台的代码差异
- 3、H5扫码支付自动获取二维码地址vkPay.codeUrl,支持自动轮询获取支付状态
- 4、可实时监听支付状态vkPay.status 0:待支付 1:支付中 2:已支付
- 5、支付成功的判断是直接查你数据库的订单状态是否已支付,安全可靠。
# template
<vk-uni-pay
ref="vkPay"
:query-payment-action="vkPay.queryPaymentAction"
:status.sync="vkPay.status"
:code-url.sync="vkPay.codeUrl"
:page-show="vkPay.pageShow"
:polling="vkPay.polling"
></vk-uni-pay>
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# data
export default {
data() {
return {
vkPay:{
/**
* 查询支付状态的云函数配置
* 如果是非路由框架,则action为字符串,值为云函数名称
* 如果是路由框架,则按下方配置填写
*/
queryPaymentAction:{
name:"vk-pay", // 云函数名称
action:"pay/queryPayment", // 路由模式下云函数地址
actionKey:"action", // 路由模式下云函数地址的识别key
dataKey:"data" // 路由模式下云函数请求参数的识别key
},
// PC支付的付款二维码地址 渲染二维码需要自己写,可以参考示例中的二维码组件 vk-uni-qrcode
codeUrl:"",
// 当前支付状态 0:等待发起支付 1:支付中 2:已支付
status:0,
// 当前页面是否显示
pageShow:true,
// 启用轮询检测订单支付状态(仅h5支付有效)
polling:true,
},
// 表单请求数据
form1:{
provider:"wxpay",
totalFee:1,
outTradeNo:"",
subject:"测试订单标题",
body:"测试订单详情",
type: "recharge"
},
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# methods
methods: {
createPayment(){
this.$refs.vkPay.createPayment({
// 如果是非路由框架,则action为字符串,值为云函数名称
// 如果是路由框架,则按下方配置填写
action: {
name: "vk-pay", // 云函数名称
action: "pay/createPayment", // 路由模式下云函数地址
actionKey: "action", // 路由模式下云函数地址的识别key(注意VK路由框架下,此值为$url)
dataKey: "data" // 路由模式下云函数请求参数的识别key
},
// 请求数据
data: {
provider: form1.provider,
total_fee: form1.total_fee,
out_trade_no: form1.out_trade_no,
subject: form1.subject,
body: form1.body,
type: form1.type
},
// 成功回调
success: res => {
this.toast("支付成功", "success");
console.log("paySuccess", res);
},
// 失败回调
fail: res => {
if (res.failType === "create") {
// 创建支付失败时提示
this.alert(res.msg);
} else if (res.failType === "request") {
// 请求支付失败时提示
this.toast("请求支付失败");
} else if (res.failType === "result") {
// 支付结果失败时提示
this.toast("支付失败");
}
},
// 取消回调
cancel: res => {
this.toast("用户取消支付");
}
});
},
// uni.showToast的简易封装
toast(title, icon = "none", mask = false) {
uni.showToast({
title,
icon,
mask,
duration: 1500
});
},
// uni.showModal的简易封装
alert(content, title = "提示") {
uni.showModal({
title,
content,
showCancel: false
});
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63