前端vue实现的h5页面接入微信支付流程(jsapi方式)

 更新时间:2024年01月20日 08:54:46   作者:我人麻了啊  
vue实现微信支付有三种方式,第一种方式是PC端支付,第二种方式是H5支付,第三种方式是微信公众号支付,这篇文章主要给大家介绍了关于前端vue实现的h5页面接入微信支付流程,文中介绍的方法是利用jsapi方式,通过代码将实现的方法介绍的非常详细,需要的朋友可以参考下

参考链接

微信支付jsapi官方文档

微信网页授权

jsapi介绍

准备工作

  • 公众号
  • 商户号
  • 备案域名
  • 配置应用
    先参考支付指引接入准备基本步骤
    1、在商户号关联公众号
    2、在商户号配置支付授权目录(支付目录+回调目录)
    3、在公众号配置网页授权域名

第一步微信授权获取用户openid

参考链接微信网页授权进入页面后从缓存中判断是否已经拿到用户openid,或者地址栏上是否携带code,没有则调用下面代码进行申请用户授权

let protocol = window.location.protocol;
let host = window.location.host;
let local = protocol + '//' + host;
let appId = '';公众号appid
window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appId}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect`

用户同意授权后会在回调地址中携带code,下面提供获取地址栏上code参数方法

function getUrlParams(name) {
      const queryString = window.location.search;
      const params = new URLSearchParams(queryString);
      const value = params.get(name);
      return value ? decodeURIComponent(value) : null;
    }

然后把code传给后端,后端通过code获取access_token,再通过access_token获取用户信息并返回给前台
网页授权对于前端来说只需要拉起用户授权,并将code传给后台

只是测试网页授权可以使用测试公众号,需要先关注测试号并配置授权域名
测试公众号

第二步调起微信支付

安装依赖

npm install weixin-jsapi

在需要调起支付的页面引用

import wx from “weixin-js-sdk”;

调起支付-需要的参数由后端返回,一般是下完单返回参数然后调起支付

wx.config({
	debug: false, // 这里一般在测试阶段先用ture,等打包给后台的时候就改回false, 
	appId: res.data.appId, // 必填,公众号的唯一标识 
	timestamp: res.data.timeStamp, // 必填,生成签名的时间戳     
	nonceStr: res.data.nonceStr, // 必填,生成签名的随机串 
	signature: res.data.paySign, // 必填,签名 
	jsApiList: ['chooseWXPay', 'checkJsApi'] // 必填,需要使用的JS接口列表 
})


	wx.ready(() => {
		// wx.checkJsApi({     
		//   jsApiList: ['chooseWXPay'],     
		//   success:function(res){}, 
		//   fail:function(res){}})   

		wx.chooseWXPay({
			timestamp: res.data.timeStamp, // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符     
			nonceStr: res.data.nonceStr, // 支付签名随机串,不长于 32 位         
			package: res.data.package, // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=\*\*\*)     
			signType: 'SHA1', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'     
			paySign: res.data.paySign, // 支付签名     
			success: function(payRes) { 
			// 支付成功后的回调函数       
			},
			cancel: function(payRes) {
				// that.$message.error('取消支付')
			},
			fail: function(payRes) {
				// that.$message.error('支付失败')
			}
		})
	})

支付之后会触发支付通知回调,在回调中后端应该根据支付状态更新订单状态

另外需要判断是否微信浏览器移动端来决定是否调起微信支付,以下是判断方法

var isWechatBrowser = /micromessenger/i.test(navigator.userAgent);
let isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i
								.test(navigator.userAgent);
if(isWechatBrowser){
//微信浏览器
	if (isMobile) {
		// console.log("当前是微信移动端");
	}else{
		// console.log("当前是pc端");
	}
}else{
//非//微信浏览器
}

常见错误

1、“当前页面的URL未注册”

检查下单接口中使用的商户号是否在商户平台 (opens new window)配置了对应的支付目录

2、“该商户暂不支持通过外部拉起微信完成支付”

JSAPI支付只能从微信浏览器内发起支付请求。

3、pc端拉起支付失败

只支持移动端

4、缺少参数:total_fee

一般是后端返回的package参数有误,另外后端生成订单时金额不能为0且单位为分

总结

到此这篇关于前端vue实现的h5页面接入微信支付的文章就介绍到这了,更多相关vue h5页面接入微信支付内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Vue中使用正则表达式进行文本匹配和处理的方法小结

    Vue中使用正则表达式进行文本匹配和处理的方法小结

    正则表达式在Vue中具有广泛的应用场景,包括文本匹配和处理、表单验证等,通过本文的介绍和示例,希望读者能更好地理解和应用正则表达式在Vue中的使用方法,感兴趣的朋友一起看看吧
    2023-11-11
  • Vuex持久化存储之vuex-persist问题

    Vuex持久化存储之vuex-persist问题

    这篇文章主要介绍了Vuex持久化存储之vuex-persist问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-10-10
  • vue自定义实例化modal弹窗功能的实现

    vue自定义实例化modal弹窗功能的实现

    这篇文章主要介绍了vue自定义实例化modal弹窗,Vue.extend 属于Vue的全局 api,在实际业务开发中我们很少使用,因为相比常用的 Vue.component写法使用 extend 步骤要更加繁琐一些,本文结合实例代码给大家介绍的非常详细,需要的朋友参考下
    2022-09-09
  • uniapp微信小程序webview和h5数据通信代码示例

    uniapp微信小程序webview和h5数据通信代码示例

    这篇文章主要介绍了uniapp微信小程序webview和h5数据通信的相关资料,文章还列出了项目的结构,包括微信小程序和h5端的主要文件和组件,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • vue开发runtime core中的虚拟节点示例详解

    vue开发runtime core中的虚拟节点示例详解

    这篇文章主要为大家介绍了vue开发runtime core中的虚拟节点示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • vue-router动态设置页面title的实例讲解

    vue-router动态设置页面title的实例讲解

    今天小编就为大家分享一篇vue-router动态设置页面title的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • Vue中使用Echarts可视化图表宽度自适应的完美解决方案

    Vue中使用Echarts可视化图表宽度自适应的完美解决方案

    这篇文章主要介绍了Vue中使用Echarts可视化图表,宽度自适应解决方案,我的解决方案是,在放置Echarts的容器(div)外层再套一层容器(div),外层容器宽度固定设置手机屏幕宽,感兴趣的朋友跟随小编一起看看吧
    2022-09-09
  • element ui 表格动态列显示空白bug 修复方法

    element ui 表格动态列显示空白bug 修复方法

    今天小编就为大家分享一篇element ui 表格动态列显示空白bug 修复方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-09-09
  • 一文完全掌握Vue中的$set方法

    一文完全掌握Vue中的$set方法

    这篇文章主要给大家介绍了关于如何完全掌握Vue中$set方法的相关资料,vue中$set方法对数组和对象的处理本质上的一样的,对新增的值添加响应然后手动触发派发更新,需要的朋友可以参考下
    2023-11-11
  • 分析Vue指令实现原理

    分析Vue指令实现原理

    自定义指令是vue中使用频率仅次于组件,其包含bind、inserted、update、componentUpdated、unbind五个生命周期钩子。本文将对vue指令的工作原理进行相应介绍
    2021-06-06

最新评论