|
44 | 44 | <!-- 展示形式:二维码 URL -->
|
45 | 45 | <el-dialog :title="qrCode.title" :visible.sync="qrCode.visible" width="350px" append-to-body
|
46 | 46 | :close-on-press-escape="false">
|
47 |
| - <qrcode-vue :value="qrCode.url" size="310" level="H" /> |
| 47 | + <qrcode-vue :value="qrCode.url" size="310" level="L" /> |
48 | 48 | </el-dialog>
|
49 | 49 |
|
50 | 50 | <!-- 展示形式:IFrame -->
|
|
53 | 53 | <iframe :src="iframe.url" width="100%" />
|
54 | 54 | </el-dialog>
|
55 | 55 |
|
56 |
| - <!-- 展示形式: --> |
| 56 | + <!-- 展示形式:Form --> |
57 | 57 | <div ref="formRef" v-html="form.value" />
|
58 | 58 |
|
59 | 59 | </div>
|
@@ -162,28 +162,23 @@ export default {
|
162 | 162 | ...this.buildSubmitParam(channelCode)
|
163 | 163 | }).then(response => {
|
164 | 164 | const data = response.data
|
165 |
| - if (data.displayMode === 'iframe') { |
| 165 | + if (data.displayMode === PayDisplayModeEnum.IFRAME.mode) { |
166 | 166 | this.displayIFrame(channelCode, data)
|
167 |
| - } else if (data.displayMode === 'url') { |
| 167 | + } else if (data.displayMode === PayDisplayModeEnum.URL.mode) { |
168 | 168 | this.displayUrl(channelCode, data)
|
169 |
| - } else if (data.displayMode === 'form') { |
| 169 | + } else if (data.displayMode === PayDisplayModeEnum.FORM.mode) { |
170 | 170 | this.displayForm(channelCode, data)
|
| 171 | + } else if (data.displayMode === PayDisplayModeEnum.QR_CODE.mode) { |
| 172 | + this.displayQrCode(channelCode, data) |
171 | 173 | }
|
172 |
| - // 不同的支付,调用不同的策略 |
173 |
| - // if (channelCode === PayChannelEnum.ALIPAY_QR.code) { |
174 |
| - // this.submitAfterAlipayQr(invokeResponse) |
175 |
| - // } else if (channelCode === PayChannelEnum.ALIPAY_PC.code |
176 |
| - // || channelCode === PayChannelEnum.ALIPAY_WAP.code) { |
177 |
| - // this.submitAfterAlipayPc(invokeResponse) |
178 |
| - // } |
179 | 174 |
|
180 | 175 | // 打开轮询任务
|
181 | 176 | this.createQueryInterval()
|
182 | 177 | })
|
183 | 178 | },
|
184 | 179 | /** 构建提交支付的额外参数 */
|
185 | 180 | buildSubmitParam(channelCode) {
|
186 |
| - // 支付宝网页支付时,有多种展示形态 |
| 181 | + // ① 支付宝 PC 支付时,有多种展示形态 |
187 | 182 | if (channelCode === PayChannelEnum.ALIPAY_PC.code) {
|
188 | 183 | // 情况【前置模式】:将二维码前置到商户的订单确认页的模式。需要商户在自己的页面中以 iframe 方式请求支付宝页面。具体支持的枚举值有以下几种:
|
189 | 184 | // 0:订单码-简约前置模式,对应 iframe 宽度不能小于 600px,高度不能小于 300px
|
@@ -221,16 +216,13 @@ export default {
|
221 | 216 | // displayMode: PayDisplayModeEnum.FORM.mode
|
222 | 217 | // }
|
223 | 218 | }
|
224 |
| - return {} |
225 |
| - }, |
226 |
| - /** 提交支付后(支付宝扫码支付) */ |
227 |
| - submitAfterAlipayQr(invokeResponse) { |
228 |
| - this.qrCode = { |
229 |
| - title: '请使用支付宝“扫一扫”扫码支付', |
230 |
| - url: invokeResponse.qrCode, |
231 |
| - visible: true |
| 219 | + // ② 支付宝 Wap 支付时,引导手机扫码支付 |
| 220 | + if (channelCode === PayChannelEnum.ALIPAY_WAP.code) { |
| 221 | + return { |
| 222 | + displayMode: PayDisplayModeEnum.QR_CODE.mode |
| 223 | + } |
232 | 224 | }
|
233 |
| - this.submitLoading = false |
| 225 | + return {} |
234 | 226 | },
|
235 | 227 | /** 提交支付后,IFrame 内置 URL 的展示形式 */
|
236 | 228 | displayIFrame(channelCode, data) {
|
@@ -262,9 +254,26 @@ export default {
|
262 | 254 | }, 1000);
|
263 | 255 | });
|
264 | 256 | },
|
| 257 | + /** 提交支付后(支付宝扫码支付) */ |
| 258 | + displayQrCode(channelCode, data) { |
| 259 | + let title = '请使用手机浏览器“扫一扫”'; |
| 260 | + if (channelCode === PayChannelEnum.ALIPAY_WAP.code) { |
| 261 | + // 考虑到 WAP 测试,所以引导手机浏览器搞 |
| 262 | + } else if (channelCode.indexOf('alipay_') === 0) { |
| 263 | + title = '请使用支付宝“扫一扫”扫码支付'; |
| 264 | + } else if (channelCode.indexOf('wx_') === 0) { |
| 265 | + title = '请使用微信“扫一扫”扫码支付'; |
| 266 | + } |
| 267 | + this.qrCode = { |
| 268 | + title: title, |
| 269 | + url: data.displayContent, |
| 270 | + visible: true |
| 271 | + } |
| 272 | + this.submitLoading = false |
| 273 | + }, |
265 | 274 | /** 轮询查询任务 */
|
266 | 275 | createQueryInterval() {
|
267 |
| - if (!this.interval) { |
| 276 | + if (this.interval) { |
268 | 277 | return
|
269 | 278 | }
|
270 | 279 | this.interval = setInterval(() => {
|
|
0 commit comments