JAVA银联支付说明
- 格式:doc
- 大小:30.50 KB
- 文档页数:4
java关于支付的面试题Java是一门广泛应用于支付领域的编程语言,许多公司在招聘开发者时都会提出与支付相关的面试题。
本文将介绍一些常见的Java支付面试题,并给出详细的答案和解析。
1. 什么是Java支付接口?Java支付接口是指用于与第三方支付平台进行交互的工具或类库。
通过调用这些接口,我们可以实现支付功能,包括生成支付订单、支付结果的回调处理、退款等操作。
Java支付接口通常包括SDK、API 和支付网关等。
2. 如何调用支付接口实现支付功能?要实现支付功能,我们首先需要选择合适的支付接口,例如支付宝支付接口或微信支付接口。
一般而言,我们需要在自己的Java项目中引入相关的支付SDK或API,并根据提供的接口文档进行调用。
以支付宝支付为例,我们可以使用支付宝提供的Java SDK,在代码中按照接口文档的要求进行配置和调用,如生成支付链接、处理支付回调等。
3. 如何处理支付回调?支付回调是指支付平台在支付完成后通知我们平台支付结果的一种方式。
为了确保支付的安全性和准确性,我们需要及时处理支付回调并验证支付结果。
在Java中,可以通过编写一个接收支付回调通知的服务端接口来处理支付回调。
当支付平台发送回调通知时,我们的服务端接口会接收到通知,并根据支付平台提供的文档进行验证、解析支付结果。
接收到支付结果后,我们可以进行相应的业务逻辑处理,例如修改订单状态、发送支付成功的通知等。
4. 如何保证支付安全性?在支付过程中,安全性是非常重要的。
以下是几个常用的保证支付安全性的方法:4.1 使用HTTPS协议:HTTPS协议可以保证数据加密传输,防止敏感信息被窃取。
4.2 接口参数签名:在请求支付接口时,一般会使用签名算法对请求参数进行签名。
支付平台会提供相应的签名算法和密钥,我们需要按照要求对参数进行签名,并将签名结果放入请求参数中,支付平台在收到请求后会对签名进行验证,以确保支付请求的完整性和真实性。
java支付路由规则代码实现在Java中实现支付路由规则,通常涉及到解析支付请求,根据特定的规则(例如最低费率、服务可用性等)选择一个支付网关或服务。
下面是一个简单的例子,演示了如何实现这个过程。
假设我们有一个`PaymentGateway`接口,表示支付网关:```javapublic interface PaymentGateway {String NAME = "Payment Gateway";boolean isAvailable();double getFeeRate();void processPayment(PaymentRequest request);}```然后,我们创建几个实现这个接口的类,表示不同的支付网关:```javapublic class PaymentGatewayA implements PaymentGateway { Overridepublic boolean isAvailable() {return true;}Overridepublic double getFeeRate() {return ; // 2% fee rate}Overridepublic void processPayment(PaymentRequest request) {// Implement payment processing logic here}}public class PaymentGatewayB implements PaymentGateway {Overridepublic boolean isAvailable() {return true;}Overridepublic double getFeeRate() {return ; // % fee rate}Overridepublic void processPayment(PaymentRequest request) {// Implement payment processing logic here}}```接下来,我们可以创建一个`PaymentRouter`类,实现支付路由规则:```javaimport ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ;import ; // uncomment for Java 8 and above (or use your favorite library) for Stream API support in this code snippet only! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream APIsupport! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in thiscode snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code snippet! If you use Java 8, remove the comments from the import statements for Stream API support! Java 8 has no support for Stream API in this code。
网上支付平台商户开发指南(JAVA版)中国邮政储蓄银行有限责任公司文档修改记录版本日期说明编写审核1.0 2009-11-1 形成初稿csii 陈宜1.6 2010-3-20 更新接口说明csii 陈宜2.0 2010-11-1 更新商户开发包,更新文档与接口说明csii目录1 概述 (5)1.1 文档说明 (5)1.2 版本说明 (5)1.3 阅读对象 (5)2 系统概述 (5)2.1 定义 (5)2.2 支付流程简述 (6)2.3 退货、查询及对帐文件下载流程 (7)2.4 对帐文件格式 (8)2.5 安全控制 (8)3 开发准备 (8)3.1 环境要求 (8)3.2 开发包文件清单 (9)3.3 商户数字证书安装步骤 (9)3.3.1 说明 (9)3.3.2 准备工作 (9)3.3.3 获得证书 (10)3.3.4 商户密钥容器文件—“psbc_merchant.jks” (10)3.3.5 商户密钥容器属性文件—“psbc_merchant.properties” (12)3.3.6 将密钥导入商户密钥容器文件—“psbc_merchant.jks” (12)3.3.7 修改密钥容器的密码 (14)3.3.8 导出商户证书 (14)3.3.9 将商户证书通过网上银行安全传递给银行 (16)3.4 商户数字证书私钥更新步骤 (16)3.4.1 删除旧的商户数字签名证书 (16)3.4.2 导入新的商户数字签名证书 (17)3.4.3 上传商户证书 (17)3.5 银行支付平台证书更新步骤 (17)3.5.1 删除银行支付平台证书 (17)3.5.2 导入银行支付平台证书 (17)4 签名及验签开发指引 (18)4.1 软件包接口说明 (18)4.1.1 签名方法 (18)4.1.2 验签方法 (19)4.2 签名及验签的调用 (19)4.3 应用部署 (19)5 交易接口描述 (19)5.1 基本交易要素 (20)5.1.1 输入要素 (20)5.1.2 交易提交URL (21)5.2 交易方式 (22)5.2.1 如何编写https页面交易接口 (22)5.2.2 如何编写https指令交易接口 (23)5.3 交易说明 (24)5.3.1 支付交易(IPER) (24)5.3.2 退货交易(IPSR) (29)5.3.3 单笔查询(IQSR) (30)5.3.4 多笔查询(BQSR) (31)5.3.5 下载对帐文件(IDFR) (33)6 上线步骤 (35)6.1 签订业务协议 (35)6.2 开户 (35)6.3 开通公司网银 (35)6.4 申请并下载公司网银证书 (35)6.5 开通银行支付平台 (36)6.6 申请并下载银行支付平台证书 (36)6.7 配置数字证书 (36)6.8 上传商户证书 (36)6.9 配置生产环境URL (36)6.10 试运行 (36)7 商户管理系统使用说明 (37)7.1 登录商户管理系统 (37)7.2 商户端证书公钥的上传 (39)7.3 支付功能的开通/关闭 (39)7.4 关联账户余额查询 (39)7.5 关联账户明细查询 (40)7.6 支付交易查询 (41)7.7 对账文件下载 (41)7.8 单笔退货 (42)7.9 批量退货 (42)7.10 批量退货结果文件下载 (43)8 结算说明 (43)1概述1.1 文档说明网上支付业务中,商户是进行商品售出的一方,客户是进行商品购买和货款支付的一方,邮政储蓄银行支付平台是为客户的购买行为进行支付的一方,以下简称银行支付平台。
银联⽀付接⼝常见错误总结常见接⼊问题及解答1) 开发过程中,报157错误。
答:看下GATEID是不是写了0001,如果是的话,把0001删掉。
2) ⽹上⽀付后,点提交时,页⾯提⽰:标准数据域不能为空怎么办?答:商户⾃⾏检查各条程序是否按照《NetPayClient ⽤户⼿册》⾥的内容来编写。
当出现该条提⽰时,表⽰编程⼈员没有按照⼿册⾥的程序来编写,出现诸如拼写错误、漏输重要数据等低级错误。
提醒商户⾃⾏检查以下重要参数:MerId, OrdId, TransAmt, CuryId, TransDate, TransType,及和这⼏个重要参数有关的所有程序。
典型案例:某公司编程⼈员在编写时输⼊:……<input type=hidden name=”cruyId” value=”156”>……⽽正确的应该为:<input type=hidden name=”curyId” value=”156”>。
由于⼀个单词的错误,造成数据读取时⽆法读取原有的重要信息,即找不到curyId所包含的重要参数造成页⾯提⽰标准数据域不能为空。
3) 商户在测试过程中报“错误500”如何解决?答:该错误为系统错误,属于程序编写错误,测试提交地址和正式提交地址搞混导致。
典型案例:程序编写时输⼊:…………4) 商户出现-109错误怎么办?答:-109错误表⽰加密不成功,可能由多种问题导致。
当前遇到的主要原因是商户在开发过程中使⽤的签名⽅式不正确,导致⽆法签名成功。
在这⾥,需要提醒商户注意接⼝版本号的问题,20070129的版本号和20040916的版本号在开发上是不同的,采⽤错误的签名格式,会导致⽆法正确签名,请商户认真阅读操作⽂档第21页~25页的相关说明。
07版本需要通过对⼀串字符串签名来实现。
具体区别如下:接⼝类型2004091620070129发送交易NetPayClient for Java signOrder signNetPayClient for Win32sign signDataNetPayClient for C signOrder signData接收交易NetPayClient for Java verifyTransResponse verifyTransResponseNetPayClient for Win32check checkNetPayClient for C verifyTransResponse verifyTransResponse遇到该错误时,可以⽤2.1中提到的⽅法,为⽤户检查发送代码的情况。
银联聚合支付操作流程银联聚合支付操作流程随着移动支付的普及和便利性的提升,银联聚合支付成为了越来越多商家和消费者的首选支付方式。
本文将介绍银联聚合支付的操作流程,以帮助读者了解如何进行这一支付方式。
一、支付接入准备首先,商家需要确保自己已经申请开通了银联在线支付服务并获得了商户号。
商户号是银联为商家生成的唯一标识,用于识别商家身份以及对接支付系统。
商家还需要根据自己的实际情况选择合适的支付接入方式。
银联聚合支付提供了多种接入方式,包括网页支付、手机网页支付、APP支付等。
商家可以根据自己的业务特点和用户需求选择最为适合的接入方式。
二、支付接入流程1. 商家接入商家需要开发人员根据银联提供的接口文档,将银联的支付接口集成到自己的系统当中。
接入方式多样,可以根据实际情况选择适合的接口和技术方案。
2. 用户下单当用户在商家的网页或者APP上选择了要购买的商品后,商家将用户选择的商品信息传递给银联支付系统,生成订单并返回给商家系统。
3. 用户支付商家将订单信息展示给用户,用户选择支付方式并完成支付操作。
银联聚合支付支持多种支付方式,如银行卡支付、支付宝、微信支付等,用户可以根据自己的需求选择最为便捷的支付方式。
4. 支付结果通知在用户支付完成后,银联支付系统将支付结果通知商家系统。
商家可以根据支付结果进行订单状态的更新和后续的业务处理。
5. 数据对账为了确保交易的准确性和可靠性,商家需要定期对账。
银联支付系统会提供对账文件供商家下载,商家可以将对账文件导入到自己的系统中进行对账操作。
6. 结算商家根据银联支付系统提供的对账数据和结算规则,进行结算操作。
银联聚合支付支持按日结算、T+1结算等不同的结算方式,商户根据自己的实际情况选择最为合适的结算方式。
三、支付安全保障银联聚合支付注重用户支付的安全性和保障,采取了多种安全措施来保护用户和商家的权益。
其中,商家需要注意以下几个方面:1. 风控策略商户可以根据自身业务情况设置相应的风控策略,以减少支付风险。
银联支付流程银联支付流程是指通过银联网络进行支付的步骤和流程。
银联支付是一种方便快捷且安全的支付方式,广泛应用于各个领域。
下面将为大家介绍一下银联支付的流程。
首先,用户需要选择使用银联支付的商家或者服务提供商,确保该商家或者服务提供商支持银联支付方式。
一般情况下,商家或者服务提供商在收款处会标有银联支付的标识。
接下来,用户需要选择购买的商品或者服务。
一旦选定了商品或者服务,用户需告知商家或者服务提供商选择使用银联支付,然后商家会提供一个二维码或者条形码给用户扫描。
然后,用户打开手机上安装的银联支付应用,点击扫码功能,对准商家提供的二维码或者条形码进行扫描。
银联支付应用会自动识别二维码或者条形码的信息。
接下来,用户需要输入支付密码进行验证。
支付密码是用户在银联支付应用中设定的密码,用于保护用户的支付安全。
输入正确的支付密码后,用户需要确认支付金额和收款人的信息。
最后,用户点击确认支付按钮,银联支付应用会向商家或者服务提供商发送支付请求。
商家接收到支付请求后会进行验证,确认支付金额和收款人的信息无误后,商家会提交支付请求给银联网络。
银联网络会对支付请求进行处理,连接用户的银行账户和商家的收款账户。
银联网络会向用户所属的发卡银行发送支付指令,并等待发卡银行的确认。
发卡银行收到支付指令后,会进行账户余额的确认和支付密码的验证。
如果账户余额充足且支付密码正确,发卡银行会向银联网络发送支付确认信息。
银联网络收到支付确认信息后,会向商家或者服务提供商发送支付成功的通知。
商家或者服务提供商收到支付成功的通知后,会向用户提供购买的商品或者服务。
整个银联支付流程从用户扫码到商家确认支付成功一般只需要几秒钟的时间。
银联支付流程简便快捷,且安全可靠,因此被广大用户所喜爱和使用。
综上所述,银联支付流程包括选择商家和商品、扫码支付、验证支付密码、确认支付金额和收款人信息、确认支付、等待支付确认和通知商家等步骤。
银联支付方便快捷且安全可靠,对于电子商务和移动支付的发展起到了重要的推动作用。
NetPayClient用户手册(V ersion: 2.5.3)上海银联电子支付服务有限公司地址:延安西路2299号上海世贸商城大厦19楼1901-1905室(200336) Tel: (86-021)52504528 Fax: (86-021)62361165 Website: ©Copyright 2004.08 ChinaPay e-Payment Service Co.,Ltd. All rights reserved目录1.ChinaPay简介 (3)2.前言 (3)2.1.目的 (3)3.总述 (3)3.1.使用对象 (3)3.2.运行及开发环境 (4)3.3.术语 (4)3.4.基本概念 (5)3.4.1.公钥密码体系(Public-key Cryptography) (5)3.4.2.隐秘钥密码体系(Secret-key Cryptography) (6)3.4.3.摘要算法 (6)3.4.4.数字签名 (7)3.4.5.数字信封 (8)3.5.客户端NetPayClient在各系统下的安装及调用 (9)3.5.1.说明 (9)PayClient for Java 使用说明 (9)PayClient for Win32使用说明 (12)PayClient for C使用说明 (17)4.支付 (25)4.1.目标 (25)4.2.交易流程 (25)4.3.接入方法 (25)4.3.1.接入地址 (25)4.3.2.接入版本 (25)5.退款 (29)5.1.目标 (29)5.2.处理流程 (29)5.3.接入方法 (30)5.3.1.接入地址 (30)5.3.2.接入版本 (30)6.查询 (32)6.1.目标 (32)6.2.处理流程 (32)6.3.接入方法 (33)6.3.1.接入地址 (33)6.3.2.接入版本 (33)附录A常见接入问题及解答 (35)附录B 应答码说明 (35)ChinaPay交易状态码 (35)NetPayClient API函数错误代码 (35)查询,单笔退款错误代码 (36)1.ChinaPay简介CHINAPAY致力于发展中国金融电子支付服务。
银联手机支付用户手册一.银联手机支付银联手机支付为您提供便捷的手机支付服务,只需插入智能存储卡,您的手机就会成为您口袋里的个人银行,随时随地登录手机支付商务平台,让生活更简单,时尚,便捷。
新手上手指南银联手机支付的特点安全领先金融行业的高级别智能安全专利技术,保障信息安全万无一失。
硬件级加密,彻底杜绝木马、病毒、假网站、黑客等各种风险。
中国银联及国家银行卡检测中心权威认证。
便捷在手机网络信号的覆盖区域,即可随时、随地、随心的使用手机支付服务,如购买数字商品、完成手机充值、水电气缴费等功能。
采用手机客户端方式,界面友好,操作简单。
注意:智能存储卡不可以格式化,以免造成卡的损坏。
二.智能存储卡使用方法安装设置S40系统:安装和转存:用户启动手机,进入手机【功能表】→【百宝箱】→【存储卡】→【手机支付版本】→【Java】→【签名版】→选中【手机支付】,点击左选择键【操作】→【转存】,然后选择转存至【百宝箱】或者【应用软件】下的【收藏】目录下即可。
为什么需要安装和转存:为确保客户端软件的正常升级和使用,必须将其转存至手机内存中。
设置:手机【功能表】→【百宝箱】或【应用软件】→【收藏】,选择【手机支付】并点击【操作】→【应用软件接入】进行如下设置:应用软件接入→通讯→网络接入→选择“总是允许”应用软件接入→数据接入→读取用户数据→选择“总是允许”应用软件接入→数据接入→增加和编辑数据→选择“总是允许”设置成功后,再进入程序将不会再提示是否允许访问数据的诸多提示,使用更方便。
S60系统:安装:用户启动手机,进入【功能表】→【应用程序】→【文件管理】→【E:存储卡】→【手机支付版本】,V3手机进入【S60_V3】选择【S60_V3_1_7.sisx】,V5手机进入【S60_V5】选择【S60_V5_1_7.sisx】,根据手机安装步骤依次操作并将手机客户端软件安装在手机本地。
设置:用户进入手机【功能表】→【设置】→【程序管理】,选择【手机支付】并点击【选项】→【打开】,分别将【读取用户数据】和【增加和编辑数据】设置为【总是允许】。
二 公共支付平台1.公共支付平台简称PPP ,即Public Payment Platform ,银联用于接收、处理和转发公共支付交易的系统,一端通过CUPS 连接成员银行,一端为SP 、渠道、终端等提供接入途径。
2.公共支付平台的结构如下:(1) 中间业务平台发送各类报文(签到,余额查询,,消费,消费撤销,冲正等)到公共支付平台。
(2) 公共支付平台对报文进行相应的记录和处理,根据业务逻辑生成应答报文到工行或者生成转发报文到cups 。
(3) Cups 处理后生成应答公共支付平台或者转发给成员机构处理。
三项目用到的报文结构1. 报文结构说明交易报文包含两个组成部分:报文长度和应用数据。
其结构如下图所示:报文长度占4个字节,是以ASCII码表示的十进制数,右靠左补‘0’。
应用数据各个域结构和标准的2.0报文一致(该报文除了没有报文头外,其他格式和2.0报文结构一致)。
2. 域结构各个域结构请参考附件《2.0域结构描述》。
3. 接口报文说明网络报文主要涉及到签到报文;扣费报文主要是余额查询报文和扣费报文、扣费撤销,冲正;各个报文格式如下:(1)签到48域说明:注:对于单倍长的密钥,前12个字节为PIN的工作密钥的密文,后12个字节为MAC的工作密钥的密文(其中,前8个字节是密文,后4个字节使checkvalue;前8个字节解出明文后,对8个数值0做des,取结果的前四位与checkvalue 的值比较应该是一致的)。
对于双倍长密钥算法,前20个字节为PIN的工作密钥的密文,后12个字节为MAC的工作密钥的密文(其中,“PIN工作密钥”前16个字节是密文,后4个字节是checkvalue;前16个字节解出明文后,对8个数值0做双倍长密钥算法,取结果的前四位与checkvalue 的值比较应该是一致的;“MAC工作密钥”前8个字节是密文,再8个字节是二进制零,后4个字节是checkvalue;前8个字节解出明文后,对8个数值0做单倍长密钥算法,取结果的前四位与checkvalue 的值比较应该是一致的)。
银联付款码正则表达式可能因不同的支付系统和银行而异,但一般来说,它可能包括以下内容:
1. 支付金额:匹配支付金额的格式,如“[1-9][0-9]{4,20}$”表示支付金额在4到20位数字之间。
2. 支付方式:匹配支付方式的格式,如“银联”或“信用卡”。
3. 校验码:匹配校验码,如“[A-Z]{6}$”表示最后一位是字母且长度为6。
一个基本的银联付款码正则表达式可能如下:
```regex
^[1-9][0-9]{4,20}(\s[A-Z]{6})?$
```
这个表达式的主要部分解释如下:
* `^` 表示从字符串开始。
* `[1-9][0-9]{4,20}` 匹配以一个介于1和9之间的数字开头,后面跟着4到20位数字的字符串,这部分对应于支付金额。
* `(\s[A-Z]{6})?` 是一个可选的分组,它匹配一个空格和一个长度为6的字母串(可能是校验码)。
由于校验码可能不存在,所以这是一个可选的匹配。
* `$` 表示字符串结束。
请注意,这只是一个基本的表达式,可能无法覆盖所有情况。
具体的正则表达式将取决于具体的支付系统和银行。
另外,某些情况可能需要特定的补充规则。
以上就是一个关于银联付款码正则表达式的简单介绍,800字的内容差不多就是以上这些。
如果您需要更详细或者更具体的内容,建议您查阅相关支付系统的官方文档或者咨询专业的技术人员。
主题:Java中的支付策略模式和模板方法随着互联网的快速发展,电子商务成为人们生活中不可或缺的一部分。
而支付功能是电子商务中至关重要的一环,其安全性和稳定性直接关系到用户的购物体验和信任度。
在Java开发中,为了提高支付功能的灵活性和可扩展性,支付策略模式和模板方法成为了常用的设计模式。
一、支付策略模式1.1 定义和特点支付策略模式是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,并使它们可以相互替换。
这种模式使得算法可以独立于使用它的客户端而变化。
1.2 实现方式在Java中实现支付策略模式,首先需要定义一个支付策略接口,然后针对不同的支付方式(如支付宝、信信、银联等)分别实现具体的支付策略类。
客户端根据具体的支付方式选择相应的支付策略类进行支付操作。
1.3 优点和适用场景支付策略模式可以方便地扩展新的支付方式,而不影响原有的支付逻辑,使得支付功能更具灵活性和可维护性。
适用于需要支持多种支付方式的场景,如电子商务评台。
二、模板方法2.1 定义和特点模板方法是一种行为设计模式,它定义了一个算法的骨架,将算法中的某些步骤延迟到子类中实现。
模板方法使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤。
2.2 实现方式在Java中实现模板方法,首先需要定义一个抽象类,该抽象类包含模板方法和需要延迟到子类实现的抽象方法。
子类继承抽象类并实现抽象方法,从而完成算法中特定的步骤。
2.3 优点和适用场景模板方法将算法的骨架和具体的实现分离,使得算法结构更清晰,易于理解和维护。
适用于需要定义算法的框架和具体步骤的场景,如支付流程中的订单查询、支付结果通知等。
三、支付策略模式与模板方法的结合3.1 设计思路在实际的支付功能中,支付策略模式和模板方法可以结合使用。
通过支付策略模式实现不同支付方式的灵活切换,同时通过模板方法定义支付流程的骨架和具体步骤,使得支付功能更加稳定和可扩展。
3.2 实现方式在Java开发中,可以先定义支付策略接口和具体的支付策略类,针对每种支付方式实现不同的支付逻辑。
商户服务器接口说明文档2012年7月9日签名定义➢生成签名◆定义:商户端用银联分配的商户数字证书对交易信息的签名,防止交易被篡改加密函数:BASE64(RSA(MD5(SRC),privatekey))◆参照:代码中SignBy.java中的createSign方法。
(方法参数:签名原串SRC、密码、私钥假名、私钥路径。
)订单支付接口(必备)◆定义:由“订单提交”和“订单支付”两部分组成。
➢提交订单◆定义:本接口用于商户服务器向前置服务器提交订单详情。
◆功能:服务器将指定报文及标准数据提交至前置服务器进行验签,验签成功后,前置会返回相关数据,提示操作成功。
其中签名原串为:➢订单验证:◆定义:本接口用于商户客户端和插件进行数据验证操作。
◆功能:商户客户端,在接收到商户服务器传来的标准xml后,用其按照指定方式调起插件,插件通过相关数据验证,对其xml进行数据验证操作。
其中,签名原串为:订单查询接口(必备)◆定义:用于插件根据商户号、订单号、交易时间等信息,或使用CUPS流水号来查询商户订单详细处理信息◆功能:用于商户对订单信息进行查询和验证✧商户向银联平台发起的请求报文如下银联在线支付平台返回给商户的响应报文如下订单退货接口(可选)◆定义:已提交成功的订单,采取的人为退订的一个过程◆功能:给与商户对商品提供退货的的功能,通过如下报文6节点签名传给服务器,最后由银联支付平台返回结果通知(0000成功,其他表示失败)◆注意:1.新商户订单号是指就是新生成的商户订单号,而不是原来的订单号,原交易流水号是指交易结果通知中的交易流水号✧商户发送到服务器的请求报文如下✧银联手机在线支付平台返给商户的响应报文如下订单撤销接口(可选)◆定义:已提交的订单产品采取撤销的操作,24小时内可以撤销订单有效,超时无效◆功能:实现已订产品的撤销操作◆注意:1.新商户订单号是指就是新生成的商户订单号,而不是原来的订单号,原交易流水号是指交易结果通知中的交易流水号✧商户发送到服务器的请求报文如下银联手机在线支付平台返给商户的响应报文如下。
Java版支付宝支付功能整理文档 (2)一、引用文件 (2)1、基础配置类:AlipayConfig.java (2)2、支付宝MD5签名处理核心文件:MD5.java (4)3、支付宝接口公用函数类:AlipayCore.java (5)4、支付宝通知处理类:AlipayNotify.java (9)5、支付宝各接口请求提交类:AlipaySubmit.java (12)6.自定义订单类:UtilDate.java (16)7.HttpClient方式访问:HttpProtocolHandler.java (17)8、Http请求对象的封装:HttpRequest.java (23)9、Http返回对象的封装:HttpResponse.java (27)10、表示Http返回的结果字符方式:HttpResultType.java (29)二、Controller处理方法 (30)1、支付宝PC端支付(即时到账) (30)(1、)支付方法 (30)(2、)支付成功后的同步调用 (31)(4、)支付成功后的异步调用 (33)2、支付宝手机网页支付 (35)(1、)支付方法 (35)(2、)支付成功后的同步调用 (37)(4、) 支付成功后的异步调用 (37)三、页面代码 (37)1、跳转页面:alipay.jsp和alipaywap.jsp (37)2、同步调用页面:return_url.jsp (38)3、异步调用页面:notify_url.jsp (38)Java版支付宝支付功能整理文档作者:Lock-玄清时间:2017-03-15注:此文档只支持付款,没有退款的功能一、引用文件1、基础配置类:AlipayConfig.javapackage com.alipay.config;/* **类名:AlipayConfig*功能:基础配置类*详细:设置帐户有关信息及返回路径*版本:3.4*修改日期:2016-03-08*说明:*以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己网站的需要,按照技术文档编写,并非一定要使用该代码。
银联⽀付⽀付代码_rowSelect = 2 银联⽀付下⽅是所有的⽀付代码#pragma mark 第三⽀付- (void)postUpload{NSString *channel;switch (_rowSelect) {case 0:channel = @"wx";self.channel = channel;break;case 1:channel = @"alipay";self.channel = channel;break;case 2:channel = @"upacp";self.channel = channel;break;case 3:{channel = @"supervip";self.channel = channel;[self issetpaypwdApiWith:0];return;}break;default:break;}// 1. url - 负责上传的脚本NSString *urlStr = [NSString stringWithFormat:@"%@soonpay/payForOrder.json",BASE_MALL_URL];NSURL *url = [NSURL URLWithString:urlStr];// 2. requestNSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];int price = round(_amount*100);// 3. 上传⽂件的参数NSDictionary *dict;if ([channel isEqualToString:@"supervip"]) {dict = @{@"order_no":_orderNo,@"amount":@(price),@"channel":channel,@"cardNum":self.accountInfo.cardNum};}else{dict = @{@"order_no":_orderNo,@"amount":@(price),@"channel":channel};}[SoonProgressHUD show];NSData* data = [NSJSONSerialization dataWithJSONObject:dict options:NSJSONWritingPrettyPrinted error:nil];NSString *bodyData = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];[request setHTTPBody:[NSData dataWithBytes:[bodyData UTF8String] length:strlen([bodyData UTF8String])]];[request setHTTPMethod:@"POST"];[request setValue:@"application/json; charset=utf-8" forHTTPHeaderField:@"Content-Type"];NSOperationQueue *queue = [[NSOperationQueue alloc] init];[NSURLConnection sendAsynchronousRequest:request queue:queue completionHandler:^(NSURLResponse *response2, NSData *data, NSError *connectionError) { dispatch_async(dispatch_get_main_queue(), ^{[SoonProgressHUD dismiss];});NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL]);id responseObject = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];NSString *msg = responseObject[@"msg"];if (msg.length>0) {dispatch_async(dispatch_get_main_queue(), ^{[[TKAlertCenter shareInstance] postAlertWithMessage:msg];[_footerView setButtonStatus:TRUE];});return;}PayInfo *payInfo;// if (_rowSelect!=0) {payInfo = [PayInfo objectWithKeyValues:responseObject];// }if (_notSupportSoonPay == 0) {switch (_rowSelect) {case 3:break;case 0:{Wechat *wechat = payInfo.credential.wx;//调起微信⽀付PayReq* req = [[PayReq alloc] init];req.openID = wechat.appId;req.partnerId = wechat.partnerId;req.prepayId = wechat.prepayId;req.nonceStr = wechat.nonceStr;req.timeStamp = [wechat.timeStamp intValue];req.package = wechat.packageValue;req.sign = wechat.sign;[WXApi sendReq:req];}break;case 1:{[[AlipaySDK defaultService] payOrder:payInfo.credential.alipay.orderInfo fromScheme:@"O2O" callback:^(NSDictionary *resultDic) { DLog(@"resultDic = %@", resultDic);int resultStatus = [resultDic[@"resultStatus"] intValue];if (resultStatus==9000) {_isSuccess = 1;}else {_isSuccess = 0;}[self pingSuccessOrFail];}];}break;case 2:{Upacp *upacp = payInfo.credential.upacp;NSString *mode = upacp.mode;NSString *tn = upacp.tn;[UPPayPlugin startPay:tn mode:mode viewController:self delegate:self];}break;default:break;}}else{switch (_rowSelect) {case 0:{Wechat *wechat = payInfo.credential.wx;//调起微信⽀付PayReq* req = [[PayReq alloc] init];req.openID = wechat.appId;req.partnerId = wechat.partnerId;req.prepayId = wechat.prepayId;req.nonceStr = wechat.nonceStr;req.timeStamp = [wechat.timeStamp intValue];req.package = wechat.packageValue;req.sign = wechat.sign;[WXApi sendReq:req];}break;case 1:{[[AlipaySDK defaultService] payOrder:payInfo.credential.alipay.orderInfo fromScheme:@"O2O" callback:^(NSDictionary *resultDic) { DLog(@"resultDic = %@", resultDic);int resultStatus = [resultDic[@"resultStatus"] intValue];if (resultStatus==9000) {_isSuccess = 1;}else {_isSuccess = 0;}[self pingSuccessOrFail];}];}break;case 2:{Upacp *upacp = payInfo.credential.upacp;NSString *mode = upacp.mode;NSString *tn = upacp.tn;[UPPayPlugin startPay:tn mode:mode viewController:self delegate:self]; }break;default:break;}}}];}。
1如何接入网关测试环境A:技术人员在本地开发环境,加载压缩包中的程序代码;B:找到程序代码中的post.html,修改merchantId、key、pickupUrl、receiveUrl、orderNo (唯一的,订单号不可以重复);C:action提交地址为通联测试地址(邮件正文地址);D: 在receiveUrl接收页面加后台处理代码;E:将证书放至指定目录。
做好以上准备工作后,即可在本地进行测试测试环境支付时仅有虚拟银行,虚拟银行的卡号和密码为任意数字。
2服务器环境要求1.Java环境1) 环境准备,JDK1.4以上。
2) 安装MPI:拷贝allinpay-security-xxx.jar、及与JDK版本对应的bcprov-jdkxx-xxx.jar到开发环境的classpath 目录下。
2.ASP和dotNet环境1) 环境准备。
2) 安装MPI:确保Microsoft .NET Framework2.0已安装;执行regasm /codebase 命令向操作系统注册ETSClient.dll文件,并将BouncyCastle.Crypto.dll 文件放在与ETSClient.dll相同的目录下;配置文件证书(可采用任一配置方式):方式一、商户指定证书路径,验签时需对PaymentResult对象设置证书路径,paymentResult.setCertPath(“指定证书TLCert.cer路径”);方式二、若未指定证书路径,也可拷贝TLCert.cer到%System%\system32目录下,商户需确保有权限访问system32下证书信息;方式三、或者编辑tlprop.ini文件,并保存到%system%目录下,并根据ini文件设置拷贝证书文件到相应目录,tlprop.ini文件内容参看开发包示例。
3.PHP环境windows环境在apache2.0.59 + php4.4.7+mysql下测试通过linux环境在apache2.2.3 + php5.2.13下测试通过确保Apache、php、mysql已正确安装。
JA V A银联支付说明
一、术语
电子商务Electronic Commerce 是指通过信息网络以电子数据信息流通的方式在全世界范围内进行并完成的各种商务活动、交易活动、金融活动和相关的综合服务活动。
网络贸易指在网络平台基础上直接进行在线贸易(Trade Online),利用数字化技术将企业、海关、运输、金融、商检和税务等有关部门有机连接起来,实现从浏览、洽谈、签约、交货到付款等全部或部分业务自动化处理。
网络贸易由信息共享、订购、支付、执行、服务与支持5个部分组成,每个部分在网络贸易中都各自承担了不同的任务
B2C(Business to Consumer) 指企业与消费者之间的电子商务。
这是消费者利用因特网直接参与经济活动的形式,类同于商业电子化的零售服务。
目前,在因特网上有许许多多商各种类型的虚拟商店和虚拟企业,提供各种与商品销售有关的服务。
B2B(Business to Business) 指企业与企业间的电子商务。
企业可以使用因特网或其它网络对每笔交易寻找最佳合作伙伴,完成从丁鸥到结算的全部交易行为,包括向供应商订货、签约、接受发票和使用电子资金转移、信用证、银行托收等方式进行付款,以及在商贸过程中发生的其它问题,如索赔,商品发送管理和运输跟踪等。
商户具有电子商务功能的商店和企业
银行卡商业银行所发行的储蓄卡、信用卡、储值卡、企业购物卡、购物联名卡、虚拟电子卡等支付工具
持卡人银行卡的拥有者
网上支付密码数字串。
发卡行用于鉴别网上持卡人身份,具体产生方法、使用范围和管理规范见各发卡行“业务规范”
发卡行具有发银行卡功能的商业银行。
开户行指持卡人卡账户或企业资金账户所在的商业银行
SSL(Source Socket Layer) 是一种基于网络传输层的安全网络传输协议,实现客户端与服务端间的数据安全传输
二、订单签名函数
1、JA V A语言方法说明:
方法说明:
Public String signOrder(String MerId, String OrId, String TransAmt, String CuryId, String TransDate, String TransType)
参数说明:
String MerId --商户编号,长度为15个字节的数字串,由ChinaPay或清算银行分配。
String OrdId --订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。
String TransAmt --交易金额,长度为12个字节的数字串,例如:0000000000001234表示12.34
String CuryId --货币代码,长度为3个字节的数字串,目前只支持人民币,取值为”156”
String TransDate --交易日期,长度为8个字节的数字串,表示格式为:YYYYMMDD String TransType -- 交易类型,长度为4个字节的数字串,取值范围为:“0001”和“002”
其中“0001”表示消费交易,“0002”表示退货交易
返回值:
String CheckValue[256]--即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的数字串。
三、使用说明商户在消费者发送订单确认页面之前,调用本函数或方法产生订单签名,然后生成订单确认页面,供消费者再次确认订单内容,并允许消费者选择支付或取消订单。
订单确认页面中表单(FORM)的具体例子如下:
<form action=”https:///pay/TransGet” method=post>
<input type=”hidden name=”MerId” value=”123451234512345”>
<input type=”hidden name=”OrdId” value=”000000000000001”>
<input type=”hidden name=”TransAmt” value=”000000001234”>
<input type=”hidden name=”Curyd” value=”156”>
<input type=”hidden name=”TransDate” value=”20150909”>
<input type=”hidden name=”TransType” value=”0001”>
<input type=”hidden name=”Version” value=”20040916”>(接口版本号)
<input type=”hidden name=”BgRetUrl” value=”/pay/payback1.php”>
(后台交易接受URL,长度不要超过80个字节)
<input type=”hidden name=”PageRetUrl” value=”/pay/payback2.php”> (页面交易接受URL,长度不要超过80个字节)
<input type=”hidden name=”GateId” value=”0001”>(支付网关号,可选,建议留空)
<input type=”hidden name=”Priv1” value=”Memo”>(商户私有域,可选,长度不要超过60个字节)
<input type=”hidden name=”ChkValue” value=”X...X”>(256字节长的ASCII)
</form>
注:其中GateId和Priv1为可选项,分别表示”支付网关号”和”保留字段”.如填写GateId(支付网关号),则消费者将直接进入支付页面,否则进入网关选择页面.具体网关见如下:Priv1为商户私有域,商户通过此字段向chinapay发送的信息,chinapay依原样填充返回给商户。
当使用版本号”20040916”时,BgRetUrl和PageRetUrl必须填写。
0001 中国银行
0005 工商银行
0008 农业银行
0009 兴业银行
0010 中国建设银行
0015 民生银行
0016 好易联
0021 华夏银行
四、验证交易应答函数
方法说明:
Public boolean verifyTransResponse(String MerId, String OrdId, String transAmt, String CuryId, String TransDate, String TransType, String OrderStatus, String CheckValue)
参数说明:
String MerId --商户编号,长度为15个字节的数字串,由ChinaPay或清算银行分配。
String OrdId --订单号,长度为16个字节的数字串,由商户系统生成,失败的订单号允许重复支付。
String TransAmt --交易金额,长度为12个字节的数字串,例如:0000000000001234表示12.34
String CuryId --货币代码,长度为3个字节的数字串,目前只支持人民币,取值为”156”
String TransDate --交易日期,长度为8个字节的数字串,表示格式为:YYYYMMDD String TransType -- 交易类型,长度为4个字节的数字串,取值范围为:“0001”和“002”
其中“0001”表示消费交易,“0002”表示退货交易
返回值:
String CheckValue[256]--校验值即NetPayClient根据上述输入参数生成的商户数字签名,长度为256字节的数字串。
返回值:
true--表示成功,即该交易应答为ChinaPay所发送,商户根据“交易状态”进行后续处理;否则表示失败,即无效应答,商户可忽略该应答或记入垃圾箱。
String OrderStatus --交易状态,长度为四个字节的数字串,详见交易状态说明书
五、使用说明:
ChinaPay 一旦收到发卡行的交易应答,会以POST方式实时通知商户交易结果(商户的接受交易结果的URL可以在联网时设定,也可以在交易提交时动态设定)。
商户收到ChinaPay发送的交易应答后,调用本函数或方法验证签名,验证成功表示该交易结果确实来源于ChinaPay,商户予以接受,并进行相关处理。
注:merid,orderno,amount,currencycode,transdate,ttanstype,status,checkvalue
其含义跟上面一一对应。
六、交易状态码说明
Chinapay 交易状态码
1001 消费交易成功
1003 退货交易成功
其他其他均为交易失败,具体信息请登录Chinapay交易控制台查询,或查询各银行出错信息文档
NetPayClient API 函数出错代码
signOrder
-100 环境变量“NPCDIR”未设置
-101 商户密钥文件不存在或无法打开
-102 密钥文件格式错误
-103 商户号长度出错
-105 URL地址长度超过80个字节verifyTransResponse
-109 加密不成功
-112 Chinapay公钥文件不存在或无法打开-113 公钥文件格式错误
-114 网关商户号长度出错
-118 使用错误公钥。