JAVA银联支付说明
java关于支付的面试题
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支付路由规则代码实现在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版V2.1
网上支付平台商户开发指南(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. 风控策略商户可以根据自身业务情况设置相应的风控策略,以减少支付风险。
银联支付流程
银联支付流程银联支付流程是指通过银联网络进行支付的步骤和流程。
银联支付是一种方便快捷且安全的支付方式,广泛应用于各个领域。
下面将为大家介绍一下银联支付的流程。
首先,用户需要选择使用银联支付的商家或者服务提供商,确保该商家或者服务提供商支持银联支付方式。
一般情况下,商家或者服务提供商在收款处会标有银联支付的标识。
接下来,用户需要选择购买的商品或者服务。
一旦选定了商品或者服务,用户需告知商家或者服务提供商选择使用银联支付,然后商家会提供一个二维码或者条形码给用户扫描。
然后,用户打开手机上安装的银联支付应用,点击扫码功能,对准商家提供的二维码或者条形码进行扫描。
银联支付应用会自动识别二维码或者条形码的信息。
接下来,用户需要输入支付密码进行验证。
支付密码是用户在银联支付应用中设定的密码,用于保护用户的支付安全。
输入正确的支付密码后,用户需要确认支付金额和收款人的信息。
最后,用户点击确认支付按钮,银联支付应用会向商家或者服务提供商发送支付请求。
商家接收到支付请求后会进行验证,确认支付金额和收款人的信息无误后,商家会提交支付请求给银联网络。
银联网络会对支付请求进行处理,连接用户的银行账户和商家的收款账户。
银联网络会向用户所属的发卡银行发送支付指令,并等待发卡银行的确认。
发卡银行收到支付指令后,会进行账户余额的确认和支付密码的验证。
如果账户余额充足且支付密码正确,发卡银行会向银联网络发送支付确认信息。
银联网络收到支付确认信息后,会向商家或者服务提供商发送支付成功的通知。
商家或者服务提供商收到支付成功的通知后,会向用户提供购买的商品或者服务。
整个银联支付流程从用户扫码到商家确认支付成功一般只需要几秒钟的时间。
银联支付流程简便快捷,且安全可靠,因此被广大用户所喜爱和使用。
综上所述,银联支付流程包括选择商家和商品、扫码支付、验证支付密码、确认支付金额和收款人信息、确认支付、等待支付确认和通知商家等步骤。
银联支付方便快捷且安全可靠,对于电子商务和移动支付的发展起到了重要的推动作用。
银联互联网快捷支付产品方案介绍
根据用户需求提供定制化的支付解决方案,满足不同行业和场景 的支付需求。
综合金融服务
整合银行、保险、证券等各类金融服务,为用户提供一站式的综 合金融服务体验。
市场拓展
拓展海外市场
积极开拓海外市场,提升银联在国际支付市场的份额和影响力。
合作共赢
与各类金融机构、第三方支付机构等开展合作,共同推动支付产业 的发展。
填写支付信息
用户需要填写正确的支付信息,包括银行卡信息、支付金额等。
确认支付
用户需要确认支付信息无误后,进行支付操作。支付成功后,用户 会收到相应的支付凭证和短信通知。
查询与核对
查询交易记录
用户可以在银联互联网快捷支付平台查 询自己的交易记录,包括支付记录、退 核对自己的银行账户和支付账户 余额,以确保账户信息的准确性和完整性 。
04
产品市场分析
市场需求
用户基数大
随着互联网的普及,越来越多的 人开始使用网上支付,银联互联 网快捷支付产品的潜在用户基数
较大。
便捷性需求
用户对于支付的便捷性需求日益增 长,银联互联网快捷支付产品能够 满足用户快速完成支付的需求。
安全性需求
用户对于支付的安全性非常关注, 银联互联网快捷支付产品采用了多 种安全措施,能够保障用户的资金 安全。
绑定银行卡
01
选择银行卡
用户需要在银联互联网快捷支付 平台选择需要绑定的银行卡,并 填写正确的银行卡信息。
02
03
验证银行卡
确认绑定
用户需要提供银行卡的验证码, 以验证银行卡信息的真实性和准 确性。
用户需要确认绑定银行卡的信息, 并同意相关服务协议,完成银行 卡的绑定操作。
支付操作
银联商户支付接入用户手册
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致力于发展中国金融电子支付服务。
交通银行网上支付平台商户开发编程说明v1.0
交通银行网上支付平台商户开发编程说明 v1.0
点击“确定”,完成证书下载 导出
证书下载完成后,需将 IE 浏览器中的证书以 pfx 文件形式导出,以便 API 软件包调用。 在 IE 浏览器中选择“工具”-> “Internet 选项”->“内容”->“证书”->“个人” 后便可看到商户证书:
第 11 页/共 60 页
交通银行网上支付平台商户开发编程说明 v1.0
4 商户 B2C 订单支付编程
4.1 支付交易流程
B2C 订单支付交易流程图:
客户浏 览器
1. 1 订单银行支付 1.2 订单支付请求
1.3 订单支付请求 2.1 返回支付首页面 2.2 输入卡号/校验码 3.1 签约的支付验证页面 3.2 输入支付密码等验证信息
4.1.4 通知商户支付结果
4.1 若银行后台扣款成功,则依据商户提交的订单接口(见后 2.2)中的“通知方式”内容 对商户进行通知。 “通知方式”内容: a. “不通知”:则直接进入 4.3(获取支付结果)处理流程; b. “通知”:若商户订单信息中有明确的“主动通知 URL”,则支付平台将向该 URL 发送支付结果,得到 http 200 应答则认为通知完成。若未收到应答,则支付平台将在 最大次数内定时轮循重新发送通知。 注:商户若需要银行提供主动通知功能,则商户自身需要具备能够处理重复通知 情况的能力。在支付平台已经成功完成支付结果通知的情况下,允许商户向支付平台 发起再次进行支付结果通知的请求。 c. “取页面”:若商户订单信息中有明确的“主动通知 URL”,则支付平台向该 URL 发送 http 通知,获取商户返回的结果页面并将其显示在 4.3(获取支付结果)中。
JavaPOS功能清单
1) 每台收银机的每次交易都有一个小票的流水号,并不断递增; 2) 可任意设置小票的流水号,且脱网也可以设置; 3) 但只允许系统维护员进行。 只有在前台脱网取不到后台正确的系统时间的情况下才能使用。 只允许系统维护员对本地历史销售数据进行删除 对本地的基础信息库进行整理 收银员更换时,新接班的收银员必须重新以自己的工号与口令登录 收银员暂时离开,收银系统进行锁定状态,并对离开进行计时;键盘有"离开键"可在任何界面进行系统锁定 修改当前登录的收银员口令,必须在联网状态下操作 收银员收款结束,交接班时按钱箱实际收款额输入交款金额,并打印交款单。在后台出长短款报表 结束收银,最后一班收银员关闭收银机下电。如果具有维护权限,收银程序将退出到操作系统。 1、根据后台设置收银员或收银机的收银权限,自动判断某种业务操作能不能进行.包括退货,取消交易,删除交易等,如收银员 没有该权限,自动提示刷授权卡 2、所有的功能菜单可通过收银员角色进行定义,收银员登陆后只显示自己的功能菜单 收银员登录以后输入备用金,该金额计入钱箱当前现金存量 每天第一次开机POSSERVER的日终基础数据以便脱网使用,同时定时自动从后台取当日的增量的信息更新本地数据库 1、后台管理人员可以通过POS管理程序向某一台收银机发送消息,例:"请你到办公室来" POS机在联网状态下可定时自动检测并弹出窗口提示收银员 2、后台管理人员可以通过POS管理程序向某一台收银机发送一系列指令包括:重传小票,命令关机,发送收银机状态等. POS在在联网状态下可定时自动接收这些指令并作出相应的处理 收银员可通过按"呼叫键"选择事先预定义的各呼叫内容,呼叫后台维护人员,该信息会及时反映到收银监控中
顾客信息采集 交易小票打印 收银练习 收银红冲 批发开票 收银员销售统计 营业员销售统计
银联手机支付用户手册
银联手机支付用户手册一.银联手机支付银联手机支付为您提供便捷的手机支付服务,只需插入智能存储卡,您的手机就会成为您口袋里的个人银行,随时随地登录手机支付商务平台,让生活更简单,时尚,便捷。
新手上手指南银联手机支付的特点安全领先金融行业的高级别智能安全专利技术,保障信息安全万无一失。
硬件级加密,彻底杜绝木马、病毒、假网站、黑客等各种风险。
中国银联及国家银行卡检测中心权威认证。
便捷在手机网络信号的覆盖区域,即可随时、随地、随心的使用手机支付服务,如购买数字商品、完成手机充值、水电气缴费等功能。
采用手机客户端方式,界面友好,操作简单。
注意:智能存储卡不可以格式化,以免造成卡的损坏。
二.智能存储卡使用方法安装设置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字的内容差不多就是以上这些。
如果您需要更详细或者更具体的内容,建议您查阅相关支付系统的官方文档或者咨询专业的技术人员。
银联代收代付业务演示课件
资金划拨 结算与报告
04
银联代收代付业务安全保障
安全保障措施
数据加密传输
风险交易监控
多重身份验证 数据备份与恢复
风险控制措施
限额管理 根据用户风险承受能力和交易历史设 定交易限额,防止大额损失。
黑名单管理
将可疑或不良用户列入黑名单,禁止 其进行交易。
反洗钱监控
对可疑资金流动进行监控,及时上报 可疑交易。
通过银联网络,向指定 账户发起收款或付款指令。
交易成功后,银行将交 易结果通知商户或用户, 并完成资金清算。
02
银联代收业务
代收业务概述
代收业务是指银行或支付机构接 受客户委托,在约定的时间和范 围内,代替客户收取或支付资金
的服务。
代收业务主要应用于电商、物流、 教育、医疗等行业的资金结算和 支付场景。
内部审计
定期进行内部审计,检查业务操作合 规性及风险控制效果。
应急处理措施
应急响应小组
成立专门的应急响应小组,负责处理各类紧 急事件。
事件上报机制
建立完善的事件上报机制,确保问题及时被 发现和处理。
业务连续性计划
制定业务连续性计划,确保在重大事故或灾 难情况下,业务能迅速恢复。
定期演练
定期进行应急演练,提高应对突发事件的能 力。
代收业务能够提供便捷、高效、 安全的资金结算和支付服务,提
高企业运营效率,降低成本。
代收业务优势
01
便捷性
02
高效性
03
安全性
04
降低成本
代收业务办理流程
03
银联代付业务
代付业务概述
代付业务定义 代付业务背景
代付业务优势
01
java 支付策略模式+模板方法
主题: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支付宝支付文档(含代码)
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已正确安装。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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 使用错误公钥。