微信支付java版本之查询订单 - Go语言中文社区

微信支付java版本之查询订单


1.接口简介




2.代码实现

package com.zhrd.bussinss.platform.controller.shop;

import java.io.File;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.net.ssl.SSLContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.json.JSONObject;

import org.apache.http.HttpEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.ssl.SSLConnectionSocketFactory;
import org.apache.http.conn.ssl.SSLContexts;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zhrd.bussinss.platform.service.WeiXinPayService;
import com.zhrd.bussinss.platform.utils.CustomizedPropertyPlaceholderConfigurer;
import com.zhrd.bussinss.platform.weixinPayUtils.ClientCustomSSL;

@Controller
@RequestMapping("/shop/weiXinPayOrderSearch")
public class WeiXinPayOrderSearchController {
	
	
	@Autowired
	WeiXinPayService weiXinPayService;
	
	
	
	/**
	 * 微信支出订单状态查询
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/init",method=RequestMethod.GET )
	public String init(HttpServletRequest request,HttpServletResponse response){
		
		return "weixinPayOrderSearch";
		
	}

	
	/**
	 * 微信支出订单状态查询
	 * @param request
	 * @param response
	 * @return
	 */
	@RequestMapping(value="/getWeiXinPayOrder",method=RequestMethod.POST )
	@ResponseBody
	public Object getWeiXinPayOrder(HttpServletRequest request,HttpServletResponse response,@RequestParam(required=false) String transactionId,@RequestParam(required=false) String outTradeNo){
		try{
			
			KeyStore keyStore = KeyStore.getInstance("PKCS12");
			FileInputStream instream = new FileInputStream(new File(
					CustomizedPropertyPlaceholderConfigurer.getContextProperty("wx.cert").toString()));
			try {
				keyStore.load(instream, "见邮件".toCharArray());
			}finally {
				instream.close();
			}

			// Trust own CA and all self-signed certs
			SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore,
					"10061401".toCharArray()).build();
			// Allow TLSv1 protocol only
			SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
					sslcontext, new String[] { "TLSv1" }, null,
					SSLConnectionSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
			CloseableHttpClient httpclient = HttpClients.custom()
					.setSSLSocketFactory(sslsf).build();
			// HttpGet httpget = new
			// HttpGet("https://api.mch.weixin.qq.com/secapi/pay/refund");
			HttpPost httppost = new HttpPost(
					"https://api.mch.weixin.qq.com/pay/orderquery");
			Date dt = new Date();
			SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
			String nonceStr = sdf.format(dt).toString();
<pre name="code" class="java">

 
 
 
 
			String xml = ClientCustomSSL.SearchNativePackage(transactionId.trim(),"", nonceStr);//此处为微信端id(本地id和服务器端id均可查询)
			try {
				
				StringEntity se = new StringEntity(xml);
				
				httppost.setEntity(se);

				System.out.println("executing request" + httppost.getRequestLine());

				CloseableHttpResponse responseEntry = httpclient.execute(httppost);
				try {
					HttpEntity entity = responseEntry.getEntity();

					System.out.println("----------------------------------------");
					System.out.println(responseEntry.getStatusLine());
					if (entity != null) {
						System.out.println("Response content length: "
								+ entity.getContentLength());
					/*BufferedReader bufferedReader = new BufferedReader(
								new InputStreamReader(entity.getContent()));
						String text;
						while ((text = bufferedReader.readLine()) != null) {
							System.out.println("======="+text);
						}*/
						
						
						SAXReader saxReader = new SAXReader();
						Document document = saxReader.read(entity.getContent());
						Element rootElt = document.getRootElement();
						System.out.println("根节点:" + rootElt.getName());
						System.out.println("==="+rootElt.elementText("result_code"));
						System.out.println("==="+rootElt.elementText("return_msg"));
						String resultCode = rootElt.elementText("result_code");
						String returnCode = rootElt.elementText("return_code");
						JSONObject result = new JSONObject();
						System.out.println("resultCode====="+resultCode);
						System.out.println("returnCode====="+returnCode);
						System.out.println("trade_state====="+rootElt.elementText("trade_state"));
						System.out.println("transaction_id====="+rootElt.elementText("transaction_id"));
						System.out.println("out_trade_no====="+ rootElt.elementText("out_trade_no"));
						System.out.println("total_fee====="+rootElt.elementText("total_fee"));
						
						
						if(resultCode != null && resultCode.equals("SUCCESS") && returnCode.equals("SUCCESS")){
							result.put("tradeState",  rootElt.elementText("trade_state"));
							result.put("transactionId",  rootElt.elementText("transaction_id"));
							result.put("outTradeNo",  rootElt.elementText("out_trade_no"));
							result.put("totalFee",  rootElt.elementText("total_fee"));
							result.put("status","success");
							result.put("msg","success");
						}else if(returnCode.equals("SUCCESS")){
							result.put("errorCheck", "errCode");
							result.put("status","false");
							result.put("errorMsg",rootElt.elementText("err_code_des"));
						}else{
							result.put("errorCheck", "errMsg");
							result.put("status","false");
							result.put("errorMsg", rootElt.elementText("return_msg"));
						}
						return result;

					}
//					EntityUtils.consume(entity);
				}
				finally {
					responseEntry.close();
				}
			}
			finally {
				httpclient.close();
			}
			
			
		}catch(Exception e){
			e.printStackTrace();
			JSONObject result = new JSONObject();
			result.put("status","error");
			result.put("msg",e.getMessage());
			return result;
		}
		return "";
	
		
	}

}

3.其他接口


微信jsApi支付+发送模板消息: http://blog.csdn.net/wangxuewei111/article/details/43982381

微信支付native支付+工具类: http://blog.csdn.net/wangxuewei111/article/details/43954857



版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wangxuewei111/article/details/44037267
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2021-06-13 11:00:28
  • 阅读 ( 447 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