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
今日推荐
周排行