微信开发-微信小程序获取openid(php实现)
获取微信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