盛付通支付接口开发指南

需积分: 30 26 下载量 109 浏览量 更新于2024-07-19 2 收藏 871KB DOC 举报
"盛付通 ecshop接口文档" 盛付通接口文档是针对合作商户的一份详细技术指南,旨在帮助商户实现在线收款功能。该文档涵盖了多个关键知识点,包括交互模式、签名方法、接口规范以及注意事项,是开发人员进行集成开发的重要参考资料。 1. 文档概述:文档全面介绍了盛付通的支付解决方案,旨在使开发人员能够迅速理解并应用盛付通的接口,同时也作为日后查询接口参数和类型的手册。 2. 阅读对象:主要面向具备WEB程序开发背景的技术人员,他们需要了解HTTP和HTTPS协议,以及XML格式的处理。 3. 业务术语: - 商户号:是盛付通分配给合作商户的8位数字账号,用于资金的进出。 - 密钥:是保障通信安全的自定义字符串,用于签名MAC的计算,确保数据不被篡改。 - 账户:是商户在盛付通平台的电子邮箱地址,用于接收相关信息。 4. 方案概述: - 行业背景:讨论了在线支付行业的现状和需求。 - 接口介绍:列出了盛付通提供的不同接口,如支付、退款和查询接口。 - 业务实现流程:阐述了从用户支付到资金到账的整个流程。 5. 交互模式: - 页面跳转交互模式:用户在商户网站选择支付后,会被重定向到盛付通的支付页面完成交易。 - 后台通知交互模式:支付完成后,盛付通会通过后台向商户发送通知,更新订单状态。 6. 数据格式: - POST:数据通常以POST方式提交到盛付通服务器。 - 字符串格式:数据需要按照特定格式(如XML)编码。 7. 补单机制:当交易失败或需要重复支付时,商户可以利用补单机制重新发起支付请求。 8. 接口详细说明: - 支付接口:包括业务功能、交互模式、签名算法(如MD5签名)以及请求和返回参数列表。 - 退款接口:同样涉及业务功能、交互模式和签名算法,同时说明退款状态和通知参数。 - 查询接口:用于查询交易状态,包括请求参数和返回结果。 9. 附录: - 支付渠道列表:列出可用的支付方式和对应的编码。 - 银行机构列表:包括不同类型的银行编码,如综合网银、大额B2C、B2B、借记卡和大额信用卡。 - 交易状态列表:定义了支付和退款的各种状态及其含义。 盛付通接口文档提供了一个详尽的开发框架,为开发人员集成盛付通支付服务提供了清晰的指引,确保了支付过程的安全性和可靠性。无论是初学者还是经验丰富的开发者,都可以从中获取必要的信息,快速有效地实现与盛付通系统的对接。

