如何在微信浏览器的H5商城获取用户openid

更新时间:2018-11-12 17:19:01点击次数:236次
我们可以打开微信购物里面的京东商城,用户未给该商城任何授权,但是在最后提交订单支付时确实可以顺利支付的,我们知道,微信支付是需要获取支付用户的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,且不影响用户的微信支付流程

本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是一个个人学习交流的平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽,造成漏登,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息
  • 项目经理 点击这里给我发消息