微信内嵌H5调用相机及支付相关问题

news2024/9/20 14:59:02

前言

进来项目在做公众号,遇到了一些问题及解决方案,在这里进行记录及分享,希望给大家带来一丝帮助 手机上控制台调试我建议使用vConsole(npm install vconsole)

微信内嵌H5的相机调用

微信内嵌H5我们需要调用扫码功能,则需要用到官网提供的SDK的方法来解决

1.导入所需文件

首先我们页面中需要导入对应的文件

// npm 引入方式
npm install jweixin-module --save
// 下载下来 import引入方式

//下载地址:https://unpkg.com/jweixin-module@1.6.0/lib/index.js
import wxSDK from 'xxx/weixin-sdk' 

2.根据后端接口拿到公众号的配置

这里建议直接把后端返回数据直接进行赋值(我自己单独赋值出现过问题😅)后端需要的接口参数是公众号链接的id值加当前公众号地址,安卓和苹果可能有差别,所以大家建议先做一下判断

// 这是官网需要赋值的参数
wxSDK.config({debug: true, // 开启调试模式,调用的所有 api 的返回值会在客户端 alert 出来,若要查看传入的参数,可以在 pc 端打开,参数信息会通过 log 打出,仅在 pc 端时才会打印。appId: '', // 必填,公众号的唯一标识timestamp: , // 必填,生成签名的时间戳nonceStr: '', // 必填,生成签名的随机串signature: '',// 必填,签名jsApiList: [] // 必填,需要使用的 JS 接口列表
}); 

