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&lang=zh_CN";
    $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)
    }
  }
})

 

你可能感兴趣的:(php对接第三方)