微信开发网页获取openid_php微信公众号网页开发获取openid - CSDN
  • 不知觉间已经接触了几次微信支付开发,而要进行微信支付就需要用户的唯一标识:openid。还记得第一次获取用户openid的时候就踩了很多坑。这两天又接触了一下,想着索性就把他记录下来,也便于以后查阅 一、准备...

    wechatOAuth_logo

    不知觉间已经接触了几次微信支付开发,而要进行微信支付就需要用户的唯一标识:openid。还记得第一次获取用户openid的时候就踩了很多坑。这两天又接触了一下,想着索性就把他记录下来,也便于以后查阅


    一、准备工具

    不管开发什么,官方的文档应该是第一个想到的这里把官方文档贴出来:微信网页授权文档
    除此之外,我们还需要一个内网穿透的工具在开发环境下让微信能访问到我们的域名。我使用的是natapp。此类工具网上有很多,大家可以自行寻找。
    这里我们使用微信提供的**测试账号**来作为演示

    二、开始开发

    内网穿透就不在这里演示了,下面我们直入主题:
    1.填写网页授权域名
    在这篇文档的一开始就埋了一个坑
    wechatOAuth_1
    这段话就是说,我们在开发前需要在图片中框红的位置填入我们所要开发的域名。这里我们使用的是测试环境,所以需要在测试账号管理页面的这个位置填入我们自己的域名,这里要注意填入域名的规则。
    wechatOAuth_2
    2.文档阅读
    接着阅读文档我们可以发现网页授权有两种scope,
    snsapi_base和snsapi_userinfo。两种scope都可以获取到opeid,不同的是snsapi_userinfo除了openid外还可以获取到用户的基本信息,但是需要用户手动进行确认。
    再往下阅读我们可以看到官方文档的授权步骤

    • 第一步:用户同意授权,获取code
    • 第二步:通过code换取网页授权access_token以及openid
    • 第三步:刷新access_token(如果需要)
    • 第四步:拉取用户信息(需scope为 snsapi_userinfo)

    我们只需要openid,所以我们只开发到第二步就好了。下面我们就按着官方步骤来开发。

    3.获取code
    查看文档后我们发现我们需要拼接一个url并且访问它。url的参数文档中写的很清楚了。看他的例子也能看个清楚。这里比较重要的是redirect_uri。这个参数所填的是一个链接。我们访问url后会自动转发到这个链接并且将我们需要的code以及拼接url中的state的值作为参数。这个redirect_uri的值要填入的是我们代码中的controller的位置。
    所以这里我们需要一段代码:

    /**
     * <pre>
     * Description: wechat OAuth2.0
     * Author:      lllx
     * Version:     1.0
     * Created at:  2018/2/1
     * </pre>
     */
    @RestController
    @RequestMapping("/weixin")
    @Slf4j
    public class WeixinController {
    
        @GetMapping("/auth")
        public void auth(@RequestParam("code") String code,@RequestParam("state") String state){
            log.info("auth开始了。。。。");
            log.info("code={}",code);
            log.info("state={}",state);
        }
    }
    
    

    我拼接的url,这里大家要注意根据自己的情况进行拼接。拼接成功后需要在微信app中进行访问

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://xxx/sell/weixin/auth&response_type=code&scope=snsapi_base&state=STATE#wechat_redirect
    

    访问后的结果
    wechatOAuth_3
    这样我们就拿到了code
    4.获取openid
    继续查看文档,发现我们只需要使用获取到的code再访问另一个url就可以获取到我们想要的了。接着上面的代码

    /**
     * <pre>
     * Description: wechat OAuth2.0
     * Author:      lllx
     * Version:     1.0
     * Created at:  2018/2/1
     * </pre>
     */
    @RestController
    @RequestMapping("/weixin")
    @Slf4j
    public class WeixinController {
    
        @GetMapping("/auth")
        public void auth(@RequestParam("code") String code,@RequestParam("state") String state){
            log.info("auth开始了。。。。");
            log.info("code={}",code);
            log.info("state={}",state);
            String url = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=xxxx&secret=xxxx&code="+code+"&grant_type=authorization_code";
            RestTemplate restTemplate = new RestTemplate();
            String result = restTemplate.getForObject(url, String.class);
            log.info("result={}",result);
        }
    }
    

    这时我们再次访问第三步拼接的url就可以看到如下结果。
    wechatOAuth_4
    将结果格式化一下我们可以就看到我们想要的openid
    wechatOAuth_5

    三、总结

    流程看起来还是很简单的。但以上只是一个最简单、最直接的手工获取openid的例子。真正在使用过程中需要结合自身的业务流程来进行开发,这时可能就有些麻烦了。此时我们也可以借助一些网上第三方sdk来开发。例如:weixin-java-tools。


    本文作者: catalinaLi
    本文链接: http://catalinali.top/2018/wechatOAuth/
    版权声明: 原创文章,有问题请评论中留言。非商业转载请注明作者及出处。

    展开全文
  • 微信公众号开发获取openID以及用户详细信息,超详细步骤,亲测开发

        好久没有发过博文了,恰好这两天做了一个关于微信公众号开发的东东,拿出来和大家分享一下。

        需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,openIDNickname之类的信息。在开发前有一点准备工作,先去授权权限,在权限表里进行设置,如图:

        


    填写这个网站地址的时候一定要注意填写域名路径,没有http头,就是你的域名而已,在该域名下的所有页面都可访问到,被授权。

    好了初期的准备工作做好了,下来填写公众测试号的一些信息。

    填写你的接口信息:

    这里的url须填写你的接口地址,(在我下面的代码里调用valid()方法),在代码里设置一个token,和此处你填写的token保持一致。不然你会发现总是设置失败。

    接下来就是源码,直接上代码吧:

    <?php
    define("TOKEN", "shiva");
    class Wechatsign extends Back_Controller{
        private $appId;
        private $appSecret;
        public function  __construct($appId, $appSecret){
           $this->appId = '你自己的APPID';  
           $this->appSecret= '你自己的APPSECRET';  
           
        }
        
        public function getBaseInfo(){
            //1.获取到code        
            $redirect_uri=urlencode("http://你的域名/Wechatsign/getUserOpenId");//这里的地址需要http://
            $url="https://open.weixin.qq.com/connect/oauth2/authorize?appid=".$this->appId."&redirect_uri=".$redirect_uri."&response_type=code&scope=snsapi_userinfo&state=123#wechat_redirect";
            header('location:'.$url);
        }
    
        public function getUserOpenId(){
            //2.获取到网页授权的access_token        
            $code = $_GET['code'];
            $url="https://api.weixin.qq.com/sns/oauth2/access_token?appid=".$this->appId."&secret=".$this->appSecret."&code=".$code."&grant_type=authorization_code ";
            //3.拉取用户的openid
            $res = $this->http_curl($url);
            echo $res;//打印即可看到用户的openid
            $data = json_decode($res,true);
            if(!empty($data['access_token']) && !empty($data['openid'])){
                $url = "https://api.weixin.qq.com/sns/userinfo?access_token=".$data['access_token']."&openid=".$data['openid']."&lang=zh_CN"; 
                $userInfo = $this->http_curl($url);
                echo $userInfo;
            }
        }
        
        public function valid(){
            $echoStr = $_GET["echostr"];
            //valid signature , option
            if($this->checkSignature()){
                echo $echoStr;
                exit;        
            }
        }
        
        
        private function checkSignature(){
            $signature = $_GET["signature"];
            $timestamp = $_GET["timestamp"];
            $nonce = $_GET["nonce"];     
            $token = TOKEN;
            $tmpArr = array($token, $timestamp, $nonce);
            sort($tmpArr);
            $tmpStr = implode( $tmpArr );
            $tmpStr = sha1( $tmpStr );
            if( $tmpStr == $signature ){
                return true;
            }else{
                return false;
            }
    
        }
        
        
        public function http_curl($url){
            $curl = curl_init();
            //设置抓取的url
            curl_setopt($curl, CURLOPT_URL, $url);
            //设置头文件的信息作为数据流输出
            curl_setopt($curl, CURLOPT_HEADER, 0);
            //设置获取的信息以文件流的形式返回,而不是直接输出。
            curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
            //执行命令
            $data = curl_exec($curl);
            //关闭URL请求
            curl_close($curl);
            //显示获得的数据
            return $data;
        }
        
    }
    
    代码很简单,不复杂,应该能看懂(如果看不懂去看一下微信的开发者文档)。有一点很重要,如果你要获取用户的基本信息比如性别、昵称,头像,地址之类的信息的话,你要注意我getBaseInfo()方法里的url中有一个参数scope他的值一定是snsapi_userinfo,别直接拿微信开发文档里的url过来用,他给的值是snsapi_base。需要你注意改一下,我已经改好了,但还是写出来让大家了解一下。

    ok,将http://你的域名/接口,这个地址复制到草料二维码,生成二维码后扫一扫,你就能看到结果信息了,按我的绝对没问题哦。如果有用的话,就点个赞吧。

    予人玫瑰,手有余香

    展开全文
  • 微信开发获取openid

    2018-12-31 15:05:16
    微信公众号支付的接口即预下单接口需要传openid,但是单元测试调该接口的话,就得直接传固定的测试参数,没有办法像实际生产流程中那样获取openid,所以这里先通过微信官方的网页授权方法获取openid。 首先我们先...

    微信公众号支付的接口即预下单接口需要传openid,但是单元测试调该接口的话,就得直接传固定的测试参数,没有办法像实际生产流程中那样获取openid,所以这里先通过微信官方的网页授权方法获取openid。

    首先我们先保证前提条件以满足,完成公众号开发的相关步骤。

    按照开发文档的步骤来,这里是链接https://pay.weixin.qq.com/wiki/doc/api/jsapi.php?chapter=7_3

    这里直接从回调地址设置开始(前面的步骤已完成的情况下)


    1、放置MP_verify文件到授权目录下

    请将文件MP_verify_wY984BJIuZNHf8yR.txt上传至上传至dohko.m.test.com/order/(你的回调地址)指向的web服务器(或虚拟主机)的目录(可以放在该服务器节点根目录下)

    保证可访问https://dohko.m.test.com/MP_verify_wY984BJIuZNHf8yR.txt

    2、微信管理后台设置绑定授权目录

    3、微信客户端打开如下这种url

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx9440000cd8000000&redirect_uri=https%3a%2f%2fdohko.m.test.com%2forder%2f&response_type=code&scope=snsapi_base&state=1&connect_redirect=1#wechat_redirect

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx9440000cd8000000&redirect_uri=https%3a%2f%2fdohko.m.test.com%2forder%2f&response_type=code&scope=snsapi_userinfo&state=1&connect_redirect=1#wechat_redirec

    参数说明:

    链接中参数传自己的对应参数即可,appid为测试公众号的appid,redirect_uri为自己支付成功的回调地址(尽量使用https链接,微信文档中有说明,为了保证返回code的安全,scope参数可以传snsapi_base,也可以传snsapi_userinfo,区别在于snsapi_base不会弹出授权页面,而snsapi_userinfo会弹出一个授权页面,如果只需要得到openid,传snsapi_base即可,如果需要用户其他信息就snsapi_userinfo,但还需要多一步)

    注意链接在微信客户端内打开,为了便于调试用电脑微信打开即可。

    不能浏览器打开!!

    但是电脑版在显示链接时存在这样一个问题,如图

    这样就不是一个完整的链接,解决这个问题可以将回调地址urlencode编码一下即可(给出一个工具页http://tool.chinaz.com/tools/urlencode.aspx),如下图正确链接

    点击后授权公众号,然后会跳转至回调地址并且会携带code及state参数,因为我的回调地址无法直接这样访问,所以没有显示,但为了看到url,我们将此访问用浏览器打开

    然后浏览器中就能看到这样的url(这里传的scope为snsapi_userinfo,传snsapi_base发现浏览器打开不好使。。)

    https://dohko.m.test.com/order/?code=001c7QXy0CuMUd1vgmXy0tOyXy0c7QXE&state=1

    这里的code值仅能生效一次,且5分钟未使用就会失效,所以抓紧时间下一步。。

    4、后续链接均可浏览器打开,为了方便这里使用postman进行访问。

    访问链接模板:

    https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

    参数说明:

    appid和secret应该是在申请公众号的时候就会获得,code就是我们上一步得到的,然后填入相应参数访问即可,下图为code5分钟未使用失效了。。

    正确,未失效的

    5、此时到上一步已经结束了,我们已经获取到了openid,而这一步是用来获取用户详细信息的,根据官方说明,这一步仅能在scope为snsapi_userinfo访问

    参数说明:

    openid就是我们获取到的用户标识,传入即可

     

    已上就是获取openid的全部步骤。。

    展开全文
  • 开发场景: 在微信客户端打开某个网页可以获取到用户的openId获取用户openid步骤如下:参考微信公众平台开发文档 第一步:引导微信公众平台的用户打开如下链接 ...response_t...

    开发场景:
    在微信客户端打开某个网页可以获取到用户的openId。

    获取用户openid步骤如下:参考微信公众平台开发文档

    第一步:引导微信公众平台的用户打开如下链接

    https://open.weixin.qq.com/connect/oauth2/authorize?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect
    参数说明
    
    参数               是否必须   说明
    appid               是      公众号的唯一标识
    redirect_uri        是      授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理
    response_type       是      返回类型,请填写code
    scope               是      应用授权作用域,snsapi_base (不弹出授权页面,直接跳转,只能获取用户openid),     snsapi_userinfo (弹出授权页面,可通过openid拿到昵称、性别、所在地。并且, 即使在未关注的情况下,只要用户授权,也能获取其信息 )
    state               否      重定向后会带上state参数,开发者可以填写a-zA-Z0-9的参数值,最多128字节
    #wechat_redirect    是      无论直接打开还是做页面302重定向时候,必须带此参数
    参考链接(请在微信客户端中打开此链接体验):
    scope为snsapi_base
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wx520c15f417810387&redirect_uri=https%3A%2F%2Fchong.qq.com%2Fphp%2Findex.php%3Fd%3D%26c%3DwxAdapter%26m%3DmobileDeal%26showwxpaytitle%3D1%26vb2ctag%3D4_2030_5_1194_60&response_type=code&scope=snsapi_base&state=123#wechat_redirect
    scope为snsapi_userinfo
    https://open.weixin.qq.com/connect/oauth2/authorize?appid=wxf0e81c3bee622d60&redirect_uri=http%3A%2F%2Fnba.bluewebgame.com%2Foauth_response.php&response_type=code&scope=snsapi_userinfo&state=STATE#wechat_redirect

    注意事项:
    1、redirect_uri 授权后重定向的回调链接地址, 请使用 urlEncode 对链接进行处理。进行urlEncode处理戳这里
    2、appid必须是服务号的开发者ID(订阅号是没有权限通过网页授权来获取用户基本信息的),并且该服务号开通了微信网页授权的功能,且配置了微信授权回调域名,这样才能获取到code码用于进一步获取用户openid。(微信公众号的区分–服务号和订阅号有何不同?
    如下图:
    这里写图片描述
    这里写图片描述

    第二步:在重定向的回调页面(redirect_uri)里获取code,并请求openid

        // 获取code   
        function getQueryString(name) {
            var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i");
            var r = window.location.search.substr(1).match(reg);
            if (r != null) return unescape(r[2]); return null;
            }
        var code = getQueryString("code");  
        alert(code)   // 获取code值可以在客户端打开链接的时候alert出来查看
        // 请求openid
        $.ajax({ 
          async: false, 
          url: "http://api.xxx.com/member/platformDict/getOpenId", //后端提供的获取openid的接口
          type: "GET", 
          data: {code:code}, //传递本页面获取的code到接口,以便获取openid
          timeout: 5000, 
          success: function (result) { 
            // 根据后台接口返回的参数 result里应该会包含openid,就可以获取到了
          }, 
          error: function (jqXHR, textStatus, errorThrown) { 
              alert(textStatus); 
          } 
      })
    </script>

    code

    展开全文
  • 如何在微信网页里获取用户的openid? 准备: 首先你要有一个公众号,还有一个外网可访问的域名,这里就以企业号为例了。获取openid需要的公众号的appid 和 secret(登陆公众平台 开发----->基本配置中的...
  •  需要做一套微信签到、抽奖系统,我要在后台存储微信用户的相关信息,openIDNickname之类的信息。在开发前有一点准备工作,先去授权权限,在权限表里进行设置,如图:   填写这个网站地址的时候一定要注意填写...
  • 微信公众平台获取openid在公众号的开发中有很多用途,前段时间为实现用户使用公众号在登录一次以后可以免密登陆而使用了openid。开发过程中遇到了一些问题,在这里向需要且还没有获取到openid的米娜桑分享一下简单的...
  • 微信小程序获取openid

    2017-10-20 09:25:10
    微信小程序openid,session_key等信息的获取,以及遇到的问题
  • 微信开发获取openid 时失败如下:VM1184:1 [云函数] [login] 调用失败 Error: errCode: -404011 cloud function execution error | errMsg: cloud.callFunction:fail cloud function service error code -501005,...
  • 一、微信网页授权获取用户openid以及用户信息的步骤 开发文档 ...
  • 微信订阅号获取openId

    2015-03-06 14:14:19
    最近用到微信开发,需要获取到微信用户的openId. 开始开发之前,用的是公司的微信测试账号,账号是服务号。可以通过“网页授权获取用户基本信息”获取openId. 项目开发完后准备上线工作。登陆微信账号,一看,...
  • 微信公众号通过网页授权获取openid等用户基本信息。 开发者需要先到微信公众平台官网中的开发者中心页配置授权回调域名
  • H5在微信获取openid

    2020-02-05 18:01:51
    H5在微信获取openid 为什么要获取openid openId是用户在当前公众号下的唯一标识(‘身份证’)。在微信中进行微信分享、支付等操作时需要用户的openid。H5要在微信中获取到用户openid,需要获得微信授权,授权分...
  • 微信小程序获取openid和session_key并且把openid存入数据库。已经调用openid的demo 前后端代码都有,后端php实现 在其它地方同步调用openid。(确保用户完成登录再进行后续的操作); onLoad:function(options){...
  • 最近在做一个嵌在公众号里的H5项目,里面涉及到了微信支付,属于公众号支付,需要拿到用户的openid,涉及到了网页授权。 如果用户在微信客户端中访问第三方网页,公众号可以通过微信网页授权机制,来获取用户基本...
  • 微信开发时候在做消息接口交互的时候需要使用带微信加密ID(OpenId),下面讲讲述2中类型方式获取微信OpenID,接收事件推送方式和网页授权获取用户基本信息方式获取
  • 第一次开发微信网页,对最重要的获取微信OpenId,特此记录下来
1 2 3 4 5 ... 20
收藏数 12,756
精华内容 5,102
关键字:

微信开发网页获取openid