Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -424,62 +424,186 @@ public static class MicroBizInfo implements Serializable {
private MicroBizTypeEnum microBizType;

/**
* 门店名称
* 1、填写规范:
* 门店场所:填写门店名称
* 流动经营/便民服务:填写经营/服务名称
* 线上商品/服务交易:填写线上店铺名称
* 2、格式规范:
* 长度为1-50个字符
* 前后不能有空格、制表符、换行符
* 不能仅含数字、特殊字符
* 仅能填写数字、英文字母、汉字及特殊字符
* 仅支持utf-8格式
* 示例值:大郎烧饼
* 【门店场所】 经营类型为“门店场所”时填写
*/
@SerializedName("micro_name")
private String microName;
@SerializedName("micro_store_info")
private MicroStoreInfo microStoreInfo;

/**
* 门店省市编码
* 1、只能由数字组成
* 2、详细参见微信支付提供的省市对照表
* 3、填写规范:
* 门店场所:填写门店省市编码
* 流动经营/便民服务:填写经营/服务所在地省市编码
* 线上商品/服务交易:填写卖家所在地省市编码
* 示例值:440305
* 【流动经营/便民服务】 经营类型为“流动经营/便民服务”时填写
*/
@SerializedName("micro_address_code")
private String microAddressCode;
@SerializedName("micro_mobile_info")
private MicroMobileInfo microMobileInfo;

/**
* 门店地址
* 1、填写规范:
* 门店场所:填写店铺详细地址,具体区/县及街道门牌号或大厦楼层
* 流动经营/便民服务:填写"无"
* 线上商品/服务交易:填写电商平台名称
* 2、格式规范:
* 长度为4-512个字符
* 前后不能有空格、制表符、换行符
* 不能仅含数字、特殊字符
* 仅能填写数字、英文字母、汉字及特殊字符
* 仅支持utf-8格式
* 示例值:广东省深圳市南山区xx大厦x层xxxx室
* 【线上商品/服务交易】 经营场景为“线上商品/服务交易”时填写
*/
@SerializedName("micro_address")
private String microAddress;
@SerializedName("micro_online_info")
private MicroOnlineInfo microOnlineInfo;

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public static class MicroOnlineInfo implements Serializable {

private static final long serialVersionUID = -4672635122639034459L;

/**
* 【线上店铺名称】 填写商家的线上店铺名称
* 1、长度为1-50个字符;
* 2、前后不能有空格、制表符、换行符;
* 3、不能仅含数字、特殊字符;
* 4、仅能填写数字、英文字母、汉字及特殊字符;
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_online_store")
private String microOnlineStore;

/**
* 【电商平台名称】 填写电商平台名称
* 1、长度为1-50个字符;
* 2、前后不能有空格、制表符、换行符;
* 3、不能仅含数字、特殊字符;
* 4、仅能填写数字、英文字母、汉字及特殊字符;
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_ec_name")
private String microEcName;

/**
* 【店铺二维码】
* 1、店铺二维码或店铺链接二选一必填;
* 2、若为电商小程序,可上传店铺页面的小程序二维码;
* 3、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
*/
@SerializedName("micro_qrcode")
private String microQrcode;

/**
* 【店铺链接】
* 1、店铺二维码或店铺链接二选一必填;
* 2、请填写店铺主页链接,需符合网站规范。
*/
@SerializedName("micro_link")
private String microLink;

}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public static class MicroMobileInfo implements Serializable {

private static final long serialVersionUID = -4672635122639034460L;

/**
* 【经营/服务名称】 请填写经营/服务名称
* 1、长度为1-50个字符;
* 2、前后不能有空格、制表符、换行符;
* 3、不能仅含数字、特殊字符;
* 4、仅能填写数字、英文字母、汉字及特殊字符;
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_mobile_name")
private String microMobileName;

/**
* 【经营/服务所在地省市】 请填写经营/服务所在地省市编码
*/
@SerializedName("micro_mobile_city")
private String microMobileCity;

/**
* 【经营/服务所在地(不含省市)】 填写“无"
*/
@SerializedName("micro_mobile_address")
private String microMobileAddress;

/**
* 【经营/服务现场照片】
* 1、提交流动经营现场照片,如摊位场景应提交摊位全景照片+商品照片。
* 2、可上传多张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
*/
@SerializedName("micro_mobile_pics")
private List<String> microMobilePics;

}

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public static class MicroStoreInfo implements Serializable {

private static final long serialVersionUID = -4672635122639034461L;

/**
* 【门店名称】
* 请填写门店名称
* 1、长度为1-50个字符;
* 2、前后不能有空格、制表符、换行符;
* 3、不能仅含数字、特殊字符;
* 4、仅能填写数字、英文字母、汉字及特殊字符;
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_name")
private String microName;

/**
* 【门店省市编码】
* 填写门店省市编码,只能由数字组成,详细参见微信支付提供的省市对照表
*/
@SerializedName("micro_address_code")
private String microAddressCode;

/**
* 【门店地址】
* 请填写详细的经营场所信息,如有多个场所,选择一个主要场所填写即可。
* 1、长度为4-512个字符;
* 2、前后不能有空格、制表符、换行符;
* 3、不能仅含数字、特殊字符;
* 4、仅能填写数字、英文字母、汉字及特殊字符;
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_address")
private String microAddress;

/**
* 【门店门头照片】
* 1、请上传门头正面照片(要求门店招牌、门框完整、清晰、可辨识);若为停车场等无固定门头照片的经营场所,可上传岗亭/出入闸口。
* 2、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
*/
@SerializedName("store_entrance_pic")
private String storeEntrancePic;

/**
* 【店内环境照片】
* 1、请上传门店内部环境照片(可辨识经营内容)。若为停车场等无固定门头的经营场所,可上传停车场内部照片。
* 2、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
*/
@SerializedName("micro_indoor_copy")
private String microIndoorCopy;

/**
* 【门店经度】 数字或小数,商户自定义字段
*/
@SerializedName("store_longitude")
private String storeLongitude;

/**
* 【门店纬度】 纬度,商户自定义字段
*/
@SerializedName("store_latitude")
private String storeLatitude;

}


/**
* 门店门头照片/经营场景照片
* 1、门店场所:请上传门头正面照片(要求门店招牌、门框完整、清晰、可辨识);若为停车场等无固定门头照片的经营场所,可上传岗亭/出入闸口;
* 2、流动经营/便民服务:填写媒体文件ID列表,最多5张;
* 3、线上商品/服务交易:请上传线上店铺网页截图(清晰度足够识别店铺名称的首页截图);
* 4、请填写通过《图片上传API》预先上传图片生成好的MediaID
* 示例值:0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo
*/
@SerializedName("micro_pics")
private List<String> microPics;
}

