随笔 - 166,  文章 - 0,  评论 - 29,  阅读 - 41万

 

生成二维码及根据订单号查询工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
package exam.common;
 
 
import cn.hutool.http.HttpUtil;
import com.alibaba.fastjson.JSONObject;
import exam.entity.JianHangQrCodeResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;
import java.util.HashMap;
import java.util.Map;
 
import static java.nio.charset.StandardCharsets.UTF_8;
 
 
public class JianHangQrCodeUtils {
 
   static Logger logger = LoggerFactory.getLogger(JianHangQrCodeUtils.class);
    /**
     * 商户代码  换成建行给的
     */
    private static final String MERCHANT_ID="";
    /**
     * 商户柜台代码 换成建行给的
     */
    private static final String  POS_ID="";
    /**
     * 分行代码 换成建行给的
     */
    private  static final String   BRANCH_ID="";
    /**
     * 公钥  后30位 换成建行给的
     */
    private static final String PUB_KEY= "";
 
    /**
     * 币种 01
     */
    private static final String CUR_CODE="01";
    /**
     * 交易码
     */
    private static final String TX_CODE = "530550";
    /**
     * 备注1
     */
    private static final String REMARK_1 = "";
    /**
     * 备注2
     */
    private static final String REMARK_2 = "";
    /**
     * 返回类型
     * 0或空:返回二维码页面,只支持建行龙支付;
     * 1:返回JSON格式【二维码信息串】,只支持建行龙支付;
     * 2:返回聚合扫码二维码页面;
     * 3:返回聚合扫码JSON格式【二维码信息串】
     * 聚合扫码只能上送2或3
     * 4:返回聚合银联二维码信息串
     */
    private static final String RETURN_TYPE="3";
    /**
     * 超时时间
     * 若送空值则不判断超时
     */
    private static final String TIME_OUT ="";
 
    private static  final String BANK_URL="https://ibsbjstar.ccb.com.cn/CCBIS/ccbMain";
 
 
 
 
    /**
     * 订单时间   元素必须有,但值可为空
     */
    private static final String ORDER_DATE="";
 
    /**
     * 起始时间   元素必须有,但值可为空
     */
    private static final String BEG_ORDER_TIME="";
    /**
     * 订单截止时间  元素必须有,但值可为空
     */
    private static final String END_ORDER_TIME="";
 
 
    /**
     * 查询密码    必输项,主管或操作员的登录密码  换成建行给的
     */
    private static final  String QU_PWD="";
    /**
     * 流水类型 TYPE   必输项  0支付流水   1退款流水
     */
    private static final  String TYPE="0";
    /**
     * 交易码
     */
    private static final  String SEARCH_TX_CODE="410408";
    /**
     * 流水状态  必须项    0未结算流水    1已结算流水
     */
    private static final  String KIND="0";
    /**
     * 交易状态    必须项   0失败   1成功   2不确定   3全部    已结算流水查询不支持全部
     */
    private static final  String STATUS="1";
    /**
     *  查询方式 SEL_TYPE     必输项   1页面形式   2文件返回形式   3xml页面形式
     */
    private static final  String SEL_TYPE="3";
    /**
     * 页码page
     */
    private static final  String PAGE = "1";
    /**
     * 操作员 换成建行给的
     */
    private static final  String OPERATOR="";
 
    private static final  String BEG_ORDER_ID="";
 
    private static final  String END_ORDER_ID="";
    //预留字段
    private static final  String CHANNEL = "";
    private static final  String BANK_SEARCH_URL="https://ibsbjstar.ccb.com.cn/app/ccbMain";
 
 
 
