废话不多说直接上代码。
用的是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;
}