预下单接口说明(线下扫码)
商户预下单说明和接口 #01
商户完成业务处理后,调用SDK中生成create的方法,通过商户后端对参数进行加密请求到我方后端。 我方服务完成预下单后返回URL串,商户需将URL串转换为二维码,将二维码通过物理方式展现给客户。
统一接口为 com.bosssoft.sdk.model.Charge.create(chargeMap,serviceUrl,privateKey); 其中chargeMap为接口参数,见下方接口参数章节。 serviceUrl为我方提供的接口地址: 测试环境为: http://debug.epayservice.cn/thirdpay/charge/qrcode.do 正式环境为: http://api.epayservice.cn/thirdpay/charge/qrcode.do privateKey为数据传输时签名加密所需使用的商户私钥。
接口参数 #02
chargeMap参数内容:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
merchant_no | 商户号 | String | 是 | |
widget_content | 订单内容 | String | 是 | 转出时需使用私钥签名 |
back_url | 后端通知地址 | String | 是 | |
extra | 扩展参数 | String | 否 |
widget_content参数内容(JSON):
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
merchant_no | 商户号 | String | 是 | |
merchant_order_no | 商户订单号 | String | 是 | |
amount | 订单金额 | Integer | 是 | 单位 分 |
widget_param | 控件参数 | String | 否 | |
subject | 商品标题 | String | 否 | |
body | 商品描述 | String | 否 | |
device_type | 设备类型 | String | 是 | pc、phone |
effective_time | 有效时间 | String | 否 | 1m~15d,m-分钟,h-小时,d-天 默认当天1c,24点失效 |
version_no | 版本编码 | String | 是 | 1.0旧接口,1.1新接口 |
widget_param参数(生单及电子票)
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
businessNo | 业务单号,执收单位业务单号 | String | 是 | 不可重复 |
businessType | 业务类型 | String | 是 | 生单必填 |
agencyCode | 执收单位编码 | String | 是 | 生单必填 |
date | 填制日期 | String | 是 | 生单必填 |
payerType | 缴款人类型 | String | 是 | 1个人、2单位 |
payerName | 缴款人名称 | String | 是 | |
payerTel | 缴款人手机号 | String | 否 | |
payerAccName | 缴款人户名 | String | 否 | |
payerAccNo | 缴款人账号 | String | 否 | |
payerBank | 缴款人开户银行 | String | 否 | |
payerBankId | 缴款人所属银行 | String | 否 | |
payerCertificate | 缴款人证件号 | String | 否 | |
payeeAccAssignType | 账户给定方式 | String | 是 | 生单必填,1财政设置2单位指定3子账号 |
payeeAccName | 收款人全称 | String | 否 | 账户给定方式为2时必填 |
payeeAccNo | 收款人账号 | String | 否 | 账户给定方式为2时必填 |
payeeAccBankName | 收款人开户银行 | String | 否 | 账户给定方式为2时必填 |
totalAmt | 缴款金额合计 | Integer | 是 | 单位 分 |
other_amt | 其他金额合计 | Integer | 否 | 单位 分 |
effectiveDate | 有效日期 | String | 否 | YYYY-MM-DD |
author | 开票人 | String | 是 | |
placeCode | 开票点编码 | String | 是 | 开电子票必填 |
creditCode | 单位组织机构代码(用于电子票归集) | String | 否 | |
billCode | 票据种类编码 | String | 是 | 开电子票必填 |
noticeInfos | 电子票通知域 | List | 否 | 需要发送开票通知时填写。 |
itemDetails | 收费项目明细内容 | List | 是 | |
memo | 备注 | String | 否 |
details收费项目明细:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
itemCode | 项目编码 | String | 是 | |
itemName | 项目名称 | String | 是 | |
unit | 项目执收单位 | String | 是 | |
number | 执收数量 | Integer | 是 | |
std | 执收标准 | Integer | 是 | 单位 分 |
amt | 项目执收金额 | Integer | 是 | 单位 分 |
noticeInfos电子票通知域明细:
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
type | 通知类型 | String | 是 | |
value | 通知类型值 | String | 是 |
接口返回 #03
属性 | 描述 | 类型 | 是否必填 | 补充 |
---|---|---|---|---|
success | 返回状态 | Boolean | 是 | true:成功,false:失败 |
extraInfo | 返回跳转的信息 | String | 否 | 发生异常时字段为空 |
msg | 返回的描述信息 | String | 是 |
Demo #04
@RequestMapping(value = "/createCharge", method = RequestMethod.POST,
produces={"text/html;charset=UTF-8;","application/json;"})
@ResponseBody
public String createCharge(
@RequestParam(value = "merchant_no", required = true) String merchant_no,
@RequestParam(value = "merchant_order_no") String merchant_order_no,
@RequestParam(value = "amount") Integer amount,
@RequestParam(value = "channel") String channel,
@RequestParam(value = "widget_content", required = true) String widget_content,
@RequestParam(value = "service_url", required = true) String service_url,
HttpServletRequest request, HttpServletResponse response) {
if(StringUtils.isEmpty(merchant_no) && StringUtils.isEmpty(merchant_order_no) &&
StringUtils.isEmpty(channel) && StringUtils.isEmpty(charge_param) &&
StringUtils.isEmpty(widget_content) && StringUtils.isEmpty(service_url)) {
try {
BufferedReader br =request.getReader();
net.sf.json.JSONObject objStr= net.sf.json.JSONObject.fromObject(br.readLine());
merchant_no = (String) objStr.get("merchant_no");
merchant_order_no = (String) objStr.get("merchant_order_no");
amount = (Integer) objStr.get("amount");
channel = (String) objStr.get("channel");
charge_param = (String) objStr.get("charge_param");
widget_content = (String) objStr.get("widget_content");
service_url = (String) objStr.get("service_url");
} catch (IOException e) {
logger.error("获取请求参数失败{}", e);
e.printStackTrace();
}
}
// merchant_no,channel,merchant_order_no,amount用于验证订单一致性和获取信息。
logger.info(merchant_no);
logger.info(merchant_order_no);
logger.info(amount);
// 收缴渠道取值,用户选择收缴方式点提交后,会将channel传进来
logger.info(channel);
//重要:构造chargeMap
Map chargeMap = new HashMap();
chargeMap.put("merchant_no", merchant_no);
// 商户号,应与js中传入的一致,接到的merchant_no参数
chargeMap.put("subject", ParamConstant.SUBJECT);
// 商品标题,该参数最长为 32 个 Unicode 字符(商户根据自己的需求可选择传或不传)
chargeMap.put("body", ParamConstant.BODY);
// 商品描述信息,该参数最长为 100 个 Unicode 字符(商户根据自己的需求可选择传或不传)
chargeMap.put("widget_content", widget_content);// 组装json串
chargeMap.put("front_url", ParamConstant.FRONT_URL);// 前端通知地址
chargeMap.put("back_url",ParamConstant.BACK_URL);// 后端通知地址
Map extra = new HashMap();
chargeMap.put("extra", extra);
// 扩展参数,如果有需要的话构造一个map然后将map转换成json串传入
String chargeString = "";
String privateKey = "";//私钥赋值
try{
//发起 create创建charge请求(参数为构造的的chargeMap,传入的controller的service_url)
chargeString = Charge.create(chargeMap, service_url ,privateKey);
logger.info(chargeString);
} catch (Exception e) {
e.printStackTrace();
}
return chargeString;
}
关于我们
北京博思致新互联网科技有限责任公司成立于2016年,是行业领先的收缴服务提供商。
公司动态
其它信息
联系我们
获取方案