    /**
     * 生成二维码
     * @param ORDERID  订单号
     * @param PAYMENT   金额
     */
    public static String  createQrCode(String ORDERID,  String  PAYMENT) {
        logger.info("==================================生成二维码===================================");
 
        String decode="";
 
        //验签字段
        StringBuffer tmp = new StringBuffer();
        tmp.append("MERCHANTID=");
        tmp.append(MERCHANT_ID);
        tmp.append("&POSID=");
        tmp.append(POS_ID);
        tmp.append("&BRANCHID=");
        tmp.append(BRANCH_ID);
        tmp.append("&ORDERID=");
        tmp.append(ORDERID);
        tmp.append("&PAYMENT=");
        tmp.append(PAYMENT);
        tmp.append("&CURCODE=");
        tmp.append(CUR_CODE);
        tmp.append("&TXCODE=");
        tmp.append(TX_CODE);
        tmp.append("&REMARK1=");
        tmp.append(REMARK_1);
        tmp.append("&REMARK2=");
        tmp.append(REMARK_2);
        tmp.append("&RETURNTYPE=");
        tmp.append(RETURN_TYPE);
        tmp.append("&TIMEOUT=");
        tmp.append(TIME_OUT);
        tmp.append("&PUB=");
        tmp.append(PUB_KEY);
 
        Map<String, Object> map = new HashMap();
        map.put("CCB_IBSVersion","V6");
        map.put("MERCHANTID",MERCHANT_ID);
        map.put("BRANCHID",BRANCH_ID);
        map.put("POSID",POS_ID);
        map.put("ORDERID",ORDERID);
        map.put("PAYMENT",PAYMENT);
        map.put("CURCODE",CUR_CODE);
        map.put("TXCODE",TX_CODE);
        map.put("REMARK1",REMARK_1);
        map.put("REMARK2",REMARK_2);
        map.put("RETURNTYPE",RETURN_TYPE);
        map.put("TIMEOUT",TIME_OUT);
        map.put("MAC", MD5.md5Str(tmp.toString()));
 
        //请求二维码生成链接串
        try {
            logger.info("入参:"+map);
            String postResponse = HttpUtil.post(BANK_URL, map);
            JianHangQrCodeResponse jianHangQrCodeResponse= JSONObject.parseObject(postResponse, JianHangQrCodeResponse.class);
            if(jianHangQrCodeResponse.getSUCCESS()!=null&&jianHangQrCodeResponse.getSUCCESS().equals("true") ) {
                String  payUrl = jianHangQrCodeResponse.getPAYURL();
                String  getResponse = HttpUtil.get(payUrl, UTF_8);
                String  qrurl = JSONObject.parseObject(getResponse).getString("QRURL");
                decode = URLDecoder.decode(qrurl, "utf-8");
            }
        }catch (Exception e){
            e.printStackTrace();
            decode= e.getMessage();
        }
        logger.info("二维码信息:"+decode);
        return decode;
    }
 
 
    /**
     * 查询支付是否成功
     * @param ORDERID   订单号码
     */
 
    public  static Document  searchPayStatus(String ORDERID) throws UnsupportedEncodingException {
        logger.info("===========================================查询商户是否支付成功====================");
        Document document=null;
        //验签字段
 
 
        String tmp ="MERCHANTID="+MERCHANT_ID+"&BRANCHID="+BRANCH_ID+"&POSID="+POS_ID+"&ORDERDATE="+ORDER_DATE+"&BEGORDERTIME="+BEG_ORDER_TIME
                +"&ENDORDERTIME="+END_ORDER_TIME+"&BEGORDERID="+BEG_ORDER_ID+"&ENDORDERID="+END_ORDER_ID+"&QUPWD=&TXCODE="+SEARCH_TX_CODE
                +"&SEL_TYPE="+SEL_TYPE+"&OPERATOR="+OPERATOR;
 
        if("410408".equals(SEARCH_TX_CODE)){
            tmp ="MERCHANTID="+MERCHANT_ID+"&BRANCHID="+BRANCH_ID+"&POSID="+POS_ID+"&ORDERDATE="
                    +ORDER_DATE+"&BEGORDERTIME="+BEG_ORDER_TIME+"&ENDORDERTIME="+END_ORDER_TIME+"&ORDERID="
                    +ORDERID+"&QUPWD=&TXCODE="+SEARCH_TX_CODE+"&TYPE="+TYPE+"&KIND="+KIND+"&STATUS="+STATUS+
                    "&SEL_TYPE="+SEL_TYPE+"&PAGE="+PAGE+"&OPERATOR="+OPERATOR+"&CHANNEL="+CHANNEL;
        }
 
        Map<String, Object> map = new HashMap();
        map.put("MERCHANTID",MERCHANT_ID);
        map.put("BRANCHID",BRANCH_ID);
        map.put("POSID",POS_ID);
        map.put("ORDERDATE",ORDER_DATE);
        map.put("BEGORDERTIME",BEG_ORDER_TIME);
        map.put("ENDORDERTIME",END_ORDER_TIME);
        map.put("QUPWD",QU_PWD);
        map.put("TXCODE",SEARCH_TX_CODE);
        map.put("TYPE",TYPE);
        map.put("KIND",KIND);
        map.put("STATUS",STATUS);
        map.put("ORDERID",ORDERID);
        map.put("PAGE",PAGE);
        map.put("CHANNEL",CHANNEL);
        map.put("SEL_TYPE",SEL_TYPE);
        map.put("OPERATOR",OPERATOR);
 
        map.put("MAC",MD5.md5Str(tmp.toString()));
        logger.info("入参"+MD5.md5Str(tmp.toString()));
        String ret = HttpUtil.post(BANK_SEARCH_URL, map);
 
        ret = ret.replaceAll("\\n", "").
                replaceAll("\\t", "").
                replaceAll("\\r", "");
 
        logger.info(ret);
        if(ret !=null   &&  !ret.equals("")){
            JAXBContext jaxbContext=null;
            Unmarshaller unmarshaller=null;
            try {
                logger.info("ret::"+ret);
                jaxbContext = JAXBContext.newInstance(Document.class);
                unmarshaller = jaxbContext.createUnmarshaller();
                document= (Document)unmarshaller.unmarshal(new StringReader(ret));
                logger.info("document==={}"+document);
 
 
            }catch (Exception   e){
                e.printStackTrace();
            }
        }
 
        return document;
    }
 
 
    public static void main(String[] args) throws UnsupportedEncodingException {
        //createQrCode("53032219051","0.1");
        searchPayStatus("10024_1679912790819");
    }
 
}

 

