Skip to content

Commit b56eddd

Browse files
authored
🎨 #3800 【微信支付】小微商家进件 API 进行参数结构调整
1 parent ef5f28c commit b56eddd

File tree

2 files changed

+276
-48
lines changed

2 files changed

+276
-48
lines changed

weixin-java-pay/src/main/java/com/github/binarywang/wxpay/bean/applyment/WxPayApplyment4SubCreateRequest.java

Lines changed: 172 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -424,62 +424,186 @@ public static class MicroBizInfo implements Serializable {
424424
private MicroBizTypeEnum microBizType;
425425

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

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

456438
/**
457-
* 门店地址
458-
* 1、填写规范:
459-
* 门店场所:填写店铺详细地址,具体区/县及街道门牌号或大厦楼层
460-
* 流动经营/便民服务:填写"无"
461-
* 线上商品/服务交易:填写电商平台名称
462-
* 2、格式规范:
463-
* 长度为4-512个字符
464-
* 前后不能有空格、制表符、换行符
465-
* 不能仅含数字、特殊字符
466-
* 仅能填写数字、英文字母、汉字及特殊字符
467-
* 仅支持utf-8格式
468-
* 示例值:广东省深圳市南山区xx大厦x层xxxx室
439+
* 【线上商品/服务交易】 经营场景为“线上商品/服务交易”时填写
469440
*/
470-
@SerializedName("micro_address")
471-
private String microAddress;
441+
@SerializedName("micro_online_info")
442+
private MicroOnlineInfo microOnlineInfo;
443+
444+
@Data
445+
@Builder
446+
@NoArgsConstructor
447+
@AllArgsConstructor
448+
@Accessors(chain = true)
449+
public static class MicroOnlineInfo implements Serializable {
450+
451+
private static final long serialVersionUID = -4672635122639034459L;
452+
453+
/**
454+
* 【线上店铺名称】 填写商家的线上店铺名称
455+
* 1、长度为1-50个字符;
456+
* 2、前后不能有空格、制表符、换行符;
457+
* 3、不能仅含数字、特殊字符;
458+
* 4、仅能填写数字、英文字母、汉字及特殊字符;
459+
* 5、仅支持utf-8格式。
460+
*/
461+
@SerializedName("micro_online_store")
462+
private String microOnlineStore;
463+
464+
/**
465+
* 【电商平台名称】 填写电商平台名称
466+
* 1、长度为1-50个字符;
467+
* 2、前后不能有空格、制表符、换行符;
468+
* 3、不能仅含数字、特殊字符;
469+
* 4、仅能填写数字、英文字母、汉字及特殊字符;
470+
* 5、仅支持utf-8格式。
471+
*/
472+
@SerializedName("micro_ec_name")
473+
private String microEcName;
474+
475+
/**
476+
* 【店铺二维码】
477+
* 1、店铺二维码或店铺链接二选一必填;
478+
* 2、若为电商小程序,可上传店铺页面的小程序二维码;
479+
* 3、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
480+
*/
481+
@SerializedName("micro_qrcode")
482+
private String microQrcode;
483+
484+
/**
485+
* 【店铺链接】
486+
* 1、店铺二维码或店铺链接二选一必填;
487+
* 2、请填写店铺主页链接,需符合网站规范。
488+
*/
489+
@SerializedName("micro_link")
490+
private String microLink;
491+
492+
}
493+
494+
@Data
495+
@Builder
496+
@NoArgsConstructor
497+
@AllArgsConstructor
498+
@Accessors(chain = true)
499+
public static class MicroMobileInfo implements Serializable {
500+
501+
private static final long serialVersionUID = -4672635122639034460L;
502+
503+
/**
504+
* 【经营/服务名称】 请填写经营/服务名称
505+
* 1、长度为1-50个字符;
506+
* 2、前后不能有空格、制表符、换行符;
507+
* 3、不能仅含数字、特殊字符;
508+
* 4、仅能填写数字、英文字母、汉字及特殊字符;
509+
* 5、仅支持utf-8格式。
510+
*/
511+
@SerializedName("micro_mobile_name")
512+
private String microMobileName;
513+
514+
/**
515+
* 【经营/服务所在地省市】 请填写经营/服务所在地省市编码
516+
*/
517+
@SerializedName("micro_mobile_city")
518+
private String microMobileCity;
519+
520+
/**
521+
* 【经营/服务所在地(不含省市)】 填写“无"
522+
*/
523+
@SerializedName("micro_mobile_address")
524+
private String microMobileAddress;
525+
526+
/**
527+
* 【经营/服务现场照片】
528+
* 1、提交流动经营现场照片,如摊位场景应提交摊位全景照片+商品照片。
529+
* 2、可上传多张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
530+
*/
531+
@SerializedName("micro_mobile_pics")
532+
private List<String> microMobilePics;
533+
534+
}
535+
536+
@Data
537+
@Builder
538+
@NoArgsConstructor
539+
@AllArgsConstructor
540+
@Accessors(chain = true)
541+
public static class MicroStoreInfo implements Serializable {
542+
543+
private static final long serialVersionUID = -4672635122639034461L;
544+
545+
/**
546+
* 【门店名称】
547+
* 请填写门店名称
548+
* 1、长度为1-50个字符;
549+
* 2、前后不能有空格、制表符、换行符;
550+
* 3、不能仅含数字、特殊字符;
551+
* 4、仅能填写数字、英文字母、汉字及特殊字符;
552+
* 5、仅支持utf-8格式。
553+
*/
554+
@SerializedName("micro_name")
555+
private String microName;
556+
557+
/**
558+
* 【门店省市编码】
559+
* 填写门店省市编码,只能由数字组成,详细参见微信支付提供的省市对照表
560+
*/
561+
@SerializedName("micro_address_code")
562+
private String microAddressCode;
563+
564+
/**
565+
* 【门店地址】
566+
* 请填写详细的经营场所信息,如有多个场所,选择一个主要场所填写即可。
567+
* 1、长度为4-512个字符;
568+
* 2、前后不能有空格、制表符、换行符;
569+
* 3、不能仅含数字、特殊字符;
570+
* 4、仅能填写数字、英文字母、汉字及特殊字符;
571+
* 5、仅支持utf-8格式。
572+
*/
573+
@SerializedName("micro_address")
574+
private String microAddress;
575+
576+
/**
577+
* 【门店门头照片】
578+
* 1、请上传门头正面照片(要求门店招牌、门框完整、清晰、可辨识);若为停车场等无固定门头照片的经营场所,可上传岗亭/出入闸口。
579+
* 2、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
580+
*/
581+
@SerializedName("store_entrance_pic")
582+
private String storeEntrancePic;
583+
584+
/**
585+
* 【店内环境照片】
586+
* 1、请上传门店内部环境照片(可辨识经营内容)。若为停车场等无固定门头的经营场所,可上传停车场内部照片。
587+
* 2、可上传1张图片,请填写通过图片上传API预先上传图片生成好的MediaID。
588+
*/
589+
@SerializedName("micro_indoor_copy")
590+
private String microIndoorCopy;
591+
592+
/**
593+
* 【门店经度】 数字或小数,商户自定义字段
594+
*/
595+
@SerializedName("store_longitude")
596+
private String storeLongitude;
597+
598+
/**
599+
* 【门店纬度】 纬度,商户自定义字段
600+
*/
601+
@SerializedName("store_latitude")
602+
private String storeLatitude;
603+
604+
}
605+
472606

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

485609
@Data
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
package com.github.binarywang.wxpay.bean.applyment;
2+
3+
import java.util.Arrays;
4+
5+
import org.testng.annotations.Test;
6+
7+
import com.google.gson.Gson;
8+
import com.google.gson.GsonBuilder;
9+
10+
import static org.testng.Assert.assertEquals;
11+
import static org.testng.Assert.assertTrue;
12+
13+
public class WxPayApplyment4SubCreateRequestTest {
14+
15+
@Test
16+
public void testMicroBizInfoSerialization() {
17+
// 1. Test MicroStoreInfo
18+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroStoreInfo storeInfo =
19+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroStoreInfo.builder()
20+
.microName("门店名称")
21+
.microAddressCode("440305")
22+
.microAddress("详细地址")
23+
.storeEntrancePic("media_id_1")
24+
.microIndoorCopy("media_id_2")
25+
.storeLongitude("113.941046")
26+
.storeLatitude("22.546154")
27+
.build();
28+
29+
// 2. Test MicroMobileInfo
30+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroMobileInfo mobileInfo =
31+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroMobileInfo.builder()
32+
.microMobileName("流动经营名称")
33+
.microMobileCity("440305")
34+
.microMobileAddress("无")
35+
.microMobilePics(Arrays.asList("media_id_3", "media_id_4"))
36+
.build();
37+
38+
// 3. Test MicroOnlineInfo
39+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroOnlineInfo onlineInfo =
40+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.MicroOnlineInfo.builder()
41+
.microOnlineStore("线上店铺名称")
42+
.microEcName("电商平台名称")
43+
.microQrcode("media_id_5")
44+
.microLink("https://www.example.com")
45+
.build();
46+
47+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo microBizInfo =
48+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.builder()
49+
.microStoreInfo(storeInfo)
50+
.microMobileInfo(mobileInfo)
51+
.microOnlineInfo(onlineInfo)
52+
.build();
53+
54+
Gson gson = new GsonBuilder().create();
55+
String json = gson.toJson(microBizInfo);
56+
57+
// Verify MicroStoreInfo serialization
58+
assertTrue(json.contains("\"micro_name\":\"门店名称\""));
59+
assertTrue(json.contains("\"micro_address_code\":\"440305\""));
60+
assertTrue(json.contains("\"micro_address\":\"详细地址\""));
61+
assertTrue(json.contains("\"store_entrance_pic\":\"media_id_1\""));
62+
assertTrue(json.contains("\"micro_indoor_copy\":\"media_id_2\""));
63+
assertTrue(json.contains("\"store_longitude\":\"113.941046\""));
64+
assertTrue(json.contains("\"store_latitude\":\"22.546154\""));
65+
66+
// Verify MicroMobileInfo serialization
67+
assertTrue(json.contains("\"micro_mobile_name\":\"流动经营名称\""));
68+
assertTrue(json.contains("\"micro_mobile_city\":\"440305\""));
69+
assertTrue(json.contains("\"micro_mobile_address\":\"\""));
70+
assertTrue(json.contains("\"micro_mobile_pics\":[\"media_id_3\",\"media_id_4\"]"));
71+
72+
// Verify MicroOnlineInfo serialization
73+
assertTrue(json.contains("\"micro_online_store\":\"线上店铺名称\""));
74+
assertTrue(json.contains("\"micro_ec_name\":\"电商平台名称\""));
75+
assertTrue(json.contains("\"micro_qrcode\":\"media_id_5\""));
76+
assertTrue(json.contains("\"micro_link\":\"https://www.example.com\""));
77+
78+
// Verify deserialization
79+
WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo deserialized =
80+
gson.fromJson(json, WxPayApplyment4SubCreateRequest.SubjectInfo.MicroBizInfo.class);
81+
82+
// Verify MicroStoreInfo deserialization
83+
assertEquals(deserialized.getMicroStoreInfo().getMicroName(), "门店名称");
84+
assertEquals(deserialized.getMicroStoreInfo().getMicroAddressCode(), "440305");
85+
assertEquals(deserialized.getMicroStoreInfo().getMicroAddress(), "详细地址");
86+
assertEquals(deserialized.getMicroStoreInfo().getStoreEntrancePic(), "media_id_1");
87+
assertEquals(deserialized.getMicroStoreInfo().getMicroIndoorCopy(), "media_id_2");
88+
assertEquals(deserialized.getMicroStoreInfo().getStoreLongitude(), "113.941046");
89+
assertEquals(deserialized.getMicroStoreInfo().getStoreLatitude(), "22.546154");
90+
91+
// Verify MicroMobileInfo deserialization
92+
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileName(), "流动经营名称");
93+
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileCity(), "440305");
94+
assertEquals(deserialized.getMicroMobileInfo().getMicroMobileAddress(), "无");
95+
assertEquals(deserialized.getMicroMobileInfo().getMicroMobilePics().size(), 2);
96+
assertEquals(deserialized.getMicroMobileInfo().getMicroMobilePics(), Arrays.asList("media_id_3", "media_id_4"));
97+
98+
// Verify MicroOnlineInfo deserialization
99+
assertEquals(deserialized.getMicroOnlineInfo().getMicroOnlineStore(), "线上店铺名称");
100+
assertEquals(deserialized.getMicroOnlineInfo().getMicroEcName(), "电商平台名称");
101+
assertEquals(deserialized.getMicroOnlineInfo().getMicroQrcode(), "media_id_5");
102+
assertEquals(deserialized.getMicroOnlineInfo().getMicroLink(), "https://www.example.com");
103+
}
104+
}

0 commit comments

Comments
 (0)