微信小程序开发笔记

微信小程序开发过程中的一些记录,包括最基本的unionId的获取以及在小程序内嵌的h5中使用微信jssdk的方法等。

1.获取unionId

1.1 unionId和openId说明
  • 在小程序中,openID是小程序的普通用户的一个唯一的标识,只针对当前的小程序有效。公众号同理。
  • 同一个微信开放平台帐号下的移动应用、网站应用和公众帐号(包括小程序),用户的 UnionID 是唯一的。换句话说,同一用户,对同一个微信开放平台下的不同应用,unionid是相同的。
1.2 代码实现
  1. 前端通过wx.login() 获取登录凭证(code)。通过凭证进而换取用户登录态信息,包括用户在当前小程序的唯一标识(openid)、微信开放平台账号下的唯一标识(unionid,若当前小程序已绑定到微信开放平台账号)及本次登录的会话密钥(session_key)等。
wx.login({
      success: res => {
        //发送 res.code 到后台换取 openId, sessionKey, unionId
        wx.request({
          url: config.host + "/auth/login",
          data: {
            'code':res.code
          },
          method: 'POST',
          header: {
            'content-type': 'application/json' // 默认值
          },
          success:(result) => {
   			//成功
            wx.setStorageSync("loginFlag", true);
          },
          fail: (result) => {
            //失败
          }
        })
      }
    })
  1. 向服务器发送请求,并将code一起发送过去。

  2. 服务端调用code2Session接口

    GET https://api.weixin.qq.com/sns/jscode2session?appid=XXX&secret=XXX&js_code=code&grant_type=authorization_code
    

    返回参数

    属性类型说明
    session_keystring会话密钥
    unionidstring用户在开放平台的唯一标识符,若当前小程序已绑定到微信开放平台账号下会返回,详见 UnionID 机制说明
    errmsgstring错误信息
    openidstring用户唯一标识
    errcodeint32错误码

2.accessToken

access_token 是小程序全局唯一后台接口调用凭据,调用绝大多数后台接口时都需使用。开发者可以通过 getAccessToken 接口获取并进行妥善保存。

为了 access_token 的安全性,后端 API 不能直接在小程序内通过 wx.request 调用,即 api.weixin.qq.com 不能被配置为服务器域名。开发者应在后端服务器使用getAccessToken获取 access_token

GET https://api.weixin.qq.com/cgi-bin/token

3.h5引入微信jssdk

3.1 前端

1.引入jssdk

安装

npm install weixin-js-sdk --save 

导入

import wx from 'weixin-js-sdk';

2.调用后端接口获取配置信息

所有需要使用JS-SDK的页面必须先注入配置信息,否则将无法调用。(同一个url仅需调用一次) 调用后端接口上送页面url。

async initWechatConfig() {
  try {
    let url = encodeURIComponent(window.location.href.split('#')[0]);
    let data = {
      url: url
    };
    const res = await this.$apis.initWechatConfig(data);
    if (res.code === 200) {
      this.wxTimestamp = res.data.timestamp;
      this.wxSignature = res.data.signature;
      this.wxNonceStr = res.data.nonceStr;
      this.wxAppId = res.data.appId;
    } else {
      this.$modal.alert({
        content: res.message
      });
    }
  } catch (e) {
    //ignore
  }
},

3.通过config接口注入权限验证配置

config信息验证后会执行ready方法,所有接口调用都必须在config接口获得结果之后,config是一个客户端的异步操作,所以如果需要在页面加载时就调用相关接口,则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口,则可以直接调用,不需要放在ready函数中。

config信息验证失败会执行error函数,如签名过期导致验证失败,具体错误信息可以打开config的debug模式查看,也可以在返回的res参数中查看,对于SPA可以在这里更新签名。

