- 浏览: 480836 次
- 性别:
- 来自: 珠海
文章分类
最新评论
-
zs769666156:
楼主能不能给个ER图,通过ER图来分析一下这个段代码?想好好学 ...
基于SQL 语法解释器JSqlParser实现的SQL解析工具 -
lucky1035:
我只是想长肉 写道源代码下载过来缺少三个包,jsqlparse ...
基于SQL 语法解释器JSqlParser实现的SQL解析工具 -
我只是想长肉:
源代码下载过来缺少三个包,jsqlparser 14 这个哪里 ...
基于SQL 语法解释器JSqlParser实现的SQL解析工具 -
wamdy:
多谢博主,找了许久,我看能不能做成eclipse下sql语句的 ...
基于SQL 语法解释器JSqlParser实现的SQL解析工具 -
zzl1787:
怎么下不下来啊
PDF套打模板制作(一)
最近十天时间都在做跟在线支付相关的开发工作,使用的在线支付产品很多,有易宝、快钱、支付宝、财富通等,多吧?其实,开发这些接口不难,只是有些工作量而已。总结了一下,最烦的一块就是各支付的输入输出参数不同,其他原理大体一样。
如果将有些重复又费力的功能抽出来放到一个PayUtils中,拿出来show一下哈。也许对正在做支付集成这块的朋友有所帮助呢。
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.math.BigDecimal; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; /** * 支付通用工具类(适用于支付及查询) * @author lixiangyang * */ public class PayUtils { private static Log log = LogFactory.getLog(PayUtils.class); /** * 分换算为元 */ public static final BigDecimal rate = new BigDecimal(100); /** * 验证签名字符串<br/> * <li>true 表示验证成功</li> * <li>false 表示验证失败</li> * @param genSignMsg * 商户生成的验证字符串 * @param signMsg * 在线支付平台传入的验证字符串 * @return */ public static boolean validateSingMsg(String genSignMsg, String signMsg){ if(StringUtils.isEmpty(genSignMsg) || StringUtils.isEmpty(signMsg)){ return false; }else{ if(genSignMsg.equals(signMsg)){ return true; } return false; } } /** * 获得POST 过来参数设置到新的params中 * @param requestParams * POST 过来参数Map * @return * 新的Map */ public static Map<String, String> genMapByRequestParas(Map requestParams){ Map<String, String> params = new HashMap<String, String>(); for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) { String name = (String) iter.next(); String[] values = (String[]) requestParams.get(name); String valueStr = ""; for (int i = 0; i < values.length; i++) { valueStr = (i == values.length - 1) ? valueStr + values[i] : valueStr + values[i] + ","; } params.put(name, valueStr); } return params; } /** * 连接字符串(增强) * @param resurnStr * 结果字符串 * @param invokeObj * 需要取值的对象 * @param fields * 需要取值的对象上的字段 * @param appendEmptyValue * 是否追加为空的内容 true - 需要增加 false - 不需要增加 */ public static void appendPara(StringBuffer resurnStr, Object invokeObj, String[] fields, boolean appendEmptyValue){ Class invokeClass = invokeObj.getClass(); for(String field : fields){ try { Method method = invokeClass.getMethod(new StringBuffer("get").append(field.substring(0, 1).toUpperCase()).append(field.substring(1)).toString(), new Class[0]); Object paraValue = method.invoke(invokeObj, new Object[0]); if(paraValue != null && !String.valueOf(paraValue).equals("")){ appendParam(resurnStr, field, String.valueOf(paraValue), false); }else{ if(appendEmptyValue){//追加为空的内容 appendParam(resurnStr, field, "", true); } } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } /** * 连接字符参数 * @param returnStr * 结果字符串 * @param paramId * 参数名 * @param paramValue * 参数值 * @param appendEmptyValue * 是否追加为空的内容 true - 需要增加 false - 不需要增加 */ public static void appendParam(StringBuffer returnStr,String paramId,String paramValue, boolean appendEmptyValue){ if(returnStr.length() > 0){ log.debug(paramId+" = "+paramValue); if(StringUtils.isNotEmpty(paramValue)){ returnStr.append("&").append(paramId).append("=").append(paramValue); }else{ if(appendEmptyValue){//追加为空的内容 returnStr.append("&").append(paramId).append("=").append(""); } } }else{ returnStr.append(paramId).append("=").append(paramValue); } } /** * 将Bean中的各属性及值转换到Map中 * @param invokeObj * 需要取值的对象 * @param fields * 需要取值的对象上的字段 * @return * 参数Map */ public static Map<String, String> beanToMap(Object invokeObj, String[] fields){ Map<String, String> paramsMap = new HashMap<String, String>(); Class invokeClass = invokeObj.getClass(); for(String field : fields){ try { Method method = invokeClass.getMethod(new StringBuffer("get").append(field.substring(0, 1).toUpperCase()).append(field.substring(1)).toString(), new Class[0]); Object paraValue = method.invoke(invokeObj, new Object[0]); if(paraValue != null && !String.valueOf(paraValue).equals("")){ paramsMap.put(field, paraValue.toString()); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return paramsMap; } /** * 将Map中的各key及其value转换到Bean的属性及值中 * @param mapParams * 待转换的Map * @param invokeObj * 需要设值的对象 * @param fields * 需要设值的对象上的字段 */ public static Object mapToBean(Map<String, String> mapParams, Object invokeObj, String[] fields){ Class invokeClass = invokeObj.getClass(); for(String field : fields){ try { String paraValue = mapParams.get(field); if(paraValue != null && !paraValue.equals("")){ String methodName = new StringBuffer("set").append(field.substring(0, 1).toUpperCase()).append(field.substring(1)).toString(); //目前都为字符串类型 String.class Method method = invokeClass.getMethod(methodName, new Class[]{String.class}); method.invoke(invokeObj, new String[]{paraValue}); } } catch (SecurityException e) { e.printStackTrace(); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } return invokeObj; } /** * 将订单金额由分转化元 * @param amount * 以分为单位的订单金额 * @return * 以元为单位的金额 */ public static String genAmount(String amount){ //交易总金额(单位:分) BigDecimal orderAmount = new BigDecimal(amount).divide(rate, 2, BigDecimal.ROUND_HALF_UP); //分转为元 return String.valueOf(orderAmount); } /** * 格式化字符串 * @param text * 待处理字符串 * @return * 处里后的字符串 */ public static String formatString(String text){ if(text == null || "null".equalsIgnoreCase(text)) { return ""; } return text; } /** * 获取当前时间(yyyy-MM-dd HH:mm:ss) * * @return String */ public static String getCurrentDate() { return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()); } /** * 将日期字符串转换为日期类型 * @param dateString * 日期字符串 * @param parrten * 模式字符(如:yyyy-MM-dd) * @return * 日期 */ public static Date stringToDate(String dateString, String parrten){ Date date = null; try { SimpleDateFormat formatter = new SimpleDateFormat(parrten); date = formatter.parse(dateString); } catch (Exception e) { e.printStackTrace(); } return date; } }
- PayUtils.rar (2.3 KB)
- 描述: PayUtils源代码
- 下载次数: 38
发表评论
-
访问FreeMarker的工具类
2009-12-13 20:39 7911import java.io.File; import ja ... -
java操作json的通用类
2009-10-25 16:21 2495import java.text.ParseException ... -
利用Axis Ant Task生成Web Service客户端代码(build.xml)
2009-03-03 12:08 3577利用Axis Ant Task生成Web Serv ... -
将request中的数据转换到Map中
2009-03-02 12:01 2566以下代码段是将请求request中的数据转换到Ma ... -
基于HttpClient的HttpUtils(后台访问URL)
2009-03-02 11:53 36893最近做在线支付时遇到需要以后台方式访问URL并获取 ... -
jmap + Eclipse MAT :排查内存泄漏的好工具
2008-12-13 11:06 8253当服务器应用占用了过多内存的时候,如何快速定位 ... -
JSON的序列化和反序列化
2008-08-01 16:02 8288JsonTools是一个不错的JSON序列化和反序列化 ... -
Frontend plus 2.03
2007-11-06 21:43 6262class反编译工具,已经破解。 -
Java面试题
2007-09-16 13:35 1577有两个数组,而且都已排序好,现要求将它们合并到一个新的数组c中 ... -
《Design By Contract原则与实践》精彩片断选读
2007-08-30 16:15 2115《Design By Contract原则与实践》精彩片断选 ... -
Array和Vector,HashMap的区别 [转]
2007-08-30 16:06 2382[转]自 http://blog.hunan2 ... -
Jocky--Java混淆编译器
2007-08-15 13:50 6637以下内容摘自Jocky文档 ... -
轻量级JNDI数据源创建
2007-07-30 17:06 2359程序中手工创建JNDI数据源的代码如下: java ... -
校验码图片生成
2007-07-16 17:18 2339在B/S结构项目中,为防止别心用心的用户尝试登录通常 ... -
JFreeChart API(中文)[转载]
2007-07-16 09:14 4394[转载自: http ... -
Dozer自动给对象赋值,比BeanUtils好用多了
2007-07-03 10:04 15119在日常的项目中,经常会遇到各层对象之间相互进行值传递的 ... -
Java访问LDAP示例
2007-07-02 11:16 2874在最近一个项目中需要访问LDAP(Domino 6.5),示例 ... -
判断一个IP地址是否为内网IP
2007-07-02 10:59 11604java 代码 public static bo ...
相关推荐
提供的通用框架意味着这是一个经过预设计和优化的基础结构,适用于多种类似项目。它可能包含了基础的认证、授权、日志记录、异常处理等功能,可以帮助开发者快速搭建Web服务,并减少重复的工作。 6. **项目结构**...
《基于C# MVC开发的WEB API通用框架及微信支付宝支付集成》 在现代Web开发中,C# MVC(Model-View-Controller)架构已经成为构建高效、可维护的Web应用程序的首选方式。C# MVC框架结合了.NET Framework的强大功能,...
微信支付是腾讯公司提供的在线支付服务,适用于各种类型的企业和开发者。集成微信支付到C# MVC应用中,通常包括以下步骤: 1. 注册微信商户平台账号,获取AppID和商户号。 2. 使用微信支付SDK,实现统一下单接口,...
- Java Version SDK (通用版):适用于Java平台,提供了一套完整的API,包括支付接口调用、签名验证、结果回调处理等,适用于各种Java应用环境,如Spring Boot、Java EE等。 这些SDK的使用,大大降低了开发难度,让...
6. **第三方支付整合6**:这类框架可能专注于与第三方支付平台的无缝对接,如PayPal、Stripe等,提供统一的API调用方式,使得对接多个支付渠道变得简单。 7. **多语言支付框架7**:适应全球化需求,支持多种语言的...
1. **Java Version SDK (通用版)**:Java是一种广泛用于服务器端开发的语言,其SDK(软件开发工具包)为开发者提供了处理支付接口所需的类库和示例代码。这可能包括了创建支付请求、处理支付回调、验证支付结果等...
它可能包含处理请求和响应的类,如创建支付订单、查询交易状态、处理回调通知等功能。 2. **PHP Version SDK**:PHP是一种广泛应用于Web开发的语言,PHP SDK则方便了PHP开发者在网站后台处理支付逻辑。同样,它会...
3. **C#**: C#的DEMO通常适用于.NET开发者,他们需要使用HttpClient类来发起网络请求,同时处理JSON数据的序列化与反序列化,例如使用Newtonsoft.Json库。在企业级应用中,可能还会涉及到WCF服务或者ASP.NET Web API...
企业网银支付产品技术开发包V1.1.6是一个专为银联支付接口调试与开发设计的工具集,主要用于帮助企业在其业务系统中集成网银支付功能。这个开发包的版本号为V1.1.6,意味着它是经过多次迭代优化后的成熟版本,能够...
3. **PayCommonUtil.java**: 可能是一个通用的支付工具类,封装了与微信支付相关的通用功能,如签名生成、参数加密解密、请求和响应的格式转换等。在退款过程中,正确生成和验证签名至关重要,以防止数据被篡改。 4...
标签 "资料" 表明这个文件是一个财务资料,可能适用于会计人员、财务分析师、企业管理人员等,帮助他们更好地理解和管理企业的财务状况。通过使用这样的通用表格,可以标准化财务数据的记录,提高数据的可比性和一致...
本文档是关于一份最新的金融类通用版合同的参考格式,适用于金融行业的合同撰写。这份合同模板详细列出了各个章节和条款,确保了合同的全面性和合规性。 首先,合同的【总则】部分明确了合同的签署双方及其责任,...
《欧元体系在支付体系监督中的职责》(2000 年 6 月)对其支付系统的监督政策进行了分类:针对那些性能及运行可能影响到货币政策、系统稳定、其它市场参与者的支付系统,ECB 管理委员会负责制定通用的监督方针;...
首先,我们要明确的是,“通用”意味着该模板具有广泛的适用性,无论商城的规模大小,无论是B2C、B2B还是C2C模式,都可以灵活运用。它提供了基础的订单管理、商品管理、用户管理、支付接口集成等功能模块,可以满足...
《电子商务购物网站管理系统通用版》是一款专为电子商务领域设计的高效、便捷的管理工具,旨在帮助商家更好地运营在线商店,提升用户体验,优化购物流程。本文将深入探讨该系统的关键功能、架构设计以及其在实际操作...
(2)在通用监督政策没有涉及的领域,有关的监督政策由 NCB 一级的管理机构制定,这些政策应适用于欧元体系制定的一般通用监督框架。在必要的情况下,ECB 管理委员会也会主动提出制定这些相关领域监督政策的动议。 ...
这个模板基于流行的织梦(DedeCMS)内容管理系统,它是一款功能强大、易于使用的开源建站工具,适用于构建复杂的企业级网站。 首先,我们来详细了解一下织梦内容管理系统(DedeCMS)。DedeCMS是基于PHP+MySQL技术...
这个"通用zencart模板 经典款式"显然是一款适用于各种商业类型的Zencart主题,旨在为商家提供一个美观且用户友好的界面,以吸引并方便顾客购物。 在Zencart模板中,设计通常会考虑以下几个关键方面: 1. **响应式...
【文档描述】中并未给出具体的描述,但从文件名可以推断,这是一份适用于多种情况的模板,适用于不同国家之间的劳动和技术服务合作。 【标签】中的“合同”、“word”、“文档资料”表明这是一份以Word格式编写的...