`

后台调用支付流程的代码

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

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);
				}
			
	}
}
分享到:
评论

相关推荐

    微信支付java后台代码

    以上就是关于"微信支付java后台代码"项目的主要知识点,涵盖了微信支付的API使用、Java SDK的集成、项目结构以及支付流程等核心内容。在实际使用中,开发者需要根据自己的业务需求进行适当的调整和配置。

    app 微信支付php后台调用统一订单接口生成预订单号

    6. **前端调用支付**: 前端(通常是JavaScript)接收到PHP后端传递的支付参数后,通过微信JSSDK调起微信支付。用户确认支付后,微信会跳转到商户设定的回调URL,告知支付状态。 7. **支付结果通知**: 商户...

    微信支付包括页面和后台代码及工具类

    总的来说,微信支付的实现涉及前后端的紧密配合,后台负责订单创建、接收并处理支付结果,前端则展示支付界面并调起支付流程。通过提供的代码和工具,开发者可以快速集成微信支付功能,为用户提供便捷的支付体验。在...

    微信支付-微信小程序+Java后台代码

    在这个项目中,我们结合了微信小程序和Java后台技术,实现了一个完整的微信支付流程。以下将详细阐述涉及的知识点: 1. **微信小程序**:微信小程序是一种轻量级的应用开发框架,允许开发者在微信内部创建和运行...

    PHP微信H5支付完整代码(包含回调后台代码),改好商户资料和您回调地址即可使用

    11. **H5支付页面**:H5支付页面是用户看到并进行支付操作的界面,这个页面需要调用微信支付SDK生成支付二维码或直接调起微信支付,用户扫描或点击后开始支付流程。 12. **log文件**:日志文件对于调试和问题排查至...

    小程序+后台完整支付流程

    4. **发起JSAPI支付**:对于小程序内支付,你需要在前端获取用户的OpenID(通过wx.login接口获取),然后结合prepay_id、商户号等信息,调用统一下单接口返回的统一下单结果,生成签名并发起JSAPI支付请求。...

    支付宝支付-APP支付后台java代码下载

    综上所述,"支付宝支付-APP支付后台java代码下载"涉及的主要知识点包括:支付宝SDK集成、支付接口调用、签名算法、客户端处理、支付结果回调、安全与异常处理以及测试与上线流程。开发者需熟练掌握这些技术要点,以...

    小程序后台及支付宝微信源码.zip

    2. **后台代码**:这部分内容通常包括服务器端的逻辑处理,例如用户登录注册、商品管理、订单处理、支付接口对接等。它可能是用Java、Python、Node.js等后端语言编写,配合数据库(如MySQL、MongoDB)进行数据存储和...

    java 微支付js调用实例 已经测试通过

    2. **生成预支付交易单**:在服务器端,Java代码会根据订单详情(商品信息、金额、用户openid等)调用微信API生成预支付交易单,返回的预支付交易会话标识(prepay_id)是后续JS调用的关键。 3. **前端JS调用**:...

    微信小程序全套源代码(后台、小程序php)(源码)源代码.zip

    这套源代码是学习和实践微信小程序全栈开发的好素材,涵盖了前后端的完整流程,有助于开发者深入理解微信小程序的工作原理,提升开发技能。通过研究源代码,可以了解实际项目的开发模式,为自己的小程序项目提供参考...

    教育网站后台管理系统源代码

    同时,持续集成/持续部署(CI/CD)工具如Jenkins或Azure DevOps可以帮助自动化构建和发布流程,确保代码质量和版本控制。 总的来说,教育网站后台管理系统源代码的学习和分析涵盖了Web开发的多个方面,包括前端界面...

    微信支付.net代码

    在这个后台代码中,我们可以预期看到微信支付API的调用,包括初始化支付、生成预支付交易单、调用微信统一下单接口等关键操作,以及MD5和SHA1加密算法的实现。 开发微信支付功能时,开发者需要遵循微信官方的SDK...

    银联支付 后台开发包,demo、开发文档

    后台开发包是银联为了方便开发者集成其支付服务而提供的工具集,它包含了必要的API接口、示例代码(demo)、开发文档等资源,帮助开发者快速理解和实现银联支付的接入。 首先,"后台开发包"通常包括以下组件: 1. ...

    手机浏览器调用微信H5支付源码

    在这个页面中,用户点击支付按钮后,会触发支付流程,与后台服务器交互,获取预支付交易信息,并启动微信支付的H5页面。 - `notice.html`:可能是一个支付成功或者失败后的通知页面,用于向用户展示支付状态,如...

    MyKTV后台应用代码

    【MyKTV后台应用代码】是一个关于开发MyKTV后台系统的资源包,包含了必要的素材和源码文件。这个系统可能是为了支持卡拉OK娱乐场所的运营管理而设计的,它可能涵盖了预订管理、房间管理、歌曲库管理、用户管理、订单...

    PHP后台微信支付和支付宝支付开发

    6. 最后,整个支付流程应符合微信和支付宝的支付规范,通过对接口的规范调用,确保支付过程的安全性和可靠性。开发人员需不断测试支付流程,确保在各种可能的场景下支付都能正常运行。 综上所述,PHP后台开发人员在...

    电信翼支付java版本demo

    - 通过在本地或测试环境中运行代码,可以验证支付、退款和对账流程是否正常工作。在实际应用前,务必在翼支付提供的沙箱环境中进行充分的测试。 6. **安全与合规**: - 翼支付强调安全性和合规性,开发者在使用...

    微信支付后端demo(java)_微信小程序模板js代码前台前端H5页面源码+后台源码.rar

    微信支付后端DEMO(Java)是用于演示微信支付功能的一个示例项目,结合了微信小程序的JS代码、前端H5页面源码以及后台源码,帮助开发者快速理解和实现微信支付流程。在这个压缩包文件中,`WechatPayDemo-master` 是...

    java版本简易微信支付Demo,附带前后台代码,附带详细注释

    为了确保支付结果的准确性,除了等待微信的异步通知,还可以主动调用支付结果查询接口,获取订单的最新状态。 6. **退款接口**: 如果需要退款,Java代码中需要调用退款接口,提交退款申请。同样,也需要处理退款...

    简单的微信支付JAVA后台(仅支付)

    7. **日志记录**:为了便于后期问题排查和数据分析,后台系统应记录详尽的支付日志,包括请求参数、响应结果、异常信息等,这对于维护和优化支付流程至关重要。 8. **扩展性**:虽然这个后台版本没有退款功能,但...

Global site tag (gtag.js) - Google Analytics