@RequestMapping(value = "doRegister", method = RequestMethod.POST) @ResponseBody public Result doRegister(@RequestBody Map<String, Object> tempParams){ // begin pansheng 20210421 校验验证码是否存在 String linkManPhone = MapUtil.getStr(tempParams, "linkManPhone"); String linkPhoneCode = MapUtil.getStr(tempParams, "linkPhoneCode"); if(StrUtil.isBlank(linkManPhone) || StrUtil.isBlank(linkPhoneCode)) { return ResultUtil.fail("联系人手机号码或者验证码不能为空!"); } String internetCafeId = MapUtil.getStr(tempParams,"internetCafeId"); if(StrUtil.isBlank(internetCafeId)){ return ResultUtil.fail("网吧编号不能为空!"); } String applyNo = MapUtil.getStr(tempParams,"applyNo"); if(StrUtil.isBlank(applyNo)){ return ResultUtil.fail("申请编号不能为空!"); } boolean isCodeExists = shengpayService.verifySmsCode(applyNo, internetCafeId, linkManPhone, linkPhoneCode); if(!isCodeExists){ return ResultUtil.fail("验证码不存在,请重新获取!"); } // end // begin pansheng 20210430 校验用户是否同意授权 String agreeStatus = MapUtil.getStr(tempParams,"agreeStatus"); if("false".equals(agreeStatus)){ return ResultUtil.fail("请勾选同意授权之后,再提交进件!"); } // end // 直接接收前端参数,由Service去判断参数 JSONObject result = null; try { result = shengpayService.doRegister(tempParams); }catch (Exception e){ logger.error("盛付通进件请求接口报错", e); return ResultUtil.fail("进件失败,请重试!"); } if(result == null){ return ResultUtil.fail("进件失败,请重试!"); } if(result.containsKey("resultCode")){ String resultCode = result.getString("resultCode"); if("SUCCESS".equals(resultCode)){ return ResultUtil.success(); } } return ResultUtil.fail(result.getString("errorMsg")); }

2023-03-04 上传
2023-02-06 上传

String sign =""; if( null != map.get("sign")){ sign = map.get("sign"); } log.info("买气退款回调参数"+map.toString()); String isRepeat = stringRedisTemplate.opsForValue().get((refundOrderNo+"repeat")); if(null == isRepeat || isRepeat.length() <= 0){ log.info("支付结束"); return null; }else{ stringRedisTemplate.delete((refundOrderNo+"repeat")); } Map<String,String> codeMap = MapUtil.newHashMap(); codeMap.put("serialNumber",outTradeNo); List<H5UserPayCode> list = h5UserPayCodeServiceImpl.byList(codeMap); H5UserPayCode payCode = list.get(0); payCode.setIsRefund(1); payCode.setRefundTime(LocalDateTime.now()); payCode.setRefundCode(refundOrderNo); if(h5UserPayCodeServiceImpl.updateById(payCode)) { stringRedisTemplate.delete(refundOrderNo); log.info("开始往稠州银行写数据-退款数据"); String tempUrl = platformConfig.getPayCzcb().getBaseUrl() + "gasbusiness/v2/orderRefund"; CzcbSFTRefundVO czcbSFTRefundVO = new CzcbSFTRefundVO(); czcbSFTRefundVO.setChannel_no(platformConfig.getPayCzcb().getChannelNo()); czcbSFTRefundVO.setApp_no(platformConfig.getPayCzcb().getAppNo()); String serialNo = SerialNoUtil.genSerialNo("OAC"); czcbSFTRefundVO.setSerial_no(serialNo); czcbSFTRefundVO.setOrder_no(payCode.getOrderCode()); // czcbSFTPayVO.setOrder_type("A"); DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"); czcbSFTRefundVO.setRefund_time(dtf.format(payCode.getCreateTime())); czcbSFTRefundVO.setRefund_amount(new BigDecimal(payCode.getAmount()+"")); czcbSFTRefundVO.setOut_trade_no(payCode.getSerialNumber()); czcbSFTRefundVO.setOut_refund_no(refundOrderNo); czcbSFTRefundVO.setTrans_amount_1(BigDecimal.ZERO); czcbSFTRefundVO.setTrans_amount_2(BigDecimal.ZERO); czcbSFTRefundVO.setTrans_amount_3(new BigDecimal(payCode.getAmount()+"")); czcbSFTRefundVO.setRemark("盛付通订单支付退款"); //判断是正式还是测试 if ( SpringContextUtil.isProd() ) { czcbSFTRefundVO.setOpp_account_no("1010220406000001"); // czcbSFTRefundVO.setOpp_account_no("1010220214000003"); }else{ czcbSFTRefundVO.setOpp_account_no("1010220214000003"); } czcbSFTRefundVO.setOpp_account_name("义乌市城建燃气经营有限公司"); czcbSFTRefundVO.setTrans_amount_4(BigDecimal.ZERO); czcbSFTRefundVO.setTrans_amount_5(new BigDecimal(payCode.getAmount()+"")); czcbSFTRefundVO.setTrans_amount_6(BigDecimal.ZERO); // 操作日期 czcbSFTRefundVO.setTrans_date(DateTime.now().toString("yyyy-MM-dd")); // 操作时间 czcbSFTRefundVO.setTrans_tradetime(DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); czcbSFTRefundVO.setSign_data(SignUtil.addSignMD5(BeanUtil.beanToMap(czcbSFTRefundVO), platformConfig.getPayCzcb().getKey())); log.info("开始往稠州银行写数据:" + JSON.toJSONString(czcbSFTRefundVO)); String result = HttpUtil.post(tempUrl, JSON.toJSONString(czcbSFTRefundVO)); log.info("开始往稠州银行写数据:" + result); if(isSuccess(result)){ log.info("开始往稠州银行写数据写入成功"); } } }catch(Exception ex){ ex.printStackTrace(); } return new R(200,"回调成功"); }

2023-02-07 上传