• Java如何创建支付接口


    对接步骤

    官网地址:码支付

    首先去官网注册账号,这个就不过多介绍了,注册完后登录点击使用教程,把监控软件下载到本地

    监控软件使用:

    码支付软件使用教程

    将以下三个类加到项目中:

    demo.jsp(支付操作类):

    1. <html>
    2. <head>
    3. <meta name="keywords" content="">
    4. <meta name="description" content="">
    5. <meta http-equiv="X-UA-Compatible" content="IE=edge">
    6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    7. <title>
    8. 充值
    9. </title>
    10. <link rel="stylesheet" href="css/demo.css" />
    11. </head>
    12. <body>
    13. <form name="form1" id="form1" method="get" action="codepay.jsp">
    14. <input type="hidden" name="urlName" value="${pageContext.request.contextPath }">
    15. <div>
    16. <table width="550" border="0" align="center" cellpadding="8" cellspacing="1" bgcolor="#ffffff">
    17. <tbody>
    18. <tr>
    19. <td colspan="2">
    20. <div align="center"><strong>在线充值</strong></div>
    21. </td>
    22. </tr>
    23. <!-- 注释以下代码 可禁止自己输入价格-->
    24. <tr>
    25. <td>
    26. <div align="right">金额:</div>
    27. </td>
    28. <td>
    29. <input name="price" id="price" type="text" value="" class="input_text"></td>
    30. </tr>
    31. <!-- 注释结束位置 -->
    32. <tr>
    33. <!-- <td>
    34. <div align="right">用户:</div>
    35. </td>
    36. <td><input name="pay_id" id="pay_id" type="text" value="" class="input_text"
    37. style=" width:200px;" ></td>
    38. -->
    39. </tr>
    40. <tr>
    41. <td>
    42. <div align="right">支付:</div>
    43. </td>
    44. <td><label>
    45. <div class="type_select alipay_select">
    46. <input type="radio" name="type" value="1" checked="checked">
    47. </div>
    48. </label>
    49. <label>
    50. <div class="type_select wechat_select">
    51. <input type="radio" name="type" value="3">
    52. </div>
    53. </label>
    54. <label>
    55. <div class="qqpay_select type_select">
    56. <input type="radio" name="type" value="2">
    57. </div>
    58. </label>
    59. </td>
    60. </tr>
    61. <tr>
    62. <td>
    63. <div align="right"></div>
    64. </td>
    65. <td><label>
    66. <input type="submit" id="Submit" class="button button-pill button-primary"
    67. value="支付宝支付">
    68. </label></td>
    69. </tr>
    70. </tbody>
    71. </table>
    72. </div>
    73. </form>
    74. <script src="http://codepay.fateqq.com/js/jquery-1.10.2.min.js"></script>
    75. <script type="text/javascript">
    76. var type = document.getElementsByName('type');
    77. var price = document.getElementById('price');
    78. var money = document.getElementById('money');
    79. var FormSubmit = document.getElementById('Submit');
    80. for (var i = 0; i < type.length; i++) {
    81. type[i].onclick = function () {
    82. switch (parseInt(this.value)) {
    83. case 1:
    84. FormSubmit.value = '支付宝支付';
    85. break;
    86. case 2:
    87. FormSubmit.value = 'QQ钱包支付';
    88. break;
    89. case 3:
    90. FormSubmit.value = '微信支付';
    91. break;
    92. default:
    93. FormSubmit.value = '支付宝支付';
    94. }
    95. }
    96. }
    97. $(".w-pay-money").click(function () {
    98. $(".w-pay-money").removeClass('w-pay-money-selected');
    99. $(this).addClass('w-pay-money-selected');
    100. price.value = $(this).attr('data');
    101. money.value = $(this).attr('data');
    102. });
    103. </script>
    104. </body>
    105. </html>

    这里要注意一点:有些朋友去官方下载的demo,小编的做了一些改变,就是支付人唯一标识这里删掉了,在后台传了固定的值:

    1. <td><input name="pay_id" id="pay_id" type="text" value="" class="input_text"
    2. style=" width:200px;" ></td>

    codepay.jsp(接收参数 创建订单):

    这个类比较重要,主要的作用就是将demo页面的值传入接收,生成订单项,提交至官方url进行处理,返回回执结果,同步跳转提示地址等…

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2. <%
    3. /**
    4. * 接收参数 创建订单
    5. */
    6. String token = "更改成您的token令牌"; //记得更改 http://codepay.fateqq.com 后台可设置
    7. String codepay_id ="更改成您的码支付ID" ;//记得更改 http://codepay.fateqq.com 后台可获得
    8. String price=request.getParameter("price"); //表单提交的价格
    9. String type=request.getParameter("type"); //支付类型 1:支付宝 2:QQ钱包 3:微信
    10. String pay_id=request.getParameter("pay_id"); //支付人的唯一标识
    11. String param=request.getParameter("param"); //自定义一些参数 支付后返回
    12. String notify_url="http://你的域名/codepay.jsp";//通知地址
    13. String return_url="";//支付后同步跳转地址
    14. if(price==null){
    15. price="1";
    16. }
    17. //参数有中文则需要URL编码
    18. String url="https://api.xiuxiu888.com/creat_order?id="+codepay_id+"&pay_id="+pay_id+"&price="+price+"&type="+type+"&token="+token+"&param="+param+"&notify_url="+notify_url+"&return_url="+return_url;
    19. response.sendRedirect(url);
    20. %>

    notify.jsp(验证通知 处理自己的业务):

    这个类主要就是将所有参数进行了一个MD5加密的校验,偷偷告诉你们,如果有自己的通知结果页面,这个类可有可无,不过为了安全起见,还是加上,通过这个类进行加密校验,如果ok就跳转页面

    1. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
    2. <%@ page import="java.util.*"%>
    3. <%@ page import="java.security.MessageDigest"%>
    4. <%@ page import="java.math.*"%>
    5. <%
    6. /**
    7. *验证通知 处理自己的业务
    8. */
    9. String key = "通信密钥"; //记得更改 http://codepay.fateqq.com 后台可设置
    10. Map<String,String> params = new HashMap<String,String>(); //申明hashMap变量储存接收到的参数名用于排序
    11. Map requestParams = request.getParameterMap(); //获取请求的全部参数
    12. String valueStr = ""; //申明字符变量 保存接收到的变量
    13. for (Iterator iter = requestParams.keySet().iterator(); iter.hasNext();) {
    14. String name = (String) iter.next();
    15. String[] values = (String[]) requestParams.get(name);
    16. valueStr = values[0];
    17. //乱码解决,这段代码在出现乱码时使用。如果sign不相等也可以使用这段代码转化
    18. //valueStr = new String(valueStr.getBytes("ISO-8859-1"), "gbk");
    19. params.put(name, valueStr);//增加到params保存
    20. }
    21. List<String> keys = new ArrayList<String>(params.keySet()); //转为数组
    22. Collections.sort(keys); //重新排序
    23. String prestr = "";
    24. String sign= params.get("sign"); //获取接收到的sign 参数
    25. for (int i = 0; i < keys.size(); i++) { //遍历拼接url 拼接成a=1&b=2 进行MD5签名
    26. String key_name = keys.get(i);
    27. String value = params.get(key_name);
    28. if(value== null || value.equals("") ||key_name.equals("sign")){ //跳过这些 不签名
    29. continue;
    30. }
    31. if (prestr.equals("")){
    32. prestr = key_name + "=" + value;
    33. }else{
    34. prestr = prestr +"&" + key_name + "=" + value;
    35. }
    36. }
    37. MessageDigest md = MessageDigest.getInstance("MD5");
    38. md.update((prestr+key).getBytes());
    39. String mySign = new BigInteger(1, md.digest()).toString(16).toLowerCase();
    40. if(mySign.length()!=32)mySign="0"+mySign;
    41. if(mySign.equals(sign)){
    42. //编码要匹配 编码不一致中文会导致加密结果不一致
    43. //参数合法处理业务
    44. //request.getParameter("pay_no") 流水号
    45. //request.getParameter("pay_id") 用户唯一标识
    46. //request.getParameter("money") 付款金额
    47. //request.getParameter("price") 提交的金额
    48. out.print("ok");
    49. }else{
    50. //参数不合法
    51. out.print("fail");
    52. }
    53. %>

    效果图

    选择支付方式页面(博主比较穷,没开通会员版),所以这里就拿QQ支付作为演示:

    点击支付后,提交的一个界面:

    支付完成后,同步跳转通知:

    有图有真相,这个平台对于想入手支付接口的朋友来说还是比较棒的,官方提供的demo可修改性也比较好,可以结合自己的项目场景去开发…

    对接注意事项

    先别溜,先听博主讲完,给大家说几个一定要注意的点,也是博主踩过的坑:

    一定要去后台把参数一一正确的填入codepay.jsp和notify.jsp这两个类,获取参数如图:

    一定要下载好监控软件,一定一定!!!如果你开通了了会员版,当我没说…,下载好后,在测试运行项目前,一定要运行监控软件进行监控,不然得不到回执结果,页面不会跳转,而且还会掉单…

    基本业务逻辑都是收款码上显示多少,手机在扫码支付时,固定只能支付对应的金额,就像这样(前台收取1元钱,手机在扫码付款时,图片为手机截图,没做处理,有点大见谅):

    但是!!!!!如果没去官方后台上传对应金额的收款码,扫了之后还是可以手动输入,当时我发现扫了之后,没有直接对对应的金额直接付款,而是可以手动输入比较疑惑,所以就去后台看了看,要上传对应的收款码

    codepay.jsp页面的同步通知地址可留空,如果想跳转自己项目的路径,一定要填写正确,也就是这一行:

    String return_url = "";//支付后同步跳转地址

    Java学习视频

    Java基础:

    Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受

    Java项目:

    【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏

    【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发

  • 相关阅读:
    JAVA反射机制详解
    专利申请流程,申请专利去哪
    说说Vue响应式系统中的Watcher和Dep的关系-面试进阶
    常见文件编码 - 多字节编码与Unicode编码区别
    SpringBoot常见组件集成
    铨顺宏RFID:试卷管理中RFID技术智能系统发挥着什么样的作用
    计算机毕业设计Java校园资料分享平台(系统+源码+mysql数据库+lw文档)
    推荐一些小而美的互联网公司
    专业的ADAS测试记录仪ETHOS
    java数据结构与算法刷题-----LeetCode11:盛最多水的容器
  • 原文地址:https://blog.csdn.net/java_0000/article/details/125625300