天天看點

PHP微信公衆号、微信小程式擷取微信使用者資訊和微信openid

前言

沒有前言

準備工作

微信服務号一個

稽核通過的網頁域名一個,将域名綁定到小程式或者公衆号的服務端域名或者網頁授權域名。

将校驗檔案放到綁定域名的web根目錄,并確定可以通路。

登入公衆号擷取appid,secret,設定ip白名單(隻擷取openid不需要設定)

公衆号開發執行個體

public function request_wechat1()
{
    // 擷取目前子產品控制器和方法,便于session失效的時候重新擷取,請求微信伺服器出現白屏問題
    /*$module = $request->param('module');
    $controller = $request->param('controller');
    $action = $request->param('action');*/
    // 回調位址
    $redirect_url = 'http://jdhc.linkunst.com/index/login/get_open_id1';
    $app_id = Config::get('sdkparam.wxmp')['app_id'];
    $url = "https://open.weixin.qq.com/connect/oauth2/authorize?appid=" . $app_id . "&redirect_uri=" . $redirect_url . "&response_type=code&scope=snsapi_base&state=0#wechat_redirect";
    header("Location:{$url}");
    die;
}

/**
 * 微信回調位址,以擷取openid
 * @param Request $request
 * @author tuojinxin
 */
public function get_open_id1(Request $request)
{
    /*$module = $request->param('module');
    $controller = $request->param('controller');
    $action = $request->param('action');*/

    $app_id = Config::get('sdkparam.wxmp')['app_id'];
    $app_secret = Config::get('sdkparam.wxmp')['app_secret'];
    $code = $request->param('code');

    //第一步:取全局access_token
    $url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid={$app_id}&secret={$app_secret}";
    $token = $this->get_json($url);

    //第二步:取得openid
    $oauth2Url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid={$app_id}&secret={$app_secret}&code={$code}&grant_type=authorization_code";
    $oauth2 = $this->get_json($oauth2Url);

    //第三步:根據全局access_token和openid查詢使用者資訊
    $access_token = $token["access_token"];
    $openid = $oauth2['openid'];
    $get_user_info_url = "https://api.weixin.qq.com/cgi-bin/user/info?access_token=$access_token&openid=$openid&;
    $userinfo = $this->get_json($get_user_info_url);
    print_r($userinfo);
}


protected function get_json($url)
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    $output = curl_exec($ch);
    curl_close($ch);
    return json_decode($output, true);
}
           

小程式開發執行個體 

$jsCode = $_REQUEST['code'];
$url = "https://api.weixin.qq.com/sns/jscode2session?appid={$this->appId}&secret={$this->appSecret}&js_code={$jsCode}&grant_type=authorization_code";
$result = file_get_contents($url);
var_dump($result);
           

注:code是前端傳過來的。

前端代碼:

wx.login({
  success (res) {
    if (res.code) {
      //發起網絡請求
      wx.request({
        url: 'https://XXX.cn/test/wx_send/getWxUser',
        data: {
          code: res.code
        }
      })
    } else {
      console.log('登入失敗!' + res.errMsg)
    }
  }
})