微信扫码支付

简单的说下支付的步骤:

1.微信商户号必须开通了当面支付功能。

2.拼接请求参数。

3.返回微信生成的url给客户端。

4.回调支付结果。

5.注意事项。

以下代码返回结果是二维码的url

public Map<String, String> OrderPay(HttpServletRequest request, Model model, HttpSession session, String body, Integer product_id, Integer money, String machine, String Ono, String Type) throws Exception {
        Map<String, String> ordmap = new HashMap<String, String>();
        Map<String, String> error = new HashMap<String, String>();
        ordmap.put("appid", WXPayConfig.APPID);                                //公众账号ID
        ordmap.put("mch_id", WXPayConfig.mch_id);                            //商户号
        ordmap.put("nonce_str", WXPayUtil.generateNonceStr());                //随机字符串

        ordmap.put("body", body);                                            //商品描述
        String out_trade_no = Ono;                                            //获取商户订单号
        ordmap.put("out_trade_no", out_trade_no);                            //商户订单号
        ordmap.put("total_fee", String.valueOf(money));                        //标价金额    单位为分
        ordmap.put("spbill_create_ip", WXPayUtil.getAddrIp(request));        //终端IP
        ordmap.put("notify_url", WXPayConfig.notify_url);                    //通知地址
        ordmap.put("trade_type", Type);                                        //交易类型
        ordmap.put("product_id", String.valueOf(product_id));                //商品ID
        ordmap.put("attach", machine);                                        //订单来源
        try {
            String sign = WXPayUtil.generateSignature(ordmap, WXPayConfig.paternerKey);
            ordmap.put("sign", sign);                                            //签名
        } catch (Exception e) {
            error.put("error", "支付参数错误");
            return error;
        }
        String orderxml = WXPayUtil.mapToXml(ordmap);    //将数据转成XML格式
        System.out.println(orderxml);
        String data = HttpRequest.sendPost(WXPayConfig.order_url, orderxml);
        System.out.println(data);
        Map<String, String> ordermap = null;
        if (data.indexOf("SUCCESS") != -1) {
            ordermap = OrderMapData(data);
            System.out.println(ordermap);
        }
        return ordermap;
    }

支付完成后回调支付结果

public String checkPayResult(HttpServletRequest request, HttpServletResponse response) throws Exception {
        System.out.println("===支付回调====");
        System.out.println("===支付回调====");
        InputStream input = request.getInputStream();
        ByteArrayOutputStream outsteam = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = input.read(buffer)) != -1) {
            outsteam.write(buffer, 0, len);
        }
        String resultStr = new String(outsteam.toByteArray(), "utf-8");
        outsteam.close();
        input.close();
        System.out.println("回调数据:" + resultStr);
        Map<String, String> map = WXPayUtil.xmlToMap(resultStr);
        String Ono = map.get("attach");
        boolean parm = WXPayUtil.isSignatureValid(map, WXPayConfig.paternerKey);
        System.out.println(map);
        System.out.println(parm);
        System.out.println(Ono);
        if (parm == true) {
            //业务代码
            return "SUCCESS";
        }
        return null;
    }

注意:

1.签名时注意编码格式。

2.金额处理用BigDecimal不然在支付19.90(自测)会出现损失精度的问题支付结果会变成19.89。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值