這篇文章是關于擷取openid的兩種方式,自己在學着用微信小程式來寫一個小東西玩
首先我們要到小程式官網擷取到自己的appid和Appsecret 如圖
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLiAzNfRHLGZkRGZkRfJ3bs92YsYTMfVmepNHL0kFVapmVXF2d5YlW1ljMMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zZuBnL1kTNxQTOzUTM4IDNwAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
第一種:直接在微信小程式中擷取,不需要通過背景
// 登入
wx.login({
success: res => {
// 發送 res.code 到背景換取 openId, sessionKey, unionId
const code = res.code;
// 設定appid
const appId = "。。。。。";
// const appid = res.appid;
//設定secret
const secret = "。。。。。";
wx.request({
url: 'https://api.weixin.qq.com/sns/jscode2session?appid=' + appId
+ '&secret=' + secret
+ '&js_code=' + code
+ '&grant_type=authorization_code',
data: {},
header: {
'content-type': 'json'
},
success: function (res) {
const openId = res.data.openid; //傳回openid
}
})
}
})
第一種就這樣了
第二種:通過背景發送來擷取openid
微信小程式傳code過去
public class WeiXinGetOpenid {
@Value("${wx.app.secret}")
private String secret;
@Value("${wx.app.appid}")
private String appid;
private String grant_type = "authorization_code";
/**
* 擷取openid
* @param code 微信小程式前台發送code
* @return
*/
public Map getOpenid(String code) {
Map resultMap = new HashMap();
try {
//拼接接口需要的參數
String params = "appid=" + appid + "&secret=" + secret + "&js_code=" + code + "&grant_type" + grant_type;
//小程式擷取openid的APi
String url = "https://api.weixin.qq.com/sns/jscode2session";
String s = HttpUtil.sendPost(url, params);
JSONObject object = JSON.parseObject(s);
System.out.println("傳回結果====="+object);
resultMap.put("data", object.get("openid"));
resultMap.put("code","200");
resultMap.put("msg","success");
} catch (Exception e) {
resultMap.put("code","201");
resultMap.put("msg","fail");
}
return resultMap;
}
}
第二種主要看傳回的object的資料,有可能報錯,我這裡沒有處理,
像這種的 {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: XhNBdzXBe-es50oa ]"}
應該是code有問題。
自己太菜了,如果看不懂的話就去找大佬寫的看看。