<p>我通过java代码去获得用户的openid,一直报redirect_uri。我页面代码的链接为:</p><pre class="brush:java;toolbar:false">https://open.weixin.qq.com/connect/oauth2/authorize? appid=APPID&amp; redirect_uri=ENCODE(URL)&amp; response_type=code&amp; scope=snsapi_base&amp; state=state#wechat_redirect&quot;</pre><p>其中APPID为项目的appid,ENCODE(URL)为链接希望跳转的url地址(url需要urlencode),url的encode在java中代码实现如下:</p><pre class="brush:java;toolbar:false">//url进行编码 Stringurl=&quot;http://evan.tunnel.mobi/zzaClient/bindindex.html&quot;; Stringurl_encode=java.net.URLEncoder.encode(url,&quot;utf-8&quot;); request.setAttribute(&quot;url_encode&quot;,url_encode);</pre><p>当前台页面构造完成后,点击页面链接会跳转到bindindex.html的controller,在这个controller的代码写法是:</p><pre class="brush:java;toolbar:false">//需要在&quot;开发者中心&quot;---网页账号--修改。修改成域名,不要带http。比如:evan.tunnel.mobi //通过code获取openid Stringcode=request.getParameter(&quot;code&quot;); JsonObjectjson=WeixinUtils.getOpenId(getopenid_url,app_id,secret, code,&quot;authorization_code&quot;); Stringopenid=json.get(&quot;openid&quot;).getAsString(); logger.info(openid+&quot;------------------------------openid&quot;);</pre><p>可是奇怪的是,以上所有参数都没有写错,url也进行编码了。但是还是会报redirect_uri 参数错误。解决办法是: 需要在微信公众平台的&quot;开发者中心&quot;—网页账号–修改 把&quot;授权回调页面域名&quot;改成服务器的域名即可。</p><p>到这样,openid就可以正常获得了。有些开发者可能会有些疑问,如果我每次更改都要部署到正式环境进行测试,这样多浪费时间,其实我们可以通过ngrok将本地地址映射到外网,这样就可以将开发环境的地址直接映射到外网。</p>
返回顶部 留言