From 53afd54de87e9197d82e53503a1a6608090af85a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=9F=A9=E9=B9=8F=E8=BE=89?= <18322780655@163.com> Date: Fri, 12 Jan 2024 16:18:01 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E6=B1=87=E4=BB=98=E8=BF=9B?= =?UTF-8?q?=E4=BB=B6=E9=80=9A=E9=81=93?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../system/controller/NotifyController.java | 43 + .../system/interceptor/LoginInterceptor.java | 5 + .../system/dao/TbBlussBankBranchHfMapper.java | 24 + .../dao/system/dao/TbPlussCitysHfMapper.java | 24 + .../system/dao/TbPlussMccInfoHfMapper.java | 15 + .../dao/TbPlussMerchantAuditRecordMapper.java | 6 + .../dao/TbPlussMerchantHfInfoMapper.java | 27 + .../system/entity/TbBlussBankBranchHf.java | 27 + .../dao/system/entity/TbPlussCitysHf.java | 48 + .../dao/system/entity/TbPlussMccInfoHf.java | 98 + .../system/entity/TbPlussMerchantHfInfo.java | 118 + .../generator-mapper/generatorConfig.xml | 4 +- .../mapper/TbBlussBankBranchHfMapper.xml | 63 + .../resources/mapper/TbPlussCitysHfMapper.xml | 86 + .../mapper/TbPlussMccInfoHfMapper.xml | 90 + .../TbPlussMerchantAuditRecordMapper.xml | 8 + .../TbPlussMerchantChannelStatusMapper.xml | 2 +- .../mapper/TbPlussMerchantHfInfoMapper.xml | 172 + .../lib/adapay-core-sdk-1.2.10.jar | Bin 0 -> 30197 bytes .../lib/adapay-java-sdk-1.2.10.jar | Bin 0 -> 35566 bytes .../lib/adapay-sdk-merchant-1.2.6.jar | Bin 0 -> 11070 bytes newadmin/merchant-service-api/pom.xml | 51 + .../merchant/service/HfMerService.java | 2807 +++++++++++++++++ .../merchant/service/MerchantService.java | 6 + .../chaozhanggui/merchant/util/RSAUtils.java | 115 + .../merchant/util/SnowFlakeUtil.java | 22 + 26 files changed, 3858 insertions(+), 3 deletions(-) create mode 100644 newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/NotifyController.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbBlussBankBranchHfMapper.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussCitysHfMapper.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMccInfoHfMapper.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantHfInfoMapper.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbBlussBankBranchHf.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussCitysHf.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMccInfoHf.java create mode 100644 newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMerchantHfInfo.java create mode 100644 newadmin/dao-api/src/main/resources/mapper/TbBlussBankBranchHfMapper.xml create mode 100644 newadmin/dao-api/src/main/resources/mapper/TbPlussCitysHfMapper.xml create mode 100644 newadmin/dao-api/src/main/resources/mapper/TbPlussMccInfoHfMapper.xml create mode 100644 newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantHfInfoMapper.xml create mode 100644 newadmin/merchant-service-api/lib/adapay-core-sdk-1.2.10.jar create mode 100644 newadmin/merchant-service-api/lib/adapay-java-sdk-1.2.10.jar create mode 100644 newadmin/merchant-service-api/lib/adapay-sdk-merchant-1.2.6.jar create mode 100644 newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/HfMerService.java create mode 100644 newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/RSAUtils.java create mode 100644 newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/SnowFlakeUtil.java diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/NotifyController.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/NotifyController.java new file mode 100644 index 0000000..bec9b88 --- /dev/null +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/controller/NotifyController.java @@ -0,0 +1,43 @@ +package com.chaozhanggui.admin.system.controller; + +import com.alibaba.fastjson.JSON; +import com.chaozhanggui.merchant.service.HfMerService; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.apache.ibatis.annotations.Param; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; +import java.util.Map; + +@Slf4j +@RestController +@RequiredArgsConstructor +@RequestMapping("/notifyCallback") +public class NotifyController { + + + @Autowired + private HfMerService hfMerService; + + + + @PostMapping("feedCallBack") + public String feedCallBack(HttpServletRequest request) throws Exception { + log.info(JSON.toJSONString(request.getParameterMap())); + String type = request.getParameter("type"); + //验签请参data + String data = request.getParameter("data"); + //验签请参sign + String sign = request.getParameter("sign"); + hfMerService.callBack(type,data,sign); + return "SUCCESS"; + } + + @PostMapping("merchantResident") + public String merchantResident(@RequestParam("userId") String userId){ + hfMerService.merchantResident(userId,null); + return "SUCCESS"; + } +} diff --git a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java index 5f8d382..dd4aa4c 100644 --- a/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java +++ b/newadmin/admin/src/main/java/com/chaozhanggui/admin/system/interceptor/LoginInterceptor.java @@ -38,6 +38,11 @@ public class LoginInterceptor implements HandlerInterceptor { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { // 获取进过拦截器的路径 String requestURI = request.getRequestURI(); + + if("/admin/notifyCallback/feedCallBack".equals(requestURI)||"/admin/notifyCallback/merchantResident".equals(requestURI)){ + return true; + } + String loginName=request.getHeader("loginName"); String token=request.getHeader("token"); String userId=request.getHeader("userId"); diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbBlussBankBranchHfMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbBlussBankBranchHfMapper.java new file mode 100644 index 0000000..e616f99 --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbBlussBankBranchHfMapper.java @@ -0,0 +1,24 @@ +package com.chaozhanggui.dao.system.dao; + +import com.chaozhanggui.dao.system.entity.TbBlussBankBranchHf; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +@Component +@Mapper +public interface TbBlussBankBranchHfMapper { + int deleteByPrimaryKey(String bankCode); + + int insert(TbBlussBankBranchHf record); + + int insertSelective(TbBlussBankBranchHf record); + + TbBlussBankBranchHf selectByPrimaryKey(String bankCode); + + int updateByPrimaryKeySelective(TbBlussBankBranchHf record); + + int updateByPrimaryKey(TbBlussBankBranchHf record); + + + TbBlussBankBranchHf selectByName(String bankName); +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussCitysHfMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussCitysHfMapper.java new file mode 100644 index 0000000..ce0bf3f --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussCitysHfMapper.java @@ -0,0 +1,24 @@ +package com.chaozhanggui.dao.system.dao; + +import com.chaozhanggui.dao.system.entity.TbPlussCitysHf; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +@Component +@Mapper +public interface TbPlussCitysHfMapper { + int deleteByPrimaryKey(String cityCode); + + int insert(TbPlussCitysHf record); + + int insertSelective(TbPlussCitysHf record); + + TbPlussCitysHf selectByPrimaryKey(String cityCode); + + int updateByPrimaryKeySelective(TbPlussCitysHf record); + + int updateByPrimaryKey(TbPlussCitysHf record); + + TbPlussCitysHf selectByCodeAndParentCode(@Param("cityName") String cityName,@Param("parentCode") String parentCode); +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMccInfoHfMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMccInfoHfMapper.java new file mode 100644 index 0000000..dff2ef8 --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMccInfoHfMapper.java @@ -0,0 +1,15 @@ +package com.chaozhanggui.dao.system.dao; + +import com.chaozhanggui.dao.system.entity.TbPlussMccInfoHf; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Component; + +@Component +@Mapper +public interface TbPlussMccInfoHfMapper { + int insert(TbPlussMccInfoHf record); + + int insertSelective(TbPlussMccInfoHf record); + + TbPlussMccInfoHf selectByMccCode(String mccCode); +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantAuditRecordMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantAuditRecordMapper.java index 53986a1..347ad19 100644 --- a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantAuditRecordMapper.java +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantAuditRecordMapper.java @@ -5,6 +5,8 @@ import com.chaozhanggui.dao.system.entity.TbPlussMerchantAuditRecord; import org.apache.ibatis.annotations.Mapper; import org.springframework.stereotype.Component; +import java.util.List; + @Component @Mapper public interface TbPlussMerchantAuditRecordMapper { @@ -19,4 +21,8 @@ public interface TbPlussMerchantAuditRecordMapper { int updateByPrimaryKeySelective(TbPlussMerchantAuditRecord record); int updateByPrimaryKey(TbPlussMerchantAuditRecord record); + + TbPlussMerchantAuditRecord selectByApplicationid(String applicationid); + + List selectByStatus(); } \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantHfInfoMapper.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantHfInfoMapper.java new file mode 100644 index 0000000..eb960f7 --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/dao/TbPlussMerchantHfInfoMapper.java @@ -0,0 +1,27 @@ +package com.chaozhanggui.dao.system.dao; + +import com.chaozhanggui.dao.system.entity.TbPlussMerchantHfInfo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.springframework.stereotype.Component; + +@Component +@Mapper +public interface TbPlussMerchantHfInfoMapper { + int deleteByPrimaryKey(Integer id); + + int insert(TbPlussMerchantHfInfo record); + + int insertSelective(TbPlussMerchantHfInfo record); + + TbPlussMerchantHfInfo selectByPrimaryKey(Integer id); + + int updateByPrimaryKeySelective(TbPlussMerchantHfInfo record); + + int updateByPrimaryKey(TbPlussMerchantHfInfo record); + + TbPlussMerchantHfInfo selectByMerchantCodeAndSubApiKey(@Param("merchantCode") String merchantCode,@Param("liveApiKey") String liveApiKey); + + + TbPlussMerchantHfInfo selectByMerchantCode(String merchantCode); +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbBlussBankBranchHf.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbBlussBankBranchHf.java new file mode 100644 index 0000000..8a136c4 --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbBlussBankBranchHf.java @@ -0,0 +1,27 @@ +package com.chaozhanggui.dao.system.entity; + +import java.io.Serializable; + +public class TbBlussBankBranchHf implements Serializable { + private String bankCode; + + private String bankName; + + private static final long serialVersionUID = 1L; + + public String getBankCode() { + return bankCode; + } + + public void setBankCode(String bankCode) { + this.bankCode = bankCode == null ? null : bankCode.trim(); + } + + public String getBankName() { + return bankName; + } + + public void setBankName(String bankName) { + this.bankName = bankName == null ? null : bankName.trim(); + } +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussCitysHf.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussCitysHf.java new file mode 100644 index 0000000..a66996c --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussCitysHf.java @@ -0,0 +1,48 @@ +package com.chaozhanggui.dao.system.entity; + +import java.io.Serializable; +import java.util.Date; + +public class TbPlussCitysHf implements Serializable { + private String cityCode; + + private String cityName; + + private String parentCityCode; + + private Date createTime; + + private static final long serialVersionUID = 1L; + + public String getCityCode() { + return cityCode; + } + + public void setCityCode(String cityCode) { + this.cityCode = cityCode == null ? null : cityCode.trim(); + } + + public String getCityName() { + return cityName; + } + + public void setCityName(String cityName) { + this.cityName = cityName == null ? null : cityName.trim(); + } + + public String getParentCityCode() { + return parentCityCode; + } + + public void setParentCityCode(String parentCityCode) { + this.parentCityCode = parentCityCode == null ? null : parentCityCode.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMccInfoHf.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMccInfoHf.java new file mode 100644 index 0000000..44edbcc --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMccInfoHf.java @@ -0,0 +1,98 @@ +package com.chaozhanggui.dao.system.entity; + +import java.io.Serializable; +import java.util.Date; + +public class TbPlussMccInfoHf implements Serializable { + private String mccCode; + + private String aliClsId; + + private String aliCategoryId; + + private String wxPersonal; + + private String wxBusiness; + + private String mccTxt; + + private String fatherTxt; + + private String grandpaTxt; + + private Date createTime; + + private static final long serialVersionUID = 1L; + + public String getMccCode() { + return mccCode; + } + + public void setMccCode(String mccCode) { + this.mccCode = mccCode == null ? null : mccCode.trim(); + } + + public String getAliClsId() { + return aliClsId; + } + + public void setAliClsId(String aliClsId) { + this.aliClsId = aliClsId == null ? null : aliClsId.trim(); + } + + public String getAliCategoryId() { + return aliCategoryId; + } + + public void setAliCategoryId(String aliCategoryId) { + this.aliCategoryId = aliCategoryId == null ? null : aliCategoryId.trim(); + } + + public String getWxPersonal() { + return wxPersonal; + } + + public void setWxPersonal(String wxPersonal) { + this.wxPersonal = wxPersonal == null ? null : wxPersonal.trim(); + } + + public String getWxBusiness() { + return wxBusiness; + } + + public void setWxBusiness(String wxBusiness) { + this.wxBusiness = wxBusiness == null ? null : wxBusiness.trim(); + } + + public String getMccTxt() { + return mccTxt; + } + + public void setMccTxt(String mccTxt) { + this.mccTxt = mccTxt == null ? null : mccTxt.trim(); + } + + public String getFatherTxt() { + return fatherTxt; + } + + public void setFatherTxt(String fatherTxt) { + this.fatherTxt = fatherTxt == null ? null : fatherTxt.trim(); + } + + public String getGrandpaTxt() { + return grandpaTxt; + } + + public void setGrandpaTxt(String grandpaTxt) { + this.grandpaTxt = grandpaTxt == null ? null : grandpaTxt.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMerchantHfInfo.java b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMerchantHfInfo.java new file mode 100644 index 0000000..9d8db5d --- /dev/null +++ b/newadmin/dao-api/src/main/java/com/chaozhanggui/dao/system/entity/TbPlussMerchantHfInfo.java @@ -0,0 +1,118 @@ +package com.chaozhanggui.dao.system.entity; + +import java.io.Serializable; +import java.util.Date; + +public class TbPlussMerchantHfInfo implements Serializable { + private Integer id; + + private String merchantCode; + + private String status; + + private String testApiKey; + + private String liveApiKey; + + private String appIdList; + + private String appId; + + private String appName; + + private String loginPwd; + + private Date createTime; + + private Date updateTime; + + private static final long serialVersionUID = 1L; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getMerchantCode() { + return merchantCode; + } + + public void setMerchantCode(String merchantCode) { + this.merchantCode = merchantCode == null ? null : merchantCode.trim(); + } + + public String getStatus() { + return status; + } + + public void setStatus(String status) { + this.status = status == null ? null : status.trim(); + } + + public String getTestApiKey() { + return testApiKey; + } + + public void setTestApiKey(String testApiKey) { + this.testApiKey = testApiKey == null ? null : testApiKey.trim(); + } + + public String getLiveApiKey() { + return liveApiKey; + } + + public void setLiveApiKey(String liveApiKey) { + this.liveApiKey = liveApiKey == null ? null : liveApiKey.trim(); + } + + public String getAppIdList() { + return appIdList; + } + + public void setAppIdList(String appIdList) { + this.appIdList = appIdList == null ? null : appIdList.trim(); + } + + public String getAppId() { + return appId; + } + + public void setAppId(String appId) { + this.appId = appId == null ? null : appId.trim(); + } + + public String getAppName() { + return appName; + } + + public void setAppName(String appName) { + this.appName = appName == null ? null : appName.trim(); + } + + public String getLoginPwd() { + return loginPwd; + } + + public void setLoginPwd(String loginPwd) { + this.loginPwd = loginPwd == null ? null : loginPwd.trim(); + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml b/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml index 2ec1c00..a36747d 100644 --- a/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml +++ b/newadmin/dao-api/src/main/resources/generator-mapper/generatorConfig.xml @@ -21,7 +21,7 @@ + driverClass="com.mysql.cj.jdbc.Driver" password="mysqlroot@123" userId="ysk_test"> @@ -53,7 +53,7 @@ -
diff --git a/newadmin/dao-api/src/main/resources/mapper/TbBlussBankBranchHfMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbBlussBankBranchHfMapper.xml new file mode 100644 index 0000000..b5862d3 --- /dev/null +++ b/newadmin/dao-api/src/main/resources/mapper/TbBlussBankBranchHfMapper.xml @@ -0,0 +1,63 @@ + + + + + + + + + bank_code, bank_name + + + + delete from tb_pluss_bank_branch_hf + where bank_code = #{bankCode,jdbcType=VARCHAR} + + + insert into tb_pluss_bank_branch_hf (bank_code, bank_name) + values (#{bankCode,jdbcType=VARCHAR}, #{bankName,jdbcType=VARCHAR}) + + + insert into tb_pluss_bank_branch_hf + + + bank_code, + + + bank_name, + + + + + #{bankCode,jdbcType=VARCHAR}, + + + #{bankName,jdbcType=VARCHAR}, + + + + + update tb_pluss_bank_branch_hf + + + bank_name = #{bankName,jdbcType=VARCHAR}, + + + where bank_code = #{bankCode,jdbcType=VARCHAR} + + + update tb_pluss_bank_branch_hf + set bank_name = #{bankName,jdbcType=VARCHAR} + where bank_code = #{bankCode,jdbcType=VARCHAR} + + + + \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussCitysHfMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussCitysHfMapper.xml new file mode 100644 index 0000000..1116a41 --- /dev/null +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussCitysHfMapper.xml @@ -0,0 +1,86 @@ + + + + + + + + + + + city_code, city_name, parent_city_code, create_time + + + + delete from tb_pluss_citys_hf + where city_code = #{cityCode,jdbcType=VARCHAR} + + + insert into tb_pluss_citys_hf (city_code, city_name, parent_city_code, + create_time) + values (#{cityCode,jdbcType=VARCHAR}, #{cityName,jdbcType=VARCHAR}, #{parentCityCode,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}) + + + insert into tb_pluss_citys_hf + + + city_code, + + + city_name, + + + parent_city_code, + + + create_time, + + + + + #{cityCode,jdbcType=VARCHAR}, + + + #{cityName,jdbcType=VARCHAR}, + + + #{parentCityCode,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + update tb_pluss_citys_hf + + + city_name = #{cityName,jdbcType=VARCHAR}, + + + parent_city_code = #{parentCityCode,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + where city_code = #{cityCode,jdbcType=VARCHAR} + + + update tb_pluss_citys_hf + set city_name = #{cityName,jdbcType=VARCHAR}, + parent_city_code = #{parentCityCode,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP} + where city_code = #{cityCode,jdbcType=VARCHAR} + + + + \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussMccInfoHfMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussMccInfoHfMapper.xml new file mode 100644 index 0000000..04645e1 --- /dev/null +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussMccInfoHfMapper.xml @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + insert into tb_pluss_mcc_info_hf (mcc_code, ali_cls_id, ali_category_id, + wx_personal, wx_business, mcc_txt, + father_txt, grandpa_txt, create_time + ) + values (#{mccCode,jdbcType=VARCHAR}, #{aliClsId,jdbcType=VARCHAR}, #{aliCategoryId,jdbcType=VARCHAR}, + #{wxPersonal,jdbcType=VARCHAR}, #{wxBusiness,jdbcType=VARCHAR}, #{mccTxt,jdbcType=VARCHAR}, + #{fatherTxt,jdbcType=VARCHAR}, #{grandpaTxt,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP} + ) + + + insert into tb_pluss_mcc_info_hf + + + mcc_code, + + + ali_cls_id, + + + ali_category_id, + + + wx_personal, + + + wx_business, + + + mcc_txt, + + + father_txt, + + + grandpa_txt, + + + create_time, + + + + + #{mccCode,jdbcType=VARCHAR}, + + + #{aliClsId,jdbcType=VARCHAR}, + + + #{aliCategoryId,jdbcType=VARCHAR}, + + + #{wxPersonal,jdbcType=VARCHAR}, + + + #{wxBusiness,jdbcType=VARCHAR}, + + + #{mccTxt,jdbcType=VARCHAR}, + + + #{fatherTxt,jdbcType=VARCHAR}, + + + #{grandpaTxt,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + + + + \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantAuditRecordMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantAuditRecordMapper.xml index 95cc335..a70f58b 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantAuditRecordMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantAuditRecordMapper.xml @@ -150,4 +150,12 @@ applicationId = #{applicationid,jdbcType=VARCHAR} where id = #{id,jdbcType=INTEGER} + + + + \ No newline at end of file diff --git a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml index 7f4c79f..d825c71 100644 --- a/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml +++ b/newadmin/dao-api/src/main/resources/mapper/TbPlussMerchantChannelStatusMapper.xml @@ -488,7 +488,7 @@ resultType="com.chaozhanggui.dao.system.entity.TbPlussMerchantChannelStatus"> SELECT * FROM tb_pluss_merchant_channel_status WHERE merchantCode=#{merchantCode} - AND channelId=#{channelId} + AND channel=#{channelId} + select + + from tb_pluss_merchant_hf_info + where id = #{id,jdbcType=INTEGER} + + + delete from tb_pluss_merchant_hf_info + where id = #{id,jdbcType=INTEGER} + + + insert into tb_pluss_merchant_hf_info (id, merchant_code, status, + test_api_key, live_api_key, app_id_list, + app_id, app_name, login_pwd, + create_time, update_time) + values (#{id,jdbcType=INTEGER}, #{merchantCode,jdbcType=VARCHAR}, #{status,jdbcType=VARCHAR}, + #{testApiKey,jdbcType=VARCHAR}, #{liveApiKey,jdbcType=VARCHAR}, #{appIdList,jdbcType=VARCHAR}, + #{appId,jdbcType=VARCHAR}, #{appName,jdbcType=VARCHAR}, #{loginPwd,jdbcType=VARCHAR}, + #{createTime,jdbcType=TIMESTAMP}, #{updateTime,jdbcType=TIMESTAMP}) + + + insert into tb_pluss_merchant_hf_info + + + id, + + + merchant_code, + + + status, + + + test_api_key, + + + live_api_key, + + + app_id_list, + + + app_id, + + + app_name, + + + login_pwd, + + + create_time, + + + update_time, + + + + + #{id,jdbcType=INTEGER}, + + + #{merchantCode,jdbcType=VARCHAR}, + + + #{status,jdbcType=VARCHAR}, + + + #{testApiKey,jdbcType=VARCHAR}, + + + #{liveApiKey,jdbcType=VARCHAR}, + + + #{appIdList,jdbcType=VARCHAR}, + + + #{appId,jdbcType=VARCHAR}, + + + #{appName,jdbcType=VARCHAR}, + + + #{loginPwd,jdbcType=VARCHAR}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + + + update tb_pluss_merchant_hf_info + + + merchant_code = #{merchantCode,jdbcType=VARCHAR}, + + + status = #{status,jdbcType=VARCHAR}, + + + test_api_key = #{testApiKey,jdbcType=VARCHAR}, + + + live_api_key = #{liveApiKey,jdbcType=VARCHAR}, + + + app_id_list = #{appIdList,jdbcType=VARCHAR}, + + + app_id = #{appId,jdbcType=VARCHAR}, + + + app_name = #{appName,jdbcType=VARCHAR}, + + + login_pwd = #{loginPwd,jdbcType=VARCHAR}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=INTEGER} + + + update tb_pluss_merchant_hf_info + set merchant_code = #{merchantCode,jdbcType=VARCHAR}, + status = #{status,jdbcType=VARCHAR}, + test_api_key = #{testApiKey,jdbcType=VARCHAR}, + live_api_key = #{liveApiKey,jdbcType=VARCHAR}, + app_id_list = #{appIdList,jdbcType=VARCHAR}, + app_id = #{appId,jdbcType=VARCHAR}, + app_name = #{appName,jdbcType=VARCHAR}, + login_pwd = #{loginPwd,jdbcType=VARCHAR}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=INTEGER} + + + + + + \ No newline at end of file diff --git a/newadmin/merchant-service-api/lib/adapay-core-sdk-1.2.10.jar b/newadmin/merchant-service-api/lib/adapay-core-sdk-1.2.10.jar new file mode 100644 index 0000000000000000000000000000000000000000..7e32682df745bb265d3ed2a93e853d7e4fbc6f81 GIT binary patch literal 30197 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

cM-rh{I*V40a1~Jxu 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

7jbkQC)oA!^H{P%qQ*G$gc#ajaXFn*JM z7*qc9`0cNm+}Xk2&e`nGMkP_-9zz5xbRB90di7;ODozTWZ^L9NXN+5QN8JGZOi?-z zxQ5Kq%TXu$weKC?eG*UxQ~o>DkLTMNW=L%i<}ve$4BkCKi(EneE?>WUgbh|5*iU7< z^^yD|E3*!@{>aw6E1Ew7*ifCz=;Pnjx)wqT4Eja63X2(E_>9el*5AOhc$xt=Ee4AxwMN z6$*@eQK(ZLey@4gGpz6tiD?|Xw%(`>?efUUa?UHi<0Q7xng<)@fcbrQriEi~dW+@W z_DFK>)3_41FQ}U5fo*HKNb5(A@_Q$5y2x3vaFJ`<_6qi<*SC@)>TZ#5rNy)n#V0w& zD?FTB2{_v{_*R>-1UZ5n%z}kvnPZ;1Kv|k4SnOzK;u;x>E=oK%ezi(fIRW$BBuXF# zDW!O;R>~(9yB3IJI2coQ&0|XG>U>405>p4Qz6Zs-5Sdb< z7iA(R#s)!D<#!R$D4`cKg5FZc@a=8DvDq`#sf;MRD&LQ%pDP_oId2rcVN?1JGLIC^ zZo9#~?8&~-C~LcedyKK)Bk8X(X3j;aqV~`UA3b!!O#j#ki~KRu{x#zLbK0e;>#VAd z^+O@)E7iW$D<~b|o&wkp(9gJ`X!DgKv6cd1M&x^@cQ|!ak3JvG_kla``mnG;N`R4cI2A4{)6Z{Y`2r1b9czy z%Y{=Xa)TZyd^lV8StxonIBs22ciYnl=l8K1tP2~siH1^8Ub zbfNR6?+}$ETk(+jF)WkL+Mcl2uZL0^+ohd_K50BF(R#bvz3eWz;4vS11=FicxR&NP z7T~eKyxkhy+xq#mhl>$so)U~O9x7&?b%0U?PH`$w%fEGk*u3qT!E|z`h)CC5E{f8UAFlpx9ZVtV=hB{(NLRjslUB<=giT1L4o@AC zuHS(`9iyZ)|3t6DuZbVG?ui9fcK;xokn$<*IIAq8P@e~EULm`@U<(13cYp#c?j-GY zK_K&4N^ryA_FM8-a6US6y-TlD(?Z)6P+eWtx}02h24ksGUL^(fS=7d5cU|YV-(KbM zhu++hx)68xz4B^3>>YYzQ^YgFD*QeKv2%bLVHR^VBhcPKy9Zk@)lt2tg`#YI(~GNv zvB)ES1a3K1jk(&qU`0#nD^y?jfM)yZ(c-MMzqQzxrwjNJck5LHPs~yC1P%^gr;25! z;XA}u%o6IzaZ+5oeNOWd(lrI6u4y)JdhYvvA!nps*L!(8gjU;<2%h8aKiY#@KhnI{bv9Y+sZ&pDwuRG(;rkws2W9xfLP@9f_T< z8{hSlD#DiG#-*rqxc6jR7@^Nsd5w6~Ij`HE%txiY_lUA&5im5*Weyul@CoCmf72M< z_>Q;h09Zs=GC~)NGA_*OmmojjoSa;Qp-~vxNNiJ=O3>Rap(UqZ4CjGV@zki^=xY0A zg_2Z5uY#2d?%}C`kqmSC&b;btr`I38KAkCnR5md>SZLlw7Ut!8k89 zPBH*>Xz>Hbwf7BJ-DHN`aPZ?iS@=WVPQ9hXwt(UXG0Tga6_+E+?FSU%h6pNoD$fLM z8OUK+CPsYRp`H|m!l&OkdIxM+55~31kSJ2m4jDK@z8ww})J~Iv@Dae421CguOx76z zRH^kqlp$6aCk0IjOiV<=88ETaA-Si`NHrxSW33?>UiMoEdr3a&DFU5Qi$3m=qe977 zV1@a@L;b~k?jaA@*98&LRlr;8k1&=S6$$lAp=^-S0hEKIg48g6esoFprFyu*x`}8o zui#QBBE;NLyR0L%f7a6cg6A{C?pwx`?VZK1V~gi%WAtRW_W|W>2A=QU>Y5(qKgU!^ ztp7qzM?%3ok(-iiI(1^KmsQW7lr6w6C?`c?a_y4q@WZoY2XUE_5T2Fod2l+ literal 0 HcmV?d00001 diff --git a/newadmin/merchant-service-api/pom.xml b/newadmin/merchant-service-api/pom.xml index 7a8b439..6774431 100644 --- a/newadmin/merchant-service-api/pom.xml +++ b/newadmin/merchant-service-api/pom.xml @@ -17,6 +17,30 @@ UTF-8 + + org.apache.commons + commons-lang3 + 3.6 + + + org.apache.httpcomponents + httpclient + 4.5.2 + + + + org.apache.httpcomponents + httpmime + 4.5.2 + + + + com.alibaba + fastjson + 1.2.48 + + + com.chaozhanggui.system common-api @@ -52,6 +76,33 @@ org.springframework.boot spring-boot-starter-webflux + + + com.huifu.adapay + adapay-sdk-merchant + 1.2.6 + ${project.basedir}/lib/adapay-sdk-merchant-1.2.6.jar + system + + + + + com.huifu.adapay + adapay-core-sdk + 1.2.10 + ${project.basedir}/lib/adapay-core-sdk-1.2.10.jar + system + + + + + com.huifu.adapay + adapay-java-sdk + 1.2.10 + ${project.basedir}/lib/adapay-java-sdk-1.2.10.jar + system + + \ No newline at end of file diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/HfMerService.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/HfMerService.java new file mode 100644 index 0000000..0b0d323 --- /dev/null +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/HfMerService.java @@ -0,0 +1,2807 @@ +package com.chaozhanggui.merchant.service; + + +import cn.hutool.core.io.FileUtil; +import cn.hutool.core.util.ObjectUtil; +import cn.hutool.http.HttpRequest; +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.chaozhanggui.common.system.config.MsgException; +import com.chaozhanggui.common.system.util.MD5Util; +import com.chaozhanggui.dao.system.dao.*; +import com.chaozhanggui.dao.system.entity.*; +import com.chaozhanggui.merchant.util.RSAUtils; +import com.chaozhanggui.merchant.util.SnowFlakeUtil; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.huifu.adapay.Adapay; +import com.huifu.adapay.core.AdapayCore; +import com.huifu.adapay.core.exception.BaseAdaPayException; +import com.huifu.adapay.core.util.AdapaySign; +import com.huifu.adapay.merchant.AdapayMerchant; +import com.huifu.adapay.merchant.model.MerchantConfig; +import com.huifu.adapay.merchant.model.MerchantEntry; +import com.huifu.adapay.merchant.model.MerchantResident; +import lombok.SneakyThrows; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpMethod; +import org.springframework.http.ResponseEntity; +import org.springframework.mock.web.MockMultipartFile; +import org.springframework.stereotype.Component; +import org.springframework.web.client.RestTemplate; +import org.springframework.web.multipart.MultipartFile; + +import java.io.*; +import java.net.URI; +import java.net.URISyntaxException; +import java.security.NoSuchAlgorithmException; +import java.util.*; +import java.util.stream.Collectors; + +@Component +@Slf4j +public class HfMerService { + + + + @Autowired + TbPlussAccountMapper tbPlussAccountMapper; + + @Autowired + TbPlussBankCardMapper tbPlussBankCardMapper; + + @Autowired + TbBlussBankBranchHfMapper tbBlussBankBranchHfMapper; + + + @Autowired + TbPlussMerchantChannelStatusMapper tbPlussMerchantChannelStatusMapper; + + + + @Autowired + TbPlussMerchantAuditRecordMapper tbPlussMerchantAuditRecordMapper; + + + @Autowired + TbPlussMerchantHfInfoMapper tbPlussMerchantHfInfoMapper; + + @Autowired + TbPlussMccReflectMapper tbPlussMccReflectMapper; + + + @Autowired + TbPlussMccInfoHfMapper tbPlussMccInfoHfMapper; + + + @Autowired + TbPlussCitysHfMapper tbPlussCitysHfMapper; + + @Autowired + TbPlussMerchantBaseInfoMapper tbPlussMerchantBaseInfoMapper; + + @Autowired + TbPlussIdCardMapper tbPlussIdCardMapper; + + + @Autowired + TbPlussMerchantImageMapper tbPlussMerchantImageMapper; + + + + private static List provList=null; + + + static { + String s="[\n" + + "\t {\n" + + "\t\t\"value\": \"0011\",\n" + + "\t\t\"title\": \"北京市\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1100\",\n" + + "\t\t\t\"title\": \"北京市\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0012\",\n" + + "\t\t\"title\": \"天津市\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1200\",\n" + + "\t\t\t\"title\": \"天津市\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0013\",\n" + + "\t\t\"title\": \"河北省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1301\",\n" + + "\t\t\t\"title\": \"石家庄\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1302\",\n" + + "\t\t\t\"title\": \"保定\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1303\",\n" + + "\t\t\t\"title\": \"沧州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1304\",\n" + + "\t\t\t\"title\": \"承德\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1305\",\n" + + "\t\t\t\"title\": \"邯郸\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1306\",\n" + + "\t\t\t\"title\": \"衡水\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1307\",\n" + + "\t\t\t\"title\": \"廊坊\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1308\",\n" + + "\t\t\t\"title\": \"秦皇岛\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1309\",\n" + + "\t\t\t\"title\": \"唐山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1310\",\n" + + "\t\t\t\"title\": \"邢台\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1311\",\n" + + "\t\t\t\"title\": \"张家口\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0014\",\n" + + "\t\t\"title\": \"山西省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1401\",\n" + + "\t\t\t\"title\": \"太原\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1402\",\n" + + "\t\t\t\"title\": \"长治\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1403\",\n" + + "\t\t\t\"title\": \"大同\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1404\",\n" + + "\t\t\t\"title\": \"晋城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1405\",\n" + + "\t\t\t\"title\": \"离石\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1406\",\n" + + "\t\t\t\"title\": \"临汾\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1407\",\n" + + "\t\t\t\"title\": \"朔州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1408\",\n" + + "\t\t\t\"title\": \"忻州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1409\",\n" + + "\t\t\t\"title\": \"阳泉\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1410\",\n" + + "\t\t\t\"title\": \"榆次\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1411\",\n" + + "\t\t\t\"title\": \"运城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1412\",\n" + + "\t\t\t\"title\": \"晋中\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1413\",\n" + + "\t\t\t\"title\": \"吕梁\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0015\",\n" + + "\t\t\"title\": \"内蒙古自治区\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1501\",\n" + + "\t\t\t\"title\": \"呼和浩特\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1502\",\n" + + "\t\t\t\"title\": \"包头\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1503\",\n" + + "\t\t\t\"title\": \"阿拉善\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1504\",\n" + + "\t\t\t\"title\": \"巴彦淖尔\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1505\",\n" + + "\t\t\t\"title\": \"赤峰\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1506\",\n" + + "\t\t\t\"title\": \"呼伦贝尔\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1507\",\n" + + "\t\t\t\"title\": \"乌海\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1508\",\n" + + "\t\t\t\"title\": \"乌兰察布\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1509\",\n" + + "\t\t\t\"title\": \"锡林郭勒\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1510\",\n" + + "\t\t\t\"title\": \"兴安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1511\",\n" + + "\t\t\t\"title\": \"鄂尔多斯\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1512\",\n" + + "\t\t\t\"title\": \"通辽\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"1513\",\n" + + "\t\t\t\"title\": \"满洲里\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0021\",\n" + + "\t\t\"title\": \"辽宁省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2101\",\n" + + "\t\t\t\"title\": \"沈阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2102\",\n" + + "\t\t\t\"title\": \"大连\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2103\",\n" + + "\t\t\t\"title\": \"鞍山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2104\",\n" + + "\t\t\t\"title\": \"本溪\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2105\",\n" + + "\t\t\t\"title\": \"朝阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2106\",\n" + + "\t\t\t\"title\": \"丹东\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2107\",\n" + + "\t\t\t\"title\": \"抚顺\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2108\",\n" + + "\t\t\t\"title\": \"阜新\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2109\",\n" + + "\t\t\t\"title\": \"葫芦岛\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2110\",\n" + + "\t\t\t\"title\": \"锦州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2111\",\n" + + "\t\t\t\"title\": \"辽阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2112\",\n" + + "\t\t\t\"title\": \"盘锦\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2113\",\n" + + "\t\t\t\"title\": \"铁岭\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2114\",\n" + + "\t\t\t\"title\": \"营口\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0022\",\n" + + "\t\t\"title\": \"吉林省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2201\",\n" + + "\t\t\t\"title\": \"长春\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2202\",\n" + + "\t\t\t\"title\": \"白城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2203\",\n" + + "\t\t\t\"title\": \"白山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2204\",\n" + + "\t\t\t\"title\": \"吉林\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2205\",\n" + + "\t\t\t\"title\": \"辽源\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2206\",\n" + + "\t\t\t\"title\": \"四平\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2207\",\n" + + "\t\t\t\"title\": \"松原\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2208\",\n" + + "\t\t\t\"title\": \"通化\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2209\",\n" + + "\t\t\t\"title\": \"延边\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0023\",\n" + + "\t\t\"title\": \"黑龙江省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2301\",\n" + + "\t\t\t\"title\": \"哈尔滨\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2302\",\n" + + "\t\t\t\"title\": \"大庆\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2303\",\n" + + "\t\t\t\"title\": \"大兴安岭\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2304\",\n" + + "\t\t\t\"title\": \"鹤岗\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2305\",\n" + + "\t\t\t\"title\": \"黑河\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2306\",\n" + + "\t\t\t\"title\": \"鸡西\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2307\",\n" + + "\t\t\t\"title\": \"佳木斯\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2308\",\n" + + "\t\t\t\"title\": \"牡丹江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2309\",\n" + + "\t\t\t\"title\": \"七台河\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2310\",\n" + + "\t\t\t\"title\": \"齐齐哈尔\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2311\",\n" + + "\t\t\t\"title\": \"双鸭山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2312\",\n" + + "\t\t\t\"title\": \"绥化\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"2313\",\n" + + "\t\t\t\"title\": \"伊春\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0031\",\n" + + "\t\t\"title\": \"上海市\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3100\",\n" + + "\t\t\t\"title\": \"上海市\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0032\",\n" + + "\t\t\"title\": \"江苏省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3201\",\n" + + "\t\t\t\"title\": \"南京\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3202\",\n" + + "\t\t\t\"title\": \"常州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3203\",\n" + + "\t\t\t\"title\": \"淮安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3204\",\n" + + "\t\t\t\"title\": \"连云港\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3205\",\n" + + "\t\t\t\"title\": \"南通\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3206\",\n" + + "\t\t\t\"title\": \"苏州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3207\",\n" + + "\t\t\t\"title\": \"宿迁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3208\",\n" + + "\t\t\t\"title\": \"泰州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3209\",\n" + + "\t\t\t\"title\": \"无锡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3210\",\n" + + "\t\t\t\"title\": \"徐州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3211\",\n" + + "\t\t\t\"title\": \"盐城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3212\",\n" + + "\t\t\t\"title\": \"扬州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3213\",\n" + + "\t\t\t\"title\": \"镇江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3214\",\n" + + "\t\t\t\"title\": \"胥浦\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3215\",\n" + + "\t\t\t\"title\": \"昆山\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0033\",\n" + + "\t\t\"title\": \"浙江省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3301\",\n" + + "\t\t\t\"title\": \"杭州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3302\",\n" + + "\t\t\t\"title\": \"宁波\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3303\",\n" + + "\t\t\t\"title\": \"湖州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3304\",\n" + + "\t\t\t\"title\": \"嘉兴\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3305\",\n" + + "\t\t\t\"title\": \"金华\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3306\",\n" + + "\t\t\t\"title\": \"绍兴\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3307\",\n" + + "\t\t\t\"title\": \"台州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3308\",\n" + + "\t\t\t\"title\": \"温州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3309\",\n" + + "\t\t\t\"title\": \"舟山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3310\",\n" + + "\t\t\t\"title\": \"衢州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3311\",\n" + + "\t\t\t\"title\": \"丽水\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0034\",\n" + + "\t\t\"title\": \"安徽省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3401\",\n" + + "\t\t\t\"title\": \"合肥\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3402\",\n" + + "\t\t\t\"title\": \"安庆\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3403\",\n" + + "\t\t\t\"title\": \"蚌埠\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3404\",\n" + + "\t\t\t\"title\": \"巢湖\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3405\",\n" + + "\t\t\t\"title\": \"池州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3406\",\n" + + "\t\t\t\"title\": \"滁州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3407\",\n" + + "\t\t\t\"title\": \"阜阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3408\",\n" + + "\t\t\t\"title\": \"淮北\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3409\",\n" + + "\t\t\t\"title\": \"淮南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3410\",\n" + + "\t\t\t\"title\": \"黄山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3411\",\n" + + "\t\t\t\"title\": \"六安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3412\",\n" + + "\t\t\t\"title\": \"马鞍山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3414\",\n" + + "\t\t\t\"title\": \"铜陵\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3415\",\n" + + "\t\t\t\"title\": \"芜湖\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3416\",\n" + + "\t\t\t\"title\": \"宣城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3417\",\n" + + "\t\t\t\"title\": \"亳州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3418\",\n" + + "\t\t\t\"title\": \"宿州\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0035\",\n" + + "\t\t\"title\": \"福建省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3501\",\n" + + "\t\t\t\"title\": \"福州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3502\",\n" + + "\t\t\t\"title\": \"厦门\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3503\",\n" + + "\t\t\t\"title\": \"龙岩\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3504\",\n" + + "\t\t\t\"title\": \"南平\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3505\",\n" + + "\t\t\t\"title\": \"宁德\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3506\",\n" + + "\t\t\t\"title\": \"莆田\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3507\",\n" + + "\t\t\t\"title\": \"泉州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3508\",\n" + + "\t\t\t\"title\": \"三明\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3509\",\n" + + "\t\t\t\"title\": \"漳州\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0036\",\n" + + "\t\t\"title\": \"江西省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3601\",\n" + + "\t\t\t\"title\": \"南昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3602\",\n" + + "\t\t\t\"title\": \"抚州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3603\",\n" + + "\t\t\t\"title\": \"赣州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3604\",\n" + + "\t\t\t\"title\": \"吉安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3605\",\n" + + "\t\t\t\"title\": \"景德镇\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3606\",\n" + + "\t\t\t\"title\": \"九江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3607\",\n" + + "\t\t\t\"title\": \"萍乡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3608\",\n" + + "\t\t\t\"title\": \"上饶\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3609\",\n" + + "\t\t\t\"title\": \"新余\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3610\",\n" + + "\t\t\t\"title\": \"宜春\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3611\",\n" + + "\t\t\t\"title\": \"鹰潭\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0037\",\n" + + "\t\t\"title\": \"山东省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3701\",\n" + + "\t\t\t\"title\": \"济南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3702\",\n" + + "\t\t\t\"title\": \"青岛\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3703\",\n" + + "\t\t\t\"title\": \"滨州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3704\",\n" + + "\t\t\t\"title\": \"德州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3705\",\n" + + "\t\t\t\"title\": \"东营\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3706\",\n" + + "\t\t\t\"title\": \"菏泽\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3707\",\n" + + "\t\t\t\"title\": \"济宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3708\",\n" + + "\t\t\t\"title\": \"莱芜\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3709\",\n" + + "\t\t\t\"title\": \"聊城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3710\",\n" + + "\t\t\t\"title\": \"临沂\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3711\",\n" + + "\t\t\t\"title\": \"日照\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3712\",\n" + + "\t\t\t\"title\": \"泰安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3713\",\n" + + "\t\t\t\"title\": \"威海\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3714\",\n" + + "\t\t\t\"title\": \"潍坊\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3715\",\n" + + "\t\t\t\"title\": \"烟台\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3716\",\n" + + "\t\t\t\"title\": \"枣庄\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"3717\",\n" + + "\t\t\t\"title\": \"淄博\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0041\",\n" + + "\t\t\"title\": \"河南省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4101\",\n" + + "\t\t\t\"title\": \"郑州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4102\",\n" + + "\t\t\t\"title\": \"安阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4103\",\n" + + "\t\t\t\"title\": \"焦作\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4104\",\n" + + "\t\t\t\"title\": \"鹤壁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4105\",\n" + + "\t\t\t\"title\": \"开封\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4106\",\n" + + "\t\t\t\"title\": \"洛阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4107\",\n" + + "\t\t\t\"title\": \"南阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4108\",\n" + + "\t\t\t\"title\": \"平顶山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4109\",\n" + + "\t\t\t\"title\": \"三门峡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4110\",\n" + + "\t\t\t\"title\": \"商丘\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4111\",\n" + + "\t\t\t\"title\": \"新乡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4112\",\n" + + "\t\t\t\"title\": \"信阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4113\",\n" + + "\t\t\t\"title\": \"许昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4114\",\n" + + "\t\t\t\"title\": \"周口\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4115\",\n" + + "\t\t\t\"title\": \"驻马店\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4116\",\n" + + "\t\t\t\"title\": \"漯河\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4117\",\n" + + "\t\t\t\"title\": \"濮阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4118\",\n" + + "\t\t\t\"title\": \"济源\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0042\",\n" + + "\t\t\"title\": \"湖北省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4201\",\n" + + "\t\t\t\"title\": \"武汉\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4202\",\n" + + "\t\t\t\"title\": \"鄂州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4203\",\n" + + "\t\t\t\"title\": \"恩施\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4204\",\n" + + "\t\t\t\"title\": \"黄冈\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4205\",\n" + + "\t\t\t\"title\": \"黄石\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4206\",\n" + + "\t\t\t\"title\": \"荆门\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4207\",\n" + + "\t\t\t\"title\": \"荆州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4208\",\n" + + "\t\t\t\"title\": \"十堰\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4209\",\n" + + "\t\t\t\"title\": \"随州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4210\",\n" + + "\t\t\t\"title\": \"咸宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4211\",\n" + + "\t\t\t\"title\": \"襄樊\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4212\",\n" + + "\t\t\t\"title\": \"孝感\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4213\",\n" + + "\t\t\t\"title\": \"神农架\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4214\",\n" + + "\t\t\t\"title\": \"天门\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4215\",\n" + + "\t\t\t\"title\": \"宜昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4216\",\n" + + "\t\t\t\"title\": \"三峡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4217\",\n" + + "\t\t\t\"title\": \"潜江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4218\",\n" + + "\t\t\t\"title\": \"仙桃\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0043\",\n" + + "\t\t\"title\": \"湖南省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4301\",\n" + + "\t\t\t\"title\": \"长沙\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4302\",\n" + + "\t\t\t\"title\": \"常德\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4303\",\n" + + "\t\t\t\"title\": \"郴州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4304\",\n" + + "\t\t\t\"title\": \"衡阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4305\",\n" + + "\t\t\t\"title\": \"怀化\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4306\",\n" + + "\t\t\t\"title\": \"娄底\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4307\",\n" + + "\t\t\t\"title\": \"邵阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4308\",\n" + + "\t\t\t\"title\": \"湘潭\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4309\",\n" + + "\t\t\t\"title\": \"湘西\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4310\",\n" + + "\t\t\t\"title\": \"益阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4311\",\n" + + "\t\t\t\"title\": \"永州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4312\",\n" + + "\t\t\t\"title\": \"岳阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4313\",\n" + + "\t\t\t\"title\": \"张家界\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4314\",\n" + + "\t\t\t\"title\": \"株洲\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4331\",\n" + + "\t\t\t\"title\": \"吉首\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0044\",\n" + + "\t\t\"title\": \"广东省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4401\",\n" + + "\t\t\t\"title\": \"广州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4402\",\n" + + "\t\t\t\"title\": \"深圳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4403\",\n" + + "\t\t\t\"title\": \"潮州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4404\",\n" + + "\t\t\t\"title\": \"东莞\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4405\",\n" + + "\t\t\t\"title\": \"佛山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4406\",\n" + + "\t\t\t\"title\": \"惠州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4407\",\n" + + "\t\t\t\"title\": \"江门\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4408\",\n" + + "\t\t\t\"title\": \"揭阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4409\",\n" + + "\t\t\t\"title\": \"茂名\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4410\",\n" + + "\t\t\t\"title\": \"梅州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4411\",\n" + + "\t\t\t\"title\": \"清远\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4412\",\n" + + "\t\t\t\"title\": \"汕头\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4413\",\n" + + "\t\t\t\"title\": \"汕尾\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4414\",\n" + + "\t\t\t\"title\": \"韶关\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4415\",\n" + + "\t\t\t\"title\": \"阳江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4416\",\n" + + "\t\t\t\"title\": \"云浮\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4417\",\n" + + "\t\t\t\"title\": \"湛江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4418\",\n" + + "\t\t\t\"title\": \"肇庆\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4419\",\n" + + "\t\t\t\"title\": \"中山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4420\",\n" + + "\t\t\t\"title\": \"河源\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4421\",\n" + + "\t\t\t\"title\": \"珠海\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0045\",\n" + + "\t\t\"title\": \"广西壮族自治区\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4501\",\n" + + "\t\t\t\"title\": \"南宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4502\",\n" + + "\t\t\t\"title\": \"百色\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4503\",\n" + + "\t\t\t\"title\": \"北海\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4504\",\n" + + "\t\t\t\"title\": \"桂林\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4505\",\n" + + "\t\t\t\"title\": \"河池\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4506\",\n" + + "\t\t\t\"title\": \"柳州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4507\",\n" + + "\t\t\t\"title\": \"梧州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4508\",\n" + + "\t\t\t\"title\": \"玉林\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4509\",\n" + + "\t\t\t\"title\": \"崇左\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4510\",\n" + + "\t\t\t\"title\": \"防城港\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4511\",\n" + + "\t\t\t\"title\": \"贵港\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4512\",\n" + + "\t\t\t\"title\": \"贺州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4513\",\n" + + "\t\t\t\"title\": \"来宾\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4514\",\n" + + "\t\t\t\"title\": \"钦州\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0046\",\n" + + "\t\t\"title\": \"海南省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4601\",\n" + + "\t\t\t\"title\": \"海口\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4602\",\n" + + "\t\t\t\"title\": \"三亚\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4603\",\n" + + "\t\t\t\"title\": \"白沙\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4604\",\n" + + "\t\t\t\"title\": \"保亭\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4605\",\n" + + "\t\t\t\"title\": \"昌江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4606\",\n" + + "\t\t\t\"title\": \"澄迈\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4607\",\n" + + "\t\t\t\"title\": \"儋州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4608\",\n" + + "\t\t\t\"title\": \"定安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4609\",\n" + + "\t\t\t\"title\": \"东方\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4610\",\n" + + "\t\t\t\"title\": \"乐东\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4611\",\n" + + "\t\t\t\"title\": \"临高\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4612\",\n" + + "\t\t\t\"title\": \"陵水\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4613\",\n" + + "\t\t\t\"title\": \"琼海\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4614\",\n" + + "\t\t\t\"title\": \"琼中\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4615\",\n" + + "\t\t\t\"title\": \"屯昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4616\",\n" + + "\t\t\t\"title\": \"万宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4617\",\n" + + "\t\t\t\"title\": \"文昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4618\",\n" + + "\t\t\t\"title\": \"五指山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"4619\",\n" + + "\t\t\t\"title\": \"洋浦\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0050\",\n" + + "\t\t\"title\": \"重庆市\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5000\",\n" + + "\t\t\t\"title\": \"重庆市\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0051\",\n" + + "\t\t\"title\": \"四川省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5101\",\n" + + "\t\t\t\"title\": \"成都\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5102\",\n" + + "\t\t\t\"title\": \"巴中\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5103\",\n" + + "\t\t\t\"title\": \"达州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5104\",\n" + + "\t\t\t\"title\": \"德阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5105\",\n" + + "\t\t\t\"title\": \"广安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5106\",\n" + + "\t\t\t\"title\": \"广元\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5107\",\n" + + "\t\t\t\"title\": \"乐山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5108\",\n" + + "\t\t\t\"title\": \"凉山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5109\",\n" + + "\t\t\t\"title\": \"眉山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5110\",\n" + + "\t\t\t\"title\": \"绵阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5111\",\n" + + "\t\t\t\"title\": \"南充\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5112\",\n" + + "\t\t\t\"title\": \"内江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5113\",\n" + + "\t\t\t\"title\": \"攀枝花\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5114\",\n" + + "\t\t\t\"title\": \"遂宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5115\",\n" + + "\t\t\t\"title\": \"雅安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5116\",\n" + + "\t\t\t\"title\": \"宜宾\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5117\",\n" + + "\t\t\t\"title\": \"自贡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5118\",\n" + + "\t\t\t\"title\": \"泸州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5119\",\n" + + "\t\t\t\"title\": \"阿坝\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5120\",\n" + + "\t\t\t\"title\": \"甘孜\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5121\",\n" + + "\t\t\t\"title\": \"资阳\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0052\",\n" + + "\t\t\"title\": \"贵州省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5201\",\n" + + "\t\t\t\"title\": \"贵阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5202\",\n" + + "\t\t\t\"title\": \"安顺\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5203\",\n" + + "\t\t\t\"title\": \"毕节\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5204\",\n" + + "\t\t\t\"title\": \"六盘水\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5205\",\n" + + "\t\t\t\"title\": \"铜仁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5206\",\n" + + "\t\t\t\"title\": \"遵义\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5207\",\n" + + "\t\t\t\"title\": \"黔东南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5208\",\n" + + "\t\t\t\"title\": \"黔南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5209\",\n" + + "\t\t\t\"title\": \"黔西南\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0053\",\n" + + "\t\t\"title\": \"云南省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5301\",\n" + + "\t\t\t\"title\": \"昆明\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5302\",\n" + + "\t\t\t\"title\": \"西双版纳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5303\",\n" + + "\t\t\t\"title\": \"保山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5304\",\n" + + "\t\t\t\"title\": \"楚雄\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5305\",\n" + + "\t\t\t\"title\": \"大理\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5306\",\n" + + "\t\t\t\"title\": \"德宏\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5307\",\n" + + "\t\t\t\"title\": \"红河\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5308\",\n" + + "\t\t\t\"title\": \"丽江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5309\",\n" + + "\t\t\t\"title\": \"临沧\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5310\",\n" + + "\t\t\t\"title\": \"怒江\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5311\",\n" + + "\t\t\t\"title\": \"曲靖\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5312\",\n" + + "\t\t\t\"title\": \"思茅\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5313\",\n" + + "\t\t\t\"title\": \"文山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5314\",\n" + + "\t\t\t\"title\": \"玉溪\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5315\",\n" + + "\t\t\t\"title\": \"昭通\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5316\",\n" + + "\t\t\t\"title\": \"中甸\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5317\",\n" + + "\t\t\t\"title\": \"迪庆州\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0054\",\n" + + "\t\t\"title\": \"西藏自治区\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5401\",\n" + + "\t\t\t\"title\": \"拉萨\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5402\",\n" + + "\t\t\t\"title\": \"阿里\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5403\",\n" + + "\t\t\t\"title\": \"昌都\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5404\",\n" + + "\t\t\t\"title\": \"林芝\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5405\",\n" + + "\t\t\t\"title\": \"那曲\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5406\",\n" + + "\t\t\t\"title\": \"日喀则\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5407\",\n" + + "\t\t\t\"title\": \"山南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"5424\",\n" + + "\t\t\t\"title\": \"樟木口岸\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0061\",\n" + + "\t\t\"title\": \"陕西省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6101\",\n" + + "\t\t\t\"title\": \"西安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6102\",\n" + + "\t\t\t\"title\": \"安康\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6103\",\n" + + "\t\t\t\"title\": \"宝鸡\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6104\",\n" + + "\t\t\t\"title\": \"汉中\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6105\",\n" + + "\t\t\t\"title\": \"商洛\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6106\",\n" + + "\t\t\t\"title\": \"铜川\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6107\",\n" + + "\t\t\t\"title\": \"渭南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6108\",\n" + + "\t\t\t\"title\": \"咸阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6109\",\n" + + "\t\t\t\"title\": \"延安\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6110\",\n" + + "\t\t\t\"title\": \"榆林\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0062\",\n" + + "\t\t\"title\": \"甘肃省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6201\",\n" + + "\t\t\t\"title\": \"兰州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6202\",\n" + + "\t\t\t\"title\": \"白银\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6203\",\n" + + "\t\t\t\"title\": \"定西\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6204\",\n" + + "\t\t\t\"title\": \"东风\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6205\",\n" + + "\t\t\t\"title\": \"合作\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6206\",\n" + + "\t\t\t\"title\": \"嘉峪关\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6207\",\n" + + "\t\t\t\"title\": \"金昌\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6208\",\n" + + "\t\t\t\"title\": \"酒泉\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6209\",\n" + + "\t\t\t\"title\": \"矿区\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6210\",\n" + + "\t\t\t\"title\": \"临夏\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6211\",\n" + + "\t\t\t\"title\": \"陇南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6212\",\n" + + "\t\t\t\"title\": \"平凉\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6213\",\n" + + "\t\t\t\"title\": \"庆阳\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6214\",\n" + + "\t\t\t\"title\": \"天水\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6215\",\n" + + "\t\t\t\"title\": \"武威\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6216\",\n" + + "\t\t\t\"title\": \"张掖\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6217\",\n" + + "\t\t\t\"title\": \"甘南州\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0063\",\n" + + "\t\t\"title\": \"青海省\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6301\",\n" + + "\t\t\t\"title\": \"西宁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6302\",\n" + + "\t\t\t\"title\": \"海东\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6322\",\n" + + "\t\t\t\"title\": \"海北\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6323\",\n" + + "\t\t\t\"title\": \"黄南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6325\",\n" + + "\t\t\t\"title\": \"海南\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6326\",\n" + + "\t\t\t\"title\": \"果洛\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6327\",\n" + + "\t\t\t\"title\": \"玉树\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6328\",\n" + + "\t\t\t\"title\": \"海西\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0064\",\n" + + "\t\t\"title\": \"宁夏回族自治区\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6401\",\n" + + "\t\t\t\"title\": \"银川\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6402\",\n" + + "\t\t\t\"title\": \"中卫\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6403\",\n" + + "\t\t\t\"title\": \"固原\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6404\",\n" + + "\t\t\t\"title\": \"石嘴山\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6405\",\n" + + "\t\t\t\"title\": \"吴忠\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"0065\",\n" + + "\t\t\"title\": \"新疆维吾尔自治区\",\n" + + "\t\t\"cities\": [\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6501\",\n" + + "\t\t\t\"title\": \"乌鲁木齐\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6502\",\n" + + "\t\t\t\"title\": \"阿克苏\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6503\",\n" + + "\t\t\t\"title\": \"阿勒泰\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6504\",\n" + + "\t\t\t\"title\": \"巴州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6505\",\n" + + "\t\t\t\"title\": \"博州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6506\",\n" + + "\t\t\t\"title\": \"昌吉\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6507\",\n" + + "\t\t\t\"title\": \"哈密\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6508\",\n" + + "\t\t\t\"title\": \"和田\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6509\",\n" + + "\t\t\t\"title\": \"喀什\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6510\",\n" + + "\t\t\t\"title\": \"克拉玛依\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6511\",\n" + + "\t\t\t\"title\": \"马兰\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6512\",\n" + + "\t\t\t\"title\": \"石河子\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6513\",\n" + + "\t\t\t\"title\": \"塔城\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6514\",\n" + + "\t\t\t\"title\": \"吐鲁番\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6515\",\n" + + "\t\t\t\"title\": \"伊犁\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6516\",\n" + + "\t\t\t\"title\": \"克州\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6517\",\n" + + "\t\t\t\"title\": \"阿拉尔\"\n" + + "\t\t },\n" + + "\t\t {\n" + + "\t\t\t\"value\": \"6518\",\n" + + "\t\t\t\"title\": \"五家渠\"\n" + + "\t\t }\n" + + "\t\t]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"2003\",\n" + + "\t\t\"title\": \"台湾省\",\n" + + "\t\t\"cities\": [{\n" + + "\t\t\t\"value\": \"9903\",\n" + + "\t\t\t\"title\": \"台湾省\"\n" + + "\t\t}]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"2001\",\n" + + "\t\t\"title\": \"香港特别行政区\",\n" + + "\t\t\"cities\": [{\n" + + "\t\t\t\"value\": \"9901\",\n" + + "\t\t\t\"title\": \"香港特别行政区\"\n" + + "\t\t}]\n" + + "\t },\n" + + "\t {\n" + + "\t\t\"value\": \"2002\",\n" + + "\t\t\"title\": \"澳门特别行政区\",\n" + + "\t\t\"cities\": [{\n" + + "\t\t \"value\": \"9902\",\n" + + "\t\t \"title\": \"澳门特别行政区\"\n" + + "\t\t}]\n" + + "\t }\n" + + "\t]"; + + provList=JSON.parseArray(s,Prov.class); + + + + + + + } + + + public static void init(){ + /** + * debug 模式,开启后有详细的日志 + */ + Adapay.debug = true; + + /** + * prodMode 模式,默认为生产模式,false可以使用mock模式 + */ + Adapay.prodMode = true; + + /** + * 初始化商户配置,服务器启动前,必须通过该方式初始化商户配置完成 + * apiKey为prod模式的API KEY + * mockApiKey为mock模式的API KEY + * rsaPrivateKey为商户发起请求时,用于请求参数加签所需要的RSA私钥 + */ + String apiKey = "api_live_c5fbe553-0680-436a-a457-3252fc841697"; + String mockApiKey = "api_test_ecb5e50f-c1bc-4854-af2d-eee4b98bcf6f"; + String rsaPrivateKey = "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAImujrgtJxw2Qm5TXNiRF4WuoYmyr37vpFX/LK4VUb0Qp7darJbNqNGvGBxbYmUccsKrAGyAJPwra71BtBEfTDsg4w0RO/6Wk4qx32ZHEaxpqYTLuOujUMvorL5AVr/SAlUtRlzwz82q4yQZxchYRGXlj3OP8iq1FzdXUxv+UeyjAgMBAAECgYAk7R04Blwr892DS3ZmWxus7fZDQRpSeCFiMysfkXY3uATTZ01MsOHrQwO7b0MHjUa2MTjO4NuKina97qZFxVgjSuByVrxkib+QY4vdqCL2I+tKH6qMSYlom0g8ybGWZrqQm2CzMFzf+ub4bpkJxINQ+7zjDsrRa5Lgk9B2xHkvoQJBAMG4hH7GWS67gYdpsTFtxbQiTrlreLAYJjwbaOhvpPiH3JaooPRcdceALe42eMZDAn5Mrg1jaA7/eM1iVMDXljMCQQC18fY9c1dHmLyOF3yaeVM+0kLrAyf//67xDV0QROYXo998vsIhpbeFm0cRTsjp4uXIq4W1KBAkBw0aqtEK/3/RAkBdl7czxMKrqF3BPZglSGK/T9/3B2xsr44xdhCuU9pBVOqHQ3tX9B/XPh9yupCJQTDAMm3Y/BD3RghoOjy2WrIvAkAGN0kBWnJt6MLwW88O+/wjFk3g94+jSFnytFEsoB34Ssn02hOJ0L6PWvm3lqh4jR7qlymPQdojUPZapeFUbdwxAkEAo+UYAbvDe1ewHpVtnbxMpWmtJeLRg8PlNhFfQjwfuaTOyyiuZU1pPtwUXjHsb4zqoA1QMR5vu0C0s2IpP8dljQ=="; + + MerchantConfig config = new MerchantConfig(); + config.setApiKey(apiKey); + config.setApiMockKey(mockApiKey); + config.setRSAPrivateKey(rsaPrivateKey); + config.setDeviceId("hfpay001"); + + try { + AdapayMerchant.initWithMerConfig(config); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + public void feed(TbPlussMerchantBaseInfo baseInfo, TbPlussMerchantChannelStatus channelStatus){ + + + TbPlussAccount account= tbPlussAccountMapper.selectByUser(baseInfo.getUserid(),"D1"); + MsgException.checkNull(account,"结算信息未提交"); + + + TbPlussBankCard bankCard= tbPlussBankCardMapper.selectByPrimaryKey(Integer.valueOf(account.getBankcardid())); + MsgException.checkNull(bankCard, "结算卡信息未提交"); + + + TbPlussIdCard idCard=tbPlussIdCardMapper.selectCertByUserId(baseInfo.getUserid(),baseInfo.getMerchanttype().equals("3")?"03":"01"); + MsgException.checkNull(idCard, "商户基本信息不完整"); + + + + init(); + String requestId= SnowFlakeUtil.nextId().toString(); + + Map keyMap = null; + try { + keyMap = RSAUtils.genKeyPair(); + } catch (NoSuchAlgorithmException e) { + e.printStackTrace(); + } + String publicKey=keyMap.get(0); + String privateKey=keyMap.get(1); + log.info("公钥:{}",publicKey); + log.info("私钥:{}",privateKey); + + Map merchantEntryParams = new HashMap<>(10); + merchantEntryParams.put("request_id", requestId);//请求流水号 + merchantEntryParams.put("usr_phone", baseInfo.getContactmobile());//注册手机号 + merchantEntryParams.put("cont_name", baseInfo.getContactname()); //联系人姓名 + merchantEntryParams.put("cont_phone", baseInfo.getContactmobile());//联系人电话 + merchantEntryParams.put("customer_email", "hphshiwo@outlook.com");//邮箱 + if("3".equals(baseInfo.getMerchanttype())){ + merchantEntryParams.put("mer_name", baseInfo.getBussauthname()); //商户名,小微商户填负责人姓名 + merchantEntryParams.put("license_code", baseInfo.getBussauthnum());//营业执照编码,如三证合一传三证合一码,企业时必填 + }else { + merchantEntryParams.put("mer_name", baseInfo.getContactname()); //商户名,小微商户填负责人姓名 + } + + merchantEntryParams.put("mer_short_name", baseInfo.getAlias());//简称 + + StringBuffer startSb = new StringBuffer(); + StringBuffer endSb = new StringBuffer(); + + if(baseInfo.getMerchanttype().equals("3")){ + if (baseInfo.getBussauthstarttime().contains("年")||baseInfo.getBussauthstarttime().contains("-")) { + startSb.append(baseInfo.getBussauthstarttime().substring(0, 4)); + startSb.append(baseInfo.getBussauthstarttime().substring(5, 7)); + startSb.append(baseInfo.getBussauthstarttime().substring(8, 10)); + } else { + startSb.append(baseInfo.getBussauthstarttime()); + } + + if (ObjectUtil.isEmpty(baseInfo.getBussauthendtime()) || "长期".equals(baseInfo.getBuslictype())) { + endSb.append("20991231"); + } else { + if (baseInfo.getBussauthendtime().contains("年")||baseInfo.getBussauthendtime().contains("-")) { + endSb.append(baseInfo.getBussauthendtime().substring(0, 4)); + endSb.append(baseInfo.getBussauthendtime().substring(5, 7)); + endSb.append(baseInfo.getBussauthendtime().substring(8, 10)); + } else { + endSb.append(baseInfo.getBussauthendtime()); + } + + } + + + merchantEntryParams.put("reg_addr", baseInfo.getBussauthaddress());//注册地址 + merchantEntryParams.put("cust_addr", baseInfo.getBussauthaddress());//经营地址 + merchantEntryParams.put("cust_tel", baseInfo.getPrincipalmobile()); //商户电话 + + + merchantEntryParams.put("mer_start_valid_date", startSb); //商户有效日期(始),格式 YYYYMMDD (若开户企业类商户,必填) + merchantEntryParams.put("mer_valid_date", endSb);// 商户有效日期(至) + merchantEntryParams.put("legal_name", baseInfo.getPrincipalperson()); //法人/负责人 姓名 + merchantEntryParams.put("legal_type", "0"); //法人/负责人证件类型,0-身份证 + merchantEntryParams.put("legal_idno", baseInfo.getPrincipalcertno()); //法人/负责人证件号码 + merchantEntryParams.put("legal_mp", baseInfo.getPrincipalmobile()); //法人/负责人手机号 + }else { + + + merchantEntryParams.put("reg_addr", baseInfo.getProvince().concat(baseInfo.getCity()).concat(baseInfo.getDistrict()).concat(baseInfo.getAddress()));//注册地址 + merchantEntryParams.put("cust_addr",baseInfo.getProvince().concat(baseInfo.getCity()).concat(baseInfo.getDistrict()).concat(baseInfo.getAddress()));//经营地址 + merchantEntryParams.put("cust_tel", baseInfo.getContactmobile()); //商户电话 + + + merchantEntryParams.put("legal_name", baseInfo.getContactname()); //法人/负责人 姓名 + merchantEntryParams.put("legal_type", "0"); //法人/负责人证件类型,0-身份证 + merchantEntryParams.put("legal_idno", idCard.getCertno()); //法人/负责人证件号码 + merchantEntryParams.put("legal_mp", baseInfo.getContactmobile()); //法人/负责人手机号 + } + + + + merchantEntryParams.put("legal_start_cert_id_expires", idCard.getCertstarttime());//法人/负责人身份证有效期(始),格式 YYYYMMDD + merchantEntryParams.put("legal_id_expires", idCard.getCertendtime()); //法人/负责人身份证有效期(至),格式 YYYYMMDD + merchantEntryParams.put("card_id_mask", bankCard.getBankcardno());//结算银行卡号 + + + TbBlussBankBranchHf blussBankBranchHf= tbBlussBankBranchHfMapper.selectByName(bankCard.getBankname()); + MsgException.checkNull(blussBankBranchHf,"对应的银行信息不存在"); + merchantEntryParams.put("bank_code", blussBankBranchHf.getBankCode()); //结算银行卡所属银行code + merchantEntryParams.put("card_name", bankCard.getBankholder()); //结算银行卡开户姓名 + merchantEntryParams.put("bank_acct_type", bankCard.getAccounttype().equals("01")?"2":"1");//1对公、2对私 + Prov prov=provList.stream().filter(p->p.getTitle().startsWith(bankCard.getBranchprovince())).collect(Collectors.toList()).get(0); + merchantEntryParams.put("prov_code", prov.getValue()); //结算银行卡省份编码 + + if(bankCard.getBranchcity().endsWith("市")){ + bankCard.setBranchcity(bankCard.getBranchcity().substring(0,bankCard.getBranchcity().length()-1)); + } + + Cities cities= prov.getCities().stream().filter(t->t.getTitle().startsWith(bankCard.getBranchcity())).collect(Collectors.toList()).get(0); + merchantEntryParams.put("area_code", cities.getValue()); //结算银行卡地区编码 + merchantEntryParams.put("rsa_public_key", keyMap.get(0));//商户RSA公钥 + + merchantEntryParams.put("entry_mer_type", baseInfo.getMerchanttype().equals("3")?"1":"2");//1-企业;2-小微。默认为企业 + merchantEntryParams.put("notify_url", "https://p40312246f.goho.co/admin/notifyCallback/feedCallBack"); + merchantEntryParams.put("fee_rate_list","[{\n" + + " \"rate_channel\": \"wx_pub_online\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}, {\n" + + " \"rate_channel\": \"wx_pub_offline\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"wx_lite_online\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}, {\n" + + " \"rate_channel\": \"wx_lite_offline\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"wx_scan\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_qr_online\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_qr_offline\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_scan\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_lite_online\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_lite_offline\",\n" + + " \"fee_rate\": \"0.0036\"\n" + + "}, {\n" + + " \"rate_channel\": \"alipay_call\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}, {\n" + + " \"rate_channel\": \"union_qr_under\",\n" + + " \"fee_rate\": \"0.0065\"\n" + + "}, {\n" + + " \"rate_channel\": \"union_qr_beyond\",\n" + + " \"fee_rate\": \"0.0065\"\n" + + "}, {\n" + + " \"rate_channel\": \"union\",\n" + + " \"fee_rate\": \"0.007\"\n" + + "}]"); + + log.info("开户进件merchantEntryParams="+ JSON.toJSONString(merchantEntryParams)); + Map merchantEntry = null; + try { + merchantEntry = MerchantEntry.create(merchantEntryParams); + log.info("response:{}", JSON.toJSONString(merchantEntry)); + if(ObjectUtil.isNotEmpty(merchantEntry)&&"pending".equals(merchantEntry.get("status").toString())){ + channelStatus.setChannel(7); + channelStatus.setUpdatetime(new Date()); + channelStatus.setMerchantcode(baseInfo.getMerchantcode()); + channelStatus.setStatus("1"); + channelStatus.setThirdstatus("-100"); + channelStatus.setCallbackstatus("0"); + channelStatus.setRemark("汇付审核中"); + + if(ObjectUtil.isEmpty(channelStatus.getId())){ + channelStatus.setCreatetime(new Date()); + tbPlussMerchantChannelStatusMapper.insert(channelStatus); + }else { + channelStatus.setUpdatetime(new Date()); + channelStatus.setMercname(null); + tbPlussMerchantChannelStatusMapper.updateByPrimaryKeySelective(channelStatus); + } + + TbPlussMerchantAuditRecord merchantAuditRecord = new TbPlussMerchantAuditRecord(); + merchantAuditRecord.setStatus("1"); + merchantAuditRecord.setMerchantcode(baseInfo.getMerchantcode()); + merchantAuditRecord.setChannel(7); + merchantAuditRecord.setThirdstatus("0"); + merchantAuditRecord.setApplicationid(merchantEntry.get("request_id").toString()); + merchantAuditRecord.setCreatetime(new Date()); + tbPlussMerchantAuditRecordMapper.insert(merchantAuditRecord); + } + } catch (BaseAdaPayException e) { + e.printStackTrace(); + } + + } + + + + public void callBack(String type,String data,String sign){ + + + String publicKey= AdapayCore.PUBLIC_KEY; + + try { + Map map=(Map) JSON.parse(data); + + String requestId=map.get("request_id").toString(); + if(AdapaySign.verifySign(data,sign,publicKey)){ + switch (type){ + case "userEntry.succeeded": + TbPlussMerchantAuditRecord record= tbPlussMerchantAuditRecordMapper.selectByApplicationid(requestId); + if(ObjectUtil.isNotEmpty(record)){ + TbPlussMerchantChannelStatus channelStatus= tbPlussMerchantChannelStatusMapper.selectByMerchantCode(record.getMerchantcode(),7); + TbPlussMerchantHfInfo tbPlussMerchantHfInfo=tbPlussMerchantHfInfoMapper.selectByMerchantCodeAndSubApiKey(channelStatus.getMerchantcode(),map.get("live_api_key").toString()); + if(ObjectUtil.isNotEmpty(channelStatus)){ + if(ObjectUtil.isEmpty(tbPlussMerchantHfInfo)){ + tbPlussMerchantHfInfo=new TbPlussMerchantHfInfo(); + tbPlussMerchantHfInfo.setMerchantCode(record.getMerchantcode()); + tbPlussMerchantHfInfo.setTestApiKey(map.get("test_api_key").toString()); + tbPlussMerchantHfInfo.setLiveApiKey(map.get("live_api_key").toString()); + List app_id_list = (List) map.get("app_id_list"); + tbPlussMerchantHfInfo.setAppIdList(JSON.toJSONString(app_id_list)); + Map app = (Map) app_id_list.get(0); + tbPlussMerchantHfInfo.setAppId(app.get("app_id").toString()); + tbPlussMerchantHfInfo.setAppName(app.get("app_name").toString()); + tbPlussMerchantHfInfo.setStatus("1"); //开户成功 + tbPlussMerchantHfInfo.setLoginPwd(MD5Util.md5("hf".concat(map.get("login_pwd").toString()))); + tbPlussMerchantHfInfo.setCreateTime(new Date()); + tbPlussMerchantHfInfoMapper.insert(tbPlussMerchantHfInfo); + + channelStatus.setMerchantid(map.get("live_api_key").toString()); + channelStatus.setApplicationid(requestId); + channelStatus.setUpdatetime(new Date()); + channelStatus.setMercname(null); + tbPlussMerchantChannelStatusMapper.updateByPrimaryKeySelective(channelStatus); + + TbPlussMerchantBaseInfo baseInfo= tbPlussMerchantBaseInfoMapper.selectByMerchantcode(channelStatus.getMerchantcode()); + if(ObjectUtil.isNotEmpty(baseInfo)){ + merchantResident(baseInfo,tbPlussMerchantHfInfo.getLiveApiKey(),tbPlussMerchantHfInfo.getAppId(),tbPlussMerchantHfInfo); + } + } + + + + + record.setStatus("9"); + record.setUpdatetime(new Date()); + + + } + } + break; + case "userEntry.failed": + record= tbPlussMerchantAuditRecordMapper.selectByApplicationid(requestId); + if(ObjectUtil.isNotEmpty(record)){ + TbPlussMerchantChannelStatus channelStatus= tbPlussMerchantChannelStatusMapper.selectByMerchantCode(record.getMerchantcode(),7); + if(ObjectUtil.isNotEmpty(channelStatus)){ + channelStatus.setStatus("2"); + channelStatus.setRemark(map.get("error_msg").toString()); + channelStatus.setMercname(null); + tbPlussMerchantChannelStatusMapper.updateByPrimaryKeySelective(channelStatus); + } + } + break; + case "resident.succeeded": + record= tbPlussMerchantAuditRecordMapper.selectByApplicationid(requestId); + if(ObjectUtil.isNotEmpty(record)&&!"5".equals(record.getThirdstatus())){ + TbPlussMerchantHfInfo hfInfo= tbPlussMerchantHfInfoMapper.selectByMerchantCodeAndSubApiKey(record.getMerchantcode(),record.getMerchantid()); + + hfInfo.setStatus("3"); //入驻成功 + hfInfo.setUpdateTime(new Date()); + tbPlussMerchantHfInfoMapper.updateByPrimaryKey(hfInfo); + + + + record.setThirdstatus("5"); + record.setUpdatetime(new Date()); + tbPlussMerchantAuditRecordMapper.updateByPrimaryKeySelective(record); + + + + //上传证照 + TbPlussMerchantBaseInfo baseInfo= tbPlussMerchantBaseInfoMapper.selectByMerchantcode(record.getMerchantcode()); + if(ObjectUtil.isNotEmpty(baseInfo)){ + map=new HashMap<>(); + TbPlussAccount account= tbPlussAccountMapper.selectByUser(baseInfo.getUserid(),"D1"); + MsgException.checkNull(account,"结算信息未提交"); + + TbPlussBankCard bankCard= tbPlussBankCardMapper.selectByPrimaryKey(Integer.valueOf(account.getBankcardid())); + MsgException.checkNull(bankCard, "结算卡信息未提交"); + + TbPlussIdCard idCard=tbPlussIdCardMapper.selectCertByUserId(baseInfo.getUserid(),baseInfo.getMerchanttype().equals("3")?"03":"01"); + MsgException.checkNull(idCard, "商户基本信息不完整"); + + + Map f=HfMerService.fileUpload(idCard.getImgpositive(),"03",record.getMerchantid()); + + if(ObjectUtil.isNotEmpty(f)&&"succeeded".equals(f.get("status"))){ + map.put("legalCertIdBackId",f.get("pic_id")); + } + + + Map z=HfMerService.fileUpload(idCard.getImgnegative(),"02",record.getMerchantid()); + + if(ObjectUtil.isNotEmpty(z)&&"succeeded".equals(z.get("status"))){ + map.put("legalCertIdFrontId",z.get("pic_id")); + } + + Map cz=null; + + Map yyzz=null; + + if(baseInfo.getMerchanttype().equals("3")){ + + TbPlussMerchantImage image= tbPlussMerchantImageMapper.selectByMerchantCodeType(baseInfo.getMerchantcode(),"03"); + MsgException.checkNull(image, "营业执照不存在"); + + yyzz= HfMerService.fileUpload(idCard.getImgpositive(),"02",record.getMerchantid()); + + if(ObjectUtil.isNotEmpty(yyzz)&&"succeeded".equals(yyzz.get("status"))){ + map.put("socialCreditCodeId",yyzz.get("pic_id")); + } + + cz=HfMerService.fileUpload(bankCard.getLicenseurl(),"05",record.getMerchantid()); + yyzz=HfMerService.fileUpload(image.getPicUrl1(),"01",record.getMerchantid()); + }else { + cz=HfMerService.fileUpload(bankCard.getImgurl(),"05",record.getMerchantid()); + StringBuffer sb=new StringBuffer(); + TbPlussMerchantImage image =tbPlussMerchantImageMapper.selectByMerchantCodeType(baseInfo.getMerchantcode(),"06"); + MsgException.checkNull(image, "门头照片不存在"); + Map mtz=HfMerService.fileUpload(image.getPicurl(),"04",record.getMerchantid()); + if(ObjectUtil.isNotEmpty(mtz)&&"succeeded".equals(mtz.get("status"))){ + sb.append(mtz.get("pic_id")); + } + image =tbPlussMerchantImageMapper.selectByMerchantCodeType(baseInfo.getMerchantcode(),"09"); + MsgException.checkNull(image, "商铺内部照片不存在"); + Map mtzz=HfMerService.fileUpload(image.getPicurl(),"04",record.getMerchantid()); + if(ObjectUtil.isNotEmpty(mtzz)&&"succeeded".equals(mtzz.get("status"))){ + sb.append("|"); + sb.append(mtzz.get("pic_id")); + } + + image =tbPlussMerchantImageMapper.selectByMerchantCodeType(baseInfo.getMerchantcode(),"08"); + MsgException.checkNull(image, "收银台照片不存在"); + Map mtzzzz=HfMerService.fileUpload(idCard.getImgnegative(),"04",record.getMerchantid()); + if(ObjectUtil.isNotEmpty(mtzzzz)&&"succeeded".equals(mtzzzz.get("status"))){ + sb.append("|"); + sb.append(mtzzzz.get("pic_id")); + } + if(ObjectUtil.isNotEmpty(sb)){ + map.put("storeId",sb.toString()); + } + } + + if(ObjectUtil.isNotEmpty(cz)&&"succeeded".equals(cz.get("status"))){ + map.put("accountOpeningPermitId",cz.get("pic_id")); + } + + if(ObjectUtil.isNotEmpty(yyzz)&&"succeeded".equals(yyzz.get("status"))){ + map.put("socialCreditCodeId",yyzz.get("pic_id")); + + } + + log.info("request:{}",JSON.toJSONString(map)); + Map response= commitUpload(map,record.getMerchantid()); + if(ObjectUtil.isNotEmpty(response)&&(response.get("audit_status").equals("I")&&"p".equals(response.get("audit_status")))){ + + hfInfo.setStatus("4"); //商户证照一提交 + hfInfo.setUpdateTime(new Date()); + tbPlussMerchantHfInfoMapper.updateByPrimaryKey(hfInfo); + + record.setThirdstatus("5"); + record.setUpdatetime(new Date()); + tbPlussMerchantAuditRecordMapper.updateByPrimaryKeySelective(record); + +// if(response.get("audit_status").equals("P")){ +// //提交实名 +// } + } + } + } + break; + case "resident.failed": + record= tbPlussMerchantAuditRecordMapper.selectByApplicationid(requestId); + if(ObjectUtil.isNotEmpty(record)){ + TbPlussMerchantHfInfo hfInfo= tbPlussMerchantHfInfoMapper.selectByMerchantCodeAndSubApiKey(record.getMerchantcode(),record.getMerchantid()); + + hfInfo.setStatus("4"); //入驻失败 + hfInfo.setUpdateTime(new Date()); + tbPlussMerchantHfInfoMapper.updateByPrimaryKey(hfInfo); + } + break; + case "resident.modify.succeeded": + break; + case "resident.modify.failed": + break; + case "corp_member.succeeded": + break; + case "corp_member.failed": + break; + case "corp_member_update.succeeded": + break; + case "corp_member_update.failed": + break; + } + } + } catch (Exception e) { + throw new RuntimeException(e); + } + + } + + + +// public void authUser(){ +// String requestId= SnowFlakeUtil.nextId().toString(); +// +// } + + + public void merchantResident(String userId,String merchantcode){ + TbPlussMerchantBaseInfo baseInfo=null; + if(ObjectUtil.isNotEmpty(userId)){ + baseInfo=tbPlussMerchantBaseInfoMapper.selectByUserId(userId); + } + + if(ObjectUtil.isNotEmpty(merchantcode)){ + baseInfo=tbPlussMerchantBaseInfoMapper.selectByMerchantcode(merchantcode); + } + + MsgException.checkNull(baseInfo,"商户基本信息不存在"); + + TbPlussMerchantHfInfo hfInfo= tbPlussMerchantHfInfoMapper.selectByMerchantCode(baseInfo.getMerchantcode()); + MsgException.checkNull(hfInfo,"商户未进件"); + this.merchantResident(baseInfo,hfInfo.getLiveApiKey(),hfInfo.getAppId(),hfInfo); + } + + + + + public void merchantResident(TbPlussMerchantBaseInfo baseInfo,String sub_Api_Key,String app_id,TbPlussMerchantHfInfo tbPlussMerchantHfInfo){ + + TbPlussMccReflect tbPlussMccReflect= tbPlussMccReflectMapper.selectByMccCodeAndChannel(baseInfo.getMcc(),"7"); + TbPlussMccInfoHf tbPlussMccInfoHf=null; + if(ObjectUtil.isNotEmpty(tbPlussMccReflect)){ + tbPlussMccInfoHf= tbPlussMccInfoHfMapper.selectByMccCode(tbPlussMccReflect.getMccCode()); + } + + MsgException.checkNull(tbPlussMccInfoHf,"没有对应的mcc码"); + init(); + String requestId= SnowFlakeUtil.nextId().toString(); + Map merchantEntryParams = new HashMap<>(10); + merchantEntryParams.put("request_id", requestId);//测试时每次请求需修改流水 + merchantEntryParams.put("sub_Api_Key", sub_Api_Key);//商户进件后返回的生产或者测试API Key + merchantEntryParams.put("fee_type", "02");//费率01-标准费率线上,02-标准费率线下 + merchantEntryParams.put("app_id", app_id);//商户进件后返回的应用ID + merchantEntryParams.put("wx_category", baseInfo.getMerchanttype().equals("3")?tbPlussMccInfoHf.getWxBusiness():tbPlussMccInfoHf.getWxPersonal());//经营类目,请参考微信经营类目表 企业758 小微商户770 + merchantEntryParams.put("alipay_category", tbPlussMccInfoHf.getAliCategoryId());//经营类目,请参考支付宝经营类目表 综合零售2015091000052157 + merchantEntryParams.put("cls_id", tbPlussMccInfoHf.getAliClsId());//行业分类,支付宝必填 综合零售5399 + merchantEntryParams.put("model_type", 1);//入驻模式,1-服务商模式 + merchantEntryParams.put("mer_type", baseInfo.getMerchanttype().equals("3")?"3":baseInfo.getMerchanttype().equals("2")?"2":"8");//商户种类 3-私营企业 8-小微 + + + + TbPlussCitysHf province= tbPlussCitysHfMapper.selectByCodeAndParentCode(baseInfo.getProvince(),"0"); + + merchantEntryParams.put("province_code",province.getCityCode() );//省份编码 上海310000 + + TbPlussCitysHf city= tbPlussCitysHfMapper.selectByCodeAndParentCode(baseInfo.getCity(),province.getCityCode()); + merchantEntryParams.put("city_code", city.getCityCode());//城市编码 上海310100 + + + TbPlussCitysHf district_code= tbPlussCitysHfMapper.selectByCodeAndParentCode(baseInfo.getDistrict(),city.getCityCode()); + merchantEntryParams.put("district_code", district_code.getCityCode());//区县编码 黄埔310101 + + merchantEntryParams.put("add_value_list", " {\"wx_lite\":{\"appid\":\"wxfc7bd92a462eb191\"},\"wx_scan\":\"\", \"alipay\":\"\",\"alipay_wap\":\"\",\"alipay_lite\":\"\",\"alipay_qr\":\"\",\"alipay_scan\":\"\"}"); + merchantEntryParams.put("notify_url","https://p40312246f.goho.co/admin/notifyCallback/feedCallBack"); + + //调用sdk商户配置方法,得到商户配置返回对象 + Map merchantResident = null; + try { + merchantResident = MerchantResident.create(merchantEntryParams); + if(ObjectUtil.isNotEmpty(merchantResident)){ + TbPlussMerchantAuditRecord merchantAuditRecord = new TbPlussMerchantAuditRecord(); + merchantAuditRecord.setStatus("1"); + merchantAuditRecord.setMerchantcode(baseInfo.getMerchantcode()); + merchantAuditRecord.setChannel(7); + merchantAuditRecord.setMerchantid(sub_Api_Key); + merchantAuditRecord.setThirdstatus("1"); + merchantAuditRecord.setApplicationid(requestId); + merchantAuditRecord.setCreatetime(new Date()); + tbPlussMerchantAuditRecordMapper.insert(merchantAuditRecord); + + + tbPlussMerchantHfInfo.setStatus("2"); //商户入驻待审核 + tbPlussMerchantHfInfo.setUpdateTime(new Date()); + tbPlussMerchantHfInfoMapper.updateByPrimaryKey(tbPlussMerchantHfInfo); + } + + + + } catch (BaseAdaPayException e) { + e.printStackTrace(); + } + log.info("商户入驻merchant config result=" + JSON.toJSONString(merchantResident)); + } + + + + public void queryMerchantResident(){ + List records= tbPlussMerchantAuditRecordMapper.selectByStatus(); + if(ObjectUtil.isEmpty(records)){ + log.info("没有待查询的入驻信息"); + return; + } + for (TbPlussMerchantAuditRecord record : records) { + + } + } + + + + + + public void queryResident(String requestId){ + +// MerchantResident.query() + } + + + + + + @SneakyThrows + public static Map fileUpload(String url, String type, String subApiKey) { + + URI uri = null; + try { + uri = new URI(url); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + RestTemplate restTemplate1 = new RestTemplate(); + ResponseEntity exchange = restTemplate1.exchange(uri, HttpMethod.GET, null, byte[].class); + MultipartFile file1 = new MockMultipartFile("file", exchange.getBody()); + File file = convert(file1); + + init(); + Map request = new HashMap<>(10); + request.put("subApiKey",subApiKey); + request.put("fileType",type); + + Map map= MerchantResident.uploadProfilePic(file,request); + log.info("type:{},response:{}",type,JSON.toJSONString(map)); + return map; + } + + + public static Map commitUpload(Map map,String subApiKey){ + Map request = new HashMap<>(10); + request.put("subApiKey", subApiKey);//商户子apiKey + if(map.containsKey("socialCreditCodeId")){ + request.put("socialCreditCodeId",map.get("socialCreditCodeId"));//统一社会信用代码图片ID + } + + request.put("legalCertIdFrontId", map.get("legalCertIdFrontId"));//法人身份证正面图片ID + request.put("legalCertIdBackId",map.get("legalCertIdBackId"));//法人身份证反面图片ID +// request.put("businessAdd", "http://www.baidu.com");//线上业务网址或者商城地址 + if(map.containsKey("storeId")){ + request.put("storeId", map.get("storeId"));//门店图片ID + } + + request.put("accountOpeningPermitId", map.get("accountOpeningPermitId"));//开户许可证图片 + + Map merchantResident = null; + try { + merchantResident = MerchantResident.auditProfileInfo(request); + } catch (BaseAdaPayException e) { + e.printStackTrace(); + } + log.info("商户证照merchant resident modify result=" + JSON.toJSONString(merchantResident)); + return merchantResident; + } + + + + + + + public static File convert(MultipartFile multipartFile) throws IOException { + InputStream inputStream = multipartFile.getInputStream(); + File file = File.createTempFile(ObjectUtil.isEmpty(multipartFile.getOriginalFilename()) ? System.currentTimeMillis() + "" : multipartFile.getOriginalFilename(), ".png"); + FileOutputStream outputStream = new FileOutputStream(file); + byte[] buffer = new byte[1024]; + int bytesRead = 0; + while ((bytesRead = inputStream.read(buffer)) != -1) { + outputStream.write(buffer, 0, bytesRead); + } + outputStream.close(); + file.deleteOnExit(); + return file; + } + + + + static class Prov{ + private String title; + private String value; + + private List cities; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public List getCities() { + return cities; + } + + public void setCities(List cities) { + this.cities = cities; + } + } + + static class Cities{ + + private String title; + private String value; + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + } + + + public static void writer(String content){ + BufferedWriter out=null; + try { + out=new BufferedWriter(new OutputStreamWriter(new FileOutputStream("C:\\Users\\admin\\Desktop\\city.sql",true))); + out.write(content); + } catch (FileNotFoundException e) { + throw new RuntimeException(e); + } catch (IOException e) { + throw new RuntimeException(e); + }finally { + if(out!=null){ + try { + out.close(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + } + + + } + public static void main(String[] args) { +// +// File file=new File("C:\\Users\\admin\\Desktop\\6666.json"); +// ObjectMapper objectMapper=new ObjectMapper(); +// try { +// Map map= objectMapper.readValue(file,Map.class); +// Iterator> iterator= map.entrySet().iterator(); +// String parentCode=null; +// while(iterator.hasNext()){ +// Map.Entry entity=iterator.next(); +// Map t= (Map) entity.getValue(); +// Iterator> iterators= t.entrySet().iterator(); +// while (iterators.hasNext()){ +// Map.Entry e=iterators.next(); +// if(e.getValue() instanceof String){ //省份 +// parentCode =e.getValue().toString(); +// StringBuffer sb=new StringBuffer(); +// sb.append("INSERT INTO `tb_pluss_citys_hf` (`city_code`, `city_name`, `parent_city_code`, `create_time`) VALUES ("); +// sb.append("'"+e.getValue()+"'"); +// sb.append(","); +// sb.append("'"+entity.getKey()+"'"); +// sb.append(","); +// sb.append("'"+0+"'"); +// sb.append(", now());"); +// HfMerService.writer(sb.toString()); +// HfMerService.writer("\n"); +// +// }else if(e.getValue() instanceof LinkedHashMap){ +// Map c= (Map) e.getValue(); +// Iterator> ic= c.entrySet().iterator(); +// while (ic.hasNext()){ +// String CityParentCode=null; +// Map.Entry mc=ic.next(); +// Map cit= (Map) mc.getValue(); +// Iterator> citi= cit.entrySet().iterator(); +// while(citi.hasNext()){ +// ; +// Map.Entry mccc=citi.next(); +// +// if(mccc.getValue() instanceof String){ +// CityParentCode=mccc.getValue().toString(); +// StringBuffer sb=new StringBuffer(); +// sb.append("INSERT INTO `tb_pluss_citys_hf` (`city_code`, `city_name`, `parent_city_code`, `create_time`) VALUES ("); +// sb.append("'"+mccc.getValue()+"'"); +// sb.append(","); +// sb.append("'"+mc.getKey()+"'"); +// sb.append(","); +// sb.append("'"+parentCode+"'"); +// sb.append(", now());"); +// HfMerService.writer(sb.toString()); +// HfMerService.writer("\n"); +// +// }else if(mccc.getValue() instanceof LinkedHashMap){ +// Map dd= (Map) mccc.getValue();; +// Iterator> ddi= dd.entrySet().iterator(); +// while (ddi.hasNext()){ +// Map.Entry dddd=ddi.next(); +// if(dddd.getValue() instanceof String){ +// +// StringBuffer sb=new StringBuffer(); +// sb.append("INSERT INTO `tb_pluss_citys_hf` (`city_code`, `city_name`, `parent_city_code`, `create_time`) VALUES ("); +// sb.append("'"+dddd.getValue()+"'"); +// sb.append(","); +// sb.append("'"+dddd.getKey()+"'"); +// sb.append(","); +// sb.append("'"+CityParentCode+"'"); +// sb.append(", now());"); +// HfMerService.writer(sb.toString()); +// HfMerService.writer("\n"); +// }else if(dddd.getValue() instanceof LinkedHashMap){ +// Map ttttt= (Map) dddd.getValue(); +// System.out.println("dd:"+dddd.getKey()+">>name:"+dddd.getValue()); +// } +// +// +// } +// +// } +// } +// +// } +// } +// } +// } +// +// System.out.println("执行完成"); +// } catch (IOException e) { +// throw new RuntimeException(e); +// } + +// init(); +// String requestId= SnowFlakeUtil.nextId().toString(); +// +// Map keyMap = null; +// try { +// keyMap = RSAUtils.genKeyPair(); +// } catch (NoSuchAlgorithmException e) { +// e.printStackTrace(); +// } +// log.info("公钥:" + keyMap.get(0)); +// log.info("私钥:" + keyMap.get(1)); +// +// Map merchantEntryParams = new HashMap<>(10); +// merchantEntryParams.put("request_id", requestId);//请求流水号 +// merchantEntryParams.put("usr_phone", "15668897172");//注册手机号 +// merchantEntryParams.put("cont_name", "蔺佳佳"); //联系人姓名 +// merchantEntryParams.put("cont_phone", "15668897171");//联系人电话 +// merchantEntryParams.put("customer_email", "hphshiwo@outlook.com");//邮箱 +// merchantEntryParams.put("mer_name", "蔺佳佳"); //商户名,小微商户填负责人姓名 +// merchantEntryParams.put("mer_short_name", "进件小能手");//简称 +//// merchantEntryParams.put("license_code", "91610131MA6TXACP28");//营业执照编码,如三证合一传三证合一码,企业时必填 +// merchantEntryParams.put("reg_addr", "陕西省西安市高新区科技路37号海星城市广场B座2002-080室");//注册地址 +// merchantEntryParams.put("cust_addr", "陕西省西安市高新区科技路37号海星城市广场B座2002-080室");//经营地址 +// merchantEntryParams.put("cust_tel", "15668897171"); //商户电话 +//// merchantEntryParams.put("mer_start_valid_date", "20151208"); //商户有效日期(始),格式 YYYYMMDD (若开户企业类商户,必填) +//// merchantEntryParams.put("mer_valid_date", "20991231");// 商户有效日期(至) +// merchantEntryParams.put("legal_name", "蔺佳佳"); //法人/负责人 姓名 +// merchantEntryParams.put("legal_type", "0"); //法人/负责人证件类型,0-身份证 +// merchantEntryParams.put("legal_idno", "612501199212187875"); //法人/负责人证件号码 +// merchantEntryParams.put("legal_mp", "15668897171"); //法人/负责人手机号 +// merchantEntryParams.put("legal_start_cert_id_expires", "20190201");//法人/负责人身份证有效期(始),格式 YYYYMMDD +// merchantEntryParams.put("legal_id_expires", "20390201"); //法人/负责人身份证有效期(至),格式 YYYYMMDD +// merchantEntryParams.put("card_id_mask", "6230200212918366");//结算银行卡号 +// merchantEntryParams.put("bank_code", "03040000"); //结算银行卡所属银行code +// merchantEntryParams.put("card_name", "蔺佳佳"); //结算银行卡开户姓名 +// merchantEntryParams.put("bank_acct_type", "2");//1对公、2对私 +// merchantEntryParams.put("prov_code", "0061"); //结算银行卡省份编码 +// merchantEntryParams.put("area_code", "6101"); //结算银行卡地区编码 +// merchantEntryParams.put("rsa_public_key", keyMap.get(0));//商户RSA公钥 +// merchantEntryParams.put("entry_mer_type", 2);//1-企业;2-小微。默认为企业 +// merchantEntryParams.put("notify_url", "https://p40312246f.goho.co//admin/notifyCallback/feedCallBack"); +// merchantEntryParams.put("fee_rate_list","[{\n" + +// " \"rate_channel\": \"wx_pub_online\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"wx_pub_offline\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"wx_lite_online\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"wx_lite_offline\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"wx_scan\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_qr_online\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_qr_offline\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_scan\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_lite_online\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_lite_offline\",\n" + +// " \"fee_rate\": \"0.0036\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"alipay_call\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"union_qr_under\",\n" + +// " \"fee_rate\": \"0.0065\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"union_qr_beyond\",\n" + +// " \"fee_rate\": \"0.0065\"\n" + +// "}, {\n" + +// " \"rate_channel\": \"union\",\n" + +// " \"fee_rate\": \"0.007\"\n" + +// "}]"); +// +// log.info("开户进件merchantEntryParams="+ JSON.toJSONString(merchantEntryParams)); +// Map merchantEntry = null; +// try { +// merchantEntry = MerchantEntry.create(merchantEntryParams); +// log.info("response:{}", JSON.toJSONString(merchantEntry)); +// } catch (BaseAdaPayException e) { +// e.printStackTrace(); +// } + + + +// Map merchantEntryParams = new HashMap<>(10); +// merchantEntryParams.put("request_id", requestId);//测试时每次请求需修改流水 +// merchantEntryParams.put("sub_Api_Key", "api_live_b98e6ea4-ef6d-4565-8c79-47aa8a61d6b6");//商户进件后返回的生产或者测试API Key +// merchantEntryParams.put("fee_type", "01");//费率01-标准费率线上,02-标准费率线下 +// merchantEntryParams.put("app_id", "app_71663e98-69ac-43bf-92e7-624eab429a92");//商户进件后返回的应用ID +// merchantEntryParams.put("wx_category", "770");//经营类目,请参考微信经营类目表 企业758 小微商户770 +// merchantEntryParams.put("alipay_category", "2016062900190337");//经营类目,请参考支付宝经营类目表 综合零售2015091000052157 +// merchantEntryParams.put("cls_id", "5969");//行业分类,支付宝必填 综合零售5399 +// merchantEntryParams.put("model_type", 1);//入驻模式,1-服务商模式 +// merchantEntryParams.put("mer_type", "8");//商户种类 3-私营企业 8-小微 +// merchantEntryParams.put("province_code","610000" );//省份编码 上海310000 +// merchantEntryParams.put("city_code", "610100");//城市编码 上海310100 +// merchantEntryParams.put("district_code", "610112");//区县编码 黄埔310101 +// +// merchantEntryParams.put("add_value_list", " {\"wx_lite\":{\"appid\":\"wxfc7bd92a462eb191\"},\"wx_scan\":\"\", \"alipay\":\"\",\"alipay_wap\":\"\",\"alipay_lite\":\"\",\"alipay_qr\":\"\",\"alipay_scan\":\"\"}"); +// merchantEntryParams.put("notify_url","https://p40312246f.goho.co/admin/notifyCallback/feedCallBack"); +// +// //调用sdk商户配置方法,得到商户配置返回对象 +// Map merchantResident = null; +// try { +// merchantResident = MerchantResident.create(merchantEntryParams); +// } catch (BaseAdaPayException e) { +// e.printStackTrace(); +// } +// log.info("商户入驻merchant config result=" + JSON.toJSONString(merchantResident)); + + + + + +// +// Map request = new HashMap<>(10); +// request.put("subApiKey", "");//商户子apiKey +// request.put("socialCreditCodeId", license.getSocialCreditCodeId());//统一社会信用代码图片ID +// request.put("legalCertIdFrontId", license.getLegalCertIdFrontId());//法人身份证正面图片ID +// request.put("legalCertIdBackId", license.getLegalCertIdBackId());//法人身份证反面图片ID +// request.put("businessAdd", "http://www.baidu.com");//线上业务网址或者商城地址 +// request.put("storeId", license.getStoreId());//门店图片ID +// request.put("accountOpeningPermitId", license.getAccountOpeningPermitId());//开户许可证图片 +// +// +// Map merchantResident = null; +// try { +// merchantResident = MerchantResident.auditProfileInfo(request); +// } catch (BaseAdaPayException e) { +// e.printStackTrace(); +// } +// log.info("商户证照merchant resident modify result=" + JSON.toJSONString(merchantResident)); + + Map map=new HashMap<>(); + + Map z= HfMerService.fileUpload("https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/66c50670c9c948a9ab79c1e9fe63022b.png?Expires=2013671665&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=k86Ait9W7xhEKuG5NHbVanOoZ5g%3D","02","api_live_75bea44d-aaf0-4ee5-a388-7edd7348b5bb"); + + if(ObjectUtil.isNotEmpty(z)&&"succeeded".equals(z.get("status"))){ + map.put("legalCertIdFrontId",z.get("pic_id")); + } + + Map f=HfMerService.fileUpload("https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/1130d3e64fa64e419832b20c37b936e9.png?Expires=2013671696&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=JxIBKn3RMqPgm147wWJgG%2FtArhk%3D","03","api_live_75bea44d-aaf0-4ee5-a388-7edd7348b5bb"); + + if(ObjectUtil.isNotEmpty(f)&&"succeeded".equals(f.get("status"))){ + map.put("legalCertIdBackId",f.get("pic_id")); + } + + Map cz=HfMerService.fileUpload("https://czg-oss.oss-cn-hangzhou.aliyuncs.com/images/d0324999aa1c4c03858a075d8617ab21.png?Expires=2013671786&OSSAccessKeyId=LTAI5tPdEfYSZcqHbjCrtPRD&Signature=3vfGGKAsc2XSMa13vrgaQPnf9pU%3D","05","api_live_75bea44d-aaf0-4ee5-a388-7edd7348b5bb"); + + if(ObjectUtil.isNotEmpty(cz)&&"succeeded".equals(cz.get("status"))){ + map.put("accountOpeningPermitId",cz.get("pic_id")); + } + + Map response= commitUpload(map,"api_live_75bea44d-aaf0-4ee5-a388-7edd7348b5bb"); + + System.out.println(JSON.toJSONString(response)); + } + + + + + + + +} diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java index 8058fd1..bcfee02 100644 --- a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/service/MerchantService.java @@ -40,6 +40,9 @@ public class MerchantService { @Resource private TbPlussNoticeMapper tbPlussNoticeMapper; + @Autowired + HfMerService hfMerService; + /** * 通用进件方法 * @param userId @@ -105,6 +108,9 @@ public class MerchantService { case "6": ysAuditServiceV3.merchantAuditV3(userId,false, Integer.valueOf(channelId)); break; + case "7": + hfMerService.feed(baseInfo,channelStatus); + break; default: MsgException.throwException("未知的进件通道"); } diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/RSAUtils.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/RSAUtils.java new file mode 100644 index 0000000..4315783 --- /dev/null +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/RSAUtils.java @@ -0,0 +1,115 @@ +package com.chaozhanggui.merchant.util; + +import javax.crypto.Cipher; +import java.security.*; +import java.security.interfaces.RSAPrivateKey; +import java.security.interfaces.RSAPublicKey; +import java.security.spec.PKCS8EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; +import java.util.Base64; +import java.util.HashMap; +import java.util.Map; + +/** + * Java RSA 加密工具类 + * + */ +public class RSAUtils { + /** + * 密钥长度 于原文长度对应 以及越长速度越慢 + */ + private final static int KEY_SIZE = 1024; + /** + * 用于封装随机产生的公钥与私钥 + */ + private static Map keyMap = new HashMap(); + + /** + * 随机生成密钥对 + */ + public static Map genKeyPair() throws NoSuchAlgorithmException { + // KeyPairGenerator类用于生成公钥和私钥对,基于RSA算法生成对象 + KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance("RSA"); + // 初始化密钥对生成器 + keyPairGen.initialize(KEY_SIZE, new SecureRandom()); + // 生成一个密钥对,保存在keyPair中 + KeyPair keyPair = keyPairGen.generateKeyPair(); + // 得到私钥 + RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate(); + // 得到公钥 + RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic(); + String publicKeyString = Base64.getEncoder().encodeToString(publicKey.getEncoded()); + // 得到私钥字符串 + String privateKeyString = Base64.getEncoder().encodeToString(privateKey.getEncoded()); + // 将公钥和私钥保存到Map + //0表示公钥 + keyMap.put(0, publicKeyString); + //1表示私钥 + keyMap.put(1, privateKeyString); + + return keyMap; + } + + /** + * RSA公钥加密 + * + * @param str 加密字符串 + * @param publicKey 公钥 + * @return 密文 + * @throws Exception 加密过程中的异常信息 + */ + public static String encrypt(String str, String publicKey) throws Exception { + //base64编码的公钥 + byte[] decoded = Base64.getDecoder().decode(publicKey); + RSAPublicKey pubKey = (RSAPublicKey) KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(decoded)); + //RSA加密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.ENCRYPT_MODE, pubKey); + String outStr = Base64.getEncoder().encodeToString(cipher.doFinal(str.getBytes("UTF-8"))); + return outStr; + } + + /** + * RSA私钥解密 + * + * @param str 加密字符串 + * @param privateKey 私钥 + * @return 明文 + * @throws Exception 解密过程中的异常信息 + */ + public static String decrypt(String str, String privateKey) throws Exception { + //64位解码加密后的字符串 + byte[] inputByte = Base64.getDecoder().decode(str); + //base64编码的私钥 + byte[] decoded = Base64.getDecoder().decode(privateKey); + RSAPrivateKey priKey = (RSAPrivateKey) KeyFactory.getInstance("RSA").generatePrivate(new PKCS8EncodedKeySpec(decoded)); + //RSA解密 + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, priKey); + String outStr = new String(cipher.doFinal(inputByte)); + return outStr; + } + + public static void main(String[] args) throws Exception { + long temp = System.currentTimeMillis(); + //生成公钥和私钥 + genKeyPair(); + //加密字符串 + System.out.println("公钥:" + keyMap.get(0)); + System.out.println("私钥:" + keyMap.get(1)); + System.out.println("生成密钥消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + //客户id + 授权时间 + 所用模块 + String message = "4028138151b3cf300151b419df090007" + "2015-12-17 11:30:22" + "A01,A02"; + System.out.println("原文:" + message); + temp = System.currentTimeMillis(); + //通过原文,和公钥加密。 + String messageEn = encrypt(message, keyMap.get(0)); + System.out.println("密文:" + messageEn); + System.out.println("加密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + temp = System.currentTimeMillis(); + //通过密文,和私钥解密。 + String messageDe = decrypt(messageEn, keyMap.get(1)); + System.out.println("解密:" + messageDe); + System.out.println("解密消耗时间:" + (System.currentTimeMillis() - temp) / 1000.0 + "秒"); + } +} diff --git a/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/SnowFlakeUtil.java b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/SnowFlakeUtil.java new file mode 100644 index 0000000..5d60ae6 --- /dev/null +++ b/newadmin/merchant-service-api/src/main/java/com/chaozhanggui/merchant/util/SnowFlakeUtil.java @@ -0,0 +1,22 @@ +package com.chaozhanggui.merchant.util; + +import cn.hutool.core.lang.Snowflake; +import cn.hutool.core.util.IdUtil; +import lombok.extern.slf4j.Slf4j; + +/** + * @author Exrickx + */ +@Slf4j +public class SnowFlakeUtil { + + /** + * 派号器workid:0~31 + * 机房datacenterid:0~31 + */ + private static Snowflake snowflake = IdUtil.createSnowflake(1, 1); + + public static Long nextId() { + return snowflake.nextId(); + } +}