|
|
|
|
@ -41,20 +41,20 @@
|
|
|
|
|
</div>
|
|
|
|
|
</el-card>
|
|
|
|
|
|
|
|
|
|
<!-- 展示形式:二维码 -->
|
|
|
|
|
<!-- 展示形式:二维码 URL -->
|
|
|
|
|
<el-dialog :title="qrCode.title" :visible.sync="qrCode.visible" width="350px" append-to-body
|
|
|
|
|
:close-on-press-escape="false">
|
|
|
|
|
<qrcode-vue :value="qrCode.url" size="310" level="H" />
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<!-- 展示形式:iframe -->
|
|
|
|
|
<!-- 展示形式:IFrame -->
|
|
|
|
|
<el-dialog :title="iframe.title" :visible.sync="iframe.visible" width="800px" height="800px" append-to-body
|
|
|
|
|
:close-on-press-escape="false">
|
|
|
|
|
<iframe :src="iframe.url" width="100%" />
|
|
|
|
|
</el-dialog>
|
|
|
|
|
|
|
|
|
|
<!-- 阿里支付 -->
|
|
|
|
|
<div ref="alipayWap" v-html="alipayHtml.value" />
|
|
|
|
|
<!-- 展示形式: -->
|
|
|
|
|
<div ref="formRef" v-html="form.value" />
|
|
|
|
|
|
|
|
|
|
</div>
|
|
|
|
|
</template>
|
|
|
|
|
@ -88,6 +88,7 @@ export default {
|
|
|
|
|
mock: require("@/assets/images/pay/icon/mock.svg"),
|
|
|
|
|
},
|
|
|
|
|
submitLoading: false, // 提交支付的 loading
|
|
|
|
|
interval: undefined, // 定时任务,轮询是否完成支付
|
|
|
|
|
qrCode: { // 展示形式:二维码
|
|
|
|
|
url: '',
|
|
|
|
|
title: '',
|
|
|
|
|
@ -98,8 +99,9 @@ export default {
|
|
|
|
|
title: '',
|
|
|
|
|
visible: false
|
|
|
|
|
},
|
|
|
|
|
interval: undefined, // 定时任务,轮询是否完成支付
|
|
|
|
|
alipayHtml: '' // 阿里支付的 HTML
|
|
|
|
|
form: { // 展示形式:form
|
|
|
|
|
html: '',
|
|
|
|
|
},
|
|
|
|
|
};
|
|
|
|
|
},
|
|
|
|
|
created() {
|
|
|
|
|
@ -164,6 +166,8 @@ export default {
|
|
|
|
|
this.displayIFrame(channelCode, data)
|
|
|
|
|
} else if (data.displayMode === 'url') {
|
|
|
|
|
this.displayUrl(channelCode, data)
|
|
|
|
|
} else if (data.displayMode === 'form') {
|
|
|
|
|
this.displayForm(channelCode, data)
|
|
|
|
|
}
|
|
|
|
|
// 不同的支付,调用不同的策略
|
|
|
|
|
// if (channelCode === PayChannelEnum.ALIPAY_QR.code) {
|
|
|
|
|
@ -203,7 +207,7 @@ export default {
|
|
|
|
|
// 4:订单码-可定义宽度的嵌入式二维码,商户可根据需要设定二维码的大小
|
|
|
|
|
// return {
|
|
|
|
|
// "channelExtras": {
|
|
|
|
|
// "qr_pay_mode": "2"
|
|
|
|
|
// "qr_pay_mode": "4"
|
|
|
|
|
// }
|
|
|
|
|
// }
|
|
|
|
|
// 情况【跳转模式】:跳转模式下,用户的扫码界面是由支付宝生成的,不在商户的域名下。支持传入的枚举值有
|
|
|
|
|
@ -212,6 +216,10 @@ export default {
|
|
|
|
|
"qr_pay_mode": "2"
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
// 情况【表单模式】:直接提交当前页面到支付宝
|
|
|
|
|
// return {
|
|
|
|
|
// displayMode: PayDisplayModeEnum.FORM.mode
|
|
|
|
|
// }
|
|
|
|
|
}
|
|
|
|
|
return {}
|
|
|
|
|
},
|
|
|
|
|
@ -224,33 +232,34 @@ export default {
|
|
|
|
|
}
|
|
|
|
|
this.submitLoading = false
|
|
|
|
|
},
|
|
|
|
|
/** 提交支付后,IFrame 内置 URL 的展示形式 */
|
|
|
|
|
displayIFrame(channelCode, data) {
|
|
|
|
|
// this.iframe = {
|
|
|
|
|
// title: '支付窗口',
|
|
|
|
|
// url: data.displayContent,
|
|
|
|
|
// visible: true
|
|
|
|
|
// }
|
|
|
|
|
window.open(data.displayContent)
|
|
|
|
|
// TODO 芋艿:目前有点奇怪,支付宝总是会显示“支付环境存在风险”
|
|
|
|
|
this.iframe = {
|
|
|
|
|
title: '支付窗口',
|
|
|
|
|
url: data.displayContent,
|
|
|
|
|
visible: true
|
|
|
|
|
}
|
|
|
|
|
this.submitLoading = false
|
|
|
|
|
},
|
|
|
|
|
/** 提交支付后,URL 的展示形式 */
|
|
|
|
|
displayUrl(channelCode, data) {
|
|
|
|
|
window.open(data.displayContent)
|
|
|
|
|
this.submitLoading = false
|
|
|
|
|
},
|
|
|
|
|
/** 提交支付后(支付宝 PC 网站支付) */
|
|
|
|
|
submitAfterAlipayPc(invokeResponse) {
|
|
|
|
|
/** 提交支付后,Form 的展示形式 */
|
|
|
|
|
displayForm(channelCode, data) {
|
|
|
|
|
// 渲染支付页面
|
|
|
|
|
this.alipayHtml = {
|
|
|
|
|
value: invokeResponse.body,
|
|
|
|
|
visible: true
|
|
|
|
|
this.form = {
|
|
|
|
|
value: data.displayContent
|
|
|
|
|
}
|
|
|
|
|
// 防抖避免重复支付
|
|
|
|
|
this.$nextTick(() => {
|
|
|
|
|
// 提交支付表单
|
|
|
|
|
// this.$refs.alipayWap.children[0].submit();
|
|
|
|
|
// setTimeout(() => {
|
|
|
|
|
// this.submitLoading = false
|
|
|
|
|
// }, 1000);
|
|
|
|
|
this.$refs.formRef.children[0].submit();
|
|
|
|
|
setTimeout(() => {
|
|
|
|
|
this.submitLoading = false
|
|
|
|
|
}, 1000);
|
|
|
|
|
});
|
|
|
|
|
},
|
|
|
|
|
/** 轮询查询任务 */
|
|
|
|
|
|