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

来源:互联网 发布:js中的map的使用 编辑:程序博客网 时间:2024/05/21 23:09

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

具体代码如下所示:

  1. /*支付流程*/
  2. /****Controller.java 代码如下:*/
  3. @RequestMapping(value = "/paySubmit.htm", method = RequestMethod.POST)
  4. public ModelAndView paySubmit(HttpServletRequest request,
  5. HttpServletResponse response, @RequestParam Map<String, Object> maps){
  6. ModelAndView model = new ModelAndView("***/submit");
  7. /**
  8. * 代码块
  9. */
  10. return model;
  11. }
  12. /*submit.jsp 代码如下:*/
  13. <%@ page contentType="text/html;charset=UTF-8" language="java" trimDirectiveWhitespaces="true" %>
  14. <%@ page import="com.***.util.PayUtil" %>
  15. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  16. <html>
  17. <head>
  18. <title>支付</title>
  19. <meta http-equiv="pragma" content="no-cache">
  20. <meta http-equiv="cache-control" content="no-cache">
  21. <meta http-equiv="expires" content="0">
  22. </head>
  23. <body>
  24. <%
  25. request.setCharacterEncoding("UTF-8");
  26. String type = (String) request.getAttribute("type");
  27. String sHtmlText = "";
  28. if ("1".equals(type)){
  29. sHtmlText = PayUtil.buildForm(
  30. (String) request.getAttribute("orderNo"),
  31. (String) request.getAttribute("amt"),type);
  32. }else{
  33. sHtmlText = PayUtil.allInPaybuildForm(
  34. (String) request.getAttribute("orderNo"),
  35. (String) request.getAttribute("amt"),type,request);
  36. }
  37. out.println(sHtmlText);
  38. %>
  39. </body>
  40. </html>
  41. /* PayUtil.java 代码如下:*/
  42. /**
  43. * 生成页面数据
  44. * @param url 三方支付的URL
  45. * @param sPara
  46. * @param strMethod
  47. * @return
  48. */
  49. public static String buildRequest(String url, Map<String, String> sPara, String strMethod) {
  50. ArrayList keys = new ArrayList(sPara.keySet());
  51. StringBuffer sbHtml = new StringBuffer();
  52. sbHtml.append("<form id=\"paySubForm\" name=\"paySubForm\" action=\"" + url + "\" method=\"" + strMethod + "\">");
  53. for(int i = 0; i < keys.size(); ++i) {
  54. String name = (String)keys.get(i);
  55. String value = (String)sPara.get(name);
  56. sbHtml.append("<input type=\"hidden\" name=\"" + name + "\" value=\"" + value + "\"/>");
  57. }
  58. sbHtml.append("<input type=\"submit\" name=\"b1\" value=\"确认\" style=\"display:none;\"></form>");
  59. sbHtml.append("<script>document.forms[\'paySubForm\'].submit();</script>");
  60. return sbHtml.toString();
  61. }
  62. /**
  63. * 以民生支付为例
  64. * @param orderNo
  65. * @param amt
  66. * @param type
  67. * @return
  68. */
  69. public static String buildForm(String orderNo, String amt,String type) {
  70. //商户编号
  71. String merchantid = PropertiesRead.use_classLoador().getProperty("CMBC.pay.id");
  72. //订单编号 商户的交易定单号,由商户网站生成,最大长度30
  73. String merorderid = orderNo;
  74. //金 额
  75. String amountsum = amt;
  76. //商品种类
  77. String subject = PropertiesRead.use_classLoador().getProperty("CMBC.pay.type");//"empty";
  78. //币 种 01 为cny
  79. String currencytype = "01";
  80. //自动调转取货页面0→不跳转;1→跳转
  81. String autojump = "1";
  82. //跳转等待时间
  83. String waittime = "0";
  84. //商户取货URL 
  85. String merurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.page.url"); 
  86. //是否通知商户: 0→不通知;1→通知
  87. String informmer = "1";
  88. //商户通知URL
  89. String informurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.notify.url");
  90. /**
  91. * 商户返回确认: 0→不返回;1→返回
  92. */
  93. String confirm = "1";
  94. //支付银行
  95. String merbank = "empty";
  96. //支付类型 0→即时到账;1→担保交易
  97. String tradetype = "0";
  98. //是否在商户端选择银行:0→其他;1→在商户端选择银行
  99. String bankInput = "0";
  100. //接口版本
  101. String strInterface = "5.00";
  102. //备 注 (可选) 支付备注信息,最大长度50
  103. String remark = "充值";
  104. //支付银行卡类型 00→借贷混合;01→纯借记
  105. String bankcardtype = "00";
  106. //商品描述
  107. String pdtdnm = "虚拟商品";
  108. //商品描述地址
  109. String pdtdetailurl = PropertiesRead.use_classLoador().getProperty("CMBC.pay.return.detail.url");
  110. //支付密钥(必填): 需在支付平台进行设置,可登录商户管理系统进行维护,用于上送商户支付及下传支付结果加密
  111. String MD5key = PropertiesRead.use_classLoador().getProperty("CMBC.pay.pwd");
  112. //拼接加密的源字符串
  113. String mac_src="merchantid="+merchantid+"&merorderid="+merorderid
  114. +"&amountsum="+amountsum+"&subject="+subject
  115. +"¤cytype="+currencytype+"&autojump="+autojump
  116. + "&waittime=" + waittime +"&merurl="+merurl
  117. + "&informmer=" + informmer +"&informurl=" +informurl
  118. + "&confirm=" + confirm + "&merbank=" + merbank
  119. + "&tradetype=" + tradetype + "&bankInput=" + bankInput
  120. + "&interface=" + strInterface + "&bankcardtype=" + bankcardtype
  121. + "&pdtdetailurl=" + pdtdetailurl + "&merkey="+MD5key;
  122. String mac = Crypto.GetMessageDigest(mac_src);
  123. // 把请求参数打包成map
  124. Map<String, String> sParaTemp = new HashMap<String,String>();
  125. sParaTemp.put("merchantid", merchantid);
  126. sParaTemp.put("merorderid", merorderid);
  127. sParaTemp.put("amountsum", amountsum);
  128. sParaTemp.put("subject", subject);
  129. sParaTemp.put("currencytype", currencytype);
  130. sParaTemp.put("autojump", autojump);
  131. sParaTemp.put("waittime", waittime);
  132. sParaTemp.put("merurl", merurl);
  133. sParaTemp.put("informmer", informmer);
  134. sParaTemp.put("informurl", informurl);
  135. sParaTemp.put("confirm", confirm);
  136. sParaTemp.put("merbank", merbank);
  137. sParaTemp.put("tradetype", tradetype);
  138. sParaTemp.put("bankInput", bankInput);
  139. sParaTemp.put("interface", strInterface);
  140. sParaTemp.put("remark", remark);
  141. sParaTemp.put("bankcardtype", bankcardtype);
  142. sParaTemp.put("pdtdnm", pdtdnm);
  143. sParaTemp.put("pdtdetailurl", pdtdetailurl);
  144. sParaTemp.put("mac", mac);
  145. //建立请求
  146. String sHtmlText = buildRequest(PropertiesRead.use_classLoador().getProperty("CMBC.pay.url"), sParaTemp, "post");
  147. logger.info("McPay request: {}", sHtmlText);
  148. return sHtmlText;
  149. }
  150. /" Crypto.java 代码如下 "/
  151. import java.security.MessageDigest;
  152. import java.security.NoSuchAlgorithmException;
  153. /**
  154. * <p>Title: MD5加密算法</p>
  155. * <p>Description: 商户不需要进行修改</p>
  156. * <p>******科技发展公司 2009. All rights reserved.</p>
  157. */
  158. public class Crypto {
  159. /**
  160. * 功能:MD5加密
  161. * @param strSrc 加密的源字符串
  162. * @return 加密串 长度32位
  163. */
  164. public static String GetMessageDigest(String strSrc) {
  165. MessageDigest md = null;
  166. String strDes = null;
  167. final String ALGO_MD5 = "MD5";
  168. byte[] bt = strSrc.getBytes();
  169. try {
  170. md = MessageDigest.getInstance(ALGO_MD5);
  171. md.update(bt);
  172. strDes = bytes2Hex(md.digest());
  173. } catch (NoSuchAlgorithmException e) {
  174. throw new IllegalStateException(
  175. "系统不支持的MD5算法!");
  176. }
  177. return strDes;
  178. }
  179. /**
  180. * 将字节数组转为HEX字符串(16进制串)
  181. * @param bts 要转换的字节数组
  182. * @return 转换后的HEX串
  183. */
  184. public static String bytes2Hex(byte[] bts) {
  185. String des = "";
  186. String tmp = null;
  187. for (int i = 0; i < bts.length; i++) {
  188. tmp = (Integer.toHexString(bts[i] & 0xFF));
  189. if (tmp.length() == 1) {
  190. des += "0";
  191. }
  192. des += tmp;
  193. }
  194. return des;
  195. }
  196. }
  197. /**
  198. * 支付返回调用url(返回页面)
  199. * @param session
  200. * @param request
  201. * @return
  202. */
  203. @RequestMapping(value = "/allPayReturn.htm", method = RequestMethod.POST)
  204. public ModelAndView allInPayReturnCall(HttpServletRequest request,
  205. HttpServletResponse response, @RequestParam Map<String, Object> maps){
  206. ModelAndView model = new ModelAndView("***/payReturn");
  207. /**
  208. * 代码块
  209. */
  210. return model;
  211. }

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

原创粉丝点击