uniapp项目引入微信JSSDK并封装使用

1、引入微信JSSDK

其实这一步我研究了半天,vue中可以实现导入外部cdn资源的办法,但是,在uniapp中,目前我不知道怎么去配置相关文件,按照vue的方法去配置貌似不行,还是说我没找对方法,知道的朋友可以留言告诉我一下。接下来我就说一下我的引入方法。
其实在uniapp的社区有这个:DCloud社区引入微信JSSDK
如果你们的后端不知道该怎么来写接口配合你使用。你可以给他微信官方的Demo(csdn貌似不能不直接下载,建议拷贝一下网址打开就好了),让他研究一下。
具体该如何使用微信JSSDK的一些相关接口,大家请自行浏览微信官方文档,本文只是提供一种比较简便的封装方法。

两种方法

1、npm

直接在你的项目下打开cmd输入下面的代码引入模块即可

npm install jweixin-module --save
2、直接下载js文件,保存到本地使用

下载地址有好几个

  1. https://unpkg.com/jweixin-module@1.6.0/lib/index.js
  2. http://res.wx.qq.com/open/js/jweixin-1.6.0.js
  3. http://res.wx.qq.com/open/js/jweixin-1.6.0.js

其中第一个是dcloud的下载地址,与上面的npm相对应,后面两个是微信jssdk官方的地址
但是这几个下载都有点问题,这三个地址反正我都试过,下载下来的文件在使用的时候始终会报一些不可名状的错误,所以建议还是用第一种方法,比较稳定。

封装JSSDK方便我们使用

废话不多说,直接上我封装好的代码。
文中涉及到的工具函数以及接口,大家需要根据自己的实际情况进行修改:

import { randomString } from "@/myui/js/random";//随机字符串工具函数
import { getSignature } from "@/api/apiconfig";//你们后端写好的签名的获取接口

var wxjssdk = require("jweixin-module"); //引入JSSDK
var nonceStr = randomString(32); // 生成签名的随机串,注意这个s是大写
var timestamp = parseInt(new Date().getTime() / 1000) + ""; // 生成签名的时间戳,到秒级
var url = location.href.split("#")[0]; // 获取当前页面的url中#前面那部分
var appId = "此处用你自己公众号的APPID"; // 公众号的唯一标识appid,注意大小写
var config = { nonceStr, timestamp, url }; //获取微信签名接口所需要的参数
var jsApiList = ["scanQRCode"]; //需要使用的微信JS接口列表
export default {
	async wxconfig() {
		let response = await getSignature(config); //获取签名接口,大家可以用uni.request()替代,此处是我自己封装的接口
		let wxconfig = {
			debug: false, //正式部署的时候记得把这个关掉
			// 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
			appId, // 必填,公众号的唯一标识
			timestamp, // 必填,生成签名的时间戳
			nonceStr, // 必填,生成签名的随机串,注意这个s是大写
			signature: response.Data, // 必填,签名
			//每增加一个要是用的接口,就需要在这里添加相应的微信js接口与之对应
			jsApiList, // 必填,需要使用的JS接口列表
		};
		wxjssdk.config(wxconfig);
	},
	//封装微信JSSDK方法,采用闭包函数的原理将res值抛出到回调函数中
	scanQRcode({ success, fail, needResult = 1 }) {
		this.wxconfig();
		wxjssdk.ready(() => {
			wxjssdk.scanQRCode({
				needResult, // 默认为0,扫描结果由微信处理,1则直接返回扫描结果,
				// scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是一维码,默认二者都有
				success: res => {
					// {errMsg: "scanQRCode:ok", resultStr: ""} 当needResult 为 1 时,resultStr扫码返回的结果
					// {errMsg: "scanQRCode:ok"}当needResult 为 0 时,会导致页面跳转
					//扫码成功,抛出扫码结果
					success(res);
				},
			});
		});
		wxjssdk.error(res => {
			console.log("config fail:", res);
			//config fail,抛出失败原因
			fail(res);
		});
	},
};

这里的接口调用(let response = await getSignature(config);)
大家使用uni.request()代替即可,不会的话,建议你先看一下uniapp文档。

在你需要使用到微信JSSDK的页面文件引入并调用
具体代码如下:

import wxjs from "@/utils/wxJSSDK";

wxjs.scanQRcode({
success: res => {
	uni.showToast({
		title: "扫码成功",
		icon: "none",
	});
},
});

其实,有心的朋友可以看到封装完后和uni.scanCode()用起来一样,这样以后就会更方便的使用,不用每调用一次接口,我们都要写一遍微信官方文档的那个流程。

到此我们就完成了微信JSSDK的引入和调用了,有什么问题,欢迎大家留言讨论,一起学习。

