通联支付(POS机支付功能)

您所在的位置:网站首页 POS机返回码96 通联支付(POS机支付功能)

通联支付(POS机支付功能)

2023-12-08 05:33| 来源: 网络整理| 查看: 265

公司要求完成一个POS支付的功能,在完成后,为了让自己熟悉该功能的开发流程,防止下一次遇到类似的功能开发。于是以一个文档的形式来记录开发流程。

一:业务流程:

简介:前台页面需要根据项目生成的订单号生成一个二维码,二维码中只需要包括订单号,其余的均不需要添加。需要注意的是,在POS机扫描二维码时,需要在POS订单表中添加一条POS订单数据,也只需要添加POS订单号,其他可默认为0,因为该POS订单表中的参数均是由POS机扫描二维码后,POS系统返回的固定参数,所以一些非空属性可设置为0,因为支付完成后,会修改该POS订单表状态。下面是在开发过程中需要写到的接口:

1.1:POS订单添加:

根据订单号生成二维码,调用添加接口,:向POS订单表添加一条订单号的数据(调用POS订单添加接口)

1.2:订单查询:

POS机扫描二维码,POS系统调用订单查询接口,根据二维码订单号查询学员订单表数据,并返回固定格式信息(调用订单查询接口)

1.3:支付回调:

信息确认后,调用支付回调接口:根据POS系统返回参数,判断是支付回调还是差错借贷。

1.3.1:支付回调:

根据POS系统返回订单号,查询POS订单表该数据,修改数据属性修改成功后,若POS订单交易状态为成功,修改学员订单表支付状态。返回success或error

1.3.2:差错借贷:

根据POS系统返回订单号,查询POS订单表该数据,修改数据属性修改成功后,返回,不更改学员订单表支付状态。

二:开发代码: 2.1:建表:

POS订单表以该页面字段为例:(交易结构通知接口字段&&差错借贷记调整通知)

注意:支付回调和差错借贷调用的是同一接口,只是参数不同,所以需要将他们的参数全部放在一起,其中差错借贷有的参数与支付回调参数相同,可以不填。

https://aipboss.allinpay.com/know/devhelp/main.php?pid=10

POS订单表:与以上参数一样。

学员订单表:除了订单号,其余根据你的业务需求建表。

2.2:代码:

以下俩个实体类是在POS级扫描二维码后,查询订单后,返回的参数需要按照固定格式,需要这俩个实体类来固定格式,不可删除。

BaseRspEntity:

