首页 > 编程 > Java > 正文

基于Java代码实现支付充值的通用流程

2019-11-26 14:18:51
字体:
来源:转载
供稿:网友

废话不多说了,直接给大家贴java代码了。

具体代码如下所示:

/*支付流程*//****Controller.java 代码如下:*/@RequestMapping(value = "/paySubmit.htm", method = RequestMethod.POST)public ModelAndView paySubmit(HttpServletRequest request,HttpServletResponse response, @RequestParam Map<String, Object> maps){ModelAndView model = new ModelAndView("***/submit");/*** 代码块*/return model;}/*submit.jsp 代码如下:*/<%@ page contentType="text/html;charset=UTF-8" language="java" trimDirectiveWhitespaces="true" %><%@ page import="com.***.util.PayUtil" %><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html><head><title>支付</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"></head><body><%request.setCharacterEncoding("UTF-8");String type = (String) request.getAttribute("type");String sHtmlText = "";if ("1".equals(type)){sHtmlText = PayUtil.buildForm((String) request.getAttribute("orderNo"),(String) request.getAttribute("amt"),type);}else{sHtmlText = PayUtil.allInPaybuildForm((String) request.getAttribute("orderNo"),(String) request.getAttribute("amt"),type,request);}out.println(sHtmlText);%></body></html>/* PayUtil.java 代码如下:*//*** 生成页面数据* @param url 三方支付的URL* @param sPara* @param strMethod* @return*/public static String buildRequest(String url, Map<String, String> sPara, String strMethod) {ArrayList keys = new ArrayList(sPara.keySet());StringBuffer sbHtml = new StringBuffer();sbHtml.append("<form id=/"paySubForm/" name=/"paySubForm/" action=/"" + url + "/" method=/"" + strMethod + "/">");for(int i = 0; i < keys.size(); ++i) {String name = (String)keys.get(i);String value = (String)sPara.get(name);sbHtml.append("<input type=/"hidden/" name=/"" + name + "/" value=/"" + value + "/"/>");}sbHtml.append("<input type=/"submit/" name=/"b1/" value=/"确认/" style=/"display:none;/"></form>");sbHtml.append("<script>document.forms[/'paySubForm/'].submit();</script>");return sbHtml.toString();}/*** 以民生支付为例* @param orderNo* @param amt* @param type* @return*/public static String buildForm(String orderNo, String amt,String type) {//商户编号String merchantid = PropertiesRead.use_classLoador().getProperty("CMBC.pay.id");//订单编号 商户的交易定单号,由商户网站生成,最大长度30String merorderid = orderNo;//金 额String amountsum = amt;//商品种类String subject = PropertiesRead.use_classLoador().getProperty("CMBC.pay.type");//"empty";//币 种 01 为cnyString currencytype = "01";//自动调转取货页面0→不跳转;1→跳转String autojump = "1";//跳转等待时间String waittime = "0";//商户取货URL String merurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.page.url"); //是否通知商户: 0→不通知;1→通知String informmer = "1";//商户通知URLString informurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.notify.url");/*** 商户返回确认: 0→不返回;1→返回*/String confirm = "1";//支付银行String merbank = "empty";//支付类型 0→即时到账;1→担保交易String tradetype = "0";//是否在商户端选择银行:0→其他;1→在商户端选择银行String bankInput = "0";//接口版本String strInterface = "5.00";//备 注 (可选) 支付备注信息,最大长度50String remark = "充值";//支付银行卡类型 00→借贷混合;01→纯借记String bankcardtype = "00";//商品描述String pdtdnm = "虚拟商品";//商品描述地址String pdtdetailurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.detail.url");//支付密钥(必填): 需在支付平台进行设置,可登录商户管理系统进行维护,用于上送商户支付及下传支付结果加密String MD5key = PropertiesRead.use_classLoador().getProperty("CMBC.pay.pwd");//拼接加密的源字符串String mac_src="merchantid="+merchantid+"&merorderid="+merorderid+"&amountsum="+amountsum+"&subject="+subject+"¤cytype="+currencytype+"&autojump="+autojump+ "&waittime=" + waittime +"&merurl="+merurl+ "&informmer=" + informmer +"&informurl=" +informurl+ "&confirm=" + confirm + "&merbank=" + merbank+ "&tradetype=" + tradetype + "&bankInput=" + bankInput+ "&interface=" + strInterface + "&bankcardtype=" + bankcardtype+ "&pdtdetailurl=" + pdtdetailurl + "&merkey="+MD5key;String mac = Crypto.GetMessageDigest(mac_src);// 把请求参数打包成mapMap<String, String> sParaTemp = new HashMap<String,String>();sParaTemp.put("merchantid", merchantid);sParaTemp.put("merorderid", merorderid);sParaTemp.put("amountsum", amountsum);sParaTemp.put("subject", subject);sParaTemp.put("currencytype", currencytype);sParaTemp.put("autojump", autojump);sParaTemp.put("waittime", waittime);sParaTemp.put("merurl", merurl);sParaTemp.put("informmer", informmer);sParaTemp.put("informurl", informurl);sParaTemp.put("confirm", confirm);sParaTemp.put("merbank", merbank);sParaTemp.put("tradetype", tradetype);sParaTemp.put("bankInput", bankInput);sParaTemp.put("interface", strInterface);sParaTemp.put("remark", remark);sParaTemp.put("bankcardtype", bankcardtype);sParaTemp.put("pdtdnm", pdtdnm);sParaTemp.put("pdtdetailurl", pdtdetailurl);sParaTemp.put("mac", mac);//建立请求String sHtmlText = buildRequest(PropertiesRead.use_classLoador().getProperty("CMBC.pay.url"), sParaTemp, "post");logger.info("McPay request: {}", sHtmlText);return sHtmlText;}/" Crypto.java 代码如下 "/import java.security.MessageDigest;import java.security.NoSuchAlgorithmException;/*** <p>Title: MD5加密算法</p>* <p>Description: 商户不需要进行修改</p>* <p>******科技发展公司 2009. All rights reserved.</p>*/public class Crypto {/*** 功能:MD5加密* @param strSrc 加密的源字符串* @return 加密串 长度32位*/public static String GetMessageDigest(String strSrc) {MessageDigest md = null;String strDes = null;final String ALGO_MD5 = "MD5";byte[] bt = strSrc.getBytes();try {md = MessageDigest.getInstance(ALGO_MD5);md.update(bt);strDes = bytes2Hex(md.digest());} catch (NoSuchAlgorithmException e) {throw new IllegalStateException("系统不支持的MD5算法!");}return strDes;}/*** 将字节数组转为HEX字符串(16进制串)* @param bts 要转换的字节数组* @return 转换后的HEX串*/public static String bytes2Hex(byte[] bts) {String des = "";String tmp = null;for (int i = 0; i < bts.length; i++) {tmp = (Integer.toHexString(bts[i] & 0xFF));if (tmp.length() == 1) {des += "0";}des += tmp;}return des;}}/*** 支付返回调用url(返回页面)* @param session* @param request* @return*/@RequestMapping(value = "/allPayReturn.htm", method = RequestMethod.POST)public ModelAndView allInPayReturnCall(HttpServletRequest request,HttpServletResponse response, @RequestParam Map<String, Object> maps){ModelAndView model = new ModelAndView("***/payReturn");/*** 代码块*/return model;}

以上所述是小编给大家介绍的基于Java代码实现支付充值的通用流程的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对武林网网站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表