瀏覽代碼

#900 增加新增团购券、现金抵扣券、折扣券、兑换券以及普通优惠券的接口

IOMan 6 年之前
父節點
當前提交
6a2ff801f0
共有 19 個文件被更改,包括 537 次插入6 次删除
  1. 10 3
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java
  2. 8 3
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java
  3. 31 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java
  4. 13 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardCreateRequest.java
  5. 39 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCard.java
  6. 25 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCardCreateRequest.java
  7. 32 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java
  8. 25 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCardCreateRequest.java
  9. 33 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCard.java
  10. 26 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCardCreateRequest.java
  11. 32 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java
  12. 25 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCardCreateRequest.java
  13. 33 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCard.java
  14. 25 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCardCreateRequest.java
  15. 23 0
      weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCreateMessage.java
  16. 96 0
      weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java
  17. 14 0
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java
  18. 11 0
      weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java
  19. 36 0
      weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java

+ 10 - 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java

@@ -2,9 +2,7 @@ package me.chanjar.weixin.mp.api;
 
 import me.chanjar.weixin.common.bean.WxCardApiSignature;
 import me.chanjar.weixin.common.error.WxErrorException;
-import me.chanjar.weixin.mp.bean.card.WxMpCardLandingPageCreateRequest;
-import me.chanjar.weixin.mp.bean.card.WxMpCardLandingPageCreateResult;
-import me.chanjar.weixin.mp.bean.card.WxMpCardQrcodeCreateResult;
+import me.chanjar.weixin.mp.bean.card.*;
 import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
 
 /**
@@ -14,6 +12,7 @@ import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
  * @author yuanqixun 2018-08-29
  */
 public interface WxMpCardService {
+  String CARD_CREATE = "https://api.weixin.qq.com/card/create";
   String CARD_GET = "https://api.weixin.qq.com/card/get";
   String CARD_GET_TICKET = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?type=wx_card";
   String CARD_CODE_DECRYPT = "https://api.weixin.qq.com/card/code/decrypt";
@@ -143,6 +142,14 @@ public interface WxMpCardService {
   String addTestWhiteList(String openid) throws WxErrorException;
 
   /**
+   *
+   * @param cardCreateMessage
+   * @return
+   * @throws WxErrorException
+   */
+  WxMpCardCreateResult createCard(WxMpCardCreateMessage cardCreateMessage) throws WxErrorException;
+
+  /**
    * 创建卡券二维码
    *
    * @param cardId   卡券编号

+ 8 - 3
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java

@@ -3,6 +3,7 @@ package me.chanjar.weixin.mp.api.impl;
 import java.util.Arrays;
 import java.util.concurrent.locks.Lock;
 
+import me.chanjar.weixin.mp.bean.card.*;
 import org.apache.commons.lang3.StringUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -22,9 +23,6 @@ import me.chanjar.weixin.common.util.crypto.SHA1;
 import me.chanjar.weixin.common.util.http.SimpleGetRequestExecutor;
 import me.chanjar.weixin.mp.api.WxMpCardService;
 import me.chanjar.weixin.mp.api.WxMpService;
-import me.chanjar.weixin.mp.bean.card.WxMpCardLandingPageCreateRequest;
-import me.chanjar.weixin.mp.bean.card.WxMpCardLandingPageCreateResult;
-import me.chanjar.weixin.mp.bean.card.WxMpCardQrcodeCreateResult;
 import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
 import me.chanjar.weixin.mp.enums.TicketType;
 import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
@@ -265,6 +263,13 @@ public class WxMpCardServiceImpl implements WxMpCardService {
     return respone;
   }
 
+  @Override
+  public WxMpCardCreateResult createCard(WxMpCardCreateMessage cardCreateMessage) throws WxErrorException {
+
+    String response = this.wxMpService.post(CARD_CREATE, GSON.toJson(cardCreateMessage));
+    return WxMpCardCreateResult.fromJson(response);
+  }
+
   /**
    * 创建卡券二维码.
    */

+ 31 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java

@@ -0,0 +1,31 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class Card implements Serializable {
+
+  private static final long serialVersionUID = -3697110761983756780L;
+
+  /**
+   * 基本信息.
+   */
+  @SerializedName("base_info")
+  private BaseInfo baseInfo;
+
+  /**
+   * 创建优惠券特有的高级字段.
+   */
+  @SerializedName("advanced_info")
+  private AdvancedInfo advancedInfo;
+
+}

+ 13 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardCreateRequest.java

@@ -0,0 +1,13 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import lombok.Data;
+
+import java.io.Serializable;
+
+/**
+ * @Author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class CardCreateRequest implements Serializable {
+}

+ 39 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCard.java

@@ -0,0 +1,39 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public final class CashCard extends Card implements Serializable {
+
+  private static final long serialVersionUID = 6965491956462769745L;
+
+  /**
+   * 代金券专用,表示起用金额(单位为分),如果无起用门槛则填0
+   */
+  @SerializedName("least_cost")
+  private int leastCost;
+
+  /**
+   * 代金券专用,表示减免金额。(单位为分)
+   */
+  @SerializedName("reduce_cost")
+  private int reduceCost;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static CashCard fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, CashCard.class);
+  }
+}

