一、通过JS获取授权code
[javascript] view plain copy
getQueryString()方法功能是获取URL链接上的参数
二、PHP后端处理
[php] view plain copy
class UserapiController{
public function authorize(){
if (isset($_GET['code'])) {
$code = $_GET['code'];
$data = $this->getUserInfoBycode($code);
$openid = $data['openid'];
$ret['openid'] = $openid;
$this->ajaxReturn($ret,'JSON');
}
}
[php] view plain copy
public function getUserInfoBycode($code){
[php] view plain copy
$res = $this->http('https://api.weixin.qq.com/sns/oauth2/access_token', array('appid' => _APPID, 'secret' => _APPSECRET, 'code' => $code, 'grant_type' => 'authorization_code'), '', 'GET');
if ($res) {
return $res;
}
return false;
[php] view plain copy
}
[php] view plain copy
/**
* 发送HTTP请求方法,目前只支持CURL发送请求
* @param string $url 请求URL
* @param array $param GET参数数组
* @param array $data POST的数据,GET请求时该参数无效
* @param string $method 请求方法GET/POST
* @return array 响应数据
*/
public function http($url, $param, $data = '', $method = 'GET') {
$opts = array(
CURLOPT_TIMEOUT => 30,
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_SSL_VERIFYHOST => false,
);
/* 根据请求类型设置特定参数 */
$opts[CURLOPT_URL] = $url . '?' . http_build_query($param);
if (strtoupper($method) == 'POST') {
$opts[CURLOPT_POST] = 1;
$opts[CURLOPT_POSTFIELDS] = $data;
if (is_string($data)) { //发送JSON数据
$opts[CURLOPT_HTTPHEADER] = array(
'Content-Type: application/json; charset=utf-8',
'Content-Length: ' . strlen($data),
);
}
}
/* 初始化并执行curl请求 */
$ch = curl_init();
curl_setopt_array($ch, $opts);
$data = curl_exec($ch);
$error = curl_error($ch);
curl_close($ch);
//发生错误,抛出异常
if ($error)
throw new \Exception('请求发生错误:' . $error);
return json_encode($data);
}
}