diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java index af6cefcff8..d0f06c13b8 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/WxMpCardService.java @@ -2,9 +2,7 @@ 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 @@ * @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"; @@ -142,6 +141,14 @@ void markCardCode(String code, String cardId, String openId, boolean isMark) thr */ String addTestWhiteList(String openid) throws WxErrorException; + /** + * + * @param cardCreateMessage + * @return + * @throws WxErrorException + */ + WxMpCardCreateResult createCard(WxMpCardCreateMessage cardCreateMessage) throws WxErrorException; + /** * 创建卡券二维码 * diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java index bfd58856d0..5237fd6d2a 100644 --- a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java +++ b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImpl.java @@ -3,6 +3,7 @@ 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.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 String addTestWhiteList(String openid) throws WxErrorException { return respone; } + @Override + public WxMpCardCreateResult createCard(WxMpCardCreateMessage cardCreateMessage) throws WxErrorException { + + String response = this.wxMpService.post(CARD_CREATE, GSON.toJson(cardCreateMessage)); + return WxMpCardCreateResult.fromJson(response); + } + /** * 创建卡券二维码. */ diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/Card.java new file mode 100644 index 0000000000..c97f88f2fc --- /dev/null +++ b/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; + +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CardCreateRequest.java new file mode 100644 index 0000000000..8cb16bc7b2 --- /dev/null +++ b/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 { +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCard.java new file mode 100644 index 0000000000..3d4de40c0b --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/CashCardCreateRequest.java new file mode 100644 index 0000000000..dcefab0e29 --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCard.java new file mode 100644 index 0000000000..b2c3a13ffc --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/DiscountCardCreateRequest.java new file mode 100644 index 0000000000..869c487c92 --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCard.java new file mode 100644 index 0000000000..dcfba74da7 --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GeneralCardCreateRequest.java new file mode 100644 index 0000000000..8a9c3d1801 --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCard.java new file mode 100644 index 0000000000..0bfb5359ba --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GiftCardCreateRequest.java new file mode 100644 index 0000000000..8791b70a9d --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCard.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCard.java new file mode 100644 index 0000000000..b0df7262bb --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCardCreateRequest.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/GrouponCardCreateRequest.java new file mode 100644 index 0000000000..48b1e3e7da --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCreateMessage.java b/weixin-java-mp/src/main/java/me/chanjar/weixin/mp/bean/card/WxMpCardCreateMessage.java new file mode 100644 index 0000000000..760002cb52 --- /dev/null +++ b/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); + } +} diff --git a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java index 06945d9a08..5623299394 100644 --- a/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java +++ b/weixin-java-mp/src/test/java/me/chanjar/weixin/mp/api/impl/WxMpCardServiceImplTest.java @@ -2,8 +2,10 @@ 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 void testUnavailableCardCode() throws Exception { 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)); + } } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java index 69a3aeba56..0ae803fccf 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/WxOpenComponentService.java @@ -4,6 +4,7 @@ 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; } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java index 93155690c9..4c2a0ee275 100644 --- a/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java +++ b/weixin-java-open/src/main/java/me/chanjar/weixin/open/api/impl/WxOpenComponentServiceImpl.java @@ -17,6 +17,7 @@ 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 void deleteTemplate(long templateId) throws WxErrorException { 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); + } } diff --git a/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java b/weixin-java-open/src/main/java/me/chanjar/weixin/open/bean/WxOpenCreateResult.java new file mode 100644 index 0000000000..6e06a16d4a --- /dev/null +++ b/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; + +/** + *
+ * code换取session_key接口的响应
+ * 文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/api-login.html#wxloginobject
+ * 微信返回报文:{"session_key":"nzoqhc3OnwHzeTxJs+inbQ==","openid":"oVBkZ0aYgDMDIywRdgPW8-joxXc4"}
+ * 
+ * @author Binary Wang + */ +@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); + } + +}