注:原来来源于: 《  银联支付Java开发  》


银联的demo写的不错,基本上可以直接使用。 
首先是对acp_sdk.properties的内容修改,注意这个文件的文件名不能进行修改。 
对于文件内的证书路径以及证书对应的密码进行修改。

修改完这个文件后,需要对DemoBase这个类中的frontUrl,backUrl进行修改,这个是银联支付后向服务器通知的前台以及后台地址。 
frontUrl主要处理的前台界面展示,backUrl主要处理后台业务逻辑。

注意:这两个地址需要是外网地址,否则将无法收到回调信息。

然后对于Form_6_2_FrontConsume类中的信息进行相应的修改,直接访问服务,会返回给你一段html字符串,把这段html直接传到前台加到页面上。这段代码会自动提交数据,会弹出银联支付的界面。

注意:测试环境下,微信浏览器无法弹出支付界面,需要换生成环境的证书才能正常的弹出支付界面。

支付成功后,银联会向你设置的backUrl发送成功信息,具体接受方法如下:

String encoding = req.getParameter(SDKConstants.param_encoding);
        // 获取银联通知服务器发送的后台通知参数
        Map<String, String> reqParam = getAllRequestParam(req);
        System.out.println("reqParam----->" + reqParam.toString());
        LogUtil.printRequestLog(reqParam);

        Map<String, String> valideData = null;
        if (null != reqParam && !reqParam.isEmpty())
        {
            Iterator<Entry<String, String>> it = reqParam.entrySet().iterator();
            valideData = new HashMap<String, String>(reqParam.size());
            while (it.hasNext())
            {
                Entry<String, String> e = it.next();
                String key = (String) e.getKey();
                String value = (String) e.getValue();
                value = new String(value.getBytes(encoding), encoding);
                valideData.put(key, value);
            }
        }

        //重要!验证签名前不要修改reqParam中的键值对的内容,否则会验签不过
        if (!AcpService.validate(valideData, encoding))
        {
            LogUtil.writeLog("验证签名结果[失败].");
            //验签失败,需解决验签问题
        }
        else
        {
            LogUtil.writeLog("验证签名结果[成功].");
        }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
public static Map<String, String> getAllRequestParam(final HttpServletRequest request)
    {
        Map<String, String> res = new HashMap<String, String>();
        Enumeration<?> temp = request.getParameterNames();
        if (null != temp)
        {
            while (temp.hasMoreElements())
            {
                String en = (String) temp.nextElement();
                String value = request.getParameter(en);
                res.put(en, value);
                //在报文上送时,如果字段的值为空,则不上送<下面的处理为在获取所有参数数据时,判断若值为空,则删除这个字段>
                //System.out.println("ServletUtil类247行  temp数据的键=="+en+"     值==="+value);
                if (null == res.get(en) || "".equals(res.get(en)))
                {
                    res.remove(en);
                }
            }
        }
        return res;
    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

支付成功后,界面会有一个返回商户的按钮,那个按钮返回的界面就是在frontUrl设置。获取回调信息的方法与上面相同,就是在后面需要把界面导向你想要显示的界面,顺便带上返回的参数。

这样就顺利的完成了银联支付的流程。

版权声明:本文为ios9原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/ios9/p/9233528.html