| @@ -9,6 +9,12 @@ import java.util.Map; | |||||
| * @author Daniel Qian & binarywang | * @author Daniel Qian & binarywang | ||||
| */ | */ | ||||
| public class WxConsts { | public class WxConsts { | ||||
| /** | |||||
| * 微信接口返回的参数errcode. | |||||
| */ | |||||
| public static final String ERR_CODE = "errcode"; | |||||
| /** | /** | ||||
| * 微信推送过来的消息的类型,和发送给微信xml格式消息的消息类型. | * 微信推送过来的消息的类型,和发送给微信xml格式消息的消息类型. | ||||
| */ | */ | ||||
| @@ -0,0 +1,36 @@ | |||||
| package cn.binarywang.wx.miniapp.api; | |||||
| import cn.binarywang.wx.miniapp.bean.scheme.WxMaGenerateNfcSchemeRequest; | |||||
| import cn.binarywang.wx.miniapp.bean.scheme.WxMaGenerateSchemeRequest; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| /** | |||||
| * <pre> | |||||
| * 小程序Scheme码相关操作接口. | |||||
| * | |||||
| * | |||||
| * </pre> | |||||
| * | |||||
| * @author : cofedream | |||||
| * created on : 2021-01-26 | |||||
| */ | |||||
| public interface WxMaSchemeService { | |||||
| String GENERATE_SCHEME_URL = "https://api.weixin.qq.com/wxa/generatescheme"; | |||||
| String GENERATE_NFC_SCHEME_URL = "https://api.weixin.qq.com/wxa/generatenfcscheme"; | |||||
| /** | |||||
| * 获取小程序scheme码 | |||||
| *文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html | |||||
| * @param request 请求参数 | |||||
| * @throws WxErrorException 生成失败时抛出,具体错误码请看文档 | |||||
| */ | |||||
| String generate(WxMaGenerateSchemeRequest request) throws WxErrorException; | |||||
| /** | |||||
| * 获取NFC 的小程序 scheme | |||||
| *文档地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateNFCScheme.html | |||||
| * @param request 请求参数 | |||||
| * @throws WxErrorException 生成失败时抛出,具体错误码请看文档 | |||||
| */ | |||||
| String generateNFC(WxMaGenerateNfcSchemeRequest request) throws WxErrorException; | |||||
| } | |||||
| @@ -156,6 +156,13 @@ public interface WxMaService { | |||||
| */ | */ | ||||
| WxMaQrcodeService getQrcodeService(); | WxMaQrcodeService getQrcodeService(); | ||||
| /** | |||||
| * 返回获取小程序scheme码实现对象,以方便调用其各个接口. | |||||
| * | |||||
| * @return WxMaSchemeService wx ma scheme service | |||||
| */ | |||||
| WxMaSchemeService getWxMaSchemeService(); | |||||
| /** | /** | ||||
| * 返回模板配置相关接口方法的实现类对象, 以方便调用其各个接口. | * 返回模板配置相关接口方法的实现类对象, 以方便调用其各个接口. | ||||
| * | * | ||||
| @@ -0,0 +1,56 @@ | |||||
| package cn.binarywang.wx.miniapp.api.impl; | |||||
| import cn.binarywang.wx.miniapp.api.WxMaSchemeService; | |||||
| import cn.binarywang.wx.miniapp.api.WxMaService; | |||||
| import cn.binarywang.wx.miniapp.bean.scheme.WxMaGenerateNfcSchemeRequest; | |||||
| import cn.binarywang.wx.miniapp.bean.scheme.WxMaGenerateSchemeRequest; | |||||
| import com.google.gson.JsonObject; | |||||
| import lombok.AllArgsConstructor; | |||||
| import me.chanjar.weixin.common.WxType; | |||||
| import me.chanjar.weixin.common.api.WxConsts; | |||||
| import me.chanjar.weixin.common.error.WxError; | |||||
| import me.chanjar.weixin.common.error.WxErrorException; | |||||
| import me.chanjar.weixin.common.util.json.GsonParser; | |||||
| /** | |||||
| * @author : cofedream | |||||
| * created on : 2021-01-28 | |||||
| */ | |||||
| @AllArgsConstructor | |||||
| public class WxMaSchemeServiceImpl implements WxMaSchemeService { | |||||
| private final WxMaService wxMaService; | |||||
| /** | |||||
| * 获取小程序scheme码 | |||||
| * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/api-backend/open-api/url-scheme/urlscheme.generate.html | |||||
| * | |||||
| * @param request 请求参数 | |||||
| * @throws WxErrorException 生成失败时抛出,具体错误码请看文档 | |||||
| */ | |||||
| @Override | |||||
| public String generate(WxMaGenerateSchemeRequest request) throws WxErrorException { | |||||
| String responseContent = this.wxMaService.post(GENERATE_SCHEME_URL, request.toJson()); | |||||
| JsonObject jsonObject = GsonParser.parse(responseContent); | |||||
| if (jsonObject.get(WxConsts.ERR_CODE).getAsInt() != 0) { | |||||
| throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); | |||||
| } | |||||
| return jsonObject.get("openlink").getAsString(); | |||||
| } | |||||
| /** | |||||
| * 获取NFC 的小程序 scheme | |||||
| * 文档地址:https://developers.weixin.qq.com/miniprogram/dev/OpenApiDoc/qrcode-link/url-scheme/generateNFCScheme.html | |||||
| * | |||||
| * @param request 请求参数 | |||||
| * @throws WxErrorException 生成失败时抛出,具体错误码请看文档 | |||||
| */ | |||||
| @Override | |||||
| public String generateNFC(WxMaGenerateNfcSchemeRequest request) throws WxErrorException { | |||||
| String responseContent = this.wxMaService.post(GENERATE_NFC_SCHEME_URL, request.toJson()); | |||||
| JsonObject jsonObject = GsonParser.parse(responseContent); | |||||
| if (jsonObject.get(WxConsts.ERR_CODE).getAsInt() != 0) { | |||||
| throw new WxErrorException(WxError.fromJson(responseContent, WxType.MiniApp)); | |||||
| } | |||||
| return jsonObject.get("openlink").getAsString(); | |||||
| } | |||||
| } | |||||
| @@ -46,6 +46,7 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||
| private WxMaMediaService materialService = new WxMaMediaServiceImpl(this); | private WxMaMediaService materialService = new WxMaMediaServiceImpl(this); | ||||
| private WxMaUserService userService = new WxMaUserServiceImpl(this); | private WxMaUserService userService = new WxMaUserServiceImpl(this); | ||||
| private WxMaQrcodeService qrCodeService = new WxMaQrcodeServiceImpl(this); | private WxMaQrcodeService qrCodeService = new WxMaQrcodeServiceImpl(this); | ||||
| private WxMaSchemeService schemeService = new WxMaSchemeServiceImpl(this); | |||||
| private WxMaTemplateService templateService = new WxMaTemplateServiceImpl(this); | private WxMaTemplateService templateService = new WxMaTemplateServiceImpl(this); | ||||
| private WxMaAnalysisService analysisService = new WxMaAnalysisServiceImpl(this); | private WxMaAnalysisService analysisService = new WxMaAnalysisServiceImpl(this); | ||||
| private WxMaCodeService codeService = new WxMaCodeServiceImpl(this); | private WxMaCodeService codeService = new WxMaCodeServiceImpl(this); | ||||
| @@ -331,6 +332,11 @@ public class WxMaServiceImpl implements WxMaService, RequestHttp<CloseableHttpCl | |||||
| return this.qrCodeService; | return this.qrCodeService; | ||||
| } | } | ||||
| @Override | |||||
| public WxMaSchemeService getWxMaSchemeService() { | |||||
| return schemeService; | |||||
| } | |||||
| @Override | @Override | ||||
| public WxMaTemplateService getTemplateService() { | public WxMaTemplateService getTemplateService() { | ||||
| return this.templateService; | return this.templateService; | ||||
| @@ -0,0 +1,75 @@ | |||||
| package cn.binarywang.wx.miniapp.bean.scheme; | |||||
| import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; | |||||
| import com.google.gson.annotations.SerializedName; | |||||
| import lombok.Builder; | |||||
| import lombok.Data; | |||||
| /** | |||||
| * @author : lyt | |||||
| * created on : 2023-07-31 | |||||
| */ | |||||
| @Data | |||||
| @Builder(builderMethodName = "newBuilder") | |||||
| public class WxMaGenerateNfcSchemeRequest { | |||||
| /** | |||||
| * 跳转到的目标小程序信息。 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("jump_wxa") | |||||
| private JumpWxa jumpWxa; | |||||
| /** | |||||
| * scheme对应的设备model_id | |||||
| * <pre> | |||||
| * 是否必填:是 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("model_id") | |||||
| private String modelId; | |||||
| /** | |||||
| * scheme对应的设备sn,仅一机一码时填写 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("sn") | |||||
| private String sn; | |||||
| @Data | |||||
| @Builder(builderMethodName = "newBuilder") | |||||
| public static class JumpWxa { | |||||
| /** | |||||
| * 通过scheme码进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带query。path为空时会跳转小程序主页。 | |||||
| * <pre> | |||||
| * 是否必填:是 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("path") | |||||
| private String path; | |||||
| /** | |||||
| * 通过scheme码进入小程序时的query,最大128个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~ | |||||
| * 返回值 | |||||
| * <pre> | |||||
| * 是否必填:是 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("query") | |||||
| private String query; | |||||
| /** | |||||
| * 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"默认值:release | |||||
| */ | |||||
| @SerializedName("env_version") | |||||
| private String envVersion = "release"; | |||||
| } | |||||
| public String toJson() { | |||||
| return WxMaGsonBuilder.create().toJson(this); | |||||
| } | |||||
| } | |||||
| @@ -0,0 +1,94 @@ | |||||
| package cn.binarywang.wx.miniapp.bean.scheme; | |||||
| import cn.binarywang.wx.miniapp.util.json.WxMaGsonBuilder; | |||||
| import com.google.gson.annotations.SerializedName; | |||||
| import lombok.Builder; | |||||
| import lombok.Data; | |||||
| /** | |||||
| * @author : cofedream | |||||
| * created on : 2021-01-26 | |||||
| */ | |||||
| @Data | |||||
| @Builder(builderMethodName = "newBuilder") | |||||
| public class WxMaGenerateSchemeRequest { | |||||
| /** | |||||
| * 跳转到的目标小程序信息。 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("jump_wxa") | |||||
| private JumpWxa jumpWxa; | |||||
| /** | |||||
| * 生成的scheme码类型,到期失效:true,永久有效:false。 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("is_expire") | |||||
| private Boolean isExpire; | |||||
| /** | |||||
| * 到期失效的scheme码的失效时间,为Unix时间戳。生成的到期失效scheme码在该时间前有效。最长有效期为1年。生成到期失效的scheme时必填。 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("expire_time") | |||||
| private Long expireTime; | |||||
| /** | |||||
| * 到期失效的 scheme 码失效类型,失效时间:0,失效间隔天数:1 | |||||
| * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("expire_type") | |||||
| private Integer expireType; | |||||
| /** | |||||
| * 到期失效的 scheme 码的失效间隔天数。 | |||||
| * <pre> | |||||
| * 生成的到期失效 scheme 码在该间隔时间到达前有效。最长间隔天数为365天。is_expire 为 true 且 expire_type 为 1 时必填 * <pre> | |||||
| * 是否必填:否 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("expire_interval") | |||||
| private Integer expireInterval; | |||||
| @Data | |||||
| @Builder(builderMethodName = "newBuilder") | |||||
| public static class JumpWxa { | |||||
| /** | |||||
| * 通过scheme码进入的小程序页面路径,必须是已经发布的小程序存在的页面,不可携带query。path为空时会跳转小程序主页。 | |||||
| * <pre> | |||||
| * 是否必填:是 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("path") | |||||
| private String path; | |||||
| /** | |||||
| * 通过scheme码进入小程序时的query,最大128个字符,只支持数字,大小写英文以及部分特殊字符:!#$&'()*+,/:;=?@-._~ | |||||
| * 返回值 | |||||
| * <pre> | |||||
| * 是否必填:是 | |||||
| * </pre> | |||||
| */ | |||||
| @SerializedName("query") | |||||
| private String query; | |||||
| /** | |||||
| * 要打开的小程序版本。正式版为"release",体验版为"trial",开发版为"develop"默认值:release | |||||
| */ | |||||
| @SerializedName("env_version") | |||||
| private String envVersion = "release"; | |||||
| } | |||||
| public String toJson() { | |||||
| return WxMaGsonBuilder.create().toJson(this); | |||||
| } | |||||
| } | |||||