前段时间做了一个小程序的项目,在小程序支付的时候出现了一个问题,导致小程序审核不通过,审核不通过的原因说是虚拟支付,出现这个问题的原因是因为微信小程序的支付IOS是不能支付的,所以就不能通过,这个时候我们就出了一套方案就是在小程序中IOS用户是不能进行支付产品我们引导IOS用户在微信公众号中去支付购买我们的产品,这就需要微信公众号和小程序进行互通,这个时候就需要一个微信的标识,openid肯定是无法做到的,那么这个时候我们就需要 UnionID 机制,这个UnionID 机制可以让微信公众号的用户和小程序的用户进行互通,也就是唯一的标识,现在我们来看下小程序获取的方法,请大家观看小程序api文档:
,首先说一下,必须要绑定了开发者帐号的小程序才能有UnionID的使用。
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html

微信小程序 ios支付 小程序ios支付解决方案_json

在这个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,希望能帮助到大家,有问题可以在下方评论,我会及时回复