有赞新零售社区

发帖
API使用问题»请教关于用户积分数据打通的问题

请教关于用户积分数据打通的问题

72ff43951d55 2018-07-19 3864 浏览 8 评论 | 只看楼主 [打印]
需求: 1. 同步公司系统用户到有赞(已完成)
        YZClient client = new DefaultYZClient(new Token(YouzanyunUtil.TOKEN)); //new Sign(appKey, appSecret)
        YouzanScrmCustomerCreateParams youzanScrmCustomerCreateParams = new YouzanScrmCustomerCreateParams();
        youzanScrmCustomerCreateParams.setMobile("188167899xx");
        youzanScrmCustomerCreateParams.setCustomerCreate("{\"name\":\"JJBB1\",\"gender\":1,\"birthday\":\"2017-01-01\",\"remark\":\"OK\",\"contact_address\":{\"area_code\":210224,\"address\":\"猴子1\"}}");
        YouzanScrmCustomerCreate youzanScrmCustomerCreate = new YouzanScrmCustomerCreate();
        youzanScrmCustomerCreate.setAPIParams(youzanScrmCustomerCreateParams);
        YouzanScrmCustomerCreateResult result = client.invoke(youzanScrmCustomerCreate);




2. 同步公司系统用户的积分到有赞(已完成)
        YZClient client = new DefaultYZClient(new Token(YouzanyunUtil.TOKEN)); //new Sign(appKey, appSecret)
        YouzanCrmCustomerPointsSyncParams youzanCrmCustomerPointsSyncParams = new YouzanCrmCustomerPointsSyncParams();
        youzanCrmCustomerPointsSyncParams.setPoints(6001L);
        youzanCrmCustomerPointsSyncParams.setReason("同步积分");
        youzanCrmCustomerPointsSyncParams.setMobile("188167899xx");
        YouzanCrmCustomerPointsSync youzanCrmCustomerPointsSync = new YouzanCrmCustomerPointsSync();
        youzanCrmCustomerPointsSync.setAPIParams(youzanCrmCustomerPointsSyncParams);
        YouzanCrmCustomerPointsSyncResult result = client.invoke(youzanCrmCustomerPointsSync);






3. 在app中嵌入有赞商城页面, 跳转到有赞商城页面时,自动登录并保存登录状态(已完成)
    下面这个接口写在java后端, app中调用这个接口获得token及cookie信息保存状态


        MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
        params.add("kdt_id", "41150775");
        params.add("client_id", YouzanyunUtil.CLIENT_ID);
        params.add("client_secret", YouzanyunUtil.CLIENT_SECRET);
        params.add("nick_name", user.getNickName());
        params.add("telephone", user.getMobile());
        params.add("open_user_id", user.getUserId());
        return restUtil.send("https://uic.youzan.com/sso/open/login", params);




问题:
      上述第3步跳转到有赞商城时,用积分兑换商品提示积分不足。我用下面这个积分能获取到同步过去的积分信息,积分是正确的
        YZClient client = new DefaultYZClient(new Token(YouzanyunUtil.TOKEN)); //new Sign(appKey, appSecret)
        YouzanCrmFansPointsGetParams youzanCrmFansPointsGetParams = new YouzanCrmFansPointsGetParams();
        youzanCrmFansPointsGetParams.setMobile("188167899xx");
        YouzanCrmFansPointsGet youzanCrmFansPointsGet = new YouzanCrmFansPointsGet();
        youzanCrmFansPointsGet.setAPIParams(youzanCrmFansPointsGetParams);
        YouzanCrmFansPointsGetResult result = client.invoke(youzanCrmFansPointsGet);




如果我在微信里直接点击有赞商城链接跳转过去,使用手机号登录,在个人中心能查看到积分信息,能正常兑换商品


咨询客服得到的答复说是, app中打开的商城, 和在微信中打开的商城使用的不是同一套用户系统。需要将二者打通。


