微信小程序【Promise】 通过code请求开发服务器获取openid实例

功能分析:多次回调,用Promise来简化流程

app.js 内添加如下代码

	/**
     * 获取微信code
     * Promise
     * 用于后续换取openid等操作
     * @resolve {String} code
     * @reject {String} 错误提示
     */ 
    getWxCodePromise: function () {
        return new Promise((resolve, reject) => {
            //init
            wx.login({
                success: res => {
                    if (res.code){
                        resolve(res.code);
                    }else{
                        reject('code 获取失败: ' + res.errMsg); 
                    }
                },
                fail: err => {
                    reject('code 获取失败: ' + err);
                },
            });
        });
    },
    /**
     * 通过code获取openid
     * Promise
     * @param {String} code 微信code
     * @resolve: {ArrayObject} 返回数组,包含两个参数:openid,token
     * @reject: {String} 错误提示
     */
    getOpenidPromise: function (code) {
        var postData = {
            code: code
        };
        var that = this;
        // postData.signature = this.makeSign(postData); // 追加签名,非必要,看后台接口的要求
        return new Promise((resolve, reject) => {
            wx.request({
                url:  "https://xxx.com/user/wxLogin",// 这里改成实际api接口网址
                data: postData,
                method: 'POST',
                header: {
                    'content-type': 'application/x-www-form-urlencoded'
                },
                success: function (res) {
                    // console.log(res.data);
                    //全局变量
                    if (res.data.status == 1) { // 改成实际接口的成功code
                        var respData = res.data.data;
                        console.log('openid=' + respData.openid + ',  token=' + respData.token);
                        var userInfo = { "openid": respData.openid, "token": respData.token};
                        resolve(userInfo)
                    } else {
                        console.log('openid 获取失败' + respData.info);
                        reject('openid 获取失败' + respData.info);
                    }
                },
                fail: function (err) {
                    console.log('openid 获取失败: ' + err);
                    reject('openid 获取失败: ' + err);
                }
            })
        });
    },
    /**
     * 更新缓存用户uid,openid
     * @param {ArrayObject} userInfo
     *  	userInfo.openid {String} 小程序用户的openid,可以为空字符串(空字符串表示清空缓存)
     *  	userInfo.token  {String}  用户令牌,可以为空字符串(空字符串表示清空缓存)
     */
    updateUserCatch: function (userInfo) {
        //本地存储
        try {
            wx.setStorageSync('token', userInfo.token);
            wx.setStorageSync('openid', userInfo.openid);
            console.log(userInfo);
            console.log('user catch update success');
        } catch (e) {
            console.log('user catch update fail: ' + e.errMsg);
        }
    },

调用方法,在需要的界面链式调用,比如Home.js内

//pages/shop/home.js

//获取应用实例
const app = getApp();
Page({
	data:{},
	onLoad: function(){
	},
	
	// ... other code
	
	//这里通过code,换取token及openid,并且存在localStorage里
	test: function () {
        app.getWxCodePromise().then( // getWxCodePromise 的成功返回值code作为参数传给getOpenidPromise
            app.getOpenidPromise
        ).then(  // getOpenidPromise 的成功返回值userInfo作为参数传给updateUserCatch
            app.updateUserCatch
        ).catch( // 捕获并打印错误信息
        	function(err){
        		console.log('test() fail: ' + err);
        	}
        );
    },
})
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值