查询返回的实体类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
package exam.common;
 
 
 
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;
import java.util.ArrayList;
import java.util.List;
 
 
@XmlRootElement(name = "DOCUMENT")
public class Document {
    /**
     * 返回码   交易返回码,成功时总为 000000
     */
    @XmlElement(name = "RETURN_CODE")
    private String   RETURN_CODE;
    /**
     * 响应信息
     */
    @XmlElement(name = "RETURN_MSG")
    private   String   RETURN_MSG;
    /**
     * 当前页
     */
    @XmlElement(name = "CURPAGE")
    private String    CURPAGE;
    /**
     * 总页数
     */
    @XmlElement(name = "PAGECOUNT")
    private   String   PAGECOUNT;
    /**
     * 总笔数
     */
    @XmlElement(name = "TOTAL")
    private   String   TOTAL;
    /**
     * 支付总金额
     */
    @XmlElement(name = "PAYAMOUNT")
    private   String    PAYAMOUNT;
    /**
     * 退款总金额
     */
    @XmlElement(name = "REFUNDAMOUNT")
    private   String    REFUNDAMOUNT;
 
    @XmlElement(name = "QUERYORDER")
    private List<QueryOrder>  queryOrders=new ArrayList<>();
    @XmlTransient
    public String getRETURN_CODE() {
        return RETURN_CODE;
    }
 
    public void setRETURN_CODE(String RETURN_CODE) {
        this.RETURN_CODE = RETURN_CODE;
    }
    @XmlTransient
    public String getRETURN_MSG() {
        return RETURN_MSG;
    }
 
    public void setRETURN_MSG(String RETURN_MSG) {
        this.RETURN_MSG = RETURN_MSG;
    }
    @XmlTransient
    public String getCURPAGE() {
        return CURPAGE;
    }
 
    public void setCURPAGE(String CURPAGE) {
        this.CURPAGE = CURPAGE;
    }
    @XmlTransient
    public String getPAGECOUNT() {
        return PAGECOUNT;
    }
 
    public void setPAGECOUNT(String PAGECOUNT) {
        this.PAGECOUNT = PAGECOUNT;
    }
    @XmlTransient
    public String getTOTAL() {
        return TOTAL;
    }
 
    public void setTOTAL(String TOTAL) {
        this.TOTAL = TOTAL;
    }
    @XmlTransient
    public String getPAYAMOUNT() {
        return PAYAMOUNT;
    }
 
    public void setPAYAMOUNT(String PAYAMOUNT) {
        this.PAYAMOUNT = PAYAMOUNT;
    }
    @XmlTransient
    public String getREFUNDAMOUNT() {
        return REFUNDAMOUNT;
    }
 
