1. 程式人生 > >微信小程式獲取UnionID機制和出現的問題

微信小程式獲取UnionID機制和出現的問題

前段時間做了一個小程式的專案,在小程式支付的時候出現了一個問題,導致小程式稽核不通過,稽核不通過的原因說是虛擬支付,出現這個問題的原因是因為微信小程式的支付IOS是不能支付的,所以就不能通過,這個時候我們就出了一套方案就是在小程式中IOS使用者是不能進行支付產品我們引導IOS使用者在微信公眾號中去支付購買我們的產品,這就需要微信公眾號和小程式進行互通,這個時候就需要一個微信的標識,openid肯定是無法做到的,那麼這個時候我們就需要 UnionID 機制,這個UnionID 機制可以讓微信公眾號的使用者和小程式的使用者進行互通,也就是唯一的標識,現在我們來看下小程式獲取的方法,請大家觀看小程式api文件:

https://blog.csdn.net/qq_41971087/article/details/82466647,首先說一下,必須要綁定了開發者帳號的小程式才能有UnionID的使用。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

在這裡插入圖片描述

在這個3種獲取UnionID中,最好是選第一種,從解密的資料中獲取UnionID,這樣是最保險的,不會出現問題, 博主先開始是選的後面的方法去獲取UnionID,然後出現了問題,獲取UnionID的時候,新使用者沒有去關注我的公眾號,那麼是這個使用者是沒有UnionID,但我獲取的時候出現了null的錯誤,後來我就用第一種方法去獲取,第一中方法的意思是,只有這個小程式在綁定了開發者帳號的就可以獲取到UnionID,這樣是沒有問題的,下面是JAVA程式碼,如果可以的話,大家可以看我的微信小程式授權登入的文章就可以看到:

https://blog.csdn.net/qq_41971087/article/details/82630612

微信小程式第一種方法獲取UnionID:

  String decrypts=AesCbcUtil.decrypt(encryptedData,sessionkey,iv,"utf-8");//解密
                System.out.println(decrypts+"解密的資料:--->");
                JSONObject jsonsd = JSONObject.fromObject(decrypts);
               /* String jsonsds=jsonsd.get("avatarUrl").toString();*/
             if(jsonsd !=null){
               JSONObject jsons = JSONObject.fromObject(decrypts);
               if(user ==null){
                  user = new User();
                  /* String nickName=jsons.get("nickName").toString(); //使用者暱稱
*/                 user.setNickname(jsons.get("nickName").toString());
                   user.setAvatarUrl(jsons.get("avatarUrl").toString()); //頭像
                   user.setCreateTime(new Date());
                   user.setGender(jsons.get("gender").toString());//性別
                   String path  =  Httprequests.getRemoteIP(request);
                   user.setLast_login_ip(path);  //ip
                   user.setOpenid(openid);
                   user.setSessionKey(sessionkey); //sessionkey
                   user.setUnionid(jsons.get("unionid").toString()); //unionid 在解密的資料中拿到unionid ,如果保證程式碼的安全性可以去判斷是否為null
                   String token = Httprequests.getPamens(32); //自己生成的token
                   System.out.print(token); 
                   user.setThirdSession(token);
                   user.setCity(jsons.get("city").toString()); //城市
                   user.setProvince(jsons.get("province").toString());//省份
                   user.setCountry(jsons.get("country").toString()); //國家
                   int index= apiAuthService.insert(user);

其他方法獲取UnionID:

        	Map<String,Object> map  =new HashMap<String, Object>();
        	String sendGet=apiAuthService.loginByWeixin(code);
        	//拿到小程式頁面傳過來的code呼叫小程式登陸的介面引數: appid,,appservice,cod,grant_type 獲取到使用者openid和session_key,當然使用者關注了公眾號就可以獲取到unionID
            JSONObject json = JSONObject.fromObject(sendGet);
            System.out.println("返回過來的json資料:"+json.toString());
            String sessionkey=json.get("session_key").toString(); //會話祕鑰
            String object = json.get("unionID").toString(); //這裡如果使用者直接進入小程式的話就會出現錯誤,就算你判斷了,但是獲取不到unionID那麼就不能完成以下的業務操作,所以還是用第一種,從解密的資料中獲取
            System.out.println(sessionkey+"---->:session_key");

好了,這樣就可以獲取到unionID,希望能幫助到大家,有問題可以在下方評論,我會及時回覆