`

后台调用支付流程的代码

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

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打包参数,生成签名等具体流程。 直接用,具体代码都已封装好

    微信支付的开发流程详解

    最近在公司做了微信支付的接入,这里总结下开发的一些经验 注意,我使用的是微信开放平台的支付,与手机...6.app调用手机上的微信控件,完成付款流程。 7.app向后台服务器发起一个回调请求,通知服务器交易完成。 8.we

    PHP实现微信支付(jsapi支付)和退款(无需集成支付SDK)流程教程详解

    进行支付的时候写代码可以省不少事,步骤也挺简化,但是集成SDK有很多坑,很多人说引入的SDK老报错,或者说官方SDK本身有不少错误,改起来很麻烦,也确实挺麻烦的,对于新手搞支付很容易被绕进去,那么今天就来讲讲...

    MvMmall单用户网店系统 5.5.2.rar

    [新增]支付宝免签约接口,标准双接口及直接付款支付接口. [新增]SESSION缓存写进数据库管理,增强其安全性及大数据量引用速度和负载提高. [新增]网店与淘宝数据完美互导的插件.支持最新版淘宝助理 [新增]下架商品...

    iOS集成微信支付开发

    3、商户后台调用统一下单API向微信的服务器发送请求,微信服务器生成预付单,并生成一个prepay_id返回给商户后台。 4、商户后台将这个prepay_id返回给商户客户端。 5、用户点击确认支付,这时候商户客户端调用SDK...

    微信公众平台开发最佳实践 源代码

    5.1.2 接口调用请求说明 52 5.1.3 实现代码 53 5.2 自定义菜单 53 5.2.1 自定义菜单介绍 54 5.2.2 按钮类型 54 5.2.3 创建菜单 54 5.2.4 查询菜单 57 5.2.5 删除菜单 58 5.2.6 菜单事件推送 58 5.3 语音...

    瑞捷云邀请码购买 v1.7.zip

    几行代码高效实现网页、APP支付功能,并提供可靠稳定可靠的分布式云后端服务,保障支付流程安全流畅 瑞捷云邀请码购买插件优势 1、支持邀请码充值购买; 2、支持各种支付宝,微信付款方式及手机话费充值卡充值论坛...

    财付通api接口

    财付通 API 接口文档样例代码 引言 文档概述 本文描述了财付通开放平台的 JAVA SDK,帮助开发者轻松实现在线支付、收付款等功能。文档 详细介绍了财付通开放平台的工作方式和开发过程,可以帮助开发人员快速入门并...

    java微信企业付款到个人完整源码

    简单的demo实现企业付款到个人,eclipse导出的完整源码,带jar包,适合初学者小白,大佬请无视,纯后台实现,无前端,可供参考实现流程,代码也是网上抄抄改改而来,感谢被我抄过的大佬们。

    客客威客系统KPPW v2.5 GBK Beta.zip

    除了可以上传广告之外,也可以调用其他广告代码,或者远程广告链接。 七、支付宝悬赏担保交易网站更具公信力 新版本新增最新推出的支付宝悬赏担保交易接口,开启后雇主和威客任务交易,资金冻结在用户自己的支付宝...

    MallBuilder 多用户商城管理系统 v1.0 简体中文版

    广告模块 可以在后台新增广告组,广告组可以包含多个广告,生成广告调用代码后可以 在任意网站任意页面调用该广告,广告会自动分城市显示,可以发布多种广告形式,图 片,文字,代码,连接,flash等。 友情连接...

    php商城系统 v3.0 rc6.rar

    完善 订单 操作流程 增加对货到付款的处理 完善 添加编辑商品时品牌数据多时查找麻烦的的问题 完善 商品批量导出的操作 完善 静态生成的处理 完善 订单的编辑处理 废弃原来的单一修改为统一处理 完善 数据报表...

    v5shop V8.3源代码下载

    (2)、UTF-8国际化代码,支付任意一种语言; (3)、支付多国语言包; 产品优势 搜索引擎优化 网站静态化: 融合了全站生成HTML静态页面和URL伪静态全面整合同步登陆,让你可以更随意的选择适合你网站的静态化模式...

    JAVAWeb项目-拼小多商城.zip

    支付模块:实现了支付接口的集成和调用。 后台管理模块:实现了管理员对商城的各项管理功能。 该项目采用了Spring框架作为后端框架,MyBatis作为持久层框架,Redis作为缓存系统,jQuery和Bootstrap作为前端框架。...

    ASP.NET3.5典型模块开发源代码

    7.2 在线支付的流程 81 7.3 使用支付宝实现在线支付 81 7.3.1 支付宝接口概述 81 7.3.2 支付宝接口服务下载 81 7.4 使用支付宝实现在线支付的实例 82 7.4.1 在项目中加入支付宝程序 82 7.4.2 设计订单...

    ECSHOP设置及开发技巧汇总

    3.9 ecshop后台分页代码提取 87 3.10 增加批量修改成本价格,配合后台管理增加成本价和毛利润统计 90 3.11 商品批发增加起订数功能,设置购买数量 92 3.12 ECSHOP 手机号码怎么设置为必填选项 102 3.13 在ECSHOP后台...

    新酷CMS网站管理系统 10.018.78.rar

    首页文章/软件分类调用,请在后台分好类后,打开首页风格模板,填入想要在首页调用的大类ID值(cat_id),即可在首页实现分类调用; 当网站处于关闭状态时,为安全起见,在提示页面中没有提供管理员登录链接,管理...

    Erphpdown插件 WordPress收费下载/收费查看隐藏内容/在线充值/前端个人中心/用户推广提现

    基本功能: 已经在程序中集成支付宝(担保...新增VIP免费下载资源限制每天总下载资源个数(仅对VIP专享、VIP免费、包年VIP免费、终身VIP免费的资源有效)(使用此版本必须重启下插件),后台新增清理数据表冗余数据...

    微信公众平台开发最佳实践 源码及书箱

    5.1.2 接口调用请求说明 52 5.1.3 实现代码 53 5.2 自定义菜单 53 5.2.1 自定义菜单介绍 54 5.2.2 按钮类型 54 5.2.3 创建菜单 54 5.2.4 查询菜单 57 5.2.5 删除菜单 58 5.2.6 菜单事件推送 58 5.3 语音...

    开源电子商务平台iWebShop

    3、优化了后台商品添加修改的UI及代码结构。 4、修复了后台会员提现管理修改状态无效的问题。 5、控制并检测了商品关键词的最大长度。 6、ie6或者ie7在后台网站设置视图中的js错误。 7、修复了找回密码链接地址...

Global site tag (gtag.js) - Google Analytics