我们可以打开微信购物里面的京东商城,用户未给该商城任何授权,但是在最后提交订单支付时确实可以顺利支付的,我们知道,微信支付是需要获取支付用户的openid,那么京东商城是如何在我们无感知的情况获取到我们的openid的呢?,今天小编就来说说关于前端h5如何用微信账号登录?下面更多详细答案一起来看看吧!

前端h5如何用微信账号登录(如何在微信浏览器的H5商城获取用户openid)

前端h5如何用微信账号登录

我们可以打开微信购物里面的京东商城,用户未给该商城任何授权,但是在最后提交订单支付时确实可以顺利支付的,我们知道,微信支付是需要获取支付用户的openid,那么京东商城是如何在我们无感知的情况获取到我们的openid的呢?

话不多少,我们直接上代码。

一、通过JS获取授权code

<script>

function getQueryString(name) {

var reg = new RegExp("(^|&)" name "=([^&]*)(&|$)", "i");

var r = location.search.substr(1).match(reg);

if (r != null)

return unescape(decodeURI(r[2]));

return null;

}

$(function () {

var access_code = getQueryString('code');

if (access_code == null) {

var fromurl = location.href;//获取授权code的回调地址,获取到code,直接返回到当前页

var url = 'https://open.weixin.qq.com/connect/oauth2/authorize?appid=APP_ID&redirect_uri=' encodeURIComponent(fromurl) '&response_type=code&scope=snsapi_base&state=0#wechat_redirect';

location.href = url;

}else{

<span style="white-space:pre"> </span> $.ajax({

type:'get', url:ApiUrl '/index.php/Usersapi/authorize', async:false, cache:false, data:{code:access_code}, dataType:'JSON', success:function(result){ if (result!=null && result.hasOwnProperty('openid') && result.openid!=""){ alert(result.openid) } else { alert('微信身份识别失败 \n ' result); location.href=fromurl; } } }); } }) </script>

getQueryString()方法功能是获取URL链接上的参数

二、PHP后端处理

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');

}

}

</pre><pre name="code" class="php">public function getUserInfoBycode($code){

$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;

}

/**

* 发送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);

}

}

通过上述方式,即可在用户无感知的情况下,获取到用户的openid,且不影响用户的微信支付流程。

,