+ 25 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCardCreateRequest.java

@@ -0,0 +1,25 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class CashCardCreateRequest extends CardCreateRequest implements Serializable {
+  @SerializedName("card_type")
+  private String cardType = "CASH";
+
+  private CashCard cash;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+}

+ 32 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java

@@ -0,0 +1,32 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public final class DiscountCard extends Card implements Serializable {
+
+  private static final long serialVersionUID = 1704610082472315077L;
+
+  /**
+   * 折扣券专用,表示打折额度(百分比)。填30就是七折。
+   */
+  private int discount;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static DiscountCard fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, DiscountCard.class);
+  }
+}

+ 25 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCardCreateRequest.java

@@ -0,0 +1,25 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class DiscountCardCreateRequest extends CardCreateRequest implements Serializable {
+  @SerializedName("card_type")
+  private String cardType = "DISCOUNT";
+
+  private DiscountCard discount;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+}

+ 33 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCard.java

@@ -0,0 +1,33 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public final class GeneralCard extends Card implements Serializable {
+
+  private static final long serialVersionUID = -1577656733441132585L;
+
+  /**
+   * 兑换券专用,填写兑换内容的名称。
+   */
+  @SerializedName("default_detail")
+  private String defaultDetail;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static GeneralCard fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, GeneralCard.class);
+  }
+}

+ 26 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCardCreateRequest.java

@@ -0,0 +1,26 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class GeneralCardCreateRequest extends CardCreateRequest implements Serializable {
+  @SerializedName("card_type")
+  private String cardType = "GENERAL_COUPON";
+
+  @SerializedName("general_coupon")
+  private GeneralCard generalCoupon;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+}

+ 32 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java

@@ -0,0 +1,32 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public final class GiftCard extends Card implements Serializable {
+
+  private static final long serialVersionUID = -6168739707511792266L;
+
+  /**
+   * 兑换券专用,填写兑换内容的名称。
+   */
+  private String gift;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static GiftCard fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, GiftCard.class);
+  }
+}

+ 25 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCardCreateRequest.java

@@ -0,0 +1,25 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class GiftCardCreateRequest extends CardCreateRequest implements Serializable {
+  @SerializedName("card_type")
+  private String cardType = "GIFT";
+
+  private GiftCard gift;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+}

+ 33 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCard.java

@@ -0,0 +1,33 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public final class GrouponCard extends Card implements Serializable {
+
+  private static final long serialVersionUID = 3221312561666697005L;
+
+  /**
+   * 团购券专用,团购详情
+   */
+  @SerializedName("deal_detail")
+  private String dealDetail;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static GrouponCard fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, GrouponCard.class);
+  }
+}

+ 25 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCardCreateRequest.java

@@ -0,0 +1,25 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * .
+ * @author leeis
+ * @Date 2018/12/29
+ */
+@Data
+public class GrouponCardCreateRequest extends CardCreateRequest implements Serializable {
+  @SerializedName("card_type")
+  private String cardType = "GROUPON";
+
+  private GrouponCard groupon;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+}

+ 23 - 0
weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCreateMessage.java

@@ -0,0 +1,23 @@
+package me.chanjar.weixin.mp.bean.card;
+
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import me.chanjar.weixin.mp.util.json.WxMpGsonBuilder;
+
+import java.io.Serializable;
+
+@Data
+public final class WxMpCardCreateMessage implements Serializable {
+
+  @SerializedName("card")
+  private CardCreateRequest cardCreateRequest;
+
+  @Override
+  public String toString() {
+    return WxMpGsonBuilder.create().toJson(this);
+  }
+
+  public static WxMpCardCreateMessage fromJson(String json) {
+    return WxMpGsonBuilder.create().fromJson(json, WxMpCardCreateMessage.class);
+  }
+}

+ 96 - 0
weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java

@@ -2,8 +2,10 @@ package me.chanjar.weixin.mp.api.impl;
 
 import com.google.inject.Inject;
 import me.chanjar.weixin.common.bean.WxCardApiSignature;
