1.通过后端站点http://b.cn 跳转至前端链接 http://aa.cn/v1/demo/demo
public function index(){
$ident=input('ident');
$this->redirect('http://aa.cn/?ident='.$ident);
}
2.前端http://aa.cn 再跳转到后端 https://c.com(此域名绑定微信公众号:需备案)
onShow() {
console.log('URL参数111:', this.identValue);
uni.redirectTo({
url: '/pages/index/webview/webview?url=' + encodeURIComponent('https://c.com/v1/demo/demo?ident='+this.identValue)
});
var ua = window.navigator.userAgent.toLowerCase();
console.log(ua);
},
3.https://c.com (用此域名获取微信用户openid) 然后在跳转到前端域名
public function demo(){
$ident=input('ident');
Checking::writeLog('ident:'.$ident,'input','wx.log');
$wechat=new Wechat();
$user=$wechat->getUserOpenId();
Checking::writeLog(json_encode($user,JSON_UNESCAPED_UNICODE),'openid','wx.log');
$this->redirect('http://aa.cn/#/pages/index/home?ident='.$ident.'&openid='.$user);
halt($user);
}
<?php
/**
* Created by PhpStorm.
* User: Administrator
* Date: 2018/8/6
* Time: 22:41
*/
namespace app\v1\controller;
use app\common\controller\Checking;
use think\Controller;
class Wechat extends Controller
{
protected $accessTokenUrl = 'https://api.weixin.qq.com/cgi-bin/token';
protected $wechatAuthCodeUrl = 'https://open.weixin.qq.com/connect/oauth2/authorize?';
protected $userOpenIdUrl = 'https://api.weixin.qq.com/sns/oauth2/access_token?';
protected $appId;
protected $secret;
protected $code;
protected $openId;
/**
* 加载微信配置
*/
protected function _initialize(){
$this->appId = '';
$this->secret = '';
}
/**
* 作用:格式化参数,签名过程需要使用
* @param $paraMap
* @param $urlencode
* @return bool|string
*/
protected function formatBizQueryParaMap($paraMap, $urlencode)
{
$buff = "";
ksort($paraMap);
foreach ($paraMap as $k => $v)
{
if($urlencode)
{
$v = urlencode($v);
}
$buff .= $k . "=" . $v . "&";
}
$reqPar = '';
if (strlen($buff) > 0)
{
$reqPar = substr($buff, 0, strlen($buff)-1);
}
return $reqPar;
}
/**
* 网页授权获取用户openId -- 1.获取授权code url
*/
public function getWechatAuthCode(){
// 获取来源地址
$url = $this->get_url();
// 获取code
$urlObj["appid"] = $this->appId;
$urlObj["redirect_uri"] = "$url";
$urlObj["response_type"] = "code";
$urlObj["scope"] = "snsapi_base";
$urlObj["state"] = "STATE"."#wechat_redirect";
$bizString = $this->formatBizQueryParaMap($urlObj, false);
$codeUrl = $this->wechatAuthCodeUrl.$bizString;
return $codeUrl;
}
/**
* 网页授权获取用户openId -- 2.获取openid
* @return mixed
*/
public function getUserOpenId(){
if (!isset($_GET['code'])){
$codeUrl = $this->getWechatAuthCode();
Header("Location: $codeUrl");
die;
}else{
$code = $_GET['code'];
$this->code = $code;
// 请求openid
$param = [
'appid' => $this->appId,
'secret' => $this->secret,
'code' => $this->code,
'grant_type'=> "authorization_code",
];
$user_info = $this->curl($this->userOpenIdUrl.http_build_query($param).'&lang=zh_CN');
//取出openid
$data = json_decode($user_info,true);
$this->openId = $data['openid'];
return $this->openId;
}
}
/**
* 获取来源地址
* @return string
*/
public function get_url() {
//获取来源地址
$url = "http://".$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
return $url;
}
// php CURL请求
public function curl($url, $post = false)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if ($post) {
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
}
$result = curl_exec($ch);
curl_close($ch);
return $result;
}
}