关于微信接口

1、如何获取access_token

关于微信接口_第1张图片

任何微信系统在这一块都是大同小异,这一块首先来说其实跟我们设置的微信服务器跟我们系统通讯的这个url无关,这个我们访问很多接口的基础,可以看到这个接口需要的是

appid跟secret,我们这个信息在添加公众号的时候就已经保存到了数据库中。我们一般的做法是在比方说微信用户跟某公众号进行交互的时候,接受到的toUsername就是我们的公众号原始Id,我们通过公众号原始Id可以查找到对应的appid及secret,然后我们就可以调用如上类似的接口获取access_token,有了access_token,很多微信的接口就可以调用了。也还有一种可能是我们后台的某些操作,我们能带上id,或者缓存原始id也是可以实现通信的。

2、微信登录并获取用户信息

微信登录是不需要access_token的,但是获取用户信息是需要的access_token跟openid,因此一般来说我们在用户注册的时候会用到如下代码:

// 获取当前用户的OpenId
function get_openid($openid = NULL) {
	$token = get_token ();
	if ($openid !== NULL) {
		session ( 'openid_' . $token, $openid );
	} elseif (! empty ( $_REQUEST ['openid'] )) {
		session ( 'openid_' . $token, $_REQUEST ['openid'] );
	}
	$openid = session ( 'openid_' . $token );
	
	$isWeixinBrowser = isWeixinBrowser ();
	if (empty ( $openid ) && $isWeixinBrowser) {
		$callback = GetCurUrl ();
		OAuthWeixin ( $callback );
	}
	
	if (empty ( $openid )) {
		return - 1;
	}
	
	return $openid;
}


 
  


//微信登录

function OAuthWeixin($callback) {
	$isWeixinBrowser = isWeixinBrowser ();
	$info = get_token_appinfo ();
	if (! $isWeixinBrowser || $info ['type'] != 2 || empty ( $info ['appid'] )) {
		redirect ( $callback . '&openid=-1' );
	}
	$param ['appid'] = $info ['appid'];
	
	if (! isset ( $_GET ['getOpenId'] )) {
		$param ['redirect_uri'] = $callback . '&getOpenId=1';
		$param ['response_type'] = 'code';
		$param ['scope'] = 'snsapi_base';
		$param ['state'] = 123;
		$url = 'https://open.weixin.qq.com/connect/oauth2/authorize?' . http_build_query ( $param ) . '#wechat_redirect';
		redirect ( $url );
	} elseif ($_GET ['state']) {
		$param ['secret'] = $info ['secret'];
		$param ['code'] = I ( 'code' );
		$param ['grant_type'] = 'authorization_code';
		
		$url = 'https://api.weixin.qq.com/sns/oauth2/access_token?' . http_build_query ( $param );
		$content = file_get_contents ( $url );
		$content = json_decode ( $content, true );
		redirect ( $callback . '&openid=' . $content ['openid'] );
	}
}

// 通过openid获取微信用户基本信息,此功能只有认证的服务号才能用
function getWeixinUserInfo($openid, $token) {
	$access_token = get_access_token ( $token );
	if (empty ( $access_token )) {
		return false;
	}
	
	$param2 ['access_token'] = $access_token;
	$param2 ['openid'] = $openid;
	$param2 ['lang'] = 'zh_CN';
	
	$url = 'https://api.weixin.qq.com/cgi-bin/user/info?' . http_build_query ( $param2 );
	$content = file_get_contents ( $url );
	$content = json_decode ( $content, true );
	return $content;
}



上述例子只是说明了要通过微信登录获取到用户的微信号要经历两个步骤,一个步骤授权跳转拿code的过程,这个是需要appid跟secret,跳转回来的时候带了code,然后用这个code带上appid及appsecret就可以获得用户的openid了,然后得到这个openid我们就可以注册什么的了。


你可能感兴趣的:(PHP)