廢話不多說了,直接給大家貼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 代碼如下:*//*** 生成頁面數(shù)據(jù)* @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=/"確認(rèn)/" 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");//訂單編號 商戶的交易定單號,由商戶網(wǎng)站生成,最大長度30String merorderid = orderNo;//金 額String amountsum = amt;//商品種類String subject = PropertiesRead.use_classLoador().getProperty("CMBC.pay.type");//"empty";//幣 種 01 為cnyString currencytype = "01";//自動調(diào)轉(zhuǎn)取貨頁面0→不跳轉(zhuǎn);1→跳轉(zhuǎn)String autojump = "1";//跳轉(zhuǎn)等待時間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");/*** 商戶返回確認(rèn): 0→不返回;1→返回*/String confirm = "1";//支付銀行String merbank = "empty";//支付類型 0→即時到賬;1→擔(dān)保交易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");//支付密鑰(必填): 需在支付平臺進(jìn)行設(shè)置,可登錄商戶管理系統(tǒng)進(jìn)行維護(hù),用于上送商戶支付及下傳支付結(jié)果加密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);// 把請求參數(shù)打包成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: 商戶不需要進(jìn)行修改</p>* <p>******科技發(fā)展公司 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("系統(tǒng)不支持的MD5算法!");}return strDes;}/*** 將字節(jié)數(shù)組轉(zhuǎn)為HEX字符串(16進(jìn)制串)* @param bts 要轉(zhuǎn)換的字節(jié)數(shù)組* @return 轉(zhuǎn)換后的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;}}/*** 支付返回調(diào)用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代碼實現(xiàn)支付充值的通用流程的相關(guān)知識,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對武林網(wǎng)網(wǎng)站的支持!
新聞熱點
疑難解答
圖片精選