wx.config({
  debug: false, // true是开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。
  appId: this.wxAppId, // 必填,公众号的唯一标识
  timestamp: this.wxTimestamp, // 必填,签名的时间戳,后台生成的
  nonceStr: this.wxNonceStr, // 必填,签名的随机串,后台生成的
  signature: this.wxSignature, // 必填,签名,后台生成的
  jsApiList: ['getLocation'] // 必填,需要使用的JS接口列表,scanQRCode是调用扫一扫二维码
});
wx.error(function(res) {
  this.locFailed = true;
});
wx.ready(function() {
  wx.getLocation({
    type: 'wgs84',
    success(res) {
      this.reverseGeo(res.longitude + ',' + res.latitude);
    },
    fail(err) {
      this.locFailed = true;
    },
    cancel(...args) {
      this.locFailed = true;
    }
  });
});
3.2 后端

1.获取jsapi_ticket

jsapi_ticket是公众号用于调用微信JS接口的临时票据。正常情况下,jsapi_ticket的有效期为7200秒,通过access_token来获取。由于获取jsapi_ticket的api调用次数非常有限,频繁刷新jsapi_ticket会导致api调用受限,影响自身业务,开发者必须在自己的服务全局缓存jsapi_ticket 。

获取方式:

参考以下文档获取access_token(有效期7200秒,开发者必须在自己的服务全局缓存access_token):https://developers.weixin.qq.com/doc/offiaccount/Basic_Information/Get_access_token.html
用第一步拿到的access_token 采用http GET方式请求获得jsapi_ticket(有效期7200秒,开发者必须在自己的服务全局缓存jsapi_ticket):https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi

2.生成签名

String url = HttpUtils.urlDecode(url); //3.1-2步骤中前端上送的url
String ticket = jsApiTicket; //3.2-1步骤中获取到的jsapi_ticket
String timestamp = Long.toString(System.currentTimeMillis() / 1000); //时间戳
String nonceStr = UUID.randomUUID().toString(); //随机字符串
String params = "jsapi_ticket=" + ticket + "&noncestr=" + nonceStr + "&timestamp=" + timestamp + "&url=" + url;
String signature;
try {
    MessageDigest crypt = MessageDigest.getInstance("SHA-1");
    crypt.reset();
    crypt.update(params.getBytes(StandardCharsets.UTF_8));
    Formatter formatter = new Formatter();
    for (byte b: crypt.digest()) {
        formatter.format("%02x", b);
    }
    signature = formatter.toString();
    formatter.close();
} catch (NoSuchAlgorithmException e) {
    signature = "";
}
//返回前端signature、timestamp、nonceStr、appId

返回前端的appId必须是公众号appId,不能是小程序appId。

4.微信扫描普通二维码跳转小程序

  1. 登录https://mp.weixin.qq.com/

  2. 开发->开发管理->扫普通链接二维码打开小程序。添加配置即可。

    在这里插入图片描述

    只可扫描二维码打开小程序,点击配置的链接并不能打开。

  • 9
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
引用[1]:该微信小程序开发源码是一个校招信息平台,基于腾讯云服务开发,使用了微信云开发和原生微信开发,UI方面使用了vant和colorui。项目模块包括资讯模块、题库模块、签到模块、首页模块和我的模块。资讯模块包含了校招资讯的查看、点赞、收藏、笔记和分享功能。题库模块包含了笔试面试题库和随机刷题功能。签到模块包含了校招信息的精选、热招、倒计时和宣讲会资讯。首页模块包含了内推直招、简历和薪资待遇信息。我的模块包括个人收藏、点赞和笔记信息以及签到功能。[1] 引用[2]:另外一个微信小程序开发源码是一个简单的商城小程序,实现了首页、分类页面、商品列表页面、商品详情页面、购物车和个人页面。该小程序的功能较为简单,适合小白参考。数据存储在微信云开发数据库中,可以根据自己的需求在数据库中修改样式和图片。[2] 引用[3]:还有一个微信小程序开发源码是一个校招信息平台,名为小贝校招。该小程序提供了校招相关的信息,可以在微信小程序中搜索"小贝校招"进行体验。后台使用了cms系统,可以在提供的地址中查看内容,但是该账号只能查看,无法修改内容。[3] 以上是三个不同的微信小程序开发源码,分别是校招信息平台、简单商城和小贝校招。您可以根据自己的需求选择其中一个源码进行参考和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值