### 回答1: 微信jssdk是一种用于在网页中调用微信功能的开发工具包。其中,获取位置是其中的一个功能之一。当在调用微信jssdk获取位置接口时,如果出现获取位置失败,签名错误的情况,可能是以下几个原因所导致: 1. 签名错误:在调用获取位置接口前,需要对相关参数进行签名验证,以确保数据的完整性和安全性。签名错误可能是由于签名算法实现错误、调用接口时传入的参数错误或者服务器时间戳与微信服务器时间戳不一致等原因所导致。解决方法是检查签名算法是否正确,参数是否正确传递,并确保服务器时间戳与微信服务器时间戳一致。 2. 接口权限问题:在申请微信jssdk使用权限时,需要在公众号设置中配置相关权限。如果没有正确配置接口权限,则无法调用获取位置接口,会出现获取位置失败的情况。解决方法是检查公众号设置中的权限配置,确保获取位置接口的权限被正确开启。 3. 用户拒绝授权:在用户使用网页时,系统会通过微信弹出授权窗口,询问用户是否允许获取位置信息。如果用户选择拒绝授权,则无法获取位置信息,从而导致获取位置失败的情况。解决方法是在用户拒绝授权后,提示用户重新授权,或者提供其他方式获取位置信息。 总之,当微信jssdk获取位置失败,签名错误时,需要仔细检查签名算法、参数传递和接口权限配置等方面的问题,并根据具体情况进行相应的调整和处理。 ### 回答2: 微信jssdk是一个用于在网页中调用微信的接口的开发工具包。在使用jssdk时,通过wx.config方法来进行配置,并且在配置的过程中需要传入一个参数:签名(signature)。 签名是基于一定算法生成的,用于验证消息的真实性和完整性。当微信jssdk获取位置失败并且报错签名错误时,可能是由以下几个原因造成的: 1. 签名生成错误:签名的生成过程中可能出现错误,导致最终生成的签名不正确。这可能是由于服务端生成签名的算法或参数配置有误,需要检查签名生成代码并修正错误。 2. 参数传递错误:在传递签名参数时,可能存在传递错误的情况。签名参数包括appId、timestamp、nonceStr、signature,这些参数需要按照规定的格式传递给wx.config方法。需要仔细检查参数传递的过程,确保参数的准确性和完整性。 3. SSL证书问题:微信要求在调用jssdk使用HTTPS协议,并且需要使用有效的SSL证书。如果网页没有配置有效的SSL证书,那么在获取位置时会报错签名错误。需要确保网页使用HTTPS协议,并且配置了有效的SSL证书。 解决以上问题的步骤为: 1. 检查签名生成代码,确认生成签名的算法和参数没有错误; 2. 检查参数传递过程,确保传递给wx.config方法的参数准确无误; 3. 确认网页使用了HTTPS协议,并配置了有效的SSL证书; 4. 在修改代码后,重新测试获取位置功能,如果问题仍然存在,可以参考微信官方文档或寻求微信开发者论坛的帮助。 ### 回答3: 微信 JSSDK 是一种用于开发微信公众号的前端开发工具包,它提供了丰富的接口和功能,方便开发者构建丰富的微信公众号应用。当使用 JSSDK 中的定位功能时,获取位置失败并出现签名错误的问题可能是由以下几个原因引起的。 1. 网络问题:在使用微信 JSSDK 时,要求设备能够连接到互联网,如果网络不稳定或者设备无法连接到互联网,就可能导致定位功能失败。请确保设备有稳定的网络连接。 2. 位置权限:微信 JSSDK 需要用户授权才能获取设备的位置信息。如果用户拒绝了位置权限请求,那么就无法获取到位置信息。在使用定位功能前,应该向用户请求位置权限,并在用户授权后才能使用。 3. 未配置有效的签名:微信 JSSDK 需要在后台进行配置并生成签名,用于验证请求的合法性。如果签名错误,就无法正确获取位置信息。在生成签名时,需要保证参数的正确性,包括参数的顺序、大小写等。请仔细检查签名生成的代码逻辑和参数配置是否正确。 4. 使用的 API 接口不支持:微信 JSSDK 提供了多个获取位置的接口,不同的接口可能有不同的要求和适用场景。如果使用的接口与当前场景不匹配或者不支持当前设备的操作系统版本,可能会导致获取位置失败。请确认使用的接口与当前场景的要求是匹配的。 综上所述,当微信 JSSDK 获取位置失败并出现签名错误时,可能是网络问题、位置权限、签名配置或使用的接口不正确导致的。在解决问题时,可以逐一排查以上原因,并根据具体情况进行相应的调试和处理。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值