Hay un parámetro de dirección de devolución de llamada en el enlace de autorización de OAuth:
https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https://www.baidu.com?platform=jiaobuchong&name=jack&state=&scope=ADS_MANAGEMENT
El parámetro de dirección de devolución de llamada en este enlace de autorización es:
https://www.baidu.com?platform=jiaobuchong&name=jack
Después de la autorización, la dirección se convierte en:
https://www.baidu.com?platform=jiaobuchong&auth_code=xxxxxxx
Falta el parámetro name = jack. La solución es platform=jiaobuchong&auth_code=xxxxxxx
ejecutar URLEncoder en el parámetro de consulta en la dirección de devolución de llamada . Como:
public class UrlencoderDemo {
public static void main(String[] args) throws Exception {
String url = "https://www.baidu.com?platform=jiaobuchong&name=jack";
System.out.println(getEncodeQueryUrl(url));
System.out.println(getEncodeQueryUrl("https://www.baidu.com?"));
System.out.println(getEncodeQueryUrl("https://www.baidu.com"));
System.out.println(getEncodeQueryUrl("https://www.baidu.com/"));
}
public static String getEncodeQueryUrl(String url) throws UnsupportedEncodingException {
if (StringUtils.isBlank(url)) {
throw new IllegalArgumentException("url is blank");
}
int pos = url.lastIndexOf("?");
if (pos > -1 && (pos < (url.length() - 1))) {
return url.substring(0, pos + 1) + URLEncoder.encode(url.substring(pos + 1), "UTF-8");
}
return url;
}
}
Salida:
https://www.baidu.com?platform%3Djiaobuchong%26name%3Djack
https://www.baidu.com?
https://www.baidu.com
https://www.baidu.com/
El enlace de autorización se vuelve correcto así:
https://developers.e.qq.com/oauth/authorize?client_id=123456&redirect_uri=https://www.baidu.com?platform%3Djiaobuchong%26name%3Djack&state=&scope=ADS_MANAGEMENT
Referencia: Cuando la
devolución de llamada de autorización de WeChat, faltan los parámetros originales en la dirección de devolución de llamada .
Problema de solicitud de múltiples parámetros de la URL de la interfaz de autorización de desarrollo de WeChat
. Los caracteres especiales escapan de la codificación en la URL de la URL