微信扫码支付

来源:互联网 发布:win10修改网卡mac地址 编辑:程序博客网 时间:2024/06/05 04:11

废话不多说直接上代码。

用的是ssh框架,所以分为service和controller层。

第一步,将微信的sdk集成到自己的项目里面。

第二步,获取需要的appid,appsecret,mch_id,key。详情可以看微信官网的API。

第三步,service层,处理很大一部分的业务逻辑:

/** 
     * 微信支付统一下单接口 
     * @param out_trade_no 
     * @return 
     * @throws Exception 
     */  
    public String[] weixin_pay() throws Exception {  
        // 账号信息  
       // String appid = PayConfigUtil.getAppid();  // appid  
        //String appsecret = PayConfigUtil.APP_SECRET; // appsecret  
        // 商业号  
        //String mch_id = PayConfigUtil.getMchid();  
        // key  
       // String key = PayConfigUtil.getKey();     
  
        String currTime = PayCommonUtil.getCurrTime();  
        String strTime = currTime.substring(8, currTime.length());  
        String strRandom = PayCommonUtil.buildRandom(4) + "";  
        //随机字符串  
        String nonce_str = strTime + strRandom;  
        // 价格   注意:价格的单位是分  
        String order_price = "1";   
        // 商品名称  
        String body = "XXXXXX自定义";     
  
        //查询订单数据表获取订单信息  ,测试的时候可以自定义订单号
        //PayOrder payOrder = payOrderDao.get(PayOrder.class,out_trade_no);  
        // 获取发起电脑 ip  
        //String spbill_create_ip = PayConfigUtil.getIP();  
       // String spbill_create_ip = "192.168.0.119";
        // 回调接口   
        String notify_url = PayConfigUtil.NOTIFY_URL;  
        String trade_type = "NATIVE";  
        String time_start =  new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());  
        Calendar ca = Calendar.getInstance();  
        ca.setTime(new Date());  
        ca.add(Calendar.DATE, 1);           
        String time_expire =  new SimpleDateFormat("yyyyMMddHHmmss").format(ca.getTime());  
        SortedMap<Object,Object> packageParams = new TreeMap<Object,Object>();  
        packageParams.put("appid", appid);  
        packageParams.put("mch_id", mch_id);  
        packageParams.put("nonce_str", nonce_str);  
        packageParams.put("body",body);  
        packageParams.put("out_trade_no", "201710141122239");  
        //packageParams.put("total_fee", "1");  
        packageParams.put("total_fee",order_price);  
        packageParams.put("spbill_create_ip", spbill_create_ip);  
        packageParams.put("notify_url", notify_url);  
        packageParams.put("trade_type", trade_type);  
        packageParams.put("time_start", time_start);  
        packageParams.put("time_expire", time_expire);          
        String sign = PayCommonUtil.createSign("UTF-8", packageParams,key);  
        packageParams.put("sign", sign);  
         
        String requestXML = PayCommonUtil.getRequestXml(packageParams);  
        System.out.println("请求xml::::"+requestXML);  
   
        String resXml = HttpUtil.postData(PayConfigUtil.UFDODER_URL, requestXML);  
        System.out.println("返回xml::::"+resXml);  
          
        Map map = XMLUtil.doXMLParse(resXml);  
        String return_code = (String) map.get("return_code");  
        String prepay_id = (String) map.get("prepay_id");  
        String urlCode = (String) map.get("code_url");
        String result_code=(String)map.get("result_code");
        String []test={urlCode,result_code};//此处放了两个参数,可以自定义设置。
        System.out.println("打印调用统一下单接口生成二维码url:::::"+urlCode);
        //JSONArray fromObject = JSONArray.fromObject(test);
        //return result_code;
        return test;  
       }  


第四步,contorller层,此处将code_url和result_code返回了出来,随后将url解析为二维码,测试打开微信扫一扫,可进行付款

 public String WxPayUnifiedorder() throws Exception{  
    //HashMap<String,Object> map = new HashMap<String,Object>();  
    String[] codeUrl = weixin_service.weixin_pay();
    JSONArray fromObject = JSONArray.fromObject(codeUrl);
    json.put("codeurl", fromObject);  
    json.put("errorMessage", errorMessage);
json.put("resultCode", resultCode);
ResponseTool.write(ServletActionContext.getResponse(), json);
return null;



原创粉丝点击