1. 程式人生 > 實用技巧 >微信小程式登入並生成小程式二維碼

微信小程式登入並生成小程式二維碼

後臺操作

    public function login(){
        $post = $this->request->param();
        $url="https://api.weixin.qq.com/sns/jscode2session?appid=".$post['appid']."&secret=".$post['secret']."&js_code=".$post['code']."&grant_type=authorization_code";
        $html = file_get_contents($url);
        
$arr = json_decode($html,true); if (false == DB::name('users')->where(['openid' => $arr['openid']])->find()) { // Db::query('SET nicheng utf8mb4');$post['nickname'] = $post['userinfo']['nickName']; $post['create_time'] = time(); $post['update_time'] = time
(); $post['thumb'] = $post['userinfo']['avatarUrl'];$post['sex'] = '保密';$post['openid'] = $arr['openid'];$post['users_cate_id'] = db("users_cate")->where("name","會員")->value("id"); model('users')->allowField(true)->save($post); $id = model('users')->id;
$data['qrcode'] = $this->qrcode($id); db("users")->where("id",$id)->update($data); }else{ DB::name('users')->where('openid',$arr['openid'])->update(['login_time'=>time(),'nickname'=>$post['userinfo']['nickName'],'thumb'=>$post['userinfo']['avatarUrl']]); } $info = Db::name('users')->where('openid',$arr['openid'])->find(); $data = [ 'token'=>createToken($info['id']), 'openid' => $arr['openid'] ]; return json_success(1,"登入成功",$data); } //獲取使用者經銷商資訊 及生成推廣二維碼 public function qrcode($uid) { $info = db("users")->where('id',$uid)->find(); //拿到openid 查詢使用者表內是否有該使用者 沒有則拒絕生成二維碼 有則檢視是否已生成二維碼 有生成則傳送資料 沒有則生成 $dealer = $info['qrcode']; // $dealer = 1; if($dealer==NULL){ if($dealer == ''){ $appid = '***************'; $secret = '****************';//AppSecret(小程式金鑰) $url_access_token = 'https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid='.$appid.'&secret='.$secret; $json_access_token = $this -> sendCmd($url_access_token,array()); $arr_access_token = json_decode($json_access_token,true); $access_token = $arr_access_token['access_token']; if(!empty($access_token)) { $url = 'https://api.weixin.qq.com/cgi-bin/wxaapp/createwxaqrcode?access_token='.$access_token; $data = '{"path": "pages/my/my?uid='.$dealer.'", "width": 430}'; $result = $this -> sendCmd($url,$data); $name = $uid.time(); file_put_contents('./qrcode/code-'.$name.'.jpg',$result); //儲存二維碼路徑 $arr['qrcode'] = '/qrcode/code-'.$name.'.jpg'; return $arr['qrcode']; } else { return ''; } }else{ return $info['qrcode']; } }else{ return $info['qrcode']; } } /** * 發起請求 * @param string $url 請求地址 * @param string $data 請求資料包 * @return string 請求返回資料 */ function sendCmd($url,$data) { $curl = curl_init(); // 啟動一個CURL會話 curl_setopt($curl, CURLOPT_URL, $url); // 要訪問的地址 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 對認證證書來源的檢測 curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 2); // 從證書中檢查SSL加密演算法是否存在 curl_setopt($curl, CURLOPT_HTTPHEADER, array('Expect:')); //解決資料包大不能提交 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自動跳轉 curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自動設定Referer curl_setopt($curl, CURLOPT_POST, 1); // 傳送一個常規的Post請求 curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的資料包 curl_setopt($curl, CURLOPT_TIMEOUT, 30); // 設定超時限制防止死循 curl_setopt($curl, CURLOPT_HEADER, 0); // 顯示返回的Header區域內容 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 獲取的資訊以檔案流的形式返回 $tmpInfo = curl_exec($curl); // 執行操作 if (curl_errno($curl)) { echo 'Errno'.curl_error($curl); } curl_close($curl); // 關鍵CURL會話 return $tmpInfo; // 返回資料 }