    public void setREFUNDAMOUNT(String REFUNDAMOUNT) {
        this.REFUNDAMOUNT = REFUNDAMOUNT;
    }
    @XmlTransient
    public List<QueryOrder> getQueryOrders() {
        return queryOrders;
    }
 
    public void setQueryOrders(List<QueryOrder> queryOrders) {
        this.queryOrders = queryOrders;
    }
 
    @Override
    public String toString() {
        return "Document{" +
                "RETURN_CODE='" + RETURN_CODE + '\'' +
                ", RETURN_MSG='" + RETURN_MSG + '\'' +
                ", CURPAGE='" + CURPAGE + '\'' +
                ", PAGECOUNT='" + PAGECOUNT + '\'' +
                ", TOTAL='" + TOTAL + '\'' +
                ", PAYAMOUNT='" + PAYAMOUNT + '\'' +
                ", REFUNDAMOUNT='" + REFUNDAMOUNT + '\'' +
                ", queryOrders=" + queryOrders +
                '}';
    }
 
    /**
     * 子类   详细信息
     */
    public static class  QueryOrder{
        /**
         * 商户代码
         */
        @XmlElement(name = "MERCHANTID")
        private   String    MERCHANTID;
        /**
         * 分行代码
         */
        @XmlElement(name = "BRANCHID")
        private   String   BRANCHID;
        /**
         * 柜台号码
         */
        @XmlElement(name = "POSID")
        private   String   POSID;
        /**
         * 订单号
         */
        @XmlElement(name = "ORDERID")
        private   String  ORDERID;
        /**
         * 支付/退款交易时间
         */
        @XmlElement(name = "ORDERDATE")
        private   String  ORDERDATE;
        /**
         * 记录日期
         */
        @XmlElement(name = "ACCDATE")
        private   String    ACCDATE;
        /**
         * 支付金额
         */
        @XmlElement(name = "AMOUNT")
        private   String   AMOUNT;
        /**
         * 状态码
         */
        @XmlElement(name = "STATUSCODE")
        private  String   STATUSCODE;
        /**
         * 支付状态
         */
        @XmlElement(name = "STATUS")
        private  String  STATUS;
        /**
         * 签名串
         */
        @XmlElement(name = "SIGN")
        private String   SIGN;
 
        @XmlTransient
        public String getMERCHANTID() {
            return MERCHANTID;
        }
 
        public void setMERCHANTID(String MERCHANTID) {
            this.MERCHANTID = MERCHANTID;
        }
        @XmlTransient
        public String getBRANCHID() {
            return BRANCHID;
        }
 
        public void setBRANCHID(String BRANCHID) {
            this.BRANCHID = BRANCHID;
        }
        @XmlTransient
        public String getPOSID() {
            return POSID;
        }
 
        public void setPOSID(String POSID) {
            this.POSID = POSID;
        }
        @XmlTransient
        public String getORDERID() {
            return ORDERID;
        }
 
        public void setORDERID(String ORDERID) {
            this.ORDERID = ORDERID;
        }
        @XmlTransient
        public String getORDERDATE() {
            return ORDERDATE;
        }
 
        public void setORDERDATE(String ORDERDATE) {
            this.ORDERDATE = ORDERDATE;
        }
        @XmlTransient
        public String getACCDATE() {
            return ACCDATE;
        }
 
        public void setACCDATE(String ACCDATE) {
            this.ACCDATE = ACCDATE;
        }
        @XmlTransient
        public String getAMOUNT() {
            return AMOUNT;
        }
 
        public void setAMOUNT(String AMOUNT) {
            this.AMOUNT = AMOUNT;
        }
        @XmlTransient
        public String getSTATUSCODE() {
            return STATUSCODE;
        }
 
        public void setSTATUSCODE(String STATUSCODE) {
            this.STATUSCODE = STATUSCODE;
        }
        @XmlTransient
        public String getSTATUS() {
            return STATUS;
        }
 
        public void setSTATUS(String STATUS) {
            this.STATUS = STATUS;
        }
        @XmlTransient
        public String getSIGN() {
            return SIGN;
        }
 
        public void setSIGN(String SIGN) {
            this.SIGN = SIGN;
        }
 
