中国电信翼支付网关接口接入
最近在做中国电信的翼支付网关接口的接入,正好拿Java练练手。到目前为止,唯一不太适应的就是自己的Java积累几乎为0,什么都要重头写起,不像C#有这么多年的沉淀,可以随手拿来用。
废话先不多说。这个支付接口就和支付宝差不多,无非就是把一些必要的数据参数,POST到指定的接口地址,然后接收它返回的支付结果。接口没有什么复杂的逻辑处理,所以可以直接采用JSP+Servlet+JDBC来做简单处理。对于WEB支付请求的发起,可以从JSP把用户输入或选择的相关数据传到Servlet,然后在Servlet里把商户的基本信息以及用户数据封装下,再统一POST到网关接口地址:
1 StringBuffer stb = new StringBuffer(); 2 stb.append("<html>"); 3 stb.append("<head><title>你的Title</title></head>"); 4 stb.append("<body οnlοad=\"document.form1.submit()\">"); 5 stb.append("<form name=\"form1\" method=\"post\" action=\"https://webpaywg.bestpay.com.cn/payWeb.do\" >"); 6 stb.append(String.format("<input name=\"MERCHANTID\" type=\"hidden\" value=\"%s\">", merchantId)); //商戶号 7 stb.append(String.format("<input name=\"ORDERSEQ\" type=\"hidden\" value=\"%s\">", orderSeq)); //订单号 8 stb.append(String.format("<input name=\"ORDERREQTRANSEQ\" type=\"hidden\" value=\"%s\">", orderSeq)); //订单请求交易流水号 9 stb.append(String.format("<input name=\"ORDERDATE\" type=\"hidden\" value=\"%s\">", orderDate)); //订单日期 10 stb.append(String.format("<input name=\"ORDERAMOUNT\" type=\"hidden\" value=\"%s\">", orderAmount)); //订单总金额 11 stb.append(String.format("<input name=\"PRODUCTAMOUNT\" type=\"hidden\" value=\"%s\">", orderAmount)); //产品金额 12 stb.append("<input name=\"ATTACHAMOUNT\" type=\"hidden\" value=\"0\">"); //附加金额 13 stb.append("<input name=\"CURTYPE\" type=\"hidden\" value=\"RMB\">"); //币种 14 stb.append("<input name=\"ENCODETYPE\" type=\"hidden\" value=\"1\">"); //加密方式 MD5 15 stb.append(String.format("<input name=\"MERCHANTURL\" type=\"hidden\" value=\"%s\">", merchantUrl)); //前台返回地址 16 stb.append(String.format("<input name=\"BACKMERCHANTURL\" type=\"hidden\" value=\"%s\">", backMerchantUrl)); //后台返回地址 17 stb.append(String.format("<input name=\"ATTACH\" type=\"hidden\" value=\"%s\">", attach)); //商户附加信息 18 stb.append("<input name=\"BUSICODE\" type=\"hidden\" value=\"0001\">"); //业务类型 19 stb.append("<input name=\"PRODUCTID\" type=\"hidden\" value=\"08\">"); // 业务标识 20 stb.append(String.format("<input name=\"TMNUM\" type=\"hidden\" value=\"%s\">", tmNum)); //终端号码 21 stb.append(String.format("<input name=\"CUSTOMERID\" type=\"hidden\" value=\"%s\">", customerId)); //客户标识 22 stb.append(String.format("<input name=\"PRODUCTDESC\" type=\"hidden\" value=\"%s\">", productDes)); //产品描述 23 stb.append(String.format("<input name=\"MAC\" type=\"hidden\" value=\"%s\">", mac)); //MAC校验域 24 stb.append(String.format("<input name=\"CLIENTIP\" type=\"hidden\" value=\"%s\">", clientIp)); //客户端IP 25 stb.append("</form></body>"); 26 stb.append("</html>"); 27 //入库、记录日志等 28 response.setContentType("text/html"); 29 response.setCharacterEncoding("UTF-8"); 30 PrintWriter out = response.getWriter(); 31 out.write(stb.toString());
这里需要注意的是MAC这个值,翼支付网关会对这个值做校验;接口文档中提供了这个值的加密和MD5摘要算法样例,所以只要按照文档描述的规则来,一般不会有没有什么问题。上面的参数中,有一个前台返回地址和后台返回地址,当用户通过网银完成支付后,翼支付网关会把用户此次的支付结果POST到这2个地址,所以前台地址可以把支付结果展示给用户,后台地址的话就用来处理商户的业务逻辑吧。毕竟前台地址可能不会达到用户侧,或者用户在支付完成后就直接关了当前窗口。另外后台地址在接收到支付结果数据后,一定要原路响应网关,不然网关那边会不定时的持续发送重复的支付结果过来:
1 request.setCharacterEncoding("UTF-8"); 2 String uptranSeq = request.getParameter("UPTRANSEQ"); //翼支付网关平台交易流水号 3 String tranDate = request.getParameter("TRANDATE"); //翼支付网关平台交易日期 4 String returnCode = request.getParameter("RETNCODE"); //处理结果码 “0000” 表示支付成功,其他值则表示支付失败 5 String retuInfo = request.getParameter("RETNINFO"); //处理结果解释码 6 if(retuInfo != null && !retuInfo.isEmpty()) { 7 retuInfo = URLDecoder.decode(retuInfo, "UTF-8"); 8 } 9 String orderReqTranseq = request.getParameter("ORDERREQTRANSEQ"); //订单请求交易流水号 10 String orderReq = request.getParameter("ORDERSEQ"); //订单号 11 String orderAmount = request.getParameter("ORDERAMOUNT"); //订单总金额 12 String productAmount = request.getParameter("PRODUCTAMOUNT"); //产品金额 13 String attachMount = request.getParameter("ATTACHAMOUNT"); //附加金额 14 String curType = request.getParameter("CURTYPE"); //币种 15 String encodeType = request.getParameter("ENCODETYPE"); //加密方式 16 String bankId = request.getParameter("BANKID"); //银行编码 17 String attach = request.getParameter("ATTACH"); //商户附加信息 18 String upreqTranseq = request.getParameter("UPREQTRANSEQ"); //网关平台请求银行流水号 19 String upbankTranseq = request.getParameter("UPBANKTRANSEQ"); //银行流水号 20 String productNo = request.getParameter("PRODUCTNO"); //产品号码 21 String sign = request.getParameter("SIGN"); //数字签名 22 //对sign做数字签名校验(信息没有被篡改) 23 //商户业务逻辑处理、入库、日志等 24 String returnContent = "UPTRANSEQ_" + uptranSeq; 25 PrintWriter out = response.getWriter(); 26 out.write(returnContent); //回写响应数据
WEB支付的处理主要就是这块,很好理解吧!
至于退款接口,则是需要调用网关提供的WebService接口,如下所示,refundResult就是返回的退款结果了:
1 //Axis 2 refundV2.webservice.ideal.com.RefundServiceFenImplProxy teStub = new RefundServiceFenImplProxy(); 3 String refundResult = teStub.refund(commCode, "", commPwd, oldOrderId, oldOrderPayId, orderRefundId, transamt, reqTime, mac);
最后再记录下,在写一个简单的日志记录类时,本机开发环境的路径中又有空格又有中文。。。这样的话,采用 .getResource("").toURI().getPath() 方法来获取路径,就不怕任何奇特格式的路径了~~~
转载于:https://www.cnblogs.com/maoniu602/p/3656832.html
中国电信翼支付网关接口接入相关推荐
- 中国电信翼支付完成A轮引战 混合所有制改革加速落地
中新网1月14日电 (夏宾)近日,中国电信翼支付公布A轮引战增资结果正式获得央行审批通过.自2018年3月宣布引战以来,中国电信翼支付历时9个月,引入前海母基金.中信建投.东兴证券和中广核资本等四家战 ...
- 获 3.8 亿用户青睐,中国电信翼支付如何数据化运营?
三大运营商之一中国电信旗下第三方支付品牌翼支付,正式与大数据分析公司神策数据签约,走入数据驱动创新金融的新探索阶段. 翼支付成立于 2011 年,是中国电信全资子公司,中国人民银行持牌的第三方支付机构 ...
- 中国电信翼支付2014编程大赛决赛
如果有误,希望可以给我留言,谢谢. 题目详情(只限Java) 给定一串整数,你只能进行两种操作:任选一个整数放到这串数之前,或者这串之后.所有的整数都不相等. 问把这串整数变为由小到大的排好序最少需要 ...
- 又一数据挖掘赛事,在校生专属,翼支付杯来了(直通实习机会)
Datawhale 主办方:中国电信-翼支付,数据挖掘赛事 为了积极研究探索"金融科技FinTech"技术并努力应用到实际业务中,挖掘更多金融科技在实际普惠金融业务的应用方案.由翼 ...
- 银联在线网关支付,快速接入指南
银联在线支付网关是中国银联联合各商业银行为持卡人提供的集成化.综合性互联网支付工具,主要支持输入卡号付款.用户登录支付.网银支付.迷你付(IC卡支付)等多种支付方式,为持卡人提供境内外网上购物支付服务 ...
- 中国电信选择兼容支付标准 翼支付用户达10万
8月9日消息,中国电信相关人士透露,在RFID技术选择上,中国电信在兼顾当前2.45G的市场需求前提下,选择了兼容社会.行业应用的13.56M制式作为自己的发展方向,其推出的"翼机通&quo ...
- 通联互联网支付网关商户接口技术规范
通联互联网支付网关商户接口技术规范 https://wenku.baidu.com/view/777bbd24195f312b3069a55c.html
- 支付宝商户支付接口接入流程
...
- 支付宝花呗接口接入php,蚂蚁金服支付宝花呗分期支付接入实战分享|分分钟钟快速接入demo 企业开通接入花呗支付就是这么easy 想分就分 花呗技术走一波...
" Yuema约吗?一起学技术,一起成长!他山之石,可以攻玉系列" 程序的世界,就是有坑的地方!分享踩坑的心得与体验!每天分享一点点! 关注公众号,可获取每日分享!小手点点,即可关 ...
最新文章
- java 关键字(面试题)
- 第1课第4.4节_Android硬件访问服务编写HAL代码
- PHP的学习--PHP的引用
- winlogon.exe错误:小心设置搜狗拼音输入法
- sql作业启停服务器
- 如何找到Windows 7或8家庭组密码?
- 02 算术、字符串与变量(1)
- 【离散数学】幂集的求解
- SpringBoot2.0 基础案例(17):自定义启动页,项目打包和指定运行环境
- IIC协议详解,附单片机软件模拟源码
- Warning: phpinfo() has been disabled for secur...
- 计算机pdf转换word,PDF怎么转换成Word?解决PDF转Word的小妙招
- vgs是什么意思有什么用_Linux中vgs命令起什么作用呢?
- Arduino:数码管显示原理详解和Proteus仿真实验
- 【东方幻想乡系列模拟赛 Stage 4】 河城荷取
- jetson nano 报错Illegal instruction(core dumped)
- linux bios 禁用usb设备,当USB在UEFI / BIOS中工作时,为什么USB在Linux中不工作?
- 百度竞价推广中的,28定律是什么?
- anaconda安装rdkit安装指南
- python 文件操作 os模块和shutil模块
热门文章
- linux 硬盘报错日志,Linux内核I/O系统报错日志与硬盘故障对应关系
- java.lang.IllegalStateException: stream has already been operated upon or closed
- 一个牛人给JAVA初学者的建议(很受用)
- 从微信跳转第三方app:在微信打开h5页面后,点击触发跳转自己app指定页面
- 个人管理:“唐僧”之五项修炼
- cdr对象管理器怎么用_CDR新手必看之对象管理的方法
- Why Would I Ever
- lol怎么显示连接服务器失败怎么回事,lol为什么有网无法连接服务器失败
- 将Hexo个人博客部署到个人云服务器--最详细踩坑教程
- 论文阅读 Learning Motion in Feature Space: Locally-Consistent Deformable Convolution Networks