公司上班工作日志

最近刚开始实习,入手的是公司的php(lavarel)项目 + uniapp(H5,微信小程序,APP端)的项目,最近刚刚完结,记录一下。

解决真机APP中iconfont不显示的问题

问题:iconfont图标在H5里是正常显示了,但是当在真机app上调试时却发现icon显示不成功。

原因是App 端是file协议

/* #ifdef APP-PLUS */
@font-face {
    font-family: 'iconfont';
    src: url('https://at.alicdn.com/t/font_1729183_8611dvcnqyf.ttf') format('truetype');
}
/* #endif */
/* #ifndef APP-PLUS */
@font-face {
    font-family: 'iconfont';
    src: url('//at.alicdn.com/t/font_1729183_8611dvcnqyf.ttf') format('truetype');
}
/* #endif */

H5端微信开发平台授权

步骤1

通过用户输入的手机号码发送验证码,这个时候先存入后端传过来的 key 用来对应验证码 教师端需要携带from:1

步骤2

根据验证码 和 key 获取 获取学校

步骤3

情况1:数据库中还没有微信开放平台授权的记录:

通过学校,mobile,key,code 获得cache_id ,前往后端的登录接口,当h5 所在的地址是因为开放平台对应的位置即在cookie 中 种下 token,通过document.cookie 拿到,在请求头中携带即可

        getThirdOauth(mode) {
            // #ifdef H5
            let reg = /^.*?\/#\//
            let str = window.location.href
            let route = str.match(reg)['0']
​
            if (this.from == 1) {
                route += 'pagesTeacher/index/index'
            }
            
            var authurl = 'https://xxxxx/' + 'api/wechat/' +                                        uni.getStorageSync('school_id') +
                '/' + uni.getStorageSync('cache_id') + '?callback=' +
                encodeURIComponent(str.match(reg)['0'])
            console.log(authurl);
            window.location.href = authurl
            // #endif
        },

情况2:数据库已经有了微信开放平台授权的记录:

通过学校,mobile,key,code 获得 token,存入本地,在请求头中携带即可

微信小程序登录

当前版本微信小程序需要点击特定的按钮才能弹出手机号码授权窗口

// 获取 code
uni.getUserInfo({
    provider: 'weixin',
    success: (res) => {
        console.log(res);
        uni.setStorageSync('iv', res.iv)
        uni.setStorageSync('encryptedData', res.encryptedData)
    }
})

<button class="wechatBtn" @click="getUserInfo" type="primary" open-type="getPhoneNumber"          @getphonenumber="getPhoneNumber">
    <image class="wxImg" src="../../../static/images/weChat.png" mode="aspectFill"></image>一键获取手机号码
</button>
  1. 通过在页面刚加载的时候通过getUserInfo获取到的code 在后台用appid 和 appsecrept 换取换取到 openId 和 session_key (openId 可以用于消息推送 之类的操作),并且后端返回一个cache_id 用来验证身份,注意getUserInfo 获取到的iv,和encryptedData 主要是头像和名字等信息,第三步用得上

  2. 通过用户触发getphonenumber 获取到encryptedData和iv(手机号码信息),再通过 cache_id,session_key,encryptedData,iv 换取到用户手机号

  3. 通过cache_id(验证客户端身份),iv,和encryptedData(头像和名字信息),school_id,mobile,from(1为教师端,0为家长端) 获取token存入本地,在请求头中携带即可

App端

步骤1

通过uni.login 弹出微信第三方授权窗口(当授权过一次后,不再弹窗,立刻获取)获取用户信息

uni.login({
    provider: 'weixin', //使用微信登录
    success: (loginRes) => {
        let authData = loginRes.authResult
        this.access_token = authData.access_token
        this.expires_in = authData.expires_in
        this.openid = authData.openid
        this.unionid = authData.unionid
        console.log(authData);
        console.log('access_token', this.access_token);
    },
    fail: (err) => {
        // console.log(err);
        uni.showToast({
            icon: 'none',
            title: '用户取消授权,请授权后登录'
        });
    }
});

步骤2

通过用户输入的手机号码发送验证码,这个时候先存入后端传过来的 key 用来对应验证码 教师端需要携带from:1

步骤3

根据验证码 和 key 获取 获取学校

步骤4

当用户点击绑定的时候检测用户是否授权,如果拒绝授权了,不允许绑定手机号码,否则继续

通过学校,验证码 ,key ,unionid

openid和unionid 的区别

想要做到消息推送,需要opendid一样才行

  • openid是微信用户在微信的某个应用(包括移动应用、网站应用、公众号和小程序)中的唯一标识,不同的应用对同一用户会生成不同的openid。

  • unionid是微信用户在同一个微信开放平台账号下的不同应用的唯一标识,只要是同一个微信开放平台账号下的不同应用,用户的unionid是相同的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值