微信开放平台————拼接获取扫码地址(1)

开发步骤总结:

1. 第三方发起微信授权登录请求,微信用户允许授权第三方应用后,微信会拉起应用或重定向到第
三方网站,并且带上授权临时票据code参数;
2. 通过code参数加上AppID和AppSecret等,通过API换取access_token;
3. 通过access_token进行接口调用,获取用户基本数据资源或帮助用户实现基本操作。

时序图:

微信开放平台————拼接获取扫码地址(1)_第1张图片

微信开放平台————拼接获取扫码地址(1)_第2张图片

简单说明:

1.appid和appsecret:资源所有者向申请人分配的一个id和密钥

微信开放平台————拼接获取扫码地址(1)_第3张图片

2.code:授权凭证 用户确认登录之后 微信平台给第三方的凭证

               想获取用户信息必须有code

 

1.获取微信开放平台扫码连接的url地址

(1)增加结果工具类JSONData           增加application.properties

public class JsonData implements Serializable {

   private static final long serialVersionUID = 1L;

   private Integer code; // 状态码 0 表示成功,1表示处理中,-1表示失败
   private Object data; // 数据
   private String msg;// 描述

   public JsonData() {
   }

   public JsonData(Integer code, Object data, String msg) {
      this.code = code;
      this.data = data;
      this.msg = msg;
   }

   // 成功,传入数据
   public static JsonData buildSuccess() {
      return new JsonData(0, null, null);
   }

   // 成功,传入数据
   public static JsonData buildSuccess(Object data) {
      return new JsonData(0, data, null);
   }

   // 失败,传入描述信息
   public static JsonData buildError(String msg) {
      return new JsonData(-1, null, msg);
   }

   // 失败,传入描述信息,状态码
   public static JsonData buildError(String msg, Integer code) {
      return new JsonData(code, null, msg);
   }

   // 成功,传入数据,及描述信息
   public static JsonData buildSuccess(Object data, String msg) {
      return new JsonData(0, data, msg);
   }

   // 成功,传入数据,及状态码
   public static JsonData buildSuccess(Object data, int code) {
      return new JsonData(code, data, null);
   }

   public Integer getCode() {
      return code;
   }

   public void setCode(Integer code) {
      this.code = code;
   }

   public Object getData() {
      return data;
   }

   public void setData(Object data) {
      this.data = data;
   }

   public String getMsg() {
      return msg;
   }

   public void setMsg(String msg) {
      this.msg = msg;
   }

   @Override
   public String toString() {
      return "JsonData [code=" + code + ", data=" + data + ", msg=" + msg
            + "]";
   }

}

 

 

package com.gaven.userdemo.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;

/**
 * 微信配置类
 */
//@Configuration
//@PropertySource(value="classpath:application.properties")
    @Configuration
    @PropertySource(value = "classpath:application.properties")
public class WeChatConfig {


    /**
     * 公众号appid
     */
    @Value("${wxpay.appid}")
    private String appId;

    /**
     * 公众号秘钥
     */
    @Value("${wxpay.appsecret}")
    private String appsecret;


    /**
     * 开放平台appid
     */
    @Value("${wxopen.appid}")
    private String openAppid;

    /**
     * 开放平台appsecret
     */
    @Value("${wxopen.appsecret}")
    private String openAppsecret;


    /**
     * 开放平台回调url
     */
    @Value("${wxopen.redirect_url}")
    private String openRedirectUrl;


    /**
     * 微信开放平台二维码连接 通过%s代替参数
     */
    private final static String OPEN_QRCODE_URL= 
  "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s&response_type=code&scope=snsapi_login&state=%s#wechat_redirect";


    public static String getOpenQrcodeUrl() {
        return OPEN_QRCODE_URL;
    }

    public String getOpenAppid() {
        return openAppid;
    }

  stter和getter的方法省略
 
}

配置文件的测试

微信开放平台————拼接获取扫码地址(1)_第4张图片

拼接url

@GetMapping("/login_url")
    public JsonData loginUrl(@RequestParam (value = "access_page",required = true)String accessPage) throws Exception {

    String redirectUrl = weChatConfig.getOpenRedirectUrl(); //获取开放平台重定向地址

    String callbackUrl = URLEncoder.encode(redirectUrl,"GBK"); //进行编码
/**
 *
 * private final static String OPEN_QRCODE_URL=
 *       "https://open.weixin.qq.com/connect/qrconnect?appid=%s&redirect_uri=%s
 *       &response_type=code&scope=snsapi_login&state=%s#wechat_redirect";
 *       通过%s通过字符串格式替换函数进行替换
 *       (被格式话替换的参数,第一个参数,第二个......)
 *
 */
    String qrcodeUrl = String.format(weChatConfig.getOpenQrcodeUrl(),weChatConfig.getOpenAppid(),callbackUrl,accessPage);

    return JsonData.buildSuccess(qrcodeUrl);
}

 

 

微信开放平台————拼接获取扫码地址(1)_第5张图片

微信开放平台————拼接获取扫码地址(1)_第6张图片

之后就会回调到这里配置的地址 必须和第三方应用中配置的回调地址一致

微信开放平台————拼接获取扫码地址(1)_第7张图片

 

 

 

以上操作的官方文档:

https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1419316505&token=a481b68bccf8fa4f2b4a6e1c7b5281338eb9c60e&lang=zh_CN

 请求CODE

 第三方使用网站应用授权登录前注意已获取相应网页授权作用域(scope=snsapi_login),则可以通过在PC端打开以下链接:
https://open.weixin.qq.com/connect/qrconnect?appid=APPID&redirect_uri=REDIRECT_URI&response_type=code&scope=SCOPE&state=STATE#wechat_redirect

微信开放平台————拼接获取扫码地址(1)_第8张图片

返回说明

用户允许授权后,将会重定向到redirect_uri的网址上(要与自己第三方平台配置的一致),并且带上code和state参数

redirect_uri?code=CODE&state=STATE

微信开放平台————拼接获取扫码地址(1)_第9张图片

 

 

 

 

  1. 获取扫码的url
  2.  

 

 

 

 

 

你可能感兴趣的:(WeChat,springboot2)