h5微信支付

news/2024/11/19 15:12:45/

这篇文章讲了如何h5项目中使用微信支付,包括微信内置浏览器调起支付、外部浏览器调起支付、微信支付方式等内容。

一:问题梳理

1:如何判断是否是微信内置浏览器?

2:如果是外部浏览器调起支付该如何实现?

3:微信内支付的方式有哪些?

二:问题解决

1:判断浏览器类型

不同浏览器调用微信支付方式不同,所以先开始要判断浏览器类型:

isWX(){var wx = window.navigator.userAgent.toLowerCase();if (wx.match(/MicroMessenger/i) == 'micromessenger'){return true;} else {return false;}},

2:外部浏览器调起支付

外部浏览器调起支付比较简单,通过访问接口调用,然后根据会拿到接口返回的一个url,然后跳转到这个url就可以进行支付。

let res = await wxPay(params)if(res.code==200){window.location.replace(res.url)//res.url支付地址}

3:微信浏览器调起支付

微信浏览器调起支付有两种方式:使用js-sdk;使用jsapi

方式一:使用js-sdk

1:安装:jssdk:

npm install weixin-js-sdk -S

2:挂载:

import jssdk from "weixin-js-sdk"
//可全局,可局部,根据具体情况来引入

3:通过接口获取校验信息,这里访问获取校验信息的后端接口拿到校验信息。

4:通过config接口注入权限验证配置(需要同步进行,在获取到校验信息后方可注入config,否则校验失败)

wx.config({debug: true, // 开启调试模式appId: '', // 必填,公众号的唯一标识timestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '', // 必填,签名jsApiList: ["chooseWXPay"] // 必填,需要使用的JS接口列表});

5:微信支付

wx.ready(function () {// 进行微信支付wx.chooseWXPay({appId: '',timestamp: '', // 支付签名时间戳,注意微信jssdk中的所有使用timestamp字段均为小写。但最新版的支付后台生成签名使用的timeStamp字段名需大写其中的S字符nonceStr: '', // 支付签名随机串,不长于 32 位package: '', // 统一支付接口返回的prepay_id参数值,提交格式如:prepay_id=***)signType: '', // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'paySign: '', // 支付签名success: function (res) {// 支付成功后的回调函数if (res.errMsg == 'chooseWXPay:ok') {} else {Notify({ type: 'error', message: '支付失败',duration:2000 });}},cancel: function (res) {},fail: function (res) {Notify({ type: 'error', message: '支付失败',duration:2000 });}})})
//Success:接口调用成功时执行的回调函数。
//Fail:接口调用失败时执行的回调函数。
//Cancel:用户点击取消时的回调函数,仅部分有用户取消操作的api才会用到。
//Complete:接口调用完成时执行的回调函数,无论成功或失败都会执行。
//Trigger:监听menu中的按钮点击时触发的方法,该方法仅支持menu中的相关接口。

方式二:使用JSAPI

function onBridgeReady(){WeixinJSBridge.invoke('getBrandWCPayRequest',{"appId": "appId", //公众号名称,由商户传入     "timeStamp": "timeStamp", //时间戳,自1970年以来的秒数     "nonceStr": "nonceStr", //随机串     "package": "package","signType": "MD5", // 签名方式,默认为'SHA1',使用新版支付需传入'MD5'"paySign": "paySign" //微信签名  },function(res) {// 支付成功if (res.err_msg == "get_brand_wcpay_request:ok") {}// 支付过程中用户取消if (res.err_msg == "get_brand_wcpay_request:cancel") {}// 支付失败if (res.err_msg == "get_brand_wcpay_request:fail") {}/*** 其它* 1、请检查预支付会话标识prepay_id是否已失效* 2、请求的appid与下单接口的appid是否一致* */if (res.err_msg == "调用支付JSAPI缺少参数:total_fee") {}})
}
// 检测支付环境中的 WeixinJSBridge
if (typeof WeixinJSBridge == "undefined") {if (document.addEventListener) {document.addEventListener('WeixinJSBridgeReady', onBridgeReady, false);} else if (document.attachEvent) {document.attachEvent('WeixinJSBridgeReady', onBridgeReady);document.attachEvent('onWeixinJSBridgeReady', onBridgeReady);}
} else {this.onBridgeReady();
}

三:结尾

借鉴文章:下落香樟树 (cnblogs.com)https://www.cnblogs.com/zxk5211/p/14040310.html


http://www.ppmy.cn/news/161763.html

相关文章

哔哩哔哩视频云画质与窄带高清AI落地实践

视频赛道卷到下半场,一定会面临体验与成本的对抗,尤其是在行业大环境“过冬”的背景下,想要在有限带宽下获得最佳的画质观感变得异常具备挑战性。从视频云业务场景的视角来看,如何有效解决cross-domain问题、如何突破低业务延迟下…

大手笔!吴恩达一口气开放了 3 个 AIGC 教程。。

公众号关注 “GitHubDaily” 设为 “星标”,每天带你逛 GitHub! 一个月前,DeepLearning.ai 创始人吴恩达与 OpenAI 开发者 Iza Fulford 联手推出了一门面向开发者的技术教程:《ChatGPT 提示工程》。 该教程总共分为 9 个章节&…

重磅升级|ONES Resource 资源管理解决方案

在研发项目中,科学高效的资源管理,能有效减少资源浪费、成本超支和进度延误,以最少的投入实现资源效益的最大化。 ONES Resource 以资源规划与进度跟踪两个环节为核心,提供了多维度的可视化报表,全面展示资源规划与使…

使用gdb调试Python进程

使用gdb调试Python进程 使用gdb调试Python进程 有时我们会想调试一个正在运行的Python进程,或者一个Python进程的coredump。例如现在遇到一个mod_wsgi的进程僵死了,不接受请求,想看看究竟是运行到哪行Python代码呢?这时就需要祭…

win10更新后耳机没有声音的解决方式

打开设备管理器->声音、视频和游戏控制器-> realtek Audio右键->更新驱动程序-> 浏览我的电脑以查找驱动程序-> 让我从计算机上的可用驱动程序列表中选取-> 然后选择2020/4/28版本进行安装

电脑插入耳机检测不到没反应怎么办?

打开电脑-开始-设置(建议先播放有声音的视频,这样就可以快速的知道问题是否已经解决) 选中声音-疑难解答 然后根据提示执行操作就可以听到声音了(因为我已经设置过了,所以提示的界面可能不太一样,下面的步…

雷蛇输出设备切换至THX无声音的解决方案

1.电脑搜索Nahimic应用并打开 2.找到设置中的删除优化点击即可