native支付,生成二维码,用户扫码支付

  • 流程图

    图片说明

  • 具体实现

    • 添加依赖

          <dependency>
              <groupId>com.github.wxpay</groupId>
              <artifactId>wxpay-sdk</artifactId>
              <version>0.0.3</version>
          </dependency>

      主要是用到这个jar包里面的获取随机字符串,WXPayUtil.generateSignedXml,WXPayUtil.xmlToMap(content)功能

    • 1、商户系统生成微信支付所需信息

      String xmlParam=WXPayUtil.generateSignedXml(paramMap,partnerkey);2、发送给微信,商户系统接收微信返回数据,生成二维码

      @PostMapping("/wx/submit")
      public   Map  wxSubmit(String orderId) throws Exception {
      
          OrderInfo orderInfo = orderService.getOrderInfo(orderId);
      
          Map paramMap=new HashMap();//组织参数,传给微信
          paramMap.put("appid",appid);
          paramMap.put("mch_id",partner);//商户号
          paramMap.put("nonce_str",WXPayUtil.generateNonceStr());//生成随机字符串
          paramMap.put("body",orderInfo.genSubject());//商品描述
          paramMap.put("out_trade_no",  "ATGUIGU-"+orderId+"-"+System.currentTimeMillis());//订单号生成
          paramMap.put("total_fee",orderInfo.getTotalAmount().multiply(new BigDecimal(100)).toBigInteger().toString());//标价金额
          paramMap.put("spbill_create_ip","127.0.0.1");
          paramMap.put("notify_url","http://269026wg43.zicp.vip/wx/callback/notify");//通知地址,支付成功后会通知这里
          paramMap.put("trade_type","NATIVE");
      
          String xmlParam=WXPayUtil.generateSignedXml(paramMap,partnerkey);//map转为xml字符串,并且添加签名,两步并一步
      
          HttpClient httpClient = new HttpClient("https://api.mch.weixin.qq.com/pay/unifiedorder");//生成连接
      
          httpClient.setXmlParam(xmlParam);//将参数放入
      
          httpClient.post();//提交给微信
      
          String content = httpClient.getContent();  //得到返回结果的xml
      
          Map<String, String> resultMap = WXPayUtil.xmlToMap(content);//转为map
      
          if(resultMap.get("code_url")!=null){//取出code_url
              String code_url = resultMap.get("code_url");
             // HashMap<Object, Object> hashMap = new HashMap<>();
              return resultMap;
          }else{
              System.out.println(resultMap.get("return_code"));
              System.out.println(resultMap.get("return_msg"));
              return  null;
          }
      
      }