/**
  * 创建临时二维码Ticket
  *
  * @param accessToken
  * @param expireSeconds 有效时间,单位:秒
  * @param qrID 二维码标识
  * @return
  * @throws IOException
  * @throws WechatExceprion
  */
 @Bizlet("createTempQRImage")
 public static WechatQRCodeModel createTempQRImage(
     String accessToken, long expireSeconds, int qrID) throws IOException, WechatExceprion {
   String uri = "https://api.weixin.qq.com/cgi-bin/qrcode/create";
   NameValuePair[] queryStr = new NameValuePair[1];
   queryStr[0] = new NameValuePair(IWechatConstants.KEY_ACCESS_TOKEN, accessToken);
   JSONObject jsonObj = new JSONObject();
   jsonObj.put("expire_secondes", expireSeconds);
   jsonObj.put("action_name", WechatQRCodeModel.QR_IMAGE_TEMPORARY);
   JSONObject obj = new JSONObject();
   obj.put("scene_id", qrID);
   JSONObject obj1 = new JSONObject();
   obj1.put("scene", obj);
   jsonObj.put("action_info", obj1);
   RequestEntity requestEntity =
       new StringRequestEntity(
           jsonObj.toJSONString(),
           IWechatConstants.CONTENT_TYPE,
           IWechatConstants.DEFAULT_CHARSET);
   String result = HttpExecuter.executePostAsString(uri, queryStr, requestEntity);
   String returnCode = JSONObject.parseObject(result).getString(IWechatConstants.ERROR_CODE);
   if (returnCode == null || IWechatConstants.RETURN_CODE_SUCCESS.equals(returnCode)) {
     return JSONObject.parseObject(result, WechatQRCodeModel.class);
   } else throw new WechatExceprion("[AccountOperations#createTempQRImage]" + result);
 }
 /**
  * 将长链接转成短链接
  *
  * @param accessToken
  * @param longUrl 长链接URL
  * @return short_url
  * @throws IOException
  * @throws WechatExceprion
  */
 @Bizlet("connection2Short")
 public static String connection2Short(String accessToken, String longUrl)
     throws IOException, WechatExceprion {
   String uri = "https://api.weixin.qq.com/cgi-bin/shorturl";
   NameValuePair[] queryStr = new NameValuePair[1];
   queryStr[0] = new NameValuePair(IWechatConstants.KEY_ACCESS_TOKEN, accessToken);
   JSONObject jsonObj = new JSONObject();
   jsonObj.put("long_url", longUrl);
   RequestEntity requestEntity =
       new StringRequestEntity(
           jsonObj.toJSONString(),
           IWechatConstants.CONTENT_TYPE,
           IWechatConstants.DEFAULT_CHARSET);
   String result = HttpExecuter.executePostAsString(uri, queryStr, requestEntity);
   String returnCode = JSONObject.parseObject(result).getString(IWechatConstants.ERROR_CODE);
   if (returnCode == null || IWechatConstants.RETURN_CODE_SUCCESS.equals(returnCode)) {
     return JSONObject.parseObject(result).getString("short_url");
   } else throw new WechatExceprion("[AccountOperations#connection2Short]" + result);
 }
 /**
  * 创建语义
  *
  * @param accessToken
  * @param queryStr 语义搜索串, 即用户输入的文本串
  * @param category 需要使用的服务类型,多个用“,”隔开,不能为空
  * @param city 城市名称
  * @param region 区域名称
  * @param appid 公众号唯一标识i
  * @param uid 用户唯一id(非开发者id),用户区分公众号下的不同用户(建议填入用户openid),
  *     如果为空,则无法使用上下文理解功能。appid和uid同时存在的情况下,才可以使用上下文理解功能。
  * @return
  * @throws IOException
  * @throws WechatExceprion
  */
 @Bizlet("createGrammer")
 public static WechatGrammer createGrammer(
     String accessToken, String queryStr, String category, String city, String appid, String uid)
     throws IOException, WechatExceprion {
   String uri = "https://api.weixin.qq.com/semantic/semproxy/search";
   NameValuePair[] apiQueryStr = new NameValuePair[1];
   apiQueryStr[0] = new NameValuePair("access_token", accessToken);
   JSONObject jsonObj = new JSONObject();
   jsonObj.put("query", queryStr);
   jsonObj.put("category", category);
   jsonObj.put("city", city);
   jsonObj.put("appid", appid);
   jsonObj.put("uid", uid);
   String postData = jsonObj.toString();
   RequestEntity requestEntity =
       new StringRequestEntity(
           postData, IWechatConstants.CONTENT_TYPE, IWechatConstants.DEFAULT_CHARSET);
   String result = HttpExecuter.executePostAsString(uri, apiQueryStr, requestEntity);
   String returnCode = JSONObject.parseObject(result).getString(IWechatConstants.ERROR_CODE);
   if (returnCode == null || IWechatConstants.RETURN_CODE_SUCCESS.equals(returnCode)) {
     return JSONObject.parseObject(result, WechatGrammer.class);
   } else throw new WechatExceprion("[AdvanceOperations#createGrammer]" + result);
 }
  /**
   * 通过Ticket换取二维码
   *
   * @param ticket
   * @return
   */
  @Bizlet("getQRImageByTicket")
  public static void getQRImageByTicket(String ticket, String savePath) {
    String uri = "https://mp.weixin.qq.com/cgi-bin/showqrcode";
    FileOutputStream out = null;
    try {
      // ticket = URLEncoder.encode(ticket, IOperationsConstants.DEFAULT_CHARSET);
      NameValuePair[] queryStr = new NameValuePair[1];
      queryStr[0] = new NameValuePair("ticket", ticket);
      byte[] datas = HttpExecuter.executeGet(uri, queryStr);
      File file = new File(savePath);
      out = new FileOutputStream(file);
      out.write(datas);
    } catch (UnsupportedEncodingException e) {
      e.printStackTrace();
    } catch (IOException e) {
      e.printStackTrace();
    } finally {
      try {
        if (out != null) out.close();
      } catch (Exception e2) {

      }
    }
  }