当前位置:   article > 正文

小程序,获取微信的openid的方法,区分各用户做的相关操作,但是写的代码遇到了问题(微信开发者工具的真机调试可以获取openid,但是预览的不到openid,原因是起前端无法调用外部接口)_微信前端获取openid

微信前端获取openid

起初的实现思路:

1.通过appid以及secret(秘钥)获取openid;

2.由于前段自己设定的appid和secret,无法通过审核,所以需要后端接口返appid和secret字段名,返的值需要在微信公众号平台获取;

3.面临的问题:微信开发者工具的真机调试可以获取openid,但是预览的不到openid,原因是起前端无法调用外部接口,导致无法获取openid

起初的具体操作步骤:

  1. 在data 中声明openId:“”,在mounted中调用:this.getOpenid()
  2. // 获取openid
  3. getOpenid() {
  4. this.$http.get("后端接口返appid和秘钥").then(res => {
  5. console.log(res, 'openid的获取111');
  6. this.appid = res.data.result.appid
  7. this.secret = res.data.result.secret
  8. this.getOpenValue(this.appid, this.secret)
  9. })
  10. },
  11. getOpenValue(appid, secret) {
  12. uni.login({
  13. success: res => {
  14. //code值(5分钟失效)
  15. let code = res.code;
  16. //小程序appid
  17. // let appid = appid; //小程序id
  18. // //小程序secret
  19. // let secret = secret; //密钥
  20. //wx接口路径
  21. let url = 'https://api.weixin.qq.com/sns/jscode2session';
  22. uni.request({
  23. url: url, // 请求路径
  24. data: {
  25. appid: appid,
  26. secret: secret,
  27. js_code: code,
  28. grant_type: 'authorization_code'
  29. }, // 请求体
  30. method: 'GET', //请求方法,
  31. header: {}, //请求头
  32. success: result => {
  33. //响应成功
  34. //这里就获取到了openid了
  35. this.openId = result.data.openid
  36. // uni.setStorage({
  37. // key: 'openId',
  38. // data: result.data.openid
  39. // })
  40. console.log(this.openId, '打印this.openId');
  41. },
  42. fail: err => {} //失败
  43. });
  44. }
  45. });
  46. },

改进的解决方法(已验证,方法可行):

直接影响就是开发环境和生产环境在代码相同的情况下,体现的效果不一样,微信官方也没有任何合理解释,经过很长时间的查找资料,获取openid不能直接在微信客户端来获取,应该改用后端来获取openid然后再返回给前端。

所以应该用Django来获取openid

  1. def getopenid(request):
  2. res = {}
  3. appId = request.GET.get('appId')#开发者appid
  4. secret = request.GET.get('secret')#开发者AppSecret(小程序密钥)
  5. grant_type = "authorization_code" #默认authorization_code
  6. js_code = request.GET.get('js_code')#wx.login登录获取的code
  7. data = {'appId':appId,'secret':secret,"grant_type":grant_type,"js_code":js_code}
  8. url = "https://api.weixin.qq.com/sns/jscode2session"
  9. jscode = requests.get(url,data)
  10. res = jscode.json()
  11. return JsonResponse(res,safe=False,json_dumps_params={'ensure_ascii':False})

而前端获取openid的方法改造成请求本地接口

每个用户登录的code是不一样的,将code传递给后端,后端调用微信的接口(传递appid、secret、grant_typr、js_code)

  1. // 获取openid
  2. getOpenValue() {
  3. uni.login({
  4. success: res => {
  5. //code值(5分钟失效)
  6. let code = res.code;
  7. //小程序appid
  8. //let appid = appid; //小程序id
  9. //小程序secret
  10. //let secret = secret; //密钥
  11. //wx接口路径
  12. let url = '后端提供的接口getOpenid?code='+code;
  13. uni.request({
  14. url: url, // 请求路径
  15. method: 'GET', //请求方法,
  16. header: {}, //请求头
  17. success: result => {
  18. console.log(result.data.result,'result.data.openid微信');
  19. //响应成功
  20. //这里就获取到了openid了
  21. this.openId = result.data.result
  22. if(this.openId!==""){
  23. this.eventList(this.openId)
  24. }
  25. console.log(this.openId, '打印下下2222');
  26. },
  27. fail: err => {} //失败
  28. });
  29. }
  30. });
  31. },

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/283224
推荐阅读
相关标签
  

闽ICP备14008679号