银联支付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("验证签名结果[成功]."); 
        }
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; 
    }

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

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

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/13981.html

(0)
上一篇 2021年7月19日
下一篇 2021年7月19日

相关推荐

发表回复

登录后才能评论