然后对我们能不能调用扫描的API进行校验

 wxSDK.checkJsApi({jsApiList: ['scanQRCode'], // 需要检测的JS接口列表,所有JS接口列表见附录2,success: function (res) {// 打印参数看看能否成功console.log(res)// 以键值对的形式返回,可用的api值true,不可用为false// 如:{"checkResult":{"chooseImage":true},"errMsg":"checkJsApi:ok"} } }) 

3.调用扫描API

直接使用手机调试看打印结果

wxSDK.scanQRCode({needResult: '1', // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,scanType: ['qrCode', 'barCode'], // 可以指定扫二维码还是一维码,默认二者都有success: res => {console.log('success', res)},fail: function (res) {// console.log('fail', res)},complete: function (res) {// alert(JSON.stringify(res))}}) 

4.问题总结

难度不大,主要是第一次做公众号后端所需要的参数取值麻烦,还有就是在配置当前页调用扫描API的时候自己挨个赋值会出现问题(虽然对比好像没有问题)

微信调用支付功能

这个支付功能较为麻烦,但是主要还是在于后端,前端只是麻烦在一些取值上

1.支付前的准备

首先我们支付前需要拿到调用后端支付接口的参数(本人这边是做物联网的,就拿当前做的举例子),需要的主要参数有appkey,openid,支付方式

拿openid时要判断用户是否授权了并且前提是先拿到了appid,如果没有我们需要调用下面这种方法来获取到调用openid时所需要的code(自己截取)

let local = window.location.href
// 把当前地址加上code参数,然后截取出来
 window.location.href = `https://open.weixin.qq.com/connect/oauth2/authorize?appid=${appid}&redirect_uri=${encodeURIComponent(local)}&response_type=code&scope=snsapi_userinfo#wechat_redirect` 

拿到所有参数调用支付准备接口成功后直接使用微信官方JSAPI支付方法进行支付

// 官方案例提供方法
function onBridgeReady(){ WeixinJSBridge.invoke('getBrandWCPayRequest', { "appId":"wx2421b1c4370ec43b", //公众号ID,由商户传入  "timeStamp":"1395712654", //时间戳,自1970年以来的秒数  "nonceStr":"e61463f8efa94090b1f366cccfbbb444", //随机串  "package":"prepay_id=u802345jgfjsdfgsdg888",  "signType":"MD5", //微信签名方式:  "paySign":"70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名 },function(res){if(res.err_msg == "get_brand_wcpay_request:ok" ){// 使用以上方式判断前端返回,微信团队郑重提示://res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠。}  }); 
}
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{ onBridgeReady();
} 
// 接口调用成功后拉起支付方法
.then(res => {console.log(res)if (res.code == 0) {WeixinJSBridge.invoke('getBrandWCPayRequest', res.data, function ( res ) {// alert(JSON.stringify(res))if (res.err_msg === 'get_brand_wcpay_request:ok') {// 使用以上方式判断前端返回,微信团队郑重提示://res.err_msg将在用户支付成功后返回ok,但并不保证它绝对可靠// alertuni.showLoading({title: '支付成功'})setTimeout(function () {uni.hideLoading()// uni.removeStorageSync('RechargeInfo')history.back() // 页面刷新过,不能使用uni.navigateBack(x)回退历史栈 }, 1000)} else {uni.hideLoading()}WeixinJSBridge.log(res)}) 

2.提示

支付页面因为调用code会重复刷新页面所以我们这边建议使用本地保存刷新次数,方便支付回调成功后手机返回可以返回上一页面而不是反复返回当前页

// 在生命周期onShow上就开始记录
onShow () {if (uni.getStorageSync('reloadIndex')) {// 有刷新过了uni.setStorageSync('reloadIndex', uni.getStorageSync('reloadIndex') + 1)} else if (!uni.getStorageSync('reloadIndex')) {// 没刷新过,刷新一下uni.setStorageSync('reloadIndex', 1)window.location.reload(false)}}, 

总结

在有写过的时候觉得复杂,但是在慢慢的踩坑中解决一个个问题,现在回过头来看发现其实也就那么回事,所以我们不要害怕工作中遇到问题,每一次遇到的问题都是我们成长的垫脚石,欢迎大家随时找我讨论技术问题,希望与jym共同进行=步

最后

最近找到一个VUE的文档,它将VUE的各个知识点进行了总结,整理成了《Vue 开发必须知道的36个技巧》。内容比较详实,对各个知识点的讲解也十分到位。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68491.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何发布WMS/WMTS离线地图服务

介绍: WMTS(OpenGIS Web Map Tile Service)当前版本是1.0.0。WMTS标准定义了一些操作,这些操作允许用户访问切片地图。WMTS可能是OGC首个支持RESTful访问的服务标准。 WMTS的原理和操作 如果知道一个请求的边界范围&#x…

浅谈用Redis实现分布式锁的方案及细节

前言 我们都知道,在面对并发问题时,有加锁操作和保证原子操作两种解决方案。当我们采用加锁操作的时候,因为Redis多采用集群的方式部署,因此我们就需要考虑到锁在分布式系统中使用的注意事项。接下来就看看Redis的分布式锁问题。…

【檀越剑指大厂—Spring】Spring高阶篇

一.基础概念 1.模块 2.Spring 框架概述。 Spring 是轻量级的开源的 JavaEE 框架 Spring 可以解决企业应用开发的复杂性 Spring 有两个核心部分: IOC 和 AOP IOC:控制反转,把创建对象过程交给 Spring 进行管理 Aop:面向切面,不修改源代码进行功能增强…

SpringBoot办公管理系统oa人力人事办公(含源码+论文+答辩PPT等)

项目功能简介: 本项目含代码详细讲解视频,手把手带同学们敲代码从0到1完成项目 该项目采用技术SpringBoot、SpringMvc(接入层框架)Spring(中间层框架)Hibernate(持久层框架)JPAMD5加密、Tomcat服务器、MySQL数据库 项目含有源码、配套开发软件…

R语言多元动态条件相关DCC-MVGARCH、常相关CCC-MVGARCH模型进行多变量波动率预测...

全文下载链接:http://tecdat.cn/?p23287在本文中,当从单变量波动率预测跳到多变量波动率预测时,我们需要明白,现在我们不仅要预测单变量波动率元素,还要预测协方差元素(点击文末“阅读原文”获取完整代码数…

web安全之通过sqlmap工具进行靶场练习

目录 基础语法 get类型的注入 post类型的注入 基础语法 -u:用于get提交方式,后面跟注入的url网址 --dbs:获取所有数据库 --tables:获取所有数据表 --columns:获取所有字段 --dump:打印数据 -D:查询选择某…

火到爆的扩散模型(Diffusion Model)帮你具象化幻想世界

Diffusion Model 如果你对人工智能有所了解,想必已经听说过Diffusion Model了。如果还没有,那就一起来了解一下吧—— 扩散(Diffusion)对于人能智能而言,是一个借用的概念。在热力学中,它指细小颗粒从高密度…

调节盘的三维建模及加工工艺规程设计

目录 1 调节盘分析 - 1 - 1.1 调节盘结构特点 - 1 - 1.2 调节盘的工艺分析 - 2 - 1.3 调节盘的技术要求 - 3 - 2 毛坯的选择 - 4 - 2.1 毛坯的类型 - 4 - 2.2 毛坯余量的确定 - 4 - 2.3 毛坯草图 - 5 - 3 工艺规程设计 - 6 - 3.1 定位基准的选择 - 6 - 3.1.1 粗基准的选择 - 6 …

2022系统分析师下午卷(案例分析)

试题一(共 25 分) 阅读以下关于软件系统分析与建模的叙述,在答题纸上回答问题 1 至问题 3。 【说明】 某软件公司拟开发一套博客系统,要求能够向用户提供一个便捷发布自已心得,及时有效的与他人进行交流的平台。新用户…

新手学习3D建模,弯道超车攻略!

你做三四月的事,在八九月自有答案。​ – 余世存 📝学建模最重要的是每天抽时间练习 🌻给大家准备了200天建模打卡攻略练习素材 📔人体解剖雕塑学(骨骼、肌肉等电子版💯) 📒3dmax…

第4季6:图像sensor的寄存器操作

以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。 一、sensor_write_register函数的解析 在第4季4:图像sensor的驱动源码解析中写到,sensor_register_callback函数的调用关系如下: sensor_register_callback …

英文Paper写作怎么确实合适的介词?

Paper写作中,介词是非常常见的,介词虽是小词,数量也不多,但灵活多变,随处可见,功能强大而且难于掌握。我们不可小看这个角色,不可忽视它在不同句子中的作用,Paper写作过程中应该如何…

读取HDFS数据写入MySQL_大数据培训

读取HDFS数据写入MySQL 1)将上个案例上传的文件改名 [atguiguhadoop102 datax]$ hadoop fs -mv /student.txt* /student.txt 2)查看官方模板 [atguiguhadoop102 datax]$ python bin/datax.py -r hdfsreader -w mysqlwriter { “job”: { “content”…

高阶测试开发必备技能: k8s入门

现在稍微有点规模公司都是基于docker容器化部署技巧,K8s现在主流,应用最广的容器集群管理技术。 k8s全称kubernetes(首字母为 k、首字母与尾字母之间有 8 个字符、尾字母为 s,所以简称 k8s),基于Docker容器…

微服务架构10个最重要的设计模式,带你了解,完全熟悉

自从软件开发的早期(1960年代)以来,解决大型软件系统中的复杂性一直是一项艰巨的任务。多年来,软件工程师和架构师为解决软件系统的复杂性进行了许多尝试:David Parnas的模块化和信息隐藏(1972),Edsger W. Dijkstra的关注分离(197…

关于ElasticSearch日期格式不一致的异常,可以这么解决

最近壹哥的一个学生,在利用spring-data-elasticsearch访问ElasticSearch(ES)时,遇到了一个关于日期类型的BUG,困扰了很久。然后他就找壹哥给他解决,接下来壹哥就把解决的过程给大家复现一下,希望本文可以给遇到同样问题…

构建灵活订单系统,B2B撮合管理系统提升光伏企业订单管理效率

光伏系统是利用半导体光生伏特效应将太阳能转化为电能的发电系统。过去20年,我国光伏制造业快速发展,由弱变强。经过20年高速发展,我国在硅片、电池片、组件制造等多领域处于世界领先水平,我国已经成为全球第一大光伏生产国、消费…

深度学习Week9-YOLOv5-C3模块实现(Pytorch)

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍦 参考文章:Pytorch实战 | 第P8天:YOLOv5-C3模块实现(训练营内部成员可读)🍖 原作者:K同学啊|接辅导、项目定制了解C3的结构,方便…

前端Gitee + Jenkins自动化实战(转)

# 前端Gitee Jenkins自动化实战 当我们熟悉了Jenkins 的使用后,接下来我们来配置一个基于 vue-element-admin 的实战项目,来感受一下自动化流程带给我们的优势。 首先我们需要创建一个 git 项目,至于代码仓库可以自选,这里为了…

RocketMq: Windows环境-单机部署和多种主从集群场景部署

关于默认端口 broker的默认端口有3个,10911, 10912, 10909。 10911是remotingServer使用的监听端口,remotingServer主要处理以下三类消息: producer发送的消息 conumser在消费失败或者消费超时发送的消息 consumer拉取消息10912是主broker用于监听从broker请求…