微信测试号接入微信sdk本地开发调试

微信测试号接入微信sdk本地开发调试

H5开发的网页在微信端需要调用微信sdk的录音功能,自己摸索下来总结的一些经验。

由于用户体验和安全性方面的考虑,微信公众号的注册有一定门槛,某些高级接口的权限需要微信认证后才可以获取。所以,为了帮助开发者快速了解和上手微信公众号开发,熟悉各个接口的调用,我们推出了微信公众帐号测试号,通过手机微信扫描二维码即可获得测试号。

申请测试号

点此去申请微信测试号

获取jssdk签名配置

  1. 在测试号管理界面绑定JS接口安全域名(可以用本地的ip,方便在真机预览调试)
  2. 扫码关注自己的测试号
  3. 要引入微信jssdk需要通过config接口注入权限验证配置
    1
    2
    3
    4
    5
    6
    7
    8
    wx.config({
    debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
    appId: '', // 必填,公众号的唯一标识
    timestamp: , // 必填,生成签名的时间戳
    nonceStr: '', // 必填,生成签名的随机串
    signature: '',// 必填,签名
    jsApiList: [] // 必填,需要使用的JS接口列表
    });

获取signature

  1. 访问此链接获取access_token,参数就是测试号的appidappsecret
  2. 通过获取到的access_token采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
    成功返回如下JSON:

    1
    2
    3
    4
    5
    6
    {
    "errcode":0,
    "errmsg":"ok",
    "ticket":"bxLdikRXVbTPdHSM05e5u5sUoXNKd8-41ZO3MhKoyN5OfkWITDGgnr2fwJ0m9E8NYzWKVZvdVtaUgWvsdshFKA",
    "expires_in":7200
    }

    获得jsapi_ticket之后,就可以生成JS-SDK权限验证的签名了。我是使用官方提供的python版的demo生成的签名,调试前生成签名,填入配置,在微信开发者工具的公众号网页调试地址栏输入我们本地的开发ip再点击预览即可在手机上进行调试

    示例代码

    备注:链接中包含php、java、nodejs以及python的示例代码供第三方参考,第三方切记要对获取的accesstoken以及jsapi_ticket进行缓存以确保不会触发频率限制。

    python3的需要对官方提供的代码进行一定的修改

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    import time
    import random
    import string
    import hashlib


    class Sign:
    def __init__(self, jsapi_ticket, url):
    self.ret = {
    'nonceStr': self.__create_nonce_str(),
    'jsapi_ticket': jsapi_ticket,
    'timestamp': self.__create_timestamp(),
    'url': url
    }

    def __create_nonce_str(self):
    return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(15))

    def __create_timestamp(self):
    return int(time.time())

    def sign(self):
    string = '&'.join(['%s=%s' % (key.lower(), self.ret[key]) for key in sorted(self.ret)])
    print(string)
    string=string.encode("utf8")//需要先编码 不然运行会报错
    self.ret['signature'] = hashlib.sha1(string).hexdigest()
    return self.ret


    if __name__ == '__main__':
    # 注意 URL 一定要动态获取,不能 hardcode
    sign = Sign('jsapi_ticket','url')//url 可以用本地开发地址(本机ip)方便调试
    print(sign.sign())
shadow wechat
扫一扫,关注微信公众号。