/** * 通联支付 */ public class BaseRspEntity extends BaseEntity implements Serializable { private static final long serialVersionUID = -2562256053313369804L; public String retcode; public String retmsg; public String cusid; public String appid; public String randomstr; public String timestamp; public String sign; public String trxcode; public String getRetcode() { return retcode; } public void setRetcode(String retcode) { this.retcode = retcode; } public String getRetmsg() { return retmsg; } public void setRetmsg(String retmsg) { this.retmsg = retmsg; } public String getCusid() { return cusid; } public void setCusid(String cusid) { this.cusid = cusid; } public String getAppid() { return appid; } public void setAppid(String appid) { this.appid = appid; } public String getRandomstr() { return randomstr; } public void setRandomstr(String randomstr) { this.randomstr = randomstr; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getSign() { return sign; } public void setSign(String sign) { this.sign = sign; } public String getTrxcode() { return trxcode; } public void setTrxcode(String trxcode) { this.trxcode = trxcode; } public void initHead() { cusid = AppConstants.CUSID; appid = AppConstants.APPID; timestamp = FuncUtil.formatTime(new Date(), "yyyyMMddHHmmss"); randomstr = FuncUtil.getRandcode(8); System.out.println("cusid="+cusid+"\tappid="+appid+"\ttimestamp="+timestamp+"\trandomstr:随机数="+randomstr); } public static BaseRspEntity getFaildResult(String msg) { BaseRspEntity rsp = new BaseRspEntity(); System.out.println("启动initHead方法"); rsp.initHead(); rsp.setRetcode("9999"); System.out.println("rsp.getRetcode()="+rsp.getRetcode()); rsp.setRetmsg(msg); System.out.println("rsp.getRetmsg()="+rsp.getRetmsg()); return rsp; } }

QueryRspEntity:

/** * 通联支付(格式) */ public class QueryRspEntity extends BaseRspEntity implements Serializable { private static final long serialVersionUID = 5596863773999858690L; public String trxreserve; public String bizseq; public long amount; public String getTrxreserve() { return trxreserve; } public void setTrxreserve(String trxreserve) { this.trxreserve = trxreserve; } public String getBizseq() { return bizseq; } public void setBizseq(String bizseq) { this.bizseq = bizseq; } public long getAmount() { return amount; } public void setAmount(long amount) { this.amount = amount; } }

POS订单表:

/** * 通联支付(POS订单表) */ public class CmbPosSignEntity extends BaseEntity implements Serializable { private static final long serialVersionUID = 8238140738398034733L; public Integer id; //交易类型 public String trxcode; //收银宝APPID public String appid; //收银宝商户号 public String cusid; //调用时间戳 public String timestamp; //随机字符串 public String randomstr; //sign校验码 public String sign; //业务流水号 public String bizseq; //交易结果状态码 public String trxstatus; //交易金额 public String amount; //交易流水号 public String trxid; //原交易流水 public String srctrxid; //交易请求日期 public String trxday; //交易完成时间 public String paytime; //终端编码 public String termid; //终端批次号 public String termbatchid; //终端流水 public String traceno; //业务关联内容 public String trxreserve; //借贷标志 public String accttype; //交易帐号 public String acct; //终端授权码 public String termauthno; //终端参考号 public String termrefnum; //手续费 public String fee; //签名类型 public String signtype; //第三方app交易号 public String outtrxid; //原交易金额 public String trxamt; //交易请求日期 public String trxdate; //渠道交易单号 public String chnltrxid; //终端号 public String termno; //终端流水号 public String termtraceno; //原交易通联平台流水号 public String trxreserved; //原交易商户订单号 public String cusorderid; public static long getSerialVersionUID() { return serialVersionUID; } public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTrxcode() { return trxcode; } public void setTrxcode(String trxcode) { this.trxcode = trxcode; } public String getAppid() { return appid; } public void setAppid(String appid) { this.appid = appid; } public String getCusid() { return cusid; } public void setCusid(String cusid) { this.cusid = cusid; } public String getTimestamp() { return timestamp; } public void setTimestamp(String timestamp) { this.timestamp = timestamp; } public String getRandomstr() { return randomstr; } public void setRandomstr(String randomstr) { this.randomstr = randomstr; } public String getSign() { return sign; } public void setSign(String sign) { this.sign = sign; } public String getBizseq() { return bizseq; } public void setBizseq(String bizseq) { this.bizseq = bizseq; } public String getTrxstatus() { return trxstatus; } public void setTrxstatus(String trxstatus) { this.trxstatus = trxstatus; } public String getAmount() { return amount; } public void setAmount(String amount) { this.amount = amount; } public String getTrxid() { return trxid; } public void setTrxid(String trxid) { this.trxid = trxid; } public String getSrctrxid() { return srctrxid; } public void setSrctrxid(String srctrxid) { this.srctrxid = srctrxid; } public String getTrxday() { return trxday; } public void setTrxday(String trxday) { this.trxday = trxday; } public String getPaytime() { return paytime; } public void setPaytime(String paytime) { this.paytime = paytime; } public String getTermid() { return termid; } public void setTermid(String termid) { this.termid = termid; } public String getTermbatchid() { return termbatchid; } public void setTermbatchid(String termbatchid) { this.termbatchid = termbatchid; } public String getTraceno() { return traceno; } public void setTraceno(String traceno) { this.traceno = traceno; } public String getTrxreserve() { return trxreserve; } public void setTrxreserve(String trxreserve) { this.trxreserve = trxreserve; } public String getAccttype() { return accttype; } public void setAccttype(String accttype) { this.accttype = accttype; } public String getAcct() { return acct; } public void setAcct(String acct) { this.acct = acct; } public String getTermauthno() { return termauthno; } public void setTermauthno(String termauthno) { this.termauthno = termauthno; } public String getTermrefnum() { return termrefnum; } public void setTermrefnum(String termrefnum) { this.termrefnum = termrefnum; } public String getFee() { return fee; } public void setFee(String fee) { this.fee = fee; } public String getSigntype() { return signtype; } public void setSigntype(String signtype) { this.signtype = signtype; } public String getOuttrxid() { return outtrxid; } public void setOuttrxid(String outtrxid) { this.outtrxid = outtrxid; } public String getTrxamt() { return trxamt; } public void setTrxamt(String trxamt) { this.trxamt = trxamt; } public String getTrxdate() { return trxdate; } public void setTrxdate(String trxdate) { this.trxdate = trxdate; } public String getChnltrxid() { return chnltrxid; } public void setChnltrxid(String chnltrxid) { this.chnltrxid = chnltrxid; } public String getTermno() { return termno; } public void setTermno(String termno) { this.termno = termno; } public String getTermtraceno() { return termtraceno; } public void setTermtraceno(String termtraceno) { this.termtraceno = termtraceno; } public String getTrxreserved() { return trxreserved; } public void setTrxreserved(String trxreserved) { this.trxreserved = trxreserved; } public String getCusorderid() { return cusorderid; } public void setCusorderid(String cusorderid) { this.cusorderid = cusorderid; } }

学员订单表:只有订单号最重要,其他的根据业务需求随意

/** * 学员订单表(TBL_STUDENT_ORDER) * * @author bianj * @version 1.0.0 2018-12-20 */ public class StudentOrderEntity extends BaseEntity implements Serializable { private static final long serialVersionUID = -6434519100462395104L; /** 自增列 */ private Integer id; /** 所属机构Id 关联机构表Id字段 */ private Integer institutionid; /** 学员 关联学员表Id字段 */ private Integer studentid; /** 订单编号 */ private String orderno; /** 应收总计 */ private Float totalreceivables; /** 使用余额 */ private Float balanceused; /** 余额变更前 */ private Float balancechangebefore; /** 余额变更后 */ private Float balancechangeafter; /** 实收总计 */ private Float totalcollection; /** 经办校区 关联组织机构表Id字段 */ private Integer orgid; /** 销售来源 */ private String salessource; /** 采单员 关联员工表Id */ private Integer minerid; /** 电话销售 关联员工表Id */ private Integer telesalesid; /** 销售员 关联员工表Id */ private Integer salesid; /** 副销售员 关联员工表Id */ private Integer deputysalesid; /** 经办日期 */ private String rundate; /** 创建时间 */ private Date createtime; /** 创建用户Id 关联用户表Id字段 */ private Integer createuserid; /** 关联学员订单表Id字段 */ private Integer relatedorderid; /** 关联订单类型。1:日志 */ private Integer relatedordertype; /** 订单类型。1:报名;2:账户余额变动;3:补费:4:转班;5:停课;6:复课;7:全额退费;8:部分退费;9:教材杂费;10:积分变动 */ private Integer ordertype; /** 交易内容 */ private String ordercontent; /** 欠费 */ private Float arrears; /** 到款状态。0:未到款;1:已到款 */ private Integer arrivalstatus; /** 对内备注 */ private String remarkin; /** 对外备注 */ private String remarkout; /** 积分变动 */ private Float integralchanged; /** 积分变更前 */ private Float integralchangebefore; /** 积分变更后 */ private Float integralchangeafter; /** 报名类型 1:新办;2:续费;3:无 */ private Integer signupstatus; /** 渠道 */ private Integer channelid; public Integer getChannelid() { return channelid; } public void setChannelid(Integer channelid) { this.channelid = channelid; } public Integer getSignupstatus() { return signupstatus; } public void setSignupstatus(Integer signupstatus) { this.signupstatus = signupstatus; } /** 学员自定义属性 */ private String studentsignuptag; public String getStudentsignuptag() { return studentsignuptag; } public void setStudentsignuptag(String studentsignuptag) { this.studentsignuptag = studentsignuptag; } /** * 获取自增列 * * @return 自增列 */ public Integer getId() { return this.id; } /** * 设置自增列 * * @param id * 自增列 */ public void setId(Integer id) { this.id = id; } /** * 获取所属机构Id 关联机构表Id字段 * * @return 所属机构Id 关联机构表Id字段 */ public Integer getInstitutionid() { return this.institutionid; } /** * 设置所属机构Id 关联机构表Id字段 * * @param institutionid * 所属机构Id 关联机构表Id字段 */ public void setInstitutionid(Integer institutionid) { this.institutionid = institutionid; } /** * 获取学员 关联学员表Id字段 * * @return 学员 关联学员表Id字段 */ public Integer getStudentid() { return this.studentid; } /** * 设置学员 关联学员表Id字段 * * @param studentid * 学员 关联学员表Id字段 */ public void setStudentid(Integer studentid) { this.studentid = studentid; } /** * 获取订单编号 * * @return 订单编号 */ public String getOrderno() { return this.orderno; } /** * 设置订单编号 * * @param orderno * 订单编号 */ public void setOrderno(String orderno) { this.orderno = orderno; } /** * 获取应收总计 * * @return 应收总计 */ public Float getTotalreceivables() { return this.totalreceivables; } /** * 设置应收总计 * * @param totalreceivables * 应收总计 */ public void setTotalreceivables(Float totalreceivables) { this.totalreceivables = totalreceivables; } /** * 获取使用余额 * * @return 使用余额 */ public Float getBalanceused() { return this.balanceused; } /** * 设置使用余额 * * @param balanceused * 使用余额 */ public void setBalanceused(Float balanceused) { this.balanceused = balanceused; } /** * 获取余额变更前 * * @return 余额变更前 */ public Float getBalancechangebefore() { return this.balancechangebefore; } /** * 设置余额变更前 * * @param balancechangebefore * 余额变更前 */ public void setBalancechangebefore(Float balancechangebefore) { this.balancechangebefore = balancechangebefore; } /** * 获取余额变更后 * * @return 余额变更后 */ public Float getBalancechangeafter() { return this.balancechangeafter; } /** * 设置余额变更后 * * @param balancechangeafter * 余额变更后 */ public void setBalancechangeafter(Float balancechangeafter) { this.balancechangeafter = balancechangeafter; } /** * 获取实收总计 * * @return 实收总计 */ public Float getTotalcollection() { return this.totalcollection; } /** * 设置实收总计 * * @param totalcollection * 实收总计 */ public void setTotalcollection(Float totalcollection) { this.totalcollection = totalcollection; } /** * 获取经办校区 关联组织机构表Id字段 * * @return 经办校区 关联组织机构表Id字段 */ public Integer getOrgid() { return this.orgid; } /** * 设置经办校区 关联组织机构表Id字段 * * @param orgid * 经办校区 关联组织机构表Id字段 */ public void setOrgid(Integer orgid) { this.orgid = orgid; } /** * 获取销售来源 * * @return 销售来源 */ public String getSalessource() { return this.salessource; } /** * 设置销售来源 * * @param salessource * 销售来源 */ public void setSalessource(String salessource) { this.salessource = salessource; } /** * 获取采单员 关联员工表Id * * @return 采单员 关联员工表Id */ public Integer getMinerid() { return this.minerid; } /** * 设置采单员 关联员工表Id * * @param minerid * 采单员 关联员工表Id */ public void setMinerid(Integer minerid) { this.minerid = minerid; } /** * 获取电话销售 关联员工表Id * * @return 电话销售 关联员工表Id */ public Integer getTelesalesid() { return this.telesalesid; } /** * 设置电话销售 关联员工表Id * * @param telesalesid * 电话销售 关联员工表Id */ public void setTelesalesid(Integer telesalesid) { this.telesalesid = telesalesid; } /** * 获取销售员 关联员工表Id * * @return 销售员 关联员工表Id */ public Integer getSalesid() { return this.salesid; } /** * 设置销售员 关联员工表Id * * @param salesid * 销售员 关联员工表Id */ public void setSalesid(Integer salesid) {


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3