1
0
mirror of synced 2025-12-17 21:18:07 +08:00

🎨 #3800 【微信支付】小微商家进件 API 进行参数结构调整

This commit is contained in:
舍出
2025-12-15 15:30:31 +08:00
committed by GitHub
parent ef5f28cb28
commit b56eddd47b
2 changed files with 276 additions and 48 deletions

View File

@@ -424,62 +424,186 @@ public class WxPayApplyment4SubCreateRequest implements Serializable {
private MicroBizTypeEnum microBizType;
/**
* 门店名称
* 1、填写规范
* 门店场所:填写门店名称
* 流动经营/便民服务:填写经营/服务名称
* 线上商品/服务交易:填写线上店铺名称
* 2、格式规范
* 长度为1-50个字符
* 前后不能有空格、制表符、换行符
* 不能仅含数字、特殊字符
* 仅能填写数字、英文字母、汉字及特殊字符
* 仅支持utf-8格式
* 示例值:大郎烧饼
* 门店场所】 经营类型为“门店场所”时填写
*/
@SerializedName("micro_store_info")
private MicroStoreInfo microStoreInfo;
/**
* 【流动经营/便民服务】 经营类型为“流动经营/便民服务”时填写
*/
@SerializedName("micro_mobile_info")
private MicroMobileInfo microMobileInfo;
/**
* 【线上商品/服务交易】 经营场景为“线上商品/服务交易”时填写
*/
@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;
/**
* 门店省市编码
* 1、只能由数字组成
* 2、详细参见微信支付提供的省市对照表
* 3、填写规范
* 门店场所:填写门店省市编码
* 流动经营/便民服务:填写经营/服务所在地省市编码
* 线上商品/服务交易:填写卖家所在地省市编码
* 示例值440305
* 门店省市编码
* 填写门店省市编码,只能由数字组成,详细参见微信支付提供的省市对照表
*/
@SerializedName("micro_address_code")
private String microAddressCode;
/**
* 门店地址
* 1、填写规范
* 门店场所:填写店铺详细地址,具体区/县及街道门牌号或大厦楼层
* 流动经营/便民服务:填写"无"
* 线上商品/服务交易:填写电商平台名称
* 2、格式规范
* 长度为4-512个字符
* 前后不能有空格、制表符、换行符
* 不能仅含数字、特殊字符
* 仅能填写数字、英文字母、汉字及特殊字符
* 仅支持utf-8格式
* 示例值广东省深圳市南山区xx大厦x层xxxx室
* 门店地址
* 请填写详细的经营场所信息,如有多个场所,选择一个主要场所填写即可。
* 1、长度为4-512个字符
* 2、前后不能有空格、制表符、换行符
* 3、不能仅含数字、特殊字符
* 4、仅能填写数字、英文字母、汉字及特殊字符
* 5、仅支持utf-8格式。
*/
@SerializedName("micro_address")
private String microAddress;
/**
* 门店门头照片/经营场景照片
* 1、门店场所:请上传门头正面照片(要求门店招牌、门框完整、清晰、可辨识);若为停车场等无固定门头照片的经营场所,可上传岗亭/出入闸口
* 2、流动经营/便民服务填写媒体文件ID列表最多5张
* 3、线上商品/服务交易:请上传线上店铺网页截图(清晰度足够识别店铺名称的首页截图);
* 4、请填写通过《图片上传API》预先上传图片生成好的MediaID
* 示例值0P3ng6KTIW4-Q_l2FjKLZuhHjBWoMAjmVtCz7ScmhEIThCaV-4BBgVwtNkCHO_XXqK5dE5YdOmFJBZR9FwczhJehHhAZN6BKXQPcs-VvdSo
* 门店门头照片
* 1、请上传门头正面照片要求门店招牌、门框完整、清晰、可辨识若为停车场等无固定门头照片的经营场所可上传岗亭/出入闸口
* 2、可上传1张图片请填写通过图片上传API预先上传图片生成好的MediaID。
*/
@SerializedName("micro_pics")
private List<String> microPics;
@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;
}
}
@Data

View File

@@ -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");
}
}