        @Override
        public String toString() {
            return "QueryOrder{" +
                    "MERCHANTID='" + MERCHANTID + '\'' +
                    ", BRANCHID='" + BRANCHID + '\'' +
                    ", POSID='" + POSID + '\'' +
                    ", ORDERID='" + ORDERID + '\'' +
                    ", ORDERDATE='" + ORDERDATE + '\'' +
                    ", ACCDATE='" + ACCDATE + '\'' +
                    ", AMOUNT='" + AMOUNT + '\'' +
                    ", STATUSCODE='" + STATUSCODE + '\'' +
                    ", STATUS='" + STATUS + '\'' +
                    ", SIGN='" + SIGN + '\'' +
                    '}';
        }
    }
}

  

 

 

生成二维码业务层

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@Override
  @Transactional
  public ServiceResult saveOrder(ExamineePayOrder examineePayOrder) {
      ServiceResult serviceResult=new ServiceResult();
      try {
      //1、把未支付的订单删除
          String hql=" from ExamineePayOrder where examineeNo=:examineeNo and createTime<:createTime order by createTime desc";
          Map<String, Object> queryParams = new HashMap<String, Object>();
          queryParams.put("examineeNo", examineePayOrder.getExamineeNo());
          queryParams.put("createTime", examineePayOrder.getCreateTime());
          List<ExamineePayOrder> list = examineePayOrderDao.findByHql(hql, queryParams);
          if (CollUtil.isNotEmpty(list)){
              for (ExamineePayOrder payOrder : list) {
                  payOrder.setIsDeleted(1);
                  examineePayOrderDao.saveorupdate(payOrder);
              }
          }<br>       //2、保存订单并生成支付二维码
          examineePayOrderDao.save(examineePayOrder);
          PayConfig payConfig = payConfigDao.getPayConfig();
          BigDecimal payAmount = payConfig.getPayAmount();
          String qrCode = JianHangQrCodeUtils.createQrCode(examineePayOrder.getOrderId(), String.valueOf(payAmount));
          serviceResult.setCode("0000");
          serviceResult.setMessage("订单保存成功");
          Map<String,Object> map=new HashMap();
          map.put("orderId",examineePayOrder.getOrderId());//订单id
          map.put("payAmount",String.valueOf(payAmount));//支付金额
          map.put("payStatus",examineePayOrder.getPayStatus());//支付状态
          map.put("qrCode",qrCode);//二维码链接
          serviceResult.setObject(map);
          return serviceResult;
      }catch (Exception e){
          e.printStackTrace();
          serviceResult.setCode("9999");
          serviceResult.setMessage("订单保存失败"+e.getMessage());
          serviceResult.setObject(null);
          return serviceResult;
      }
  }

  

