天天看點

微信小程式擷取openid的兩種方式

這篇文章是關于擷取openid的兩種方式,自己在學着用微信小程式來寫一個小東西玩

首先我們要到小程式官網擷取到自己的appid和Appsecret 如圖

微信小程式擷取openid的兩種方式

第一種:直接在微信小程式中擷取,不需要通過背景

 // 登入

    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有問題。

自己太菜了,如果看不懂的話就去找大佬寫的看看。

繼續閱讀