微信jssdk本地测试

摘要


因项目中需要使用微信语音相关接口功能,所以需要引入微信的jssdk,但是这个东西的测试不是本地运行那么简单,需要借助微信web开发工具来进行,本文记录了我个人今日完成测试的这个过程,本文的重点不是开发教程,也不是记录wx.jssdk具体使用,而仅是记录,今日的一些流程和遇到的问题。

关键点


1.微信公众号
2.natapp 免费域名 – 来映射本地前端使用wxjs的服务地址
3.微信公众号 JS接口安全域名设置(这个能把我搞死)
4.后台服务获取wxjs.config所需参数(本人网上下的node demo)
5.前端调用wxjs ( 公司项目 )
6.微信web开发者工具

开始


1. 建立微信公众号

比较简单,自己很轻松就可以实现

2. 前后端代码

因本文重点不是来记录具体代码实现的,所以,此处仅贴出些关键代码。

前段时间在学习koa2.0,所以从网上找了微信js签名代码的node demo,将代码拷入我的hello-koa项目,以此来作为后端接口。

1.app.js文件
//跨域(新增)
var cors = require('koa-cors');
app.use(cors());

2.router.js文件
var funny = require("./controllers/funnyindex");
//微信认证
router.get('/funny',funny.funny);

3.funnyindex.js
var Jsapi = require("./wechat");
var appid = "你的微信公众号appid";
var appsecret = "你的微信公众号appsecret ";

exports.funny = async (ctx, next) => {
    var callUrl = ctx.request.query.callbackurl;
    const jsapi = new Jsapi(appid, appsecret);
    // //1、获取 access_token, 返回promise对象,resolve回调返回string
    // jsapi.getAccessToken().then(
    //     re => res.end(re)
    // ).catch(err => console.error(err));

    // //2、获取 jsapi_ticket, 返回promise对象,resolve回调返回string
    // jsapi.getJsApiTicket().then(
    //     re => res.end(re)
    // ).catch(err => console.error(err));

    //3、获取 JS-SDK 权限验证的签名, 返回promise对象,resolve回调返回json
    var data = await jsapi.getSignPackage(callUrl).catch(err => console.error(err));
    ctx.body = data;
}

4.wechat.js文件
封装的获取微信签名的各个方法,网上很多,此处不记录了。

前端调用wx_jssdk的是我的项目,本地服务启动后127.0.0.1:5944/index.html访问,该地址后续会通过natapp映射,作为微信公众号的js接口域名

//请求
 console.log("后台获取微信签名");
 $.get("http://127.0.0.1:3009/funny?callbackurl=" + encodeURIComponent(window.location.href),
            {}, setWxConfig);

//设置wx.config(此方法为异步)
function setWxConfig(signPackage) {
    wx.config({
        debug: false,
        appId: signPackage.appId,  //必填,公众号的唯一标识
        timestamp: signPackage.timestamp,             //必填,生成签名的时间戳
        nonceStr: signPackage.nonceStr,             //必填,生成签名的随机串
        signature: signPackage.signature,             //必填,签名,见 http://t.cn/RL24Fgw
        jsApiList: [
            "getNetworkType",
            "getLocation",
            "onMenuShareTimeline",
            "onMenuShareAppMessage",
            'startRecord',//开始录音接口
            'stopRecord',//停止录音接口
            'playVoice',//播放语音接口
            'pauseVoice',//暂停播放接口
            'stopVoice',//停止播放接口
            'uploadVoice',//上传语音接口
            'downloadVoice',//下载语音接口
            'onVoicePlayEnd',
            'translateVoice',//语音识别
        ]
    });
    //以上方法为异步,如果你想在加载的是有调用wxjssdk,就需要用wx.ready,此处不具体说明。
}

以上,就算代码类相关的准备处理完毕,开始要处理一些其他的配置

3. JS接口安全域名

微信公众号 -> 公众号设置 -> 功能设置 -> JS接口安全域名

只有设置了域名,该域名才能调用wxjssdk,那么本地服务,我是通过natapp来映射域名的。通过natapp免费创建个隧道,然后设置ip,port为你的前端服务,就可以,然后下载natapp.exe,根据 一分钟快速图文教程 配置启动该exe就可以.

那么,我原来http://127.0.0.1:5944/index.html的前端就可以通过natapp.exe生成的 http://pgu5g4.natappfree.cc 来访问。将这个域名设为js接口安全域名就可以了。

注意设置安全域名的时候,需要下载MP_verify_gzbQUDassWHFnugA.txt文件放到 http://pgu5g4.natappfree.cc根目录下。

微信公众号获取appsecret时还需填写ip白名单,百度自己的ip地址填写就可以

4. 微信web开发者工具

下载该工具,启动前后端服务,在开发者工具页面输入http://pgu5g4.natappfree.cc 就可以了,然后该工具可以看到你的js-sdk请求和权限列表。。

呼。。。


弄了一天,前面一直毫无头绪,各种尝试,一度要放弃,那时候,就是卡在页面一直提示

config:invalid url donmain

各种百度,都说时js接口安全域名不对,我也是搞不懂,一直在那里写的后端的域名,醉的一塌糊涂,出去吃了个饭,突然想到这块,发现不对,应该是写前端域名莫。。。

就这样,写累了,88.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答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 获取位置失败并出现签名错误时,可能是网络问题、位置权限、签名配置或使用的接口不正确导致的。在解决问题时,可以逐一排查以上原因,并根据具体情况进行相应的调试和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值