V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kukala
V2EX  ›  微信

[求助] 小程序里怎么把获取 openid,给封装起来调用

  •  
  •   kukala · 2020-03-27 12:51:37 +08:00 · 1782 次点击
    这是一个创建于 1483 天前的主题,其中的信息可能已经有所发展或是发生改变。

    怎么把如下的获取 openid,给封装起来调用

    wx.login({
      success (res) {
        if (res.code) {
          //发起网络请求
          wx.request({
            url: 'https://test.com/onLogin',
            data: {
              code: res.code
            }
          })
        } else {
          console.log('登录失败!' + res.errMsg)
        }
      }
    })
    

    尝试这样来写

    //base.js
    
    getOpenid(){
    		wx.login({
    		    success (res) {
    		        if (res.code) {
    					//发起网络请求
    					let postData = {
    						code: res.code
    					}
    					this.$post("https://test.com/onLogin",postData).then(res => {
    							return res.results.openid
    					})
    				}
    		    }
    		})
    		
    	},
        
    //调用的时候
    this.$base.getOpenid()
    console.log 后
    出来的“undefined”
    
    6 条回复    2020-03-27 20:53:49 +08:00
    airyland
        1
    airyland  
       2020-03-27 14:09:00 +08:00 via iPhone
    理解下异步,封装成 promise
    uchihaObito
        2
    uchihaObito  
       2020-03-27 15:39:42 +08:00
    getOpenid() {
    return new Promise((resolve, reject) => {
    wx.login({
    success: async res => {
    const { code } = res;

    if (!code) {
    return reject('登录失败!' + res.errMsg);
    }

    const {
    results: { openid }
    } = await this.$post('https://test.com/onLogin', { code });

    resolve(openid);
    },
    fail: err => {
    reject(err);
    }
    });
    });
    }

    //调用的时候
    this.$base.getOpenid().then(openid => console.log(openid));
    kukala
        3
    kukala  
    OP
       2020-03-27 17:05:18 +08:00
    @uchihaObito
    感谢回复!
    对于异步没接触过,有的地方还是有点不明白
    比如:小程序的转发
    通过 getOpenid,怎么赋值给 openid 就不知道了
    ```
    onShareAppMessage(option){

    this.$base.getOpenid().then(openid => {
    console.log(openid) //这里可以显示 openid 的值
    }).catch(err => {
    console.error(err)
    })

    let title = this.detail.title
    let path = 'pages/index/index/scene='+ openid //怎么赋值到这个 openid 变量就不知道了
    let imageUrl = this.detail.thumb
    return {
    title: title,
    path: path,
    imageUrl:imageUrl,
    success: function (res) {
    console.log("转发成功:" + JSON.stringify(res));
    },
    fail: function (res) {
    console.log("转发失败:" + JSON.stringify(res));
    }
    }
    }```
    uchihaObito
        4
    uchihaObito  
       2020-03-27 17:40:44 +08:00
    @kukala 这样不行,改下逻辑,必须授权登录拿到 openid 了才可以分享,做个分享按钮的显示隐藏,而且为了安全不应该传 userId 么。
    uchihaObito
        5
    uchihaObito  
       2020-03-27 17:41:25 +08:00
    @kukala 不知道你的需求是什么
    kukala
        6
    kukala  
    OP
       2020-03-27 20:53:49 +08:00
    @uchihaObito
    只是举个例子,实际情况是把用户的 ID 赋值给到 onShareAppMessage()里的 path 去,但是不知道怎么给他赋值
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1256 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 18:00 · PVG 02:00 · LAX 11:00 · JFK 14:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.