class WxMaUserServiceImpl implements WxMaUserService {

  @Override
  public void setUserStorage(Map<String, String> kvMap, String sessionKey, String openid) throws WxErrorException {
    final WxMaConfig config = this.service.getWxMaConfig();
    JsonObject param = new JsonObject();
    JsonArray array = new JsonArray();
    for (Map.Entry<String, String> e : kvMap.entrySet()) {
      JsonObject jsonObject = new JsonObject();
      jsonObject.addProperty("key", e.getKey());
      jsonObject.addProperty("value", e.getValue());
      array.add(jsonObject);
    }
    param.add("kv_list", array);
    String params = param.toString();
    String signature = SignUtils.createHmacSha256Sign(params, sessionKey);
    String url = String.format("https://api.weixin.qq.com/wxa/set_user_storage" +
        "?appid=%s&signature=%s&openid=%s&sig_method=%s",
      config.getAppid(), signature, openid, "hmac_sha256");
    String result = this.service.post(url, params);
    WxError error = WxError.fromJson(result);
    if (error.getErrorCode() != 0) {
      throw new WxErrorException(error);
    }
  }

  public  WxMaUserServiceImpl(WxMaService service);

}