微信小程序获取openid时api.weixin.qq.com不能设为安全域名

原文:https://blog.csdn.net/jinyulong84/article/details/73741287 

看了网上很多获取openid的文章,都无法真正获取openid,最后看到这篇文章,按照方法可以正常获取openid,不过前提一定要有自己带https的域名,通过这台服务器才能向腾讯获取openid。

开发微信小程序,必备腾讯云服务器,服务器优惠购买地址:https://cloud.tencent.com/redirect.php?redirect=10172&cps_key=128419a2e140e43270be962309035fcb&from=activity

1、首先wx.login是可以获取到code的 
2、其次通过code可以很容易获取到openid,但是直接通过小程序不行。 
网上很多示例,例如


 
 
  1. wx.request({
  2. url: 'https://api.weixin.qq.com/sns/jscode2session?appid=‘+<code></code>appid+’&secret=‘+secret+’&grant_type=authorization_code&js_code='+loginCode.code,
  3. header: {
  4. 'content-type': 'application/json'
  5. },
  6. success: function(res) {
  7. console.log(res.data.openid) //获取openid
  8. }
  9. })

这样请求只会提示api.weixin.qq.com不在域名白名单内! 
而且在官方平台上设置合法域名,微信却提示“为保障帐号安全不可使用此域名地址,请修改”,这样就郁闷了。 
只能转一下,向自己的php服务器发送code,在通过php请求openid再返回openid 
3、小程序向php发送get数据 
php网址?jsonData={“resCode”:10001,” data”:{“code”:”abcdefghijklmnopq…”}} 
php回应数据{“resCode”:10001,”data”:{“openid”:”abcdefg…..”}} 
4、小程序代码如下
 


 
 
  1. wx.login({
  2. success: function(res){
  3. var data = { 'resCode': 10001, 'data':{ 'code':res.code}}; //自定义的格式 ,主要就是传递给服务器一个code
  4. utils.myRequestByGet( //请求获取openid
  5. getApp().globalData.phpUrl, //php网址
  6. data,
  7. function callback(obj){
  8. if (obj.data.resCode != 10001){ //忽略此错误处理内容
  9. wx.showModal({
  10. title: '错误',
  11. content: obj.data.error,
  12. showCancel: true
  13. });
  14. } else{
  15. that.setData({
  16. openid: obj.data.data.openid //obj.data.data.openid为获取到的openid
  17. });
  18. }
  19. }
  20. )
  21. }
  22. });

utils.myRequestByGet代码如下:


 
 
  1. /**
  2. * get方式的请求都在这里
  3. */
  4. function myRequestByGet(url,data,callback){
  5. wx.request({
  6. url: url,
  7. data:{
  8. jsonData:data
  9. },
  10. success: function(obj){
  11. callback(obj);
  12. },
  13. header: {
  14. 'Content-type': 'application/json'
  15. }
  16. })
  17. }

服务器端php代码如下,通过code获取openid的方法,具体返回内容自己处理


 
 
  1. function getOpenid($code){
  2. $appid = '小程序对应的appid';
  3. $appsecret = '小程序对应的appsecret ';
  4. $weixin = file_get_contents( "https://api.weixin.qq.com/sns/oauth2/access_token?appid=$appid&secret=$appsecret&code=".$code. "&grant_type=authorization_code"); //通过code换取网页授权access_token
  5. $jsondecode = json_decode($weixin); //对JSON格式的字符串进行编码
  6. $array = get_object_vars($jsondecode); //转换成数组
  7. return $array[ 'openid']; //输出openid
  8. }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在微信小程序获取用户的 OpenID,你可以通过调用微信登录接口来实现。以下是一个简单的示例代码: 1. 在小程序的相关页面或组件中引入微信登录 API: ```javascript // 在页面或组件的js文件中引入微信登录 API const app = getApp(); // 获取小程序实例 // 调用微信登录接口获取用户的 OpenID wx.login({ success: res => { if (res.code) { // 发送 res.code 到后台换取 openId, sessionKey, unionId wx.request({ url: 'https://api.weixin.qq.com/sns/jscode2session', data: { appid: app.globalData.appId, // 小程序的 AppID secret: app.globalData.appSecret, // 小程序的 AppSecret js_code: res.code, grant_type: 'authorization_code' }, success: res => { console.log(res.data); // 在这里可以获取到用户的 openId const openId = res.data.openid; // 将 openId 存储在本地或发送到服务器进行处理 }, fail: err => { console.error(err); } }); } else { console.error('微信登录失败:' + res.errMsg); } }, fail: err => { console.error(err); } }); ``` 2. 在小程序的 app.js 文件中,将 AppID 和 AppSecret 存储在全局变量中: ```javascript App({ onLaunch: function () { // 将小程序的 AppID 和 AppSecret 存储在全局变量中 this.globalData = { appId: 'YourAppID', appSecret: 'YourAppSecret' }; } }); ``` 请注意,获取 OpenID 需要在小程序的后台服务器进行处理,你需要在服务器端获取到微信返回的 sessionKey 和 openId,并进行相应的处理。上述代码仅仅是在小程序获取到了 OpenID,你还需要将 OpenID 发送到服务器端进行进一步的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值