我在有赞云控制台--->app开店设置   里找到个绑定有赞账号的选项, 勾上了。 这个后面有链接, 点了几次结果跳转到这个页面了https://www.youzanyun.com/docs


看得有点疑惑, 我从app跳转到商城页面,要使用第2步同步的积分兑换商品。这中间有什么操作漏掉了?麻烦有赞的技术大佬帮忙解答下:L 在这卡两天了, 本来想打电话咨询来着, 客服说电话技术支持不对外:sleepy:












































用手机打开
收藏 ··· 回复
    第2步操同步积分时,是给手机号同步的积分。而App用户是在第3步操作中,通过 open_user_id 创建的用户。open_user_id 和手机帐号是不同的用户体系,其实相当于2个不同的用户。有2种解决办法:1.调用积分接口直接给 open_user_id 加积分,具体方案可以看https://www.youzanyun.com/docs/guide/3400/3507 ;2.有赞云控制台--->app开店设置,开启绑定有赞账号的选项后,请看示意图,需要在App中的订单列表操作绑定手机帐号,那么这个手机帐号的积分就可以合并到App用户上

      72ff43951d55 青铜   2018-07-19 | 只看该作者
      您好, 之前我也试过直接全量同步积分到有赞,但提示open_user_id不存在
      1. 调用登录接口将用户信息同步到有赞商城
                      MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
                      params.add("kdt_id", "41150775");
                      params.add("client_id", YouzanyunUtil.CLIENT_ID);
                      params.add("client_secret", YouzanyunUtil.CLIENT_SECRET);
                      params.add("nick_name", user.getNickName());
                      params.add("telephone", user.getMobile());
                      params.add("open_user_id", user.getUserId());   // userId: 6a225264aaa84e8391d71d9b11614ba3
                      return restUtil.send("https://uic.youzan.com/sso/open/login", params);

      2. 调用全量同步积分接口同步积分
                      YZClient client = new DefaultYZClient(new Token(YouzanyunUtil.TOKEN)); //new Sign(appKey, appSecret)
                      YouzanCrmCustomerPointsSyncParams youzanCrmCustomerPointsSyncParams = new YouzanCrmCustomerPointsSyncParams();
                      youzanCrmCustomerPointsSyncParams.setPoints((long)user.getPoint());
                      youzanCrmCustomerPointsSyncParams.setReason(YouzanyunUtil.SYNC_POINT_DESC);
                      youzanCrmCustomerPointsSyncParams.setOpenUserId(user.getUserId());
                      YouzanCrmCustomerPointsSync youzanCrmCustomerPointsSync = new YouzanCrmCustomerPointsSync();
                      youzanCrmCustomerPointsSync.setAPIParams(youzanCrmCustomerPointsSyncParams);
                      YouzanCrmCustomerPointsSyncResult result = client.invoke(youzanCrmCustomerPointsSync);


      第2步返回信息:
           ErrorResponse{code='141503104', msg='不存在该openUserId'}
           第2步的token我是在“有赞开放API调试工具”中拿的测试token










        72ff43951d55 青铜   2018-07-19 | 只看该作者
        有赞-阿星 发表于 2018-7-18 19:30
        第2步操同步积分时,是给手机号同步的积分。而App用户是在第3步操作中,通过 open_user_id 创建的用户。ope ...


        老大明天看到回复下:L

          72ff43951d55 青铜   2018-07-19 | 只看该作者
          我有可能找着原因了
          调用login接口同步用户的时候传的open_user_id, 在商城叫fans_id, 但fans_id只支持long

            72ff43951d55 青铜   2018-07-19 | 只看该作者
            还是不行, 我调用这个接口可以查到自己有积分
                            YZClient client = new DefaultYZClient(new Token(YouzanyunUtil.TOKEN)); //new Sign(appKey, appSecret)
                            YouzanCrmFansPointsGetParams youzanCrmFansPointsGetParams = new YouzanCrmFansPointsGetParams();
                            youzanCrmFansPointsGetParams.setFansId(Long.parseLong(user.getUserId()));;

                            YouzanCrmFansPointsGet youzanCrmFansPointsGet = new YouzanCrmFansPointsGet();
                            youzanCrmFansPointsGet.setAPIParams(youzanCrmFansPointsGetParams);
                            YouzanCrmFansPointsGetResult result = client.invoke(youzanCrmFansPointsGet);

            使用以下参数调用login接口登录
                           MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
                            params.add("kdt_id", "41150775");
                            params.add("client_id", YouzanyunUtil.CLIENT_ID);
                            params.add("client_secret", YouzanyunUtil.CLIENT_SECRET);
                            params.add("nick_name", user.getNickName());
                            params.add("telephone", user.getMobile());
                            params.add("open_user_id", user.getUserId());
                            return restUtil.send("https://uic.youzan.com/sso/open/login", params);
            但支付的时候仍然提示积分不足

              72ff43951d55 发表于 2018-7-18 22:04
              您好, 之前我也试过直接全量同步积分到有赞,但提示open_user_id不存在
              1. 调用登录接口将用户信息同步到 ...


              第2步的token我是在“有赞开放API调试工具”中拿的测试token——问题就出在这里,调用积分接口不能从测试工具拿token,生成调用积分接口token的client_id必须与调用登录接口使用的client_id一致,否则就会报错找不到用户,请按应用类型用你们自己的client_id去生成token:https://www.youzanyun.com/docs/guide/3399/3404

                72ff43951d55 青铜   2018-07-19 | 只看该作者
                我之前有想到这一点, 所以调用下面的接口获取token
                MultiValueMap<String, String> params= new LinkedMultiValueMap<String, String>();
                                params.add("client_id", YouzanyunUtil.CLIENT_ID);
                                params.add("client_secret", YouzanyunUtil.CLIENT_SECRET);
                                params.add("kdt_id", "41150775");
                                return restUtil.send("https://uic.youzan.com/sso/open/initToken", params);

                再使用获得的token去同步积分
                YZClient client = new DefaultYZClient(new Token("上面获取到的token")); //new Sign(appKey, appSecret)
                                YouzanCrmCustomerPointsSyncParams youzanCrmCustomerPointsSyncParams = new YouzanCrmCustomerPointsSyncParams();
                                youzanCrmCustomerPointsSyncParams.setPoints((long)user.getPoint());
                                youzanCrmCustomerPointsSyncParams.setReason(YouzanyunUtil.SYNC_POINT_DESC);
                                youzanCrmCustomerPointsSyncParams.setOpenUseId(user.getUserId());
                                YouzanCrmCustomerPointsSync youzanCrmCustomerPointsSync = new YouzanCrmCustomerPointsSync();
                                youzanCrmCustomerPointsSync.setAPIParams(youzanCrmCustomerPointsSyncParams);
                                YouzanCrmCustomerPointsSyncResult result = client.invoke(youzanCrmCustomerPointsSync);
                                LOG.info(JSONObject.toJSONString(result));

                返回错误, 无效参数
                ErrorResponse{code='141500101', msg='invalid params'}

                  72ff43951d55 发表于 2018-7-19 10:28
                  我之前有想到这一点, 所以调用下面的接口获取token
                  MultiValueMap params= new LinkedMultiValueMap();
                     ...


                  调用积分接口的token,不是用login接口或者initToken接口拿到的那个token,必须用店铺token去调用,店铺token的生成方法,请根据应用类型去生成,具体看这里的文档:https://www.youzanyun.com/docs/guide/3399/3404

                    1跳至
                    您需要登录后才可以回帖 登录 | 立即注册

                    本版积分规则

                    复制链接
                    新浪微博
                    QQ空间
                    微信扫码
                    • 回复

                    • 评分

                    客服工作时间是9:00-18:00,客服妹子当前不在线,若不能及时回复请谅解。试试右上角的搜索吧,论坛有丰富的经验贴、公告贴,相信一定能够帮到您~

                    复制成功