获取微信openid是微信开发中许多场景需要的必要条件之一,微信支付,用户基本信息等

必要条件:①需要一个具备HTTPS域名的服务器,且在微信公众平台(https://mp.weixin.qq.com/)中设置好域名,

。暂时还没配置HTTPS认证的服务器,可以暂时在开发者工具中关闭域名认证

大致流程是:微信小程序调用wx.login,获取code,发起https请求,与服务器进行通信,服务器访问微信的认证地址

(https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&grant_type=authorization_code&js_code=$code)其中$appid是appid、secret是app密钥,这两者我放在了服务器上,所以小程序只需要传入获取的code赋值给$code即可,然后该地址会返回 session_key 和 openid,然后我们将openid传回小程序保存即可。

 

开始动工

微信小程序(前端)

①登录微信开发者工具微信打开app.js文件

 

在全局变量中声明两个变量,code和openid,用于存储临时数据

App({ 
...
globalData: {
    userInfo: null,
    code: null,
    openid: null
  }
...
})

 

②定义一个方法用于发起https请求

写在app.js文件的最后加入以下函数

function getOpenid(obj) {
  wx.request({
    /*这个url是等下下面所说的php程序的入口地址,不允许写IP地址,所以写域名*/
    url: 'https://bayaojiu.com/wx/wxGetOpenid.php',
    method: 'POST',//POST方法传输,需要大写
    header: { 'content-type': 'application/x-www-form-urlencoded' },//微信默认的传输类型是:application/json,我们这里重新设置为表单形式
    data: { code: obj.globalData.code },//携带code数据
    success: function (res) {
      console.log(res)
      obj.globalData.openid = res.data.openid//将返回的openid保存
    }
  })
}

③在app.js中写入wx.login的具体实现,即打开小程序后执行的具体事件

在wx.onLaunch方法中写入wx.login方法,一开始新建小程序应该就有该方法了,只不过没有写具体实现,我们现在就把②中的方法进行调用。(一:wx.onLaunch方法是当小程序初始化完成时,会触发 wx.onLaunch,全局只触发一次。二:wx.login中success会返回code值,我们就将这code值保存,用于②中的https请求。wx.login这些方法都是需要联网的,所以开发的时候务必保证自己的网络条件是良好的。)

onLaunch:function(){
...
wx.login({
    success:res=>{
        /*res会保存返回的code,code五分钟后无效,所以需要用于与微信服务器通信,返回openid*/
        this.globalData.code=res.code
        //当openid还未获取的时候触发
        if(!this.globalData.openid){
            getOpenid(this)
        }
    }
})
...
}

那么,根据上面的流程,前端已经写好了,剩下的就是后端访问微信那个特定的认证地址,将返回值回传给前端就OK了

php(后端)

//配置
$appid='wx0000000';                    //你自己的appid
$secret= 'xxxxxxxxx';                  //你设置的app密钥
$code=$_POST['code'];       //接收前端上传的code参数
$result=file_get_contents("https://api.weixin.qq.com/sns/jscode2session?appid=$appid&secret=$secret&grant_type=authorization_code&js_code=$code");
echo  $result;

那么这样就可以将openid保存起来了,用于我们之后的一系列功能。

参考:

https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject

您或许感兴趣

[2017-12-20]微信开发-接触微信小程序(入门)
[2018-01-08]微信开发-微信小程序支付(PHP实现)

发表评论

电子邮件地址不会被公开。