扫描微信二维码获取openid

扫描二维码后,通过微信网页授权机制,来获取用户基本信息,进而实现业务逻辑。

第一步:确定回调域名,即扫描二维码后你需要跳转的后台URL,例如:

http://www.haha.com/haha/detail?id=xxx

http://www.haha.com:外网域名

/haha/detail?id=xxx:路径,生成二维码的条件

第二步:构造URL:

https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx&redirect_uri=http://www.haha.com/haha/detail?id=xxx&response_type=code&scope=snsapi_userinfo&connect_redirect=1#wechat_redirect"

1、https://open.weixin.qq.com/connect/oauth2/authorize?appid=xxx:是腾讯后台的Oauth2.0鉴权接口,是固定写法,appid为微信公众号的appid

2、redirect_uri=http://www.haha.com/haha/detail?id=xxx:第一步的回调域名(我没有对url进行编码,也可以正常传参,生成二维码,并获取扫描者的openid,原文处作者将url进行了编译,链接在下方

url编译方式:在浏览器的开发者模式中的console中输入:encodeURIComponent('你的URL') 回车即可

3、response_type=code&scope=snsapi_userinfo&connect_redirect=1#wechat_redirect,见如下说明:

第三步:生成二维码

此处不特意声明了,生成二维码的方式有很多,大家可以自行百度(推荐两个:“草料二维码”,“QRCode”)

第四步:后台代码获取openid

思路:首先获取request中的code,然后通过code调用腾讯微信接口获取用户信息,其中就包括了openid(此处小编用的是MVC框架,原作者用的struts2,有需要的可以去参考,链接在下方)

此处小编只放了获取openid的方法,具体业务逻辑各位随意发挥了~

public String detail(HttpServletRequest request){
	String code = request.getParameter("code");
	net.sf.json.JSONObject wxUser = CoreService.getOpenid(code);
	String openid = wxUser.getString("openid");
}
public class CoreService {
    public static String GETOPENID = "https://api.weixin.qq.com/sns/oauth2/access_token?appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code";
    /*通过code获取用户openid*/
    public static JSONObject getOpenid(String code) throws IOException{
        JSONObject jsonObject = null;
	String path = GETOPENID.replace("APPID", APPID).replace("SECRET", APPSECRET).replace("CODE", code);  
	StringBuffer buffer = new StringBuffer();
        URL url = new URL(path);
        HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();
        httpUrlConn.setRequestMethod("POST");
        httpUrlConn.setDoOutput(true);
        httpUrlConn.setDoInput(true);
        httpUrlConn.setUseCaches(false);
        // 将返回的输入流转换成字符串
        InputStream inputStream = httpUrlConn.getInputStream();
        InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");
        BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
        String str = null;
        while ((str = bufferedReader.readLine()) != null) {
            buffer.append(str);
        }
        bufferedReader.close();
        inputStreamReader.close();
        // 释放资源
        inputStream.close();
        inputStream = null;
        httpUrlConn.disconnect();
        jsonObject = JSONObject.fromObject(buffer.toString());
	return jsonObject;
    }
}

 GAME OVER,到此你就可以获取到扫描人的openid了~

原文地址:https://blog.csdn.net/qq_33696345/article/details/80521077

大家可以多多参考~

在网页中通过二维码获取微信授权是一种常见的用户认证和授权方式。以下是一个基本的流程介绍: 1. **生成二维码**: - 使用微信提供的API生成一个授权二维码。这个二维码包含一个临时的授权链接,用户扫描后会跳转到微信的授权页面。 2. **用户扫描二维码**: - 用户使用微信扫描网页上的二维码微信会识别二维码中的链接并跳转到授权页面。 3. **用户授权**: - 在授权页面,用户可以看到应用请求的权限列表。用户可以选择同意或拒绝授权。 4. **回调处理**: - 如果用户同意授权,微信会将用户重定向到应用预先设定的回调URL,并在URL中携带授权码(code)和状态(state)参数。 - 应用服务器接收到回调请求后,使用授权码(code)向微信服务器请求用户的access_token。 5. **获取用户信息**: - 拿到access_token后,应用服务器可以进一步获取用户的openid和其他信息。 6. **完成授权**: - 应用服务器将用户信息保存到数据库,并完成用户的登录或注册流程。 以下是一个简单的示例代码,展示如何在网页中生成微信授权二维码: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>微信授权登录</title> </head> <body> <div id="qrcode"></div> <script src="https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"></script> <script> // 微信授权URL const appId = 'YOUR_APP_ID'; const redirectUri = encodeURIComponent('YOUR_CALLBACK_URL'); const state = 'YOUR_STATE'; const authUrl = `https://open.weixin.qq.com/connect/qrconnect?appid=${appId}&redirect_uri=${redirectUri}&response_type=code&scope=snsapi_login&state=${state}#wechat_redirect`; // 生成二维码 new QRCode(document.getElementById("qrcode"), authUrl); </script> </body> </html> ``` 在这个示例中,`YOUR_APP_ID` 和 `YOUR_CALLBACK_URL` 需要替换成你的微信应用ID和回调URL。
评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值