网站微信扫码支付java开发

网站微信扫码支付java开发

一、网站微信扫码支付开发并没有现成的java示例,总结一下自己微信扫码支付心得

二、首先去微信公众平台申请账户
https://mp.weixin.qq.com
**
三、账户开通、开发者认证之后就可以进行微信支付开发了
1、微信统一下单接口调用获取预支付id,以及生成二维码所需的codeUrl

/**
     * 保存订单,并生成二维码所需的codeUrl
     * 
     * @param request
     * @param response
     * @param notifyURLBuf
     * @param order
     * @return
     * @throws Exception
     */
    @Override
    public Map<String, String> getWechatOrderInfo(String ip, Cuser user, String notifyUrl, Order order) throws Exception {
        Map<String, String> resultMap = new HashMap<String, String>();
        // 生成并保存订单
        order.setUserId(user.getId());
        // 支付方式 0:银联 1:支付宝 2:网上银行 3:微信 4:其他
        order.setPayType("3");
        // 生成订单号
        order.setOrderNo(OrderNoGenerator.getOrderNo());
        // 订单类型 1:消费 2:退款
        order.setOrderType("1");
        // 订单创建时间
        order.setCreateTime(new Date());
        // 订单更新时间
        order.setUpdateTime(new Date());
        // 订单状态 0: 交易中 1:完成 2:已取消
        order.setOrderStatus("0");
        // 付款状态 0:失败 1:成功 2、待付款
        order.setPayStatus("2");
        // 设置订单失效时间
        Calendar calendar = Calendar.getInstance();
        calendar.add(Calendar.HOUR, 2);
        order.setExpireTime(calendar.getTime());
        Integer orderId = this.balanceDao.saveOrder(order);

        Map<String, String> payPreIdMap = new HashMap<>();
        payPreIdMap = WechatUtil.getPayPreId(String.valueOf(orderId), "体检报告", notifyUrl, ip,
                String.valueOf((order.getMoney().multiply(new BigDecimal(100)).intValue())), orderId.toString());
        String prePayId = payPreIdMap.get("prepay_id");
        // 更新
        order.setId(orderId);
        order.setPrepayId(prePayId);
        order.setCodeUrl(payPreIdMap.get("code_url"));
        this.balanceDao.updateOrder(order);
        // return WechatUtil.QRfromGoogle(order.getCodeUrl(), 300, 0);
        resultMap.put("codeUrl", order.getCodeUrl());
        resultMap.put("orderId", String.valueOf(order.getId()));
        return resultMap;
    }

此方法返回的数据如下

<xml><return_code><![CDATA[SUCCESS]]></return_code>
<return_msg><![CDATA[OK]]></return_msg>
<appid><![CDATA[wxaf0b*****8afbf]]></appid>
<mch_id><![CDATA[1408****02]]></mch_id>
<nonce_str><![CDATA[zf0vGvdtVycBliwB]]></nonce_str>
<sign><![CDATA[A2910F16086211153D747058063B3368]]></sign>
<result_code><![CDATA[SUCCESS]]></result_code>
<prepay_id><![CDATA[wx201701191109388037e9a12310276591827]]></prepay_id>
<trade_type><![CDATA[NATIVE]]></trade_type>
<code_url><![CDATA[weixin://wxpay/bizpayurl?pr=1UjorNX]]></code_url>
</xml>

2、服务器端接受微信支付结果通知

/**
     * 保存微信通知结果
     * 
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    @Override
    public String saveWechatNotify(String notifyInfoXml) throws Exception {
        Map<String, String> noticeMap = XMLUtil.doXMLParse(notifyInfoXml);
        // 这个其实是订单 的id
        String outTradeNo = noticeMap.get("out_trade_no");
        Order order = this.balanceDao.getOrderById(Integer.valueOf(outTradeNo));
        // 如果支付通知信息不为,说明请求已经处理过,直接返回
        if (StringUtil.isNotEmpty(order.getNotifyInfo())) {
            return "SUCCESS";
        }
        String sign = noticeMap.get("sign");
        noticeMap.remove("sign");
        // 验签通过
        if (WechatUtil.getSignVeryfy(noticeMap, sign)) {
            // 通信成功此字段是通信标识,非交易标识,交易是否成功需要查看result_code来判断
            if ("SUCCESS".equals(noticeMap.get("return_code"))) {
                // 交易成功
                if ("SUCCESS".equals(noticeMap.get("result_code"))) {
                    // 商户订单号

                    // 订单更新时间
                    order.setUpdateTime(new<
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值