根据订单查询是否支付成功 查询时需要建行维护IP地址

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
@Transactional
    @Override
    public ServiceResult getOrderPayStatus(ExamineeInfo examineeInfo,String orderId) throws UnsupportedEncodingException {
        ServiceResult serviceResult=new ServiceResult();
        String hql=" from ExamineePayOrder where examineeNo=:examineeNo and orderId=:orderId and isDeleted=:isDeleted order by createTime desc";
        Map<String, Object> queryParams = new HashMap<String, Object>();
        queryParams.put("examineeNo", examineeInfo.getExamineeNo());
        queryParams.put("orderId", orderId);//有效订单
        queryParams.put("isDeleted", 0);//有效订单
        List<ExamineePayOrder> list = examineePayOrderDao.findByHql(hql, queryParams);//只能查出一条记录
 
        Document document = JianHangQrCodeUtils.searchPayStatus(orderId);//只能查出一条记录
        if ("000000".equals(document.getRETURN_CODE())){
            List<Document.QueryOrder> queryOrders = document.getQueryOrders();
            for (Document.QueryOrder queryOrder : queryOrders) {
                if ("成功".equals(queryOrder.getSTATUS())&&"1".equals(queryOrder.getSTATUSCODE())){//支付成功
                    //更新订单表
                    if (CollUtil.isNotEmpty(list)){
                        for (ExamineePayOrder examineePayOrder : list) {
                            examineePayOrder.setPayStatus(1);//已支付
                            examineePayOrder.setUpdateTime(DateUtil.parse(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
                            examineePayOrder.setAccDate(queryOrder.getACCDATE());
                            examineePayOrder.setSign(queryOrder.getSIGN());
                            examineePayOrderService.updateExamineePayOrderService(examineePayOrder);
                        }
                    }
                    //更新ExamineeStatus支付状态
                    ExamineeStatus examineeStatus=examineeStatusDao.getExamineeStatusById(examineeInfo.getExamineeId());
                    if (ObjectUtil.isNotEmpty(examineeStatus)){
                        examineeStatus.setPayStatus(1);
                        examineeStatus.setPayTime(DateUtil.parse(DateUtil.format(new Date(), "yyyy-MM-dd HH:mm:ss")));
                        examineeStatus.setPayDesc("支付成功");
                        examineeStatus.setExamineeVerifyDesc("已交费成功!");
                        examineeStatusService.updateExamineeStatus(examineeStatus);
 
                    }
 
                }
            }
            serviceResult.setObject(true);//已支付
        }else {
            serviceResult.setObject(false);//还未支付
        }
        return serviceResult;
 
    }

  

 

前端展示二维码使用qrcode.js 自行下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<!DOCTYPE html>
<html>
<body>
<body class="layui-layout-body">
    <div class="layui-layout layui-layout-admin">
        <!-- 引入头部文件 -->
        <jsp:include page="../homeHeader.jsp" flush="true" />
        <!-- 引入左侧导航 -->
        <jsp:include page="leftNav.jsp" flush="true" />
        <div class="layui-body"
            style="right: 0px; bottom: 0px; background-color: #FFFFFF">
 
            <div style="padding: 10px 20px;height:300px;">
                <div id="paymentEd" class="layui-hide" style="border:2px solid;height:150px;background:#FFE1FF; margin:0px 60px;font-size:18px;text-align: center;">
                    <table class="paymentInfoTable" style="margin-left:50px;margin-bottom:40px;">
                        <tr>
                            <th>订单编号:</th>
                            <td id="orderId2"></td>
                        </tr>
                        <tr>
                            <th >订单金额:</th>
                            <td id="payAmount2"></td>
                        </tr>
                        <tr>
                            <th>订单支付状态:</th>
                            <td id="payStatus2"></td>
                        </tr>
                    </table>
                </div>
                <div style="text-align: center" id="payBtn">
                    <div id="paymentTable" class="layui-hide" >
                        未缴费,请点击缴费按钮,使用微信或支付宝扫码二维码缴费
                        <div style="padding: 10px 20px;height:300px;">
                            <button id="QRBtn" type="button"  data-type="auto"  class="btn btn-primary layui-btn " >缴费按钮</button>
                        </div>
                    </div>
                </div>
 
            </div>
 
            <div>
                <div id="model" style="display: none;">
                    <div style="margin-top: 20px;text-align: center;" >
                        <table class="paymentInfoTable" style="margin-left:50px;margin-bottom:40px;">
                            <tr>
                                <th>订单编号:</th>
                                <td id="orderId"></td>
                            </tr>
                            <tr>
                                <th>订单金额:</th>
                                <td id="payAmount"></td>
                            </tr>
                            <tr>
                                <th>订单支付状态:</th>
                                <td id="status"></td>
                            </tr>
                        </table>
                        <div style="text-align: center;display: inline-table"  id="qrcode"></div>
                    </div>
                </div>
            </div>
 
            <!-- 引入底部文件 -->
            <jsp:include page="../homeFooter.jsp" flush="true" />
        </div>
 
    </div>
</body>
<script type="text/javascript" src="<%=basePath%>resources/layui/layui.js"></script>
<script src="<%=basePath%>resources/js/common/qrcode.js"></script>
<script>
    var $;
    var form;
    var layer;
    var timeInterval=''
    layui.use(["form", "jquery","layer"], function() { //独立版的layer无需执行这一句
         $ = layui.jquery, form = layui.form, layer = layui.layer;
 
        $(function(){
            //查询缴费状态
            getPayStatus()
        });
 
 
        $("#QRBtn").click(function(){
            layer.open({
                type: 1,
                title:"支付二维码",
                id: 'layerDemo', //防止重复弹出
                content: $('#model'),
                area: ['700px', '500px'],//定义宽和高
                btnAlign: 'c', //按钮居中
                shade: 0, //不显示遮罩
                success:function (layero, index){    //弹出层加载成功后执行
                    getQRCode()
                },
                cancel: function(){
                    layer.closeAll();
                    clearQRCode()
                    clearInterval(timeInterval)
                }
            });
        });
    });
 
    function getQRCode() {
        $.ajax({
            url : "getQRCodeByOrderId",
            type : "POST",
            dataType : "json",
            success : function(jsonResult) {
                if (jsonResult.code === "0000") {
                    var retObject=jsonResult['object'];
                    $("#payStatus").text('未支付');
                    $("#orderId").text(retObject.orderId);
                    $("#payAmount").text(retObject.payAmount);
 
                    let text=retObject.qrCode
                    var qrcodetwo = new QRCode("qrcode", {
                        render : "table",
                        width: 128,
                        height: 128,
                        text: text //返回的路径
                    });<br>                        //轮询查询是否支付成功
                    timeInterval=window.setInterval("getOrderPayStatus('"+retObject.orderId+"')",1500)
                }else{
                    alert(jsonResult.message);
                }
            }
        });
    }
    //清除生成的二维码防止二维码重叠
    function clearQRCode() {
        const codeHtml = document.getElementById("qrcode");
        codeHtml.innerHTML = "";
    }
 
    function getPayStatus() {
        $.ajax({
            // 几个参数需要注意一下
            url : "getPayStatus",
            type : "POST",// 方法类型
            dataType : "json",// 预期服务器返回的数据类型
            success : function(jsonResult) {
                var noPaymentDiv=$('#noPayment');
                var paymentEdDiv=$('#paymentEd');
                var paymentTable=$('#paymentTable');
                var payBtn=$('#payBtn');
                if (jsonResult.code == "000") {
                    var retObject=jsonResult['object'];
                    //如果有支付信息
                    if (retObject!=null){
                        if (!noPaymentDiv.hasClass("layui-hide")){
                            noPaymentDiv.addClass("layui-hide");
                        }
                        if (paymentTable.hasClass("layui-hide")){
                            paymentTable.removeClass("layui-hide");
                        }
                        var payStatus=retObject['payStatus'];
                        if (payStatus=='0'){//未支付才显示支付按钮
                            if (payBtn.hasClass("layui-hide")){
                                payBtn.removeClass("layui-hide");
                            }
 
                        }
                        if (payStatus=='1'){//已支付显示支付结果
                                
                            if (!payBtn.hasClass("layui-hide")){
                                payBtn.addClass("layui-hide");
                            }
                            $("#orderId2").text(retObject.orderId);
                            $("#payAmount2").text(retObject.payAmount);
                            $("#payStatus2").text('支付成功');
                            if (paymentEdDiv.hasClass("layui-hide")){
                                paymentEdDiv.removeClass("layui-hide");
                            }
 
                        }
                    }else{
                        if (noPaymentDiv.hasClass("layui-hide")){
                            noPaymentDiv.removeClass("layui-hide");
                        }
                        if (!paymentTable.hasClass("layui-hide")){
                            paymentTable.addClass("layui-hide");
                        }
                        $("#payDesc").text("尚未产生支付信息,请在报考审核后查看!");
                    }
                }else{
                    if (noPaymentDiv.hasClass("layui-hide")){
                        noPaymentDiv.removeClass("layui-hide");
                    }
                    if (!paymentTable.hasClass("layui-hide")){
                        paymentTable.addClass("layui-hide");
                    }
                    $("#payDesc").text(jsonResult.message);
                }
            },
            error : function() {
                alert("异常!");
            }
        });
    }
 
    function getOrderPayStatus(orderID){
        $.ajax({
            // 几个参数需要注意一下
            url : "getOrderPayStatus",
            type:"GET",// 方法类型
            dataType : "json",// 预期服务器返回的数据类型
            data : {"orderId":orderID},
            success : function(jsonResult) {
                if (jsonResult.code === "0000") {
                    layer.open({
                        type: 1
                        ,title:'提示'
                        ,id: 'postSuccess' //防止重复弹出
                        ,content: '<div style="padding: 20px 100px;">'+ jsonResult.message +'</div>'
                        ,btn: '确定'
                        ,btnAlign: 'c' //按钮居中
                        ,shade: 0.5 //不显示遮罩
                        ,yes: function(index,layero){
                            layer.close(index);
                            window.location.href='payment';
                        }
                    });
                }
            }
 
        });
    }
</script>
</html>

  

 

posted on   西门夜说  阅读(223)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示