后台调用支付流程的代码

上班一直用到微信 银联调用支付接口的问题 写了一个方法 在此做下记录

package com.zte.xh.micromall.core.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

import net.sf.json.JSONObject;

import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringUtils;

public class MicroWeichatUtils {
	/**
	 *
	 * @param url
	 *            地址
	 * @param params
	 *            返回的结果中需要哪些返回值,不加密的https调用
	 * @param resultType
	 *            response响应的结果是什么类型的,一般是json或者xml
	 * @return 其实这里还需要加一个http请求类型的参数,来判断是http请求还是https的请求,目前微信都是https的 所以没添加
	 */
	public static Map<String, String> getParam(String url, String resultType,
			String... params) {
		try {
			URL console = new URL(url);
			HttpsURLConnection conn = (HttpsURLConnection) console
					.openConnection();
			conn.setRequestMethod("GET");// get方式提交
			conn.setDoOutput(true);
			conn.setDoInput(true);
			conn.setInstanceFollowRedirects(true);
			conn.connect();

			BufferedReader reader = new BufferedReader(new InputStreamReader(
					conn.getInputStream(), "UTF-8"));
			String line;
			StringBuffer responseText = new StringBuffer();
			while ((line = reader.readLine()) != null) {
				responseText.append(line).append("\r\n");
			}
			reader.close();
			conn.disconnect();
//			System.out.println("响应结果responseText--------------"
//					+ responseText.toString());
			String result = responseText.toString();
			Map<String, String> resultM = new HashMap<String, String>();
			if (StringUtils.isNotEmpty(result)) {
				// 解析获取到的json
				JSONObject jsonObject = JSONObject.fromObject(result);
				for (String param : params) {
					resultM.put(param, jsonObject.getString(param));
//					System.out.println(param + "--------"
//							+ jsonObject.getString(param));
				}
			}
			return resultM;
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

	/**
	 * 字典排序
	 * 
	 * @param hm
	 * @param kl
	 * @param key
	 * @return
	 */
	public static String getSign(Map<String, String> hm, List<String> kl) {
		// 排序
		String[] kls = kl.toArray(new String[] {});
		Arrays.sort(kls);
		// 拼接处待加密的String
		StringBuffer sb = new StringBuffer();
		for (String k : kls) {
			sb.append(k);
			sb.append("=");
			sb.append(hm.get(k));
			sb.append("&");
		}
		String stringSignTemp = sb.toString();
		// 去掉最后的一个&
		stringSignTemp = stringSignTemp.substring(0,
				stringSignTemp.length() - 1);
//		System.out.println("字典排序后-------" + stringSignTemp);
		// 进行sha1加密
		String asignature = DigestUtils.shaHex(stringSignTemp);
//		System.out.println("加密后的signature---" + asignature);
		return asignature;
	}

// 这是需要加密文件的方法,XML表示传递的参数为xml类型的字符串,通过httpclient来实现的  
private String addMenu(String URL, String XML, String mch_id)
			throws Exception {
                //有的需要的代理
                //System.setProperty("proxyHost", "");
		//System.setProperty("proxyPort", "80");
		//System.setProperty("proxyUser", "");
		//System.setProperty("proxyPassword", "!");

		String result = null;
		KeyStore keyStore = KeyStore.getInstance("PKCS12");

		// 读取配置文件的路劲
		Map params = this.paymentManager.getConfigParams(this.getId());
		String merPath = (String) params.get("merPath");

		FileInputStream instream = new FileInputStream(new File(merPath));
		try {
			keyStore.load(instream, mch_id.toCharArray());
		} finally {
			instream.close();
		}
		SSLContext sslcontext = SSLContexts.custom()
				.loadKeyMaterial(keyStore, mch_id.toCharArray()).build();
		SSLConnectionSocketFactory sslsf = new SSLConnectionSocketFactory(
				sslcontext, new String[] { "TLSv1" }, null,
				SSLConnectionSocketFactory.BROWSER_COMPATIBLE_HOSTNAME_VERIFIER);
		CloseableHttpClient httpclient = HttpClients.custom()
				.setSSLSocketFactory(sslsf).build();
		try {
			HttpPost httppost = new HttpPost(URL);
			StringEntity entity = new StringEntity(XML.toString(), "utf-8");
			httppost.setEntity(entity);
			HttpResponse response = httpclient.execute(httppost);
			HttpEntity resEntity = response.getEntity();
			if (resEntity != null) {
				result = EntityUtils.toString(resEntity);
			}
		} finally {
			httpclient.close();
		}
		return result;
	}


	public static void main(String[] args) {
				String url = "https://api.weixin.qq.com/cgi-bin/token?grant_type=client_credential&appid="
						+ appid + "&secret=" + secret;
				Map<String, String> tokenMap = MicroWeichatUtils.getParam(url,
						"json", "access_token");
				if (tokenMap != null
						&& StringUtils.isNotEmpty(tokenMap.get("access_token"))) {
					String accessToken = tokenMap.get("access_token");
					// 获取ticket
					url = "https://api.weixin.qq.com/cgi-bin/ticket/getticket?access_token="
							+ accessToken + "&type=jsapi";
					// 自定义调用微信接口方法
					Map<String, String> ticketMap = MicroWeichatUtils.getParam(
							url, "json", "ticket");
					String ticket = ticketMap.get("ticket");
					WxConstant.setWxAccessToken(accessToken);
					WxConstant.setWxTicket(ticket);
				}
			
	}
}

猜你喜欢

转载自lijie-insist.iteye.com/blog/2268421