微信小程序开发技巧集锦(1):获取openid、seeeion_key、expire_in

说明:本方法是PHP版本的,java 等类似步骤实现即可!

1、注册账号 https://mp.weixin.qq.com ,获取 appID appSecret

2、配置 appID appSecret LoginUrl

//1、配置
$AppID = '***';
$AppSecret = '***';
$LoginUrl = "https://api.weixin.qq.com/sns/jscode2session?" .
           "appid=%s&secret=%s&js_code=%s&grant_type=authorization_code";


2、获取code,此code由小程序传递过来
$code = $_GET['code'];  //此code为小程序提供

3、拼接LoginUrl
$wxLoginUrl = sprintf($LoginUrl,$AppID,$AppSecret,$code);


4、通过curl获取 openid session_key

    $curl = curl_init();

    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);


    //不做证书校验,部署在linux上环境下需要改为true
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 10);

    $file_contents = curl_exec($curl);

    $httpCode = curl_getinfo($curl,CURLINFO_HTTP_CODE);

    curl_close($curl);

5、获取到 openid session_key 
$wxResult = json_decode($file_contents,true);


6、判断wxResult是否含有errcode字段,如果有则返回false,没有则继续
//Array ( [errcode] => 40029 [errmsg] => invalid code, hints: [ req_id: oFAcqZyFe-8MWOTa ] )//错误的返回信息会包含errcode字段
if (array_key_exists('errcode',$wxResult);){
    return false;         
}

7、如果没有错误,则获取openid
//Array ( [session_key] => /+Xq0PzVXvBzxL3Xz/zzjA== [expires_in] => 7200 [openid] => oPPr80M******umQ5g86*****k )//正确返回信息包含 session_key openid expires_in
 $openid = $wxResult['openid'];

8、判断数据库中是否存在openid 存在则忽略,不存在则创建 
$user = User::where('openid'$openid)->find();
if ($user){
  $uid = $user->id;
}else{
  $user = UserModel::create(['openid',$openid]);
  $uid = $user->id
}



9、准备要缓存的数据
$cachedValue = $wxResult;
$cachedValue['uid'] = $uid;
$cachedValue['scope'] = 16; 

10、写入缓存
$key = md5(getRandChar(32).$_SERVER['REQUEST_TIME_FLOAT'].config('secure.token_salt'));  //生成随机Token
$value = json_encode($cachedValue); //转为json对象
$expire_in = config('setting.token_expire_in'); //设置过期时间
$request = cache($key,$value,$expire_in); //缓存数据


附:code获取方式(小程序中)

wxml

<button type="primary" bindtap="getToken">申请令牌</button>

index.js中

var app = getApp()
var baseUrl = 'https://thinkp.cn/api/v1';  //thinkp.cn为配置的合法request域名
Page({
  onLoad: function () {
  },

 

  getToken: function () {
    //调用登录接口
    wx.login({
      success: function (res) {
        var code = res.code;
        console.log('code');
        console.log(code);   //打印出code
        wx.request({
          url: baseUrl + '/token/user',  // 路由
          data: {
            code: code
          },
          method: 'POST', // OPTIONS, GET, HEAD, POST, PUT, DELETE, TRACE, CONNECT
          success: function (res) {
            console.log(res.data);
            wx.setStorageSync('token', res.data.token);
          },
          fail: function (res) {
            console.log(res.data);
          }
        })
      }
    })
  },

 
})

注:

code只能使用1次:

如果使用多次则会报错:

{"msg":"code been used, hints: [ req_id: TFAcn6yFe-_aD_aa ]","error_code":40163,"request_url":"\/api\/v1\/token\/user?code=08*555Yp0a9pam1mGidm1OV4di"}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值