微信小程式獲取UnionID機制和出現的問題
前段時間做了一個小程式的專案,在小程式支付的時候出現了一個問題,導致小程式稽核不通過,稽核不通過的原因說是虛擬支付,出現這個問題的原因是因為微信小程式的支付IOS是不能支付的,所以就不能通過,這個時候我們就出了一套方案就是在小程式中IOS使用者是不能進行支付產品我們引導IOS使用者在微信公眾號中去支付購買我們的產品,這就需要微信公眾號和小程式進行互通,這個時候就需要一個微信的標識,openid肯定是無法做到的,那麼這個時候我們就需要 UnionID 機制,這個UnionID 機制可以讓微信公眾號的使用者和小程式的使用者進行互通,也就是唯一的標識,現在我們來看下小程式獲取的方法,請大家觀看小程式api文件:
在這個3種獲取UnionID中,最好是選第一種,從解密的資料中獲取UnionID,這樣是最保險的,不會出現問題,
博主先開始是選的後面的方法去獲取UnionID,然後出現了問題,獲取UnionID的時候,新使用者沒有去關注我的公眾號,那麼是這個使用者是沒有UnionID,但我獲取的時候出現了null的錯誤,後來我就用第一種方法去獲取,第一中方法的意思是,只有這個小程式在綁定了開發者帳號的就可以獲取到UnionID,這樣是沒有問題的,下面是JAVA程式碼,如果可以的話,大家可以看我的微信小程式授權登入的文章就可以看到:
微信小程式第一種方法獲取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,希望能幫助到大家,有問題可以在下方評論,我會及時回覆