前言
沒有前言
準備工作
微信服務号一個
稽核通過的網頁域名一個,将域名綁定到小程式或者公衆号的服務端域名或者網頁授權域名。
将校驗檔案放到綁定域名的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)
}
}
})