vue支付宝html,vue 解决在微信内置浏览器中调用支付宝支付的情况

我的思路大概是这样的

1. 验证是否是在微信内置浏览器中调用支付宝

2.给支付页面的url加上调用接口所需的参数(因为在微信里是不能直接调用支付宝的需要调用外部浏览器)

3.在外部浏览器中完成支付跳转页面

第一步:

payment: 是选择支付页面,pay-mask是用于在微信内置浏览器中调用支付宝的中间页

d5eebaa3b47b2a9d882c4331521aa898.png

payment主要代码:

ca521ce8b237cf0d4f05cfff4c587e70.png

let ua = window.navigator.userAgent.toLowerCase()

ua.match(/MicroMessenger/i) == "micromessenger"

这两句代码就是判断用户是否是用微信内置浏览器打开的页面

如果是的话我们就需要把调用支付接口所需要的接口参数传给另一个页面(你也可以就在当前页做处理,我这样做是因为我想加一个提示页)

pay-mask代码如下:

/*

解决在微信浏览器中无法调用支付宝支付:

1.拿到从支付页传递过来的参数重组成自己需要的数据

2.清除旧的缓存数据(防止出现意外bug)

3.验证是否是微信浏览器(不是就把拿到的key和token存进本地缓存中,用于其他接口调用)

4.请求数据接口拿到支付宝的支付表单装进页面中完成支付

*/

export default {

name: "payMask",

data () {

return {

isWeiXi: true,

theRequest: {}

}

},

methods: {

// 获取当前微信浏览器url地址参数

getUrlParams() {

// 清除旧的缓存数据

// window.localStorage.clear()

let theRequest = new Object();

let url = location.href; //获取url中"?"符后的字串

let strs = [];

if (url.indexOf("?") != -1) {

var str = url.substr(parseInt(url.indexOf("?")+1));

strs = str.split("&");

for (var i = 0; i < strs.length; i++) {

theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);

}

}

this.theRequest = theRequest;

},

// 监控微信浏览器

isWeiXin() {

let ua = window.navigator.userAgent.toLowerCase();

if (ua.match(/MicroMessenger/i) != "micromessenger") {

this.isWeiXi = false

// 重新存储新的token(在外部浏览器打开支付完成后是没有token这些数据的所以需要在浏览器一打开的时候就去存一次数据)

window.localStorage.setItem("channelId", this.theRequest.channelId);

window.localStorage.setItem("userKey",JSON.stringify(this.theRequest.userKey));

window.localStorage.setItem("userToken",JSON.stringify(this.theRequest.userToken));

if(this.theRequest.memberTypeName){

// 调用支付宝支付

this.zfbPayBuy(this.theRequest)

} else {

this.zfbPayBuySocial(this.theRequest)

}

} else {

this.isWeiXi = true

}

},

// 支付宝支付(会员)

zfbPayBuy(data){

// 请求接口拿到接口返回的支付表单(接口直接返回的,我们直接装进页面就可以了)

this.axios.payBuy(data).then(res => {

if (res.status == 0) {

let payHtml = document.querySelector(".payform");

payHtml.innerHTML = res.result;

let paySub = payHtml.getElementsByTagName("input")[1];

paySub.click()

}

})

},

//支付宝支付(社保)

zfbPayBuySocial(data) {

this.axios.buySocial(data).then(res => {

if (res.status == 0) {

let payHtml = document.querySelector(".payform")

payHtml.innerHTML = res.result

let paySub = payHtml.getElementsByTagName("input")[1]

paySub.click()

}

})

},

},

created() {

// 拿去当前地址参数

this.getUrlParams()

if(JSON.stringify(this.theRequest) != "{}"){

this.isWeiXin()

}

},

mounted(){

// 更新一下当前浏览器地址(防止在微信里调用外部浏览器的时候出现意外bug)

window.location.href = window.location.href

}

}

.pay-mask {

width: 100%;

min-height: 100%;

position:fixed;

z-index: 99;

background-color: rgba(0, 0, 0,.6);

background-image: url("../../image/icon/confirm.png");

background-repeat: no-repeat;

}

补充知识:vue 移动端H5非内置浏览器发起微信、支付宝支付

该贴只说前端部分,后端人员绕路哈。

先调用统一下单接口后

1、微信部分,后端会返回一个url给你,

"mweb_url":https://wx.tenpay.com/cgi-bin/mmpayweb-bin/checkmweb?prepay_id=wx********************&package=162****

直接跳转就行了。(最后提醒句:提示服务商参数缺失的话就让服务商开通H5支付)

window.location.href = res.data.mweb_url

2、支付宝方面就有点麻烦,因为它返回的是一个form

4abc193eca59dded8df9c2babd7f3b0b.png

所以嘛,需要创建个div然后innerHTML插入HTML代码

const div = document.createElement("div") // 创建div

div.innerHTML = res.data.aliHtml // 将返回的form 放入div

document.body.appendChild(div) // 将上面创建的元素加入到BODY的尾部

document.forms[0].submit() // 表示获取当前页面的第一个表单

这样就OK了

如果想问支付成功后的跳转呢,你则需要给一个链接给到后端,后端传给阿里或者微信,成功后自己跳的。

以上这篇vue 解决在微信内置浏览器中调用支付宝支付的情况就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持云海天教程。

原文链接:https://blog.csdn.net/weixin_37939942/article/details/82080244

对于在微信浏览器实现图片上传功能,你可以按照以下步骤进行操作: 1. 首先,你需要在Vue项目安装相关的依赖。可以使用`npm`或`yarn`命令安装`axios`和`vant`(一个基于Vue的移动端组件库): ```bash npm install axios vant ``` 2. 在你的Vue组件,引入所需的依赖并创建一个上传图片的方法: ```typescript import axios from 'axios'; import { Toast } from 'vant'; export default { methods: { async uploadImage(event) { try { const imageFile = event.target.files[0]; const formData = new FormData(); formData.append('image', imageFile); // 使用axios发送POST请求上传图片 const response = await axios.post('/api/upload', formData, { headers: { 'Content-Type': 'multipart/form-data' } }); // 处理上传成功的逻辑 Toast.success('图片上传成功'); // 其他处理逻辑... } catch (error) { // 处理上传失败的逻辑 Toast.fail('图片上传失败'); } } } } ``` 3. 在模板添加一个文件选择器和一个调用上传方法的按钮: ```html <template> <div> <input type="file" accept="image/*" @change="uploadImage"> <button @click="uploadImage">上传图片</button> </div> </template> ``` 4. 根据微信浏览器的限制,我们需要在微信开发者平台配置域名白名单,确保上传请求能够正常发送和接收。在微信公众号后台,找到“开发-开发设置-服务器域名”,将你的上传接口域名添加到安全域名列表。 5. 最后,根据你的后端实现,编写一个接收图片并进行处理的API。在示例,我们使用`/api/upload`作为上传接口的路径。 注意:你需要根据自己的实际情况进行相应的后端处理和配置。 以上是一个简单的示例,可以让你在Vue 3 + TypeScript + Vite技术栈下,在微信浏览器实现图片上传功能。根据你的具体需求,可能还需要对代码进行相应的修改和优化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值