@Data
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
package com.github.binarywang.wxpay.bean.applyment;

import java.util.Arrays;

import org.testng.annotations.Test;

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

import static org.testng.Assert.assertEquals;
import static org.testng.Assert.assertTrue;

public class WxPayApplyment4SubCreateRequestTest {

@Test
public void testMicroBizInfoSerialization() {
// 1. Test MicroStoreInfo
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroStoreInfo storeInfo =
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroStoreInfo.builder()
.microName("门店名称")
.microAddressCode("440305")
.microAddress("详细地址")
.storeEntrancePic("media_id_1")
.microIndoorCopy("media_id_2")
.storeLongitude("113.941046")
.storeLatitude("22.546154")
.build();

// 2. Test MicroMobileInfo
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroMobileInfo mobileInfo =
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroMobileInfo.builder()
.microMobileName("流动经营名称")
.microMobileCity("440305")
.microMobileAddress("无")
.microMobilePics(Arrays.asList("media_id_3", "media_id_4"))
.build();

// 3. Test MicroOnlineInfo
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroOnlineInfo onlineInfo =
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroOnlineInfo.builder()
.microOnlineStore("线上店铺名称")
.microEcName("电商平台名称")
.microQrcode("media_id_5")
.microLink("https://www.example.com")
.build();

WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo microBizInfo =
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.builder()
.microStoreInfo(storeInfo)
.microMobileInfo(mobileInfo)
.microOnlineInfo(onlineInfo)
.build();

Gson gson = new GsonBuilder().create();
String json = gson.toJson(microBizInfo);

// Verify MicroStoreInfo serialization
assertTrue(json.contains("\"micro_name\":\"门店名称\""));
assertTrue(json.contains("\"micro_address_code\":\"440305\""));
assertTrue(json.contains("\"micro_address\":\"详细地址\""));
assertTrue(json.contains("\"store_entrance_pic\":\"media_id_1\""));
assertTrue(json.contains("\"micro_indoor_copy\":\"media_id_2\""));
assertTrue(json.contains("\"store_longitude\":\"113.941046\""));
assertTrue(json.contains("\"store_latitude\":\"22.546154\""));

// Verify MicroMobileInfo serialization
assertTrue(json.contains("\"micro_mobile_name\":\"流动经营名称\""));
assertTrue(json.contains("\"micro_mobile_city\":\"440305\""));
assertTrue(json.contains("\"micro_mobile_address\":\"无\""));
assertTrue(json.contains("\"micro_mobile_pics\":[\"media_id_3\",\"media_id_4\"]"));

// Verify MicroOnlineInfo serialization
assertTrue(json.contains("\"micro_online_store\":\"线上店铺名称\""));
assertTrue(json.contains("\"micro_ec_name\":\"电商平台名称\""));
assertTrue(json.contains("\"micro_qrcode\":\"media_id_5\""));
assertTrue(json.contains("\"micro_link\":\"https://www.example.com\""));

// Verify deserialization
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo deserialized =
gson.fromJson(json, WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.class);

// Verify MicroStoreInfo deserialization
assertEquals(deserialized.getMicroStoreInfo().getMicroName(), "门店名称");
assertEquals(deserialized.getMicroStoreInfo().getMicroAddressCode(), "440305");
assertEquals(deserialized.getMicroStoreInfo().getMicroAddress(), "详细地址");
assertEquals(deserialized.getMicroStoreInfo().getStoreEntrancePic(), "media_id_1");
assertEquals(deserialized.getMicroStoreInfo().getMicroIndoorCopy(), "media_id_2");
assertEquals(deserialized.getMicroStoreInfo().getStoreLongitude(), "113.941046");
assertEquals(deserialized.getMicroStoreInfo().getStoreLatitude(), "22.546154");

// Verify MicroMobileInfo deserialization
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileName(), "流动经营名称");
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileCity(), "440305");
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileAddress(), "无");
assertEquals(deserialized.getMicroMobileInfo().getMicroMobilePics().size(), 2);
assertEquals(deserialized.getMicroMobileInfo().getMicroMobilePics(), Arrays.asList("media_id_3", "media_id_4"));

// Verify MicroOnlineInfo deserialization
assertEquals(deserialized.getMicroOnlineInfo().getMicroOnlineStore(), "线上店铺名称");
assertEquals(deserialized.getMicroOnlineInfo().getMicroEcName(), "电商平台名称");
assertEquals(deserialized.getMicroOnlineInfo().getMicroQrcode(), "media_id_5");
assertEquals(deserialized.getMicroOnlineInfo().getMicroLink(), "https://www.example.com");
}
}