Android开发:app工程集成银联支付功能(服务器端)

因为是自己开发了一个app应用,没资格去申请微信支付和支付宝支付,于是就采用了银联支付功能,银联支付分为了两种环境:测试环境和生产环境,一般前期开发的时候都是使用测试环境,数据都是测试数据,不会发生真实交易。第一次做Android项目+IDE为Android Studio+第一次集成支付功能,所以个人觉得整个集成过程可能有点复杂,而且银联支付产品众多:网关支付产品、手机控件支付、手机网页支付等等,第一次看的时候真是云里雾里,不知道选哪个,不知道他们的区别,最后自己选择了手机控件支付,先试试,光看没有用。自己做了多少写多少,好记性不如烂笔头,就怕后面想记录的时候忘记了前面的过程。

2.1下载银联支付SDK和Demo

(1)银联商家服务地址:https://open.unionpay.com/ajweb/index

第一步:注册;

第二步:然后在帮助中心界面的产品分类下载里选择手机控件支付; 
产品分类下载 
第三步:下载安卓版的开发包。 
这里写图片描述

(2)下载的文件如下

这里写图片描述

2.2集成过程

个人建议可以先把服务器端的工程跑一下,这样结合代码的时候就很容易明白怎么集成到自己的工程里了。所以这一小部分内容是官方Demo的运行情况,需要修改的配置很少,但是还是有小地方需要调整一下。

(1)先试官方Demo

这里写图片描述

将这三个路径修改为测试环境证书的路径(证书在assets文件夹下),可以使用相对路径或者绝对路径都行,下面图中是绝对路径,我把assets/测试环境证书下的三个文件移动到了C盘。 
这里写图片描述 
我的测试环境证书地址: 
这里写图片描述

启动tomcat过程中比较关键的一处就是 
这里写图片描述

这里写图片描述

这里写图片描述 
最后打印的报文

这里写图片描述

(2)集成到自己的工程里

先讲服务器端,因为自己也才完成了这部分工作。运行了官方Demo以及相关说明文档后,整体思路其实就有了。 
首先试试配置!!!

将Demo工程lib中的jar包复制到自己工程的lib里(如果已经有jar包了,就不需要复制了) 
这里写图片描述

  • 修改acp_sdk_propertise和log4j.properties 
    (主要是一些路径的修改,因为我的服务器上只有C盘,所以我必须得改,acp_sdk_properties的修改见(1)运行Demo部分)

这里写图片描述

之所以写用import的方式是为了少出现乱码的问题,见下图 
这里写图片描述

第一部分 controller对应于Demo中的ACPSample_AppServer\src\com\unionpay\acp\demo,其中PayController是我自己写的Controller。 
第二部分model对应于Demo中的ACPSample_AppServer\src\com\unionpay\acp\sdk 
第三部分的两个java文件对应于Demo中的\ACPSample_AppServer\src\web中的两个java文件


    autoLoadServlet
    com.XXX.component.pay.AutoLoadServlet
    0
  
  
    autoLoadServlet
    /autoLoadServlet
  

ok,配置过程就算完事了,现在就该写PayController来接受请求了。

  • PayController控制器 
    其实就是Form05_6_2_AppConsume.java中的代码,因为使用是SSM架构,就改了改架构而已。
@Controller
public class PayController extends BasicController{
    @RequestMapping(value = )
    @ResponseBody
    public void pay(HttpServletRequest request, HttpServletResponse response) throws UnsupportedEncodingException {

        request.setCharacterEncoding(DemoBase.encoding_UTF8);
        response.setContentType(+ DemoBase.encoding_UTF8);

        Map contentData = new HashMap();

        /***银联全渠道系统,产品参数,除了encoding自行选择外其他不需修改***/
        contentData.put(, DemoBase.version);            
        contentData.put(, DemoBase.encoding_UTF8);     
        contentData.put(, );                    
        contentData.put(, );                       
        contentData.put(, );                    
        contentData.put(, );                   
        contentData.put(, );                   

        String merId = request.getParameter();
        String txnAmt = request.getParameter();
        String orderId = request.getParameter();
        String txnTime = request.getParameter();

        /***商户接入参数***/
        contentData.put(, merId);                        
        contentData.put(, );                     
        contentData.put(, orderId);                    
        contentData.put(, txnTime);                    
        contentData.put(, );                       
        contentData.put(, txnAmt);                      
        contentData.put(, );                 
        
        
                
                
                
                
        contentData.put(, DemoBase.backUrl);

        /**对请求参数进行签名并发送http post请求,接收同步应答报文**/
        Map reqData = AcpService.sign(contentData,DemoBase.encoding_UTF8);           
        String requestAppUrl = SDKConfig.getConfig().getAppRequestUrl();                                 
        Map rspData = AcpService.post(reqData,requestAppUrl,DemoBase.encoding_UTF8);  

        /**对应答码的处理,请根据您的业务逻辑来编写程序,以下应答码处理逻辑仅供参考------------->**/
        
        if(!rspData.isEmpty()){
            if(AcpService.validate(rspData, DemoBase.encoding_UTF8)){
                LogUtil.writeLog();
                String respCode = rspData.get() ;
                if(().equals(respCode)){
                    
                    
                    
                }else{
                    
                    
                }
            }else{
                LogUtil.writeErrorLog();
                
            }
        }else{
            
            LogUtil.writeErrorLog();
        }
        String reqMessage = DemoBase.genHtmlResult(reqData);
        String rspMessage = DemoBase.genHtmlResult(rspData);
        try {
            response.getWriter().write("+reqMessage+ + "+rspMessage+);
            
        } catch (UnsupportedEncodingException e) {
            
            e.printStackTrace();
        } catch (IOException e) {
            
            e.printStackTrace();
        }
    }
}

然后浏览器输入(get方式,在Form05_6_2_AppConsume.java中get和post方式是一样的,我的PayController因为没有指定请求方式,所以两种方式也是兼容的,而且只是为了测试采用的get,后面把客户端搭好,就用post方式) 
:http://123.XX.XXX.127:8080/intveh/pay/pay?merId=777290058110048&txnTime=20160505092851&orderId=20160505092851&txnAmt=5 
效果和官方Demo一样: 
这里写图片描述

目前就把服务器端的tn获取搭好了,还有退款退货等等以及客户端的搭建,接着搞~~

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值