+import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.api.test.ApiTestModule;
+import me.chanjar.weixin.mp.bean.card.*;
 import me.chanjar.weixin.mp.bean.result.WxMpCardResult;
 import org.testng.annotations.*;
 
@@ -100,4 +102,98 @@ public class WxMpCardServiceImplTest {
     assertNotNull(result);
     System.out.println(result);
   }
+
+  @Test
+  public void testCreateGrouponCard() throws WxErrorException {
+
+    BaseInfo base = new BaseInfo();
+    base.setLogoUrl("http://mmbiz.qpic.cn/mmbiz/iaL1LJM1mF9aRKPZJkmG8xXhiaHqkKSVMMWeN3hLut7X7hicFNjakmxibMLGWpXrEXB33367o7zHN0CwngnQY7zb7g/0");
+    base.setBrandName("测试优惠券");
+    base.setCodeType("CODE_TYPE_QRCODE");
+    base.setTitle("测试标题");
+    base.setColor("Color010");
+    base.setNotice("测试Notice");
+    base.setServicePhone("020-88888888");
+    base.setDescription("不可与其他优惠同享\\n如需团购券发票,请在消费时向商户提出\\n店内均可使用,仅限堂食");
+    DateInfo info = new DateInfo();
+    info.setType("DATE_TYPE_FIX_TERM");
+    info.setFixedBeginTerm(0);
+    info.setFixedTerm(30);
+    base.setDateInfo(info);
+    Sku sku = new Sku();
+    sku.setQuantity(100);
+    base.setSku(sku);
+    base.setGetLimit(1);
+    base.setCanShare(true);
+    base.setCanGiveFriend(true);
+    base.setUseAllLocations(true);
+    base.setCenterTitle("顶部居中按钮");
+    base.setCenterSubTitle("按钮下方的wording");
+    base.setCenterUrl("www.qq.com");
+    base.setCustomUrl("http://www.qq.com");
+    base.setCustomUrlName("立即使用");
+    base.setCustomUrlSubTitle("副标题tip");
+    base.setPromotionUrlName("更多优惠");
+    base.setPromotionUrl("http://www.qq.com");
+    base.setLocationIdList("1234");
+
+    //团购券
+    WxMpCardCreateMessage grouponMessage = new WxMpCardCreateMessage();
+    GrouponCardCreateRequest grouponCardCreateRequest = new GrouponCardCreateRequest();
+    GrouponCard grouponCard = new GrouponCard();
+    grouponCard.setBaseInfo(base);
+    grouponCard.setDealDetail("deal detail");
+
+    grouponCardCreateRequest.setGroupon(grouponCard);
+    grouponMessage.setCardCreateRequest(grouponCardCreateRequest);
+
+    System.out.println(this.wxService.getCardService().createCard(grouponMessage));
+
+    //现金券
+    WxMpCardCreateMessage cashMessage = new WxMpCardCreateMessage();
+    CashCardCreateRequest cashCardCreateRequest = new CashCardCreateRequest();
+    CashCard cashCard = new CashCard();
+    cashCard.setBaseInfo(base);
+    cashCard.setLeastCost(1000);
+    cashCard.setReduceCost(100);
+
+    cashCardCreateRequest.setCash(cashCard);
+    cashMessage.setCardCreateRequest(cashCardCreateRequest);
+
+    System.out.println(this.wxService.getCardService().createCard(cashMessage));
+
+    //折扣券
+    WxMpCardCreateMessage discountMessage = new WxMpCardCreateMessage();
+    DiscountCardCreateRequest discountCardCreateRequest = new DiscountCardCreateRequest();
+    DiscountCard discountCard = new DiscountCard();
+    discountCard.setBaseInfo(base);
+    discountCard.setDiscount(30);
+
+    discountCardCreateRequest.setDiscount(discountCard);
+    discountMessage.setCardCreateRequest(discountCardCreateRequest);
+
+    System.out.println(this.wxService.getCardService().createCard(discountMessage));
+
+    //兑换券
+    WxMpCardCreateMessage giftMessage = new WxMpCardCreateMessage();
+    GiftCardCreateRequest giftCardCreateRequest = new GiftCardCreateRequest();
+    GiftCard giftCard = new GiftCard();
+    giftCard.setBaseInfo(base);
+    giftCard.setGift("星巴克雪瑞纳咖啡大杯");
+
+    giftCardCreateRequest.setGift(giftCard);
+    giftMessage.setCardCreateRequest(giftCardCreateRequest);
+    System.out.println(this.wxService.getCardService().createCard(giftMessage));
+
+    //普通兑换券
+    WxMpCardCreateMessage generalMessage = new WxMpCardCreateMessage();
+    GeneralCardCreateRequest generalCardCreateRequest = new GeneralCardCreateRequest();
+    GeneralCard generalCard = new GeneralCard();
+    generalCard.setBaseInfo(base);
+    generalCard.setDefaultDetail("音乐木盒");
+
+    generalCardCreateRequest.setGeneralCoupon(generalCard);
+    generalMessage.setCardCreateRequest(generalCardCreateRequest);
+    System.out.println(this.wxService.getCardService().createCard(generalMessage));
+  }
 }

