1.修订记录
修订 | 日期 | 说明 | 作者 |
---|---|---|---|
V0.1 | 2018/01/29 | 新接口参数定义 | 黄月巧 |
V0.2 | 2018/4/12 | 新加同步返回“是否需要电子合同”字段,新加异步通知接口 | 黄月巧 |
V0.3 | 2018/9/26 | 注册新加客服电话,上传图片法人手持身份证正扫面照和门头照非必填 | 张丁元 |
V0.4 | 2018/12/05 | 更新notify_type参数说明 | 郭勇 |
V0.5 | 2019/01/17 | 新增参数:机构号org_no,分账参与商户标识sub_account_flag | 张丁元 |
V0.6 | 2019/01/17 | 异步通知增加字段online_url, offline_url | 陈宋东 |
V0.7 | 2019/07/03 | 补充图片上传注意事项 | 郭勇 |
V0.8 | 2020/06/04 | 需上传的图片需要新增50,51 | 宁华雄 |
V0.9 | 2020/10/10 | 不支持结算至贷记卡 | 汤吉齐 |
V1.0 | 2021/12/21 | 授权信息上送 | 刘雷 |
V1.1 | 2021/12/27 | 支持国密 | 王晶 |
2.接口说明
(1)场景说明
1、线上子商户进件,包括口令获取、商户注册、注册查询、图片上传接口
2、需要调用口令获取(上传图片需要用到)、图片上传、注册接口进行注册
3、调用查询接口查看注册结果
(2)接口说明
1、商户进件上传口令获取、注册文本接口与查询接口-V3.0版本(新)
2、口令获取:调用接口获取token口令,在图片上传时需要此值
3、图片上传:根据token上传图片,调用商户注册接口时通过上传的token关联对应的图片
4、商户注册:传入商户资料进行子商户注册,注册成功返回子商户号
5、注册查询:商户注册结果未知时,调用接口获取商户注册状态
3.请求地址
环境 | HTTPS请求地址 |
---|---|
正式环境 | https://register.ysepay.com:2443/register_gateway/gateway.do |
4.请求参数说明
4.1 公共请求参数
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
method | String(1,128) | Y | 接口名称 获取上传口令接口:ysepay.merchant.register.token.get 商户注册接口:ysepay.merchant.register.accept 查询注册接口:ysepay.merchant.register.query |
partner_id | String(1,20) | Y | 在银盛支付开设的服务商商户号,请联系客户经理提供 |
timestamp | String(1,19) | Y | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 示例值:2014-07-24 03:07:50 |
charset | String(1,10) | Y | 商户网站使用的编码格式,如UTF-8、GBK、GB2312等,默认值 GBK |
sign_type | String(1,10) | Y | 报文签名算法,RSA/SM |
sign | String(1,256) | Y | 签名字符串,再用Base64编码 |
notify_url | String(190) | Y | 银盛支付服务器主动通知商户网站里指定的页面http路径。 |
version | String(1,3) | Y | 接口版本3.0 当前版本:3.0 |
biz_content | String | Y | 业务请求参数的集合,最大长度不限,除公共参数外所有请求参数都必须放在这个参数中传递 |
5.业务参数说明
参数名 biz_content,值为一个json格式对象,下面列表描述json对象的值
5.1 图片上传口令获取
5.1.1 图片上传口令获取
参数 | 类型(字节长度) | 必填 | 参数说明 | 样例 | 是否可为空 |
---|---|---|---|---|---|
该请求为空参数(但是biz_content依然要求按照json格式填写),每次请求都会获取到一个 TOKEN(口令)字符串,您需要在有效时间内,凭此TOKEN上传图片文件至银盛文件服务器中以备注册使用。TOKEN有效时间为120s,一个TOKEN可以上传N张类型不同的图片文件,同类型的图片文件将以最近一次上传为准,为了提高注册成功率,请一次性将需要提高的图片信息全部上传。
图片上传地址:
生产环境:https://uploadApi.ysepay.com:2443/yspay-upload-service?method=upload
测试环境:https://cloudbilltest.ysepay.com:2080/yspay-upload-service?method=upload
图片上传完毕之后请发起商户注册请求,进行注册。注册接口中的token属性是您上传文件时使用的TOKEN值,您需要记住。
5.1.2 业务响应参数
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
code | String | Y | 响应代码 |
msg | String | Y | 响应代码描述 |
token | String(32) | Y | token值 |
token_status | String(20) | Y | 获取TOKEN返回的状态,指示业务进度,TOKEN_GET_SUCCESS获取成功;TOKEN_GET_NULL获取失败 |
5.1.3 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void getToken() throws Exception {
/**1、获取需要的参数*/
OnlineReqDataVo req = new OnlineReqDataVo();
//获取图片上传token的请求路径,建议配置在项目的配置文件里面
String reqUrl = "https://register.ysepay.com:2443/register_gateway/gateway.do";
//客户端私钥证书路径: 证书是在入网流程中自己申请的
String privateKeyFilePath = "D:\\openRSA\\hyfz_test2.pfx";
//客户端私钥密钥: 私钥密钥在入网流程中自己申请私钥证书时填写的
String privateKeyPassworde = "123456";
//银盛公钥证书路径: 证书入网申请后随邮件发放
String publicKeyFilePath = "D:\\openRSA\\businessgate.cer";
//商户在银盛支付平台开设的用户号[商户号]:入网申请后发放
String partnerId = "hyfz_test2";
//银盛支付服务器主动通知商户网站里指定的页面http路径。
String notifyUrl = "http://127.0.0.1";
//设置私钥证书路径
req.setPrivateKeyFilePath(privateKeyFilePath);
//设置私钥密钥
req.setPrivateKeyPassword(privateKeyPassworde);
//设置ys公钥证书路径
req.setYsPublicKeyFilePath(publicKeyFilePath);
//设置请求路径
req.setReqUrl(reqUrl);
//设置通知路径
req.setNotifyUrl(notifyUrl);
req.setPartnerId(partnerId);
logger.info("获取图片上传token请求入参为:"+ JSONObject.toJSONString(req));
/**2、调用API的方法*/
String result = null;
try{
result = OnlineMercApi.getToken(req);
//根据返回结果处理自己的业务逻辑,result内容详见接口文档
}catch (Exception e){
logger.info("获取图片上传token失败:"+e.getCause().getMessage());
e.printStackTrace();
//根据自己要求处理业务逻辑
}
}
5.1.4 API接口代码示例
- 需要开发者自己封装调用逻辑,实现调用银盛api接口同银盛服务端交互,该示例没有加签验签及发送http请求代码,需自行下载demo查看。
@Test
public void getToken() throws Exception {
//组装公共请求参数
Map<String,String> mapDate = new HashMap<String, String>();
mapDate.put("method","ysepay.merchant.register.token.get");
mapDate.put("partner_id","hyfz_test2");
mapDate.put("timestamp", DateUtil.getDateNow());
mapDate.put("charset","UTF-8");
mapDate.put("sign_type","RSA");
mapDate.put("notify_url","http://127.0.0.1");
mapDate.put("version","3.0");
mapDate.put("biz_content","{}");
//进行参数签名,获取sign
try{
String sign = YsPaySignUtils.sign(mapDate);
log.info("产生的签名sign:"+sign);
mapDate.put("sign",sign);
}catch (Exception e){
log.info("签名异常:"+e);
}
//调用TOKEN获取接口
String result = HttpRequest.sendPost("https://register.ysepay.com:2443/register_gateway/gateway.do",CommonUtil.mapToString(mapDate));
if(StringUtil.isBlank(result)){
log.info("接口返回为空");
}
//返回数据验签
boolean flag = false;
try {
flag = YsPaySignUtils.resultVerify(result,"ysepay_merchant_register_token_get_response");
if (!flag){
throw new Exception("验签失败");
}
}catch (Exception e){
log.info("验签异常:"+e);
}
//解析接口回执,获取token值
JSONObject response = (JSONObject) JSON.parseObject(result, Feature.OrderedField).get("ysepay_merchant_register_token_get_response");
String token = response.get("token").toString();
log.info("TOKEN:"+token);
}
5.2 商户注册接口
商户通过上传口令获取接口拿到银盛返回的Token值之后,等同于拿到了一个可以上传图片的口令。商户可以根据这个口令完成图片的上传,这些上传的图片会与本接口传递的文本信息是注册商户不可缺少的元素。图片上传接口是文件上传服务提供的接口,并不是网关接口,商户可以根据下面给出的地址进行访问。
上传图片接口的地址:
https://uploadApi.ysepay.com:2443/yspay-upload-service?method=upload
接口参数请参看4.附相关内容
图片上传完成之后需要在网关上传注册的文本信息,本接口定义的是上传注册文本信息时需要传递的参数。
5.2.1 请求注册接口
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
merchant_no | String(1,20) | Y | 平台商唯一标识(自定义) |
remark | String(0,500) | N | 备注 |
cust_type | String(1,1) | Y | 客户类型O:小微;B:企业;C:个体 |
token | String(1,50) | Y | token值 |
another_name | String(1,100) | Y | 商户简称 |
cust_name | String(1,100) | Y | 公司名称或者客户名称,客户类型是小微商户时客户名称需和身份证号码、法人手机号码匹配 |
mer_flag | String(0,1) | N | 商户属性。11为普通商户,12为代理商户,不填的情况下默认为普通商户 |
industry | String(1,4) | Y | 行业类别 ,详细类别见3.6节的定义 |
province | String(1,40) | Y | 省,为完善企业信息请准确填写 |
city | String(1,40) | Y | 市,为完善企业信息请准确填写 |
company_addr | String(1,200) | Y | 详细地址,为完善企业信息请准确填写 |
legal_name | String(1,100) | N | 企业法人名字,需和身份证号码、法人手机号码匹配,当客户类型为小微商户时,企业法人可以为空, |
legal_tel | String(1,20) | Y | 企业法人手机号码 |
String(0,60) | N | 登陆邮箱,请按照正确邮箱格式填写 | |
contact_man | String(0,100) | N | 联系人 |
contact_phone | String(0,11) | N | 联系人手机号码 |
legal_cert_type | String(1,2) | Y | 企业法人证件类型,支持类型请参照3.7小节 |
legal_cert_no | String(1,80) | Y | 企业法人证件号,请加密传输 注:如果签名方式为RSA,则用DES加密,密钥Src用户号前8位,不足8位前补空 ;如果签名方式为SM,则用SM加密 |
legal_cert_expire | String(8,8) | N | 企业法人证件有效期,格式为yyyyMMdd。为空时默认长期有效 |
bus_license | String(0,40) | N | 营业执照,客户类型为个体商户、企业户时为必填,为保证商户信息准确,请填写有效营业执照号 示例值:沪-A1283123132 |
bus_license_expire | String(0,8) | N | 营业执照有效期,客户类型为个体商户、企业商户时为必填,格式为yyyyMMdd 示例值:20181229 |
notify_type | String(0,1) | N | 通知方式,此通知为商户号审核通知,通知内容包含帐号信息,为空的情况下将不发送通知,支持通知方式1、邮箱,2手机短信,3、邮箱+手机短信 固定值:1 |
settle_type | String(1,1) | Y | 结算方式,0:平台内账户1:银行卡账户.结算方式为0时银行卡信息只涉及提现,为1时涉及到提现以及清算 |
bank_account_no | String(10,23) | Y | 银行帐号,注:当bank_account_type为对公账户时,该属性字段长度可以为String(1,32) |
bank_account_name | String(1,100) | Y | 开户人,银行卡账户名,需和法人姓名或客户姓名一致 |
bank_account_type | String(3,9) | Y | 银行账户类型,此处必填corporate :对公账户;personal:对私账户 |
bank_card_type | String(4,6) | Y | 银行卡类型,可填debit、unit、debit借记卡,unit单位结算卡 |
bank_name | String(1,128) | Y | 开户行名称,为交易能顺利进行,请尽可能填写到街道 示例值:中国银行深圳分行民治支行 |
bank_type | String(1,128) | Y | 银行行别 示例值:中国银行 |
bank_province | String(40) | Y | 开户行所在的省份 |
bank_city | String(1,40) | Y | 开户行所在城市 |
cert_type | Number(2,2) | Y | 开户人证件类型,目前只支持00,00为身份证 |
cert_no | String(1,50) | Y | 开户人证件号码,请加密传输 如果签名方式为RSA,则用DES加密,密钥Src用户号前8位,不足8位前补空 ; 如果签名方式为SM,则用SM加密 |
bank_telephone_no | String(11) | Y | 银行预留手机号 |
service_tel | String(10,12) | N | 客服电话 |
org_no | String(10) | Y | 银盛下发的商户机构号,该参数不为空的情况下,商户机构号以上送的为准 【联系银盛运营/技术支持获取子商户归属的机构号】 |
sub_account_flag | String(1) | N | 分账参与商户标识,Y:是,N或空:否;该参数为Y的情况下,则表示商户仅参与分账,无需开通交易业务权限;为N或空的情况下,默认非分账参与商户 |
auth_protocol_ver | String(64) | N | 用户授权协议版本号 |
auth_protocol_no | String(64) | N | 用户授权协议流水号 |
5.2.2 业务响应参数
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
code | String | Y | 响应代码 |
msg | String | Y | 响应代码描述 |
usercode | String(20) | Y | 用户名 |
custname | String(100) | Y | 客户名 |
custid | String(20) | Y | 客户ID |
user_status | String(2) | Y | 状态 |
createtime | String(8,8) | Y | 创建时间 |
银盛支付对商户的请求数据处理完成后,会将处理的最终结果数据异步回执给商户。
5.2.3 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void merchantRegister() throws Exception {
/**1、获取需要的参数*/
OnlineReqDataVo req = new OnlineReqDataVo();
//注册线上进件商户的请求路径,建议配置在项目的配置文件里面
String reqUrl = "https://register.ysepay.com:2443/register_gateway/gateway.do";
//客户端私钥证书路径: 证书是在入网流程中自己申请的
String privateKeyFilePath = "D:\\openRSA\\hyfz_test2.pfx";
//客户端私钥密钥: 私钥密钥在入网流程中自己申请私钥证书时填写的
String privateKeyPassworde = "123456";
//银盛公钥证书路径: 证书入网申请后随邮件发放
String publicKeyFilePath = "D:\\openRSA\\businessgate.cer";
//商户在银盛支付平台开设的用户号[商户号]:入网申请后发放
String partnerId = "hyfz_test2";
//银盛支付服务器主动通知商户网站里指定的页面http路径。
String notifyUrl = "http://127.0.0.1";
//设置私钥证书路径
req.setPrivateKeyFilePath(privateKeyFilePath);
//设置私钥密钥
req.setPrivateKeyPassword(privateKeyPassworde);
//设置ys公钥证书路径
req.setYsPublicKeyFilePath(publicKeyFilePath);
//设置请求路径
req.setReqUrl(reqUrl);
//设置通知路径
req.setNotifyUrl(notifyUrl);
req.setPartnerId(partnerId);
/**2、组装业务参数*/
Map<String,Object> bizContentMap = new HashMap<>();
bizContentMap.put("merchant_no","youname");//平台商唯一标识
bizContentMap.put("remark","第一个商户");//备注
bizContentMap.put("cust_type","O");//客户类型O:小微;B:企业;C:个体
bizContentMap.put("token","TK20211012165208644yMaMr2UD");//token值 :通过getToken接口获取
bizContentMap.put("another_name","龙商龙行");//商户简称
bizContentMap.put("cust_name","龙行百货");//公司名称或者客户名称,客户类型是小微商户时客户名称需和身份证号码、法人手机号码匹配
bizContentMap.put("mer_flag","11");//商户属性。11为普通商户,12为代理商户,不填的情况下默认为普通商户
bizContentMap.put("industry","23");//行业类别 ,详细类别见3.6节的定义
bizContentMap.put("province","内蒙古自治区");//省,为完善企业信息请准确填写
bizContentMap.put("city","呼和浩特市");//市,为完善企业信息请准确填写
bizContentMap.put("company_addr","滨河北路中海外滩");//详细地址,为完善企业信息请准确填写
bizContentMap.put("legal_name","李四");//企业法人名字,需和身份证号码、法人手机号码匹配,当客户类型为小微商户是,企业法人可以为空,
bizContentMap.put("legal_tel","13747255939");//企业法人手机号码
bizContentMap.put("mail","7691345307@qq.com");//登陆邮箱,请按照正确邮箱格式填写
bizContentMap.put("contact_man","张三");//联系人
bizContentMap.put("contact_phone","18888888888");//联系人手机号码
bizContentMap.put("legal_cert_type","00");//企业法人证件类型,支持类型请参照3.7小节
bizContentMap.put("legal_cert_no", SrcDesUtil.encryptData(partnerId,"110101198001010010"));//企业法人证件号,请加密传输 注:如果签名方式为RSA,则用DES加密,密钥Src用户号前8位,不足8位前补空; 如果签名方式为SM,则用SM加密
bizContentMap.put("legal_cert_expire","20360810");//企业法人证件有效期,格式为yyyyMMdd。为空时默认长期有效
bizContentMap.put("bus_license","沪-A1283123132");//营业执照,客户类型为个体商户、企业户时为必填,为保证商户信息准确,请填写有效营业执照号
bizContentMap.put("bus_license_expire","20181229");// 营业执照有效期,客户类型为个体商户、企业商户时为必填,格式为yyyyMMdd
bizContentMap.put("notify_type","1");//通知方式,此通知为商户号审核通知,通知内容包含帐号信息,为空的情况下将不发送通知,支持通知方式1、邮箱,2手机短信,3、邮箱+手机短信
bizContentMap.put("settle_type","1");//结算方式,0:平台内账户1:银行卡账户.结算方式为0时银行卡信息只涉及提现,为1时涉及到提现以及清算
bizContentMap.put("bank_account_no","43672221090449733315");//银行帐号,注:当bank_account_type为对公账户时,该属性字段长度可以为String(1,32)
bizContentMap.put("bank_account_name","王二小");//开户人,银行卡账户名,需和法人姓名或客户姓名一致
bizContentMap.put("bank_account_type","personal");//银行账户类型,此处必填corporate :对公账户;personal:对私账户
bizContentMap.put("bank_card_type","debit");//银行卡类型,可填debit|unit.debit借记卡,unit单位结算卡
bizContentMap.put("bank_name","中国建设银行呼和浩特赛罕区支行");// 开户行名称,为交易能顺利进行,请尽可能填写到街道
bizContentMap.put("bank_type","中国建设银行");//银行行别
bizContentMap.put("bank_province","内蒙古自治区");//开户行所在的省份
bizContentMap.put("bank_city","呼和浩特市");//开户行所在城市
bizContentMap.put("cert_type","00");//开户人证件类型,目前只支持00,00为身份证
bizContentMap.put("cert_no",SrcDesUtil.encryptData(partnerId,"110101198001010010"));//开户人证件号码,请加密传输
bizContentMap.put("bank_telephone_no","13347255979");//银行预留手机号
bizContentMap.put("service_tel","13347259638");//客服电话
bizContentMap.put("org_no","6190000067");//机构号
bizContentMap.put("sub_account_flag","N");//分账参与商户标识
req.setParamData(bizContentMap);
logger.info("注册线上进件商户请求入参为:"+ JSONObject.toJSONString(req));
/**2、调用API的方法*/
String result = null;
try{
result = OnlineMercApi.merchantRegister(req);
//根据返回结果处理自己的业务逻辑,result内容详见接口文档
}catch (Exception e){
logger.info("注册线上进件商户失败:"+e.getCause().getMessage());
e.printStackTrace();
//根据自己要求处理业务逻辑
}
}
5.2.4 API接口代码示例
- 需要开发者自己封装调用逻辑,实现调用银盛api接口同银盛服务端交互,该示例没有加签验签及发送http请求代码,需自行下载demo查看。
public static void merchantRegister(){
//获取token ,查看API接口代码示例获取token接口
String token = getToken();
//1.组装报文
Map<String,String> mapDate = new HashMap<String,String>();
//1.1组装外层报文 API请求参数
mapDate.put("charset","UTF-8");
mapDate.put("method", "ysepay.merchant.register.accept");
mapDate.put("notify_url","http://127.0.0.1");
mapDate.put("partner_id","hyfz_test2");
mapDate.put("sign_type","RSA");
mapDate.put("timestamp",DateUtil.getDateNow());
mapDate.put("version","3.0");
//1.2组装内层报文 业务数据
JSONObject json = new JSONObject();
json.put("merchant_no", "637587438028042315");
json.put("cust_type","O");
json.put("token",token);
json.put("another_name","小明");
json.put("cust_name","小明");
json.put("industry","23");
json.put("province","内蒙古自治区");
json.put("city","呼和浩特市");
json.put("company_addr","滨河北路中海外滩");
json.put("legal_tel","13347255939");
json.put("legal_cert_type","00");
json.put("legal_cert_expire","20360810");
json.put("settle_type","1");
json.put("bank_account_no","43672221090449733315");
json.put("bank_account_name","小明");
json.put("bank_account_type","personal");
json.put("bank_card_type","debit");
json.put("bank_name","中国建设银行呼和浩特赛罕区支行");
json.put("bank_type","中国建设银行");
json.put("bank_province","内蒙古自治区");
json.put("bank_city","呼和浩特市");
json.put("cert_type","00");
json.put("bank_telephone_no","13347255939");
json.put("org_no","6190000067");
//证件号加密
try {
//SrcDesUtil.encryptData(key,data) key直接传partner_id,方法内部会进行format:取商户号前8位,不足8位前面补空
json.put("legal_cert_no",SrcDesUtil.encryptData("hyfz_test2","110101198001010010"));
json.put("cert_no",SrcDesUtil.encryptData("hyfz_test2","110101198001010010"));
} catch (Exception e){
log.info("DES加密异常:"+e);
}
mapDate.put("biz_content",json.toString());
//2 参数签名
try {
String sign = YsPaySignUtils.sign(mapDate);
mapDate.put("sign",sign);
mapDate.put("biz_content", URLEncoder.encode(mapDate.get("biz_content"),"utf-8"));
}catch (Exception e){
log.info("签名异常:",e);
}
//3发送请求
log.info("发送请求数据"+CommonUtil.mapToString(mapDate));
String result = HttpRequest.sendPost("https://register.ysepay.com:2443/register_gateway/gateway.do",CommonUtil.mapToString(mapDate));
if (StringUtil.isBlank(result)){
log.info("返回结果为空!");
}
//4对接口返回结果进行验签
boolean resultVerify = false;
try {
log.info("待验签数据:"+result);
resultVerify = YsPaySignUtils.resultVerify(result,"ysepay_merchant_register_accept_response");
}catch (Exception e){
log.info("验签失败:"+e);
}
log.info("验签结果"+resultVerify);
}
5.3 商户注册查询接口
5.3.1 商户注册查询接口
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
usercode | String(1,20) | N | 已注册用户号(usercode与merchant_no必填一个) |
merchant_no | String(0,20) | N | 平台商的用户号(usercode与merchant_no必填一个) |
5.3.2 业务响应参数
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
code | String | Y | 响应代码 |
msg | String | Y | 响应代码描述 |
usercode | String(20) | Y | 用户名 |
custname | String(100) | Y | 客户名 |
custid | String(20) | Y | 客户ID |
user_status | String(10) | Y | 用户状态 |
createtime | String(8,8) | Y | 创建时间 |
cust_status | String(10) | Y | 客户状态 |
is_need_contract | String(1,1) | Y | 子商户是否需要电子合同 |
merchant_no | String(1,20) | Y | 平台商唯一标识 |
note | String(1,200) | N | N |
5.3.3 SDK调用示例
- 银盛将与服务端交互的接口封装在开发工具包(SDK)中,开发者无需自行实现同服务端交互的复杂逻辑,直接将SDK导入自己的工程后,通过sdk示例代码实现同银盛服务端的交互。
@Test
public void queryMerchant() throws Exception {
/**1、获取需要的参数*/
OnlineReqDataVo req = new OnlineReqDataVo();
//主动查询商户注册信息的请求路径,建议配置在项目的配置文件里面
String reqUrl = "https://register.ysepay.com:2443/register_gateway/gateway.do";
//客户端私钥证书路径: 证书是在入网流程中自己申请的
String privateKeyFilePath = "D:\\openRSA\\hyfz_test2.pfx";
//客户端私钥密钥: 私钥密钥在入网流程中自己申请私钥证书时填写的
String privateKeyPassworde = "123456";
//银盛公钥证书路径: 证书入网申请后随邮件发放
String publicKeyFilePath = "D:\\openRSA\\businessgate.cer";
//商户在银盛支付平台开设的用户号[商户号]:入网申请后发放
String partnerId = "hyfz_test2";
//银盛支付服务器主动通知商户网站里指定的页面http路径。
String notifyUrl = "http://127.0.0.1";
//设置私钥证书路径
req.setPrivateKeyFilePath(privateKeyFilePath);
//设置私钥密钥
req.setPrivateKeyPassword(privateKeyPassworde);
//设置ys公钥证书路径
req.setYsPublicKeyFilePath(publicKeyFilePath);
//设置请求路径
req.setReqUrl(reqUrl);
//设置通知路径
req.setNotifyUrl(notifyUrl);
req.setPartnerId(partnerId);
/**2、组装业务参数*/
Map<String,Object> bizContentMap = new HashMap<>();
bizContentMap.put("usercode",null);//已注册用户号(usercode与merchant_no必填一个)
bizContentMap.put("merchant_no","hyfz_test2");//平台商的用户号(usercode与merchant_no必填一个)
req.setParamData(bizContentMap);
logger.info("主动查询商户注册信息请求入参为:"+ JSONObject.toJSONString(req));
/**2、调用API的方法*/
String result = null;
try{
result = OnlineMercApi.queryMerchant(req);
//根据返回结果处理自己的业务逻辑,result内容详见接口文档
}catch (Exception e){
logger.info("主动查询商户注册信息失败:"+e.getCause().getMessage());
e.printStackTrace();
//根据自己要求处理业务逻辑
}
}
5.3.4 API接口代码示例
- 需要开发者自己封装调用逻辑,实现调用银盛api接口同银盛服务端交互,该示例没有加签验签及发送http请求代码,需自行下载demo查看。
public void queryMerchant()throws Exception{
Map<String,String> mapDate = new HashMap<>();
mapDate.put("charset","UTF-8");
mapDate.put("method", "ysepay.merchant.register.query");
mapDate.put("notify_url","http://127.0.0.1");
mapDate.put("partner_id","hyfz_test2");
mapDate.put("sign_type","RSA");
mapDate.put("timestamp",DateUtil.getDateNow());
mapDate.put("version","3.0");
JSONObject json = new JSONObject();
json.put("merchant_no","hyfz_test2");
json.put("usercode",null);
mapDate.put("biz_content",json.toString());
//签名
try {
String sign = YsPaySignUtils.sign(mapDate);
mapDate.put("sign",sign);
}catch (Exception e){
log.info("签名异常:"+e);
}
//调用查询接口
String result = HttpRequest.sendPost("https://register.ysepay.com:2443/register_gateway/gateway.do",CommonUtil.mapToString(mapDate));
if (StringUtil.isBlank(result)){
log.info("结果返回空");
throw new Exception("查询接口结果返回空");
}
JSONObject jsonObject = JSONObject.parseObject(result,Feature.OrderedField);
JSONObject content = (JSONObject) jsonObject.get("ysepay_merchant_register_query_response");
String sign = jsonObject.get("sign").toString();
//验签
boolean resultVerify = false;
try{
log.info("待验签数据:"+content);
resultVerify = YsPaySignUtils.resultVerify1(content.toJSONString(),sign);
}catch (Exception e){
log.info("验签异常:"+e);
}
log.info("验签结果:"+resultVerify);
}
5.4 商户注册异步通知接口
银盛支付对商户的请求数据处理完成后,会将处理的结果数据通过服务器主动通知的方式通知给商户网站。这些处理结果数据就是服务器异步通知参数。
请注意:银盛后期会对返回参数保留扩展的权力,扩展方式为新增参数但不会删除参数,请商户在解析银盛返回参数时要支持银盛可能扩展参数这种情况。
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
usercode | String(20) | Y | 用户名 |
custname | String(100) | Y | 客户名 |
custid | String(20) | Y | 客户ID |
user_status | String(10) | Y | 用户状态 |
createtime | String(8,8) | Y | 创建时间 |
cust_statue | String(10) | Y | 客户状态 |
is_need_contract | String(1,1) | Y | 子商户是否需要电子合同 Y、N |
merchant_no | String(1,20) | Y | 平台商唯一标识 |
note | String(1,200) | N | 备注 |
online_url | String | N | 电子合同预览地址 |
offline_url | String | N | 电子合同下载地址 |
notify_type | String | Y | 通知类型 固定值:T9004 |
notify_time | String(19) | Y | 发送请求的时间,格式"yyyy-MM-dd HH:mm:ss" 示例值:2014-07-24 03:07:50 |
sign_type | String | Y | 报文签名算法,交易请求是的签名类型RSA/SM |
sign | String | Y | 签名字符串,Base64编码 |
5.5 参考错误码
错误码 | 错误描述 | 解决方案 |
---|---|---|
ACQ.SYSTEM_ERROR | 系统错误 | 请调用查询接口查询订单状态 |
ACQ.BUSINESS_TIMEOUT_ERROR | 业务超时 | 请调用查询接口查询订单状态 |
ACQ.INVALID_PARAMETER | 参数无效 | 检查请求参数,修改后重新发起请求 |
ACQ.REGISTER_USERCODE_EXISTED | 预注册用户号已经存在 | 更新商户号重新发起请求 |
PARAM_ERROR | 参数错误 | 检查请求参数,修改后重新发起请求 |
sub_code | 错误代码 | 其他基础服务直接返回的错误信息,直接根据提示对参数进行修改即可。比如sub_code:6535 sub_msg:平台商唯一识别码重复 ,说明已经注册过了 |
ACQ.GETBANKCARINFO | 获取银行信息或者获取银行账户类型失败 | 卡的类型为贷记卡,或者根据银行卡账号查询出来卡的类型为贷记卡,解决方案:使用借记卡来进行注册 |
5.6 用户状态与客户状态
用户状态与客户状态是两个不同的概念,一个用户不一定是客户,是客户就一定是用户。
用户状态说明 | 客户状态说明 |
---|---|
未激活 | 未生效 |
待补全 | 待补全 |
待审核 | 待审核 |
生效 | 生效 |
禁用 | 注销 |
锁定 | 冻结 |
冻结 | 挂起 |
注销 | 暂停 |
审核失败 | 审核失败 |
临时挂失 | |
正式挂失 | |
电子合同签约成功 | |
电子合同签约失败 | |
电子合同签约中 |
5.7 行业类别
类型 | 描述 | 类型 | 描述 | 类型 | 描述 |
---|---|---|---|---|---|
01 | 服饰鞋包 | 23 | 打车、智慧城市 | 58 | 批发零售业 |
02 | 数码家电 | 24 | 移动支付手游 | 59 | 制造业 |
03 | 鲜花礼品 | 25 | 融资租赁 | 60 | 文化活动服务 |
04 | 美容护肤 | 26 | 投资理财 | 61 | 福利彩票 |
05 | 团购 | 27 | 保险行业 | 62 | 股票操盘 |
06 | 机票旅游 | 31 | 消费分期 | 63 | 众筹 |
07 | 商务办公 | 32 | 其他行业 | 66 | 大宗商品 |
08 | 文体用品 | 33 | 小贷消金 | 67 | 服装鞋包 |
09 | 图书音像 | 34 | 直播行业 | 68 | 互联网金融 |
10 | 家居装潢 | 35 | 信息咨询 | 69 | 话费充值 |
1001 | 餐饮娱乐类 | 36 | 综合商城 | 70 | 计算机软件 |
1002 | 一般类 | 41 | 机械设备 | 71 | 计算机系统集成 |
1003 | 民生类 | 42 | 直销行业 | 72 | 建筑工程 |
1004 | 便民服务 | 43 | 通信行业 | 73 | 理财投资 |
1005 | 环保类 | 44 | 汽车贸易 | 74 | 金融租赁 |
11 | 母婴儿童 | 45 | 拍卖 | 75 | 旅游机票 |
12 | 健康保健 | 46 | 税务服务 | 78 | 人力资源 |
13 | 食品饮料 | 47 | 情趣用品 | 79 | 生活服务 |
14 | 资讯杂志 | 48 | 供应链服务 | 80 | 软件定制商城 |
15 | 教育咨询 | 49 | 医疗服务 | 82 | 物流运输 |
16 | 金融保险理财 | 50 | 酒店管理 | 83 | 消费金融 |
17 | 软件定制创意 | 51 | 跨境直购 | 84 | 物业管理 |
18 | 虚拟点卡 | 52 | 银行机构 | 85 | 小额贷款 |
19 | 域名主机 | 53 | 事业单位 | 86 | 游戏行业 |
20 | 电子商务 | 55 | 租赁行业 | 87 | 游戏点卡 |
21 | 酒店预订 | 56 | 人力资源 | 88 | 影视传媒 |
22 | 彩票 | 57 | 房地产 | 89 | 艺术品类 |
5.8 证件类别
类型 | 描述 | 类型 | 描述 |
---|---|---|---|
00 | 公民身份证正面 | 12 | 军事院校学员证 |
01 | 中国护照 | 13 | 武装警察身份证 |
02 | 军人身份证 | 14 | 军官证 |
03 | 警官证 | 15 | 文职干部证 |
04 | 户口簿 | 16 | 军人士兵证 |
05 | 临时身份证 | 17 | 武警士兵证 |
06 | 外国护照 | 18 | 其他证件 |
07 | 港澳通行证 | 19 | 营业执照 |
08 | 台胞通行证 | 20 | 税务登记证 |
09 | 离休干部荣誉证 | 30 | 公民身份证反面 |
10 | 军官退休证 | 31 | 客户协议 |
11 | 文职干部退休证 | 32 | 授权书 |
6.附:文件上传服务-图片上传
6.1 图片上传注意事项
为确保商户注册成功率,请按照以下注意事项检查图片后再上传:
1.基本要求:图像文字清晰,人眼可辨别;对比度、亮度适中;尽量不要有背景,即证件充满图片,如果不能保证没有背景,请选择纯黑背景而且背景不宜过多。
2.对扫描图像的要求:扫描时选择分辨率300dpi,不能低于150 dpi,分辨率最好不要过高。
3.对拍摄图像的要求:拍摄时注意光照的影响,尽量避免反光和黑影,尤其是证件有薄膜覆盖的时候;拍摄时做好聚焦,以免图像模糊不清;拍摄时将证件放正;尽量不要使拍摄角度倾斜过大,以免造成图像变形;拍摄时请不要选择过高的分辨率拍摄,一方面造成图片过大,不利于传输,一方面分辨率过高也会影响识别率。拍摄时可以选择1280*960分辨率拍摄,低一些的分辨率也可以选择,但是要确保图像文字清晰
4.企业商户请尽量使用最新的竖版“三证合一”营业执照。
5.为确保商户进件响应速度,建议图片大小在1M内,企业客户注册时我司会进行营业执照真伪校验,整体响应时间预计在40-60s内。
6.2 请求图片上传参数
请求参数是商户在与银盛支付进行数据交互时,提供给银盛支付的请求数据,以便银盛支付根据这些数据进一步处理。
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
picType | String(1,2) | Y | 图片类型 示例值:附6.4 |
picFile | multipart | Y | 通过body的mutipartfile类型上传 |
token | String(1,50) | Y | token值 |
superUsercode | String(1,20) | Y | 合作方用户号 |
6.3 业务响应参数
银盛支付对商户的请求数据受理完成后,会将处理的结果数据同步回执给商户,返回对象UploadPicResult 详细定义:
参数 | 类型(字节长度) | 必填 | 参数说明 |
---|---|---|---|
isSuccess | boolean | Y | 是否成功 true:成功;false:失败 |
errorCode | String(1,4) | N | 错误码 |
errorMsg | String(1,200) | N | 错误信息 |
token | String(1,50) | N | token值 |
6.4 图片文件的类型以及说明
类型 | 描述 |
---|---|
00 | 公民身份证正面 |
19 | 营业执照 |
20 | 税务登记证 |
30 | 公民身份证反面 |
31 | 客户协议 |
32 | 授权书 |
33 | 手持身份证正扫面照 |
34 | 门头照 |
35 | 结算银行卡正面照 |
36 | 结算银行卡反面照 |
37 | 开户许可证或印鉴卡 |
50 | 经营场所图1 |
51 | 经营场所图2 |
附表1
图片类型的必要性,打钩为必填项:
序号 | 类别 | 小微商户 | 个体商户 | 企业商户 |
---|---|---|---|---|
1 | 法人身份证正反面 | √ | √ | √ |
2 | 法人手持身份证正扫面照 | √ | √ | √ |
3 | 营业执照 | √ | √ | |
4 | 组织机构代码证 | |||
5 | 门头照 | √ | √ | √ |
6 | 结算银行卡正反面照 | √ | √ | |
7 | 客户协议书 | √ | √ | √ |
8 | 授权书 | |||
9 | 开户许可证或印鉴卡 | √ | ||
10 | 经营场所图1 | √ | √ | √ |
11 | 经营场所图2 | √ | √ | √ |