php可以抓取网页数据吗(这是微信官方文档官方流程网页授权流程:1)

优采云 发布时间: 2021-11-14 20:05

  php可以抓取网页数据吗(这是微信官方文档官方流程网页授权流程:1)

  最近的一个项目是微信公众号的二次开发,涉及到微信公众号的支付。根据文档要求,如果要付费,必须获取用户的openid。

  这是官方微信文档

  官方流程 web授权流程分为四步:1、引导用户进入授权页面同意授权并获取code2、使用code兑换web授权access_token (与基础支持中的access_token不同)3、 如有需要,开发者可以刷新网页授权access_token避免过期4、通过网页授权access_token和openid获取用户基本信息(支持UnionID机制​​)

  我的想法1、首先是在公众号后台进行配置,设置回调路径,具体要求参考官方文档。

  将这里的txt文件放在项目根路径下,否则上面的回调域名无法保存。

  2、 当用户访问第三方页面时,首先去请求一个api,获取code和state

  代码说明:该代码用作票证,以换取access_token。用户授权码每次都会不同。代码只能使用一次,5分钟内未使用将自动失效。

  请求API参数拼接

  这里的作用域分为两种:一种是静默方法(snsapi_base);另一种是非静默方式(snsapi_userinfo),需要用户手动点击同意获取用户信息。

  这是一个非静默授权

  静默模式下直接获取openid

  3、 根据1中配置的回调方法中获取的代码和状态,请求如下接口获取access_token和openid。

  获取code后,请求如下链接获取access_token:

  代码片段

  @SuppressWarnings("null")

@RequestMapping("/getOAuth")

public String getOAuth(){

String code = request.getParameter("code");//获取微信服务器授权返回的code值

String state = request.getParameter("state");//验证是否来自微信重定向的请求

PrintWriter pw = null;

try {

pw = response.getWriter();

if(Constant.STATE.equals(state)){

/**

* 构造请求链接

* https://api.weixin.qq.com/sns/oauth2/access_token?

* appid=APPID&secret=SECRET&code=CODE&grant_type=authorization_code

*/

String url = Constant.ACCESS_TOKEN_URL+Constant.APP_ID+"&secret="+Constant.APP_SECRET+"&code="+code+"&grant_type=authorization_code";

String jsonStr = HttpUtil.httpRequest(url);

String openid = JSONObject.parseObject(jsonStr).getString("openid");

System.out.println(openid+"==========================");

session = request.getSession();

session.setAttribute("openid", openid);

return "login/wx_login";//登录页面

}else{

response.setContentType("text/html;charset=utf-8");

pw.write("alert('授权失败!');");

pw.flush();

pw.close();

}

} catch (IOException e) {

e.printStackTrace();

response.setContentType("text/html;charset=utf-8");

pw.write("alert('发生后台异常!');");

pw.flush();

pw.close();

}

return null;

}

  总结:目前已经获取到用户的openid,因为只涉及支付服务,不再获取用户的个人信息。感觉微信官方的文档逻辑还是比较清晰的。按照流程走一般是没有问题的。具体如何获取openid代码请参考我之前文章中的一段,已经在实际项目中实践过。

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线