java 微信小程序code获取openid的操作

2025-05-29 0 57

最近有个小程序的项目 需要前端传code 后端获取openid 这里是纯后端

在这里记录一下吧

主要代码:

这里是获取openid的实现类

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48
import com.alibaba.fastjson.JSON;

import com.alibaba.fastjson.JSONObject;

import com.moszk.frame.basic.utils.HttpRequest;

import org.springframework.web.bind.annotation.RequestMapping;

import org.springframework.web.bind.annotation.RequestMethod;

import org.springframework.web.bind.annotation.ResponseBody;

import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;

import java.util.Map;

@RestController

public class WeiXinSubmitController {

@ResponseBody

@RequestMapping(value = "/wx/decodeUserInfo", method = RequestMethod.GET)

public Map decodeUserInfo(String code) {

System.out.println(code);

Map map = new HashMap();

//登录凭证不能为空

if (code == null || code.length() == 0) {

map.put("status", 0);

map.put("msg", "code 不能为空");

return map;

}

//小程序唯一标识 (在微信小程序管理后台获取)

String wxspAppid = "***********";

//小程序的 app secret (在微信小程序管理后台获取)

String wxspSecret = "*********************";

//授权(必填)

String grant_type = "authorization_code";

//https://api.weixin.qq.com/sns/jscode2session?appid=APPID&secret=SECRET&js_code=JSCODE&grant_type=authorization_code

//1、向微信服务器 使用登录凭证 code 获取 session_key 和 openid

//请求参数

String params = "appid=" + wxspAppid + "&secret=" + wxspSecret + "&js_code=" + code + "&grant_type=" + grant_type;

//发送请求

String sr = HttpRequest.sendGet("https://api.weixin.qq.com/sns/jscode2session", params);

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

//解析相应内容(转换成json对象)

JSONObject json =JSON.parseObject(sr);

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

//获取会话密钥(session_key)json.get("session_key").toString();

String session_key = json.get("session_key").toString();

//用户的唯一标识(openid)

String openid = (String) json.get("openid");

map.put("session_key",session_key);

map.put("openid",openid);

return map;

}

}

这里还需要一个工具类 用来发送请求的

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

138

139

140

141

142

143

144

145

146

147

148

149

150

151

152

153

154

155

156

157

158

159

160

161
import java.io.*;

import java.net.URL;

import java.net.URLConnection;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

import java.text.SimpleDateFormat;

import java.util.*;

public class HttpRequest {

/**

* 向指定URL发送GET方法的请求

*

* @param url

* 发送请求的URL

* @param param

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

* @return URL 所代表远程资源的响应结果

*/

public static String sendGet(String url, String param) {

String result = "";

BufferedReader in = null;

try {

String urlNameString = url + "?" + param;

URL realUrl = new URL(urlNameString);

// 打开和URL之间的连接

URLConnection connection = realUrl.openConnection();

// 设置通用的请求属性

connection.setRequestProperty("accept", "*/*");

connection.setRequestProperty("connection", "Keep-Alive");

connection.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

// 建立实际的连接

connection.connect();

// 获取所有响应头字段

Map<String, List<String>> map = connection.getHeaderFields();

// 遍历所有的响应头字段

for (String key : map.keySet()) {

System.out.println(key + "--->" + map.get(key));

}

// 定义 BufferedReader输入流来读取URL的响应

in = new BufferedReader(new InputStreamReader(

connection.getInputStream()));

String line;

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

result += line;

}

} catch (Exception e) {

System.out.println("发送GET请求出现异常!" + e);

e.printStackTrace();

}

// 使用finally块来关闭输入流

finally {

try {

if (in != null) {

in.close();

}

} catch (Exception e2) {

e2.printStackTrace();

}

}

return result;

}

/**

* 向指定 URL 发送POST方法的请求

*

* @param url

* 发送请求的 URL

* @param param

* 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。

* @return 所代表远程资源的响应结果

*/

public static String sendPost(String url, String param, String keyValue) {

PrintWriter out = null;

BufferedReader in = null;

String result = "";

try {

URL realUrl = new URL(url);

// 打开和URL之间的连接

URLConnection conn = realUrl.openConnection();

// 设置通用的请求属性

conn.setRequestProperty("accept", "*/*");

conn.setRequestProperty("connection", "Keep-Alive");

conn.setRequestProperty("api-key", keyValue);

conn.setRequestProperty("user-agent",

"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

conn.setRequestProperty("Accept-Charset", "UTF-8");

// 发送POST请求必须设置如下两行

conn.setDoOutput(true);

conn.setDoInput(true);

// 获取URLConnection对象对应的输出流

//out = new PrintWriter(conn.getOutputStream());

out = new PrintWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));

// 发送请求参数

out.print(param);

// flush输出流的缓冲

out.flush();

// 定义BufferedReader输入流来读取URL的响应

in = new BufferedReader(

new InputStreamReader(conn.getInputStream(),"UTF-8"));

String line;

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

System.out.println(line);

result += line;

}

} catch (Exception e) {

System.out.println("发送 POST 请求出现异常!"+e);

e.printStackTrace();

}

//使用finally块来关闭输出流、输入流

finally{

try{

if(out!=null){

out.close();

}

if(in!=null){

in.close();

}

}

catch(IOException ex){

ex.printStackTrace();

}

}

return result;

}

public static String generateOrderId(){

String keyup_prefix=new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());

String keyup_append= String.valueOf(new Random().nextInt(899999)+100000);

String pay_orderid=keyup_prefix+keyup_append;//订单号

return pay_orderid;

}

public static String generateTime(){

return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());

}

public static String md5(String str) throws NoSuchElementException {

try {

MessageDigest md = MessageDigest.getInstance("MD5");

md.update(str.getBytes("UTF-8"));

byte[] byteDigest = md.digest();

int i;

//字符数组转换成字符串

StringBuffer buf = new StringBuffer("");

for (int offset = 0; offset < byteDigest.length; offset++) {

i = byteDigest[offset];

if (i < 0)

i += 256;

if (i < 16)

buf.append("0");

buf.append(Integer.toHexString(i));

}

// 32位加密

return buf.toString();//toUpperCase

// 16位的加密

//return buf.toString().substring(8, 24).toUpperCase();

} catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {

e.printStackTrace();

return null;

}

}

}

如果一切顺利的话 传过来code就会返回open_id和session_key

中间可能会有报错 主要原因在appid和appsecret这,前端需要配置appid才行,总的来说还是很简单的 微信支付才是大坑

以上为个人经验,希望能给大家一个参考,也希望大家多多支持快网idc。如有错误或未考虑完全的地方,望不吝赐教。

原文链接:https://blog.csdn.net/qq_45136253/article/details/115568295

收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

快网idc优惠网 建站教程 java 微信小程序code获取openid的操作 https://www.kuaiidc.com/108141.html

相关文章

发表评论
暂无评论