天天看點

微信掃碼支付——查詢訂單

微信支付訂單查詢:

  1. weconfig 中已設定好相應配置參數
  2. 相應工具類已寫好
  3. 官方文檔 微信訂單查詢接口API
/*
	 * 微信支付查詢方法
	 * 
	 * @see com.AlipayWeChatPay.service.weChatPayService#query(java.util.Map)
	 */
	@Override
	@Nullable
	public String query(Map<String, String> params) throws Exception {
		// 商品訂單号和微信訂單号
		String out_trade_no = params.get("out_trade_no");
		String transaction_id = params.get("transaction_id");

		if (StringUtils.isBlank(out_trade_no) && StringUtils.isBlank(transaction_id)) {
			return "微信訂單号和商品訂單号不能都為空";
		}

		// 時間,生成随機數
		String currTime = PayForUtil.getCurrTime();
		String strTime = currTime.substring(8, currTime.length());
		String strRandom = PayForUtil.buildRandom(4) + "";
		String nonce_str = strTime + strRandom;

		// 參數封裝
		SortedMap<Object, Object> packageParams = new TreeMap<Object, Object>();
		packageParams.put("appid", weChatPayConfig.APP_ID);
		packageParams.put("mch_id", weChatPayConfig.MCH_ID);
		packageParams.put("nonce_str", nonce_str);
		if (!StringUtils.isBlank(out_trade_no)) {
			packageParams.put("out_trade_no", out_trade_no);
		}
		if (!StringUtils.isBlank(transaction_id)) {
			packageParams.put("transaction_id", transaction_id);
		}

		String sign = PayForUtil.createSign("UTF-8", packageParams, weChatPayConfig.API_KEY); // 擷取簽名
		packageParams.put("sign", sign);

		String resquestXML = PayForUtil.getRequestXml(packageParams);
		lg.info("請求參數封包:" + resquestXML);

		String responseXml = httpUtil.postData(weChatPayConfig.QUERY_URL, resquestXML);
		Map map = XMLUtil.xmlToMap(responseXml);
		lg.info("微信支付響應參數的封包" + responseXml);
		lg.info(map);

		String result = (String) map.get("trade_state_desc");
		return result;
	}
           

weChatPayConfig.QUERY_URL 是微信訂單查詢的位址

PayForUtil.getRequestXml() 将map轉換為xml請求封包

微信其他接口API的調用方法與此類似,大多都是将參數封裝,生成sign并發送請求封包

繼續閱讀