微信开发 Java SDK微信公众支付(获取openid)

0

微信开发 Java SDK微信公众支付(获取openid)

微信开发 Java SDK 微信公众支付(获取openid)

第一步:用户同意授权,获取code

在微信公众平台中,需要先让用户同意授权,然后才能获取到 openid。这个过程涉及两个步骤:

1. 用户点击授权按钮:在你的微信公众号中,需要提供一个授权按钮,让用户可以点击它来同意授权。

2. 获取code:当用户点击授权按钮后,微信会跳转到一个授权页面。这个页面上会显示一个code,这个code是临时的,并且只在短时间内有效。

第二步:通过code换取网页授权access_token

使用得到的 code,可以向微信服务器请求一个网页授权 access_token。这一步骤涉及以下几个方面:

1. 请求地址:需要向微信服务器发送一个 GET 请求,请求地址是 ` 参数:需要传递以下几个参数:

* `appid`:你的微信公众号的 AppID。

* `secret`:你的微信公众号的 Secret。

* `code`:得到的 code。

* `grant_type`:固定值为 `authorization_code`。

3. 返回结果:如果请求成功,微信服务器会返回一个 JSON 对象,其中包含以下几个字段:

* `access_token`:网页授权 access_token。

* `expires_in`:access_token 的有效时间(单位:秒)。

* `refresh_token`:可以用来刷新 access_token 的 refresh_token。

第三步:刷新access_token

当 access_token 过期时,可以使用 refresh_token 来刷新 access_token。这个过程涉及以下几个方面:

1. 请求地址:需要向微信服务器发送一个 GET 请求,请求地址是 ` 参数:需要传递以下几个参数:

* `appid`:你的微信公众号的 AppID。

* `grant_type`:固定值为 `refresh_token`。

3. 返回结果:如果请求成功,微信服务器会返回一个 JSON 对象,其中包含以下几个字段:

* `access_token`:刷新后的 access_token。

* `expires_in`:access_token 的有效时间(单位:秒)。

第四步:使用openid

当你得到 access_token 后,可以使用它来获取 openid。这个过程涉及以下几个方面:

1. 请求地址:需要向微信服务器发送一个 GET 请求,请求地址是 ` 参数:需要传递以下几个参数:

* `access_token`:得到的 access_token。

* `lang`:固定值为 `zh_CN`,表示返回结果使用简体中文。

3. 返回结果:如果请求成功,微信服务器会返回一个 JSON 对象,其中包含以下几个字段:

* `openid`:用户的 openid。

* `nickname`:用户的昵称。

* `sex`:用户的性别(0:未知、1:男、2:女)。

* `province`:用户所在省份。

* `city`:用户所在城市。

示例代码

以下是使用 Java SDK 的示例代码:

```javaimport java.io.BufferedReader;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

public class WeChatSDK {

public static void main(String[] args) throws Exception {

// 第一步:用户同意授权,获取code String code = getAuthorizationCode();

// 第二步:通过code换取网页授权access_token String accessToken = getAccessToken(code);

// 第三步:刷新access_token String refreshToken = refreshAccessToken(accessToken);

// 第四步:使用openid String openid = getUserInfo(accessToken);

}

private static String getAuthorizationCode() throws Exception {

URL url = new URL(" HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();

if (responseCode ==200) {

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString().split("=")[1];

} else {

throw new Exception("Failed to get authorization code");

}

}

private static String getAccessToken(String code) throws Exception {

URL url = new URL(" + code + "&grant_type=authorization_code");

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();

if (responseCode ==200) {

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString().split(""")[3];

} else {

throw new Exception("Failed to get access token");

}

}

private static String refreshAccessToken(String accessToken) throws Exception {

URL url = new URL(" HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();

if (responseCode ==200) {

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString().split(""")[3];

} else {

throw new Exception("Failed to refresh access token");

}

}

private static String getUserInfo(String accessToken) throws Exception {

URL url = new URL(" + accessToken + "&lang=zh_CN");

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("GET");

int responseCode = connection.getResponseCode();

if (responseCode ==200) {

BufferedReader reader = new BufferedReader(new InputStreamReader(connection.getInputStream()));

String line;

StringBuilder builder = new StringBuilder();

while ((line = reader.readLine()) != null) {

builder.append(line);

}

return builder.toString().split(""")[3];

} else {

throw new Exception("Failed to get user info");

}

}

}

```

以上是使用 Java SDK 的示例代码。需要注意的是,需要替换 `APPID` 和 `SECRET` 为你的微信公众号的 AppID 和 Secret。

支付微信支付

版权声明:除非特别标注,否则均为网络文章,侵权请联系站长删除。

上一篇 微信支付-扫码支付、公众号支付的开发

下一篇 5个最优秀的微信小程序UI组件库