银商大华捷通平台对接代收款接口规范

银商大华捷通平台对接代收款接口规范

最近业务用到与大华捷通代收款(POS支付),要与其对接获取订单数据和支付通知两个接口。主要流程如下:

1. 中心系统产生订单,生成包含订单号的二维码,并显示在店铺的APP页面上;

2. 大华POS通过扫描店铺APP页面二维码获取到订单号,中心接收到请求要核对POS的机具序列号是否正确;

3. 大华POS根据此订单号向中心系统发送请求,获取到订单金额等数据;

4. 大华POS根据订单号、订单金额等数据跳转生成支付页面,由客户支付;

5. 支付成功,进行支付回调通知,中心系统收到通知相应改变订单状态。

                                                          支付流程图

相关文档:

银商大华捷通平台与第三方物流ERP系统接口规范-完整版_V2.7.3.pdf

主要问题: MAC加密验证

主要代码:


import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
import org.jsoup.Jsoup;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.StringWriter;
import java.math.BigDecimal;
import java.security.MessageDigest;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * Created by think on 2017/4/12.
 */
@Service
public class DahuaPaymentServiceImpl extends BaseJpaServiceImpl<PayPaymentEntity,Long,PayPaymentDaoImpl> implements DahuaPaymentService {
    private Logger log = LoggerFactory.getLogger(DahuaPaymentServiceImpl.class);

    //双方预定约好的MAC——32    @Value("${dahua.mac.appointed}")
    private String MAC_APPOINTED;

    @Autowired
    private ShopOrderService shopOrderService;

    @Autowired
    private PayPaymentService paymentService;

    @Autowired
    private WkOrderService wkOrderService;



    /**
     * 通过订单SN号获取订单信息
     * @param request
     * @param response
     * @throws IOException
     */
    @RequestMapping(value = "/getOrderData", method = RequestMethod.POST)
    public void getOrderData(HttpServletRequest request, HttpServletResponse response) throws IOException {
        log.debug("大华获取订单数据开始");

        String result = request.getParameter("context");
        log.debug("大华获取订单数据请求报文: " + result);

        String mac = Jsoup.parse(result).select("mac").html();
        if(!checkSignMac(result)){
            response.getWriter().write(errorXml(DahuaResponseCodeEnum.MAC_ERROR.getCode(), DahuaResponseCodeEnum.MAC_ERROR.getName()));
            return;
        }

        String orderSn = Jsoup.parse(result).select("orderno").html();
        String version = Jsoup.parse(result).select("version").html();
        String employno = Jsoup.parse(result).select("employno").html();
        String termid = Jsoup.parse(result).select("termid").html();
        if(null == termid || termid.length() < 1){
            response.getWriter().write(errorXml("05", "缺少设备ID信息(termid)"));
            return;
        }

        QueryFilter filter = QueryFilterBuilder.of()
                .joinFetch("t.mbTenant")
                .eq("t.sn", orderSn)
                .build();
        ShopOrderEntity entity = shopOrderService.get(filter);
        //判断是否存在这个订单
        if(null == entity || null == entity.getId()){
            response.getWriter().write(errorXml(DahuaResponseCodeEnum.NON_ORDER.getCode(), DahuaResponseCodeEnum.NON_ORDER.getName()));
            return;
        }
        //判断工单的店铺信息是否正常
        if(null == entity.getMbTenant() || null == entity.getMbTenant().getId()){
            response.getWriter().write(errorXml(DahuaResponseCodeEnum.NOT_THIS_SHOP.getCode(), DahuaResponseCodeEnum.NOT_THIS_SHOP.getName()));
            return;
        }
        //判断设备号是否相符
        if(!termid.
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值