+ 14 - 0
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java

@@ -4,6 +4,7 @@ import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import me.chanjar.weixin.common.error.WxErrorException;
 import me.chanjar.weixin.mp.api.WxMpService;
 import me.chanjar.weixin.mp.bean.result.WxMpOAuth2AccessToken;
+import me.chanjar.weixin.open.bean.WxOpenCreateResult;
 import me.chanjar.weixin.open.bean.WxOpenMaCodeTemplate;
 import me.chanjar.weixin.open.bean.message.WxOpenXmlMessage;
 import me.chanjar.weixin.open.bean.result.WxOpenAuthorizerInfoResult;
@@ -42,6 +43,8 @@ public interface WxOpenComponentService {
 
   String MINIAPP_JSCODE_2_SESSION = "https://api.weixin.qq.com/sns/component/jscode2session?appid=%s&js_code=%s&grant_type=authorization_code&component_appid=%s";
 
+  String CREATE_OPEN_URL= "https://api.weixin.qq.com/cgi-bin/open/create";
+
   WxMpService getWxMpServiceByAppid(String appid);
 
   /**
@@ -168,4 +171,15 @@ public interface WxOpenComponentService {
    * @see #getTemplateList
    */
   void deleteTemplate(long templateId) throws WxErrorException;
+
+  /**
+   * https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&id=open1498704199_1bcax&token=6df5e3650041eff2cd3ec3662425ad8d7beec8d9&lang=zh_CN
+   * 创建 开放平台帐号并绑定公众号/小程序
+   *
+   * https://api.weixin.qq.com/cgi-bin/open/create
+   *
+   * @param appId 公众号/小程序的appId
+   * @return
+   */
+  WxOpenCreateResult createOpenAccount(String appId) throws WxErrorException;
 }

+ 11 - 0
weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java

@@ -17,6 +17,7 @@ import me.chanjar.weixin.open.api.WxOpenMaService;
 import me.chanjar.weixin.open.api.WxOpenService;
 import me.chanjar.weixin.open.bean.WxOpenAuthorizerAccessToken;
 import me.chanjar.weixin.open.bean.WxOpenComponentAccessToken;
+import me.chanjar.weixin.open.bean.WxOpenCreateResult;
 import me.chanjar.weixin.open.bean.WxOpenMaCodeTemplate;
 import me.chanjar.weixin.open.bean.auth.WxOpenAuthorizationInfo;
 import me.chanjar.weixin.open.bean.message.WxOpenXmlMessage;
@@ -387,4 +388,14 @@ public class WxOpenComponentServiceImpl implements WxOpenComponentService {
     param.addProperty("template_id", templateId);
     post(DELETE_TEMPLATE_URL, param.toString(), "access_token");
   }
+
+  @Override
+  public WxOpenCreateResult createOpenAccount(String appId) throws WxErrorException {
+    JsonObject param = new JsonObject();
+    param.addProperty("appid", appId);
+
+    String json = post(CREATE_OPEN_URL, param.toString(), "access_token");
+
+    return WxOpenCreateResult.fromJson(json);
+  }
 }

+ 36 - 0
weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java

@@ -0,0 +1,36 @@
+package me.chanjar.weixin.open.bean;
+
+import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder;
+import com.google.gson.annotations.SerializedName;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import me.chanjar.weixin.common.util.json.WxGsonBuilder;
+
+import java.io.Serializable;
+
+/**
+ * <pre>
+ * code换取session_key接口的响应
+ * 文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
+ * 微信返回报文:{"session_key":"nzoqhc3OnwHzeTxJs+inbQ==","openid":"oVBkZ0aYgDMDIywRdgPW8-joxXc4"}
+ * </pre>
+ * @author <a href="https://github.com/binarywang">Binary Wang</a>
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WxOpenCreateResult implements Serializable {
+
+  @SerializedName("open_appid")
+  private String openAppid;
+
+  @SerializedName("errcode")
+  private String errcode;
+
+  @SerializedName("errmsg")
+  private String errmsg;
+
+  public static WxOpenCreateResult fromJson(String json) {
+    return WxGsonBuilder.create().fromJson(json, WxOpenCreateResult.class);
+  }
+
+}