微信小程序获取用户手机号存数据库,前后端都有《Java后台版 》

开发这个功能的时候走了很多弯路磨了很多时间,我发一下我自己用的来帮助大家

流程图
在这里插入图片描述
前端
index.wxml

    <view>我的首页内容</view>
      <button class='bottom' type='primary' open-type="getUserInfo" lang="zh_CN" bindgetuserinfo="getcode">
            授权获取code
        </button>
     <button open-type="getPhoneNumber" bindgetphonenumber="getPhoneNumber">微信手机号授权登陆</button>

index.js

Page({
  data: {
      //判断小程序的API,回调,参数,组件等是否在当前版本可用。
      canIUse: wx.canIUse('button.open-type.getUserInfo'),
      
      isHide: false
  },



  onLoad: function() {
  
  },
  //获取用户code
  getcode: function(res){
    var that = this;
    // 查看是否授权
    wx.getSetting({
        success: function(res) {
            if (res.authSetting['scope.userInfo']) {
                wx.getUserInfo({
                    success: function(res) {
                        // 用户已经授权过,不需要显示授权页面,所以不需要改变 isHide 的值 根据自己的需求有其他操作再补充 我这里实现的是在用户授权成功后,调用微信的 wx.login 接口,从而获取code
                        wx.login({
                         //  success: res => {
                          // 获取到用户的 code 之后:res.code 可以传给后台,再经过解析获取用户的 openid 代码如下
                             //   wx.login({
                                  success: function (res) {
                                  console.log("用户的code:" + res.code);
                               //     if (res.code) { //使用小程序登录接口完成后端用户登录
                                      wx.request({
                                        url: "填写服务器接口一定要HTTPS的可以去natapp买一个" +"/getOpenid",
                                        data: {
                                          code: res.code,
                                          appid: "自己的APPID",
                                          secret: "自己的APPSECRET",        
                                        },
                                        method:'POST',
                                        header: {
                                        'content-type': 'application/json' // POST请求
                                        },
                                        success: function (res) {
                                          //把openid保存到缓存里
                                          wx.setStorageSync("openid", res.openid);
                                          wx.setStorageSync("session_key", res.session_key);
                                        }
                                      })
                                //     } else {
                                 //      console.log('获取用户登录态失败!' + res.errMsg)
                          
                                   //  }
                                  }
                                });
                         //   }
                       // });
                    }
                });
            } else {
                // 用户没有授权
                // 改变 isHide 的值,显示授权页面
                that.setData({
                  isHide: true
     });
            }
        }
    });
  },
  //获取用户开发信息
  bindGetUserInfo: function(e) {
      if (e.detail.userInfo) {
          //用户按了允许授权按钮
          var that = this;
          // 获取到用户的信息了,打印到控制台上看下
          console.log("用户的信息如下:");
          console.log(e.detail.openid);
          console.log(e.detail.userInfo);
          //授权成功后,通过改变 isHide 的值,让实现页面显示出来,把授权页面隐藏起来
          that.setData({
              isHide: false
          });
      } else {
          //用户按了拒绝按钮
          wx.showModal({
              title: '警告',
              content: '您点击了拒绝授权,将无法进入小程序,请授权之后再进入!!!',
              showCancel: false,
              confirmText: '返回授权',
              success: function(res) {
                  // 用户没有授权成功,不需要改变 isHide 的值
                  if (res.confirm) {
                      console.log('用户点击了“返回授权”');
                  }
              }
          });
      }
  },
//获取用户手机号授权按钮
getPhoneNumber: function (e) {
    var app = getApp();
    wx.request({
      url: "填写服务器接口一定要是HTTPS的可以去natapp买一个" +"/postPhoneNumber",  //解密手机号码接口
      data: {
        encryptedData: e.detail.encryptedData,
        iv: e.detail.iv
      },
      method:'POST',
      header: {
      'content-type': 'application/json' // POST请求
      },

      success: function (res) {
        console.log(res.data.phoneNumber);
        wx.setStorageSync("phonenumber", res.data.phoneNumber);
        
      }
    })
   
  },

})

后端Java代码

Controller层代码

package com.pyx.wechatapplet2.conntroller.wechat;

import com.alibaba.fastjson.JSON;
import com.pyx.wechatapplet2.entity.user.Openid;
import com.pyx.wechatapplet2.util.AesCbcUtil;
import com.pyx.wechatapplet2.util.JDBCUtil;
import com.pyx.wechatapplet2.util.redis.RedisUtil;
import lombok.extern.slf4j.Slf4j;
import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@RestController
@Slf4j
public class WechatgetPhone {
    public  String Openid;
    public  String session_key;

    public String getOpenid() {
        return Openid;
    }

    public void setOpenid(String openid) {
        Openid = openid;
    }

    @PostMapping("/getOpenid")
    @Transactional(rollbackFor = Exception.class)
    public synchronized com.alibaba.fastjson.JSONObject getSessionKeyOropenid(@RequestBody Openid openid ) throws Exception {
        System.out.println("Openid code:" + openid.getCode());

      
  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值