接口:
/**
* 统一 下单
* @param data
* 必填:
* { 商品描述:body -- 终端IP: spbill_create_ip
* 订单号:out_trade_no -- 金额:total_fee
* 商品描述 body
* }
* 选填:
* {
* 设备号 device_info -- 商品详情 detail
* 附加数据 attach -- 货币类型 fee_type(默认人民币:CNY)
* 交易起始时间 time_start-- 交易结束时间 time_expire(如2009年12月27日9点10分10秒表示为20091227091010)
* 商品标记 goods_tag(商品标记,代金券或立减优惠功能的参数)
* 指定支付方式 limit_pay (no_credit--指定不能使用信用卡支付)
* }
* @param request
* @return
*/
public String unifiedOrder(Map<String,String> data,HttpServletRequest request);
public String unifiedOrder(Map<String, String> data, HttpServletRequest request) {
HashMap<String, Object> resultMap = new HashMap<String, Object>();
String message = "SUCCESS";
String resultcode = "0000";
SortedMap<Object, Object> result_map = new TreeMap<Object, Object>();
try {
// 封装 统一订单 数据
SortedMap<Object, Object> parameters = new TreeMap<Object, Object>();
// 遍历封装数据
parameters = (SortedMap<Object, Object>) CommonUtil.traverse(data, parameters);
parameters.put("appid", ConfigUtil.APP_APPID);
parameters.put("mch_id", ConfigUtil.APP_MCH_ID);
parameters.put("nonce_str", PayCommonUtil.createNoncestr());
parameters.put("notify_url", ConfigUtil.NOTIFY_URL);
parameters.put("trade_type", ConfigUtil.APP_TRADE_TYPE);
String sign = PayCommonUtil.createSign("UTF-8", parameters, ConfigUtil.APP_API_KEY);
parameters.put("sign", sign);
String requestXML = XMLUtil.getRequestXml(parameters);
// 统一下单 请求
String responseXML = HttpUtil.httpsRequest(ConfigUtil.UNIFIED_ORDER_URL, "POST", requestXML);
// 解析返回数据
Map<String, String> response_map = XMLUtil.doXMLParse(responseXML);
String return_code = response_map.get("return_code");
String result_code = response_map.get("result_code");
// 遍历封装数据
result_map = (SortedMap<Object, Object>) CommonUtil.traverse(response_map, result_map);
if (return_code.equals("SUCCESS") && result_code.equals("SUCCESS")) {
result_map = new TreeMap<Object, Object>();
String prepay_id = response_map.get("prepay_id");
// 统一下单接口返回正常的prepay_id,再按签名规范重新生成签名后,将数据传输给APP
result_map.put("appid", ConfigUtil.APP_APPID);
result_map.put("partnerid", ConfigUtil.APP_MCH_ID);
result_map.put("prepayid", prepay_id);
result_map.put("noncestr", PayCommonUtil.createNoncestr());
result_map.put("timestamp", PayCommonUtil.create_timestamp());
result_map.put("package", "Sign=WXPay");
sign = PayCommonUtil.createSign("UTF-8", result_map, ConfigUtil.APP_API_KEY);
result_map.put("sign", sign);
} else {
resultcode = "0001";
message = "系统繁忙,请稍后再试!";
}
MDC.put("requestType", "A-001");
MDC.put("requestXML", requestXML);
MDC.put("responseXML", responseXML);
logger.info("==requestXML==" + requestXML + "--responseXML--" + responseXML);
} catch (Exception e) {
e.printStackTrace();
resultcode = "0001";
message = "系统繁忙,请稍后再试!";
}
// 返回固定格式
resultMap.put("resultcode", resultcode);
resultMap.put("message", message);
resultMap.put("response", result_map);
JSONObject jobj = JSONObject.fromObject(resultMap);
String result = String.valueOf(jobj);
return result;
}