关于调用银联在线支付的代付接口中customerInfo参数无效的问题?

zycgod 2015-03-30 05:33:24
我按文档要求传入了customerInfo参数,值为{certifTp=01&certifId=341126197709218366&customerNm=全渠道},
银行卡号的参数也传了,为什么调用接口总是返回:[9100003]Invalid field[customerInfo],有做过银联代付的大神出来帮看看,还缺什么参数


package com.unionpay.acp.demo01;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import com.unionpay.acp.sdk.SDKConfig;

/**
*
*
*
* 名称: 第一卷 商户卷 第10部分 代付产品<br>
*
* 功能: 6.2 代付交易<br>
*
* 版本: 5.0<br>
*
* 日期: 2014-07<br>
*
* 作者: 中国银联ACP团队<br>
*
* 版权: 中国银联<br>
*
* 说明:以下代码只是为了方便商户测试而提供的样例代码,商户可以根据自己需要,按照技术文档编写。该代码仅供参考。<br>
*/

public class Form10_6_2 extends DemoBase {

private static final SimpleDateFormat SDF = new SimpleDateFormat(
"yyyyMMddHHmmss");

/**
*
* 6.2 代付交易 表单填写
*
*
*
* @return
* @throws IOException
*/

public static Map<String, Object> setFormDate(){

Map<String, Object> contentData = new HashMap<String, Object>();

String merId = "700000000000001";

String txnTime = SDF.format(new Date());// --订单发送时间

String orderId = SDF.format(new Date());// --商户订单号

// 固定填写

contentData.put("version", version);// M

// 默认取值:UTF-8

contentData.put("encoding", encoding);// M

// //通过MPI插件获取

// contentData.put("certId", certId);//M

//

// //填写对报文摘要的签名

// contentData.put("signature", signature);//M

// 01RSA02 MD5 (暂不支持)

contentData.put("signMethod", "01");// M

// 取值:12

contentData.put("txnType", "12");// M

// 默认:00

contentData.put("txnSubType", "00");// M

contentData.put("bizType", "000401");// M

contentData.put("channelType", "07");// M

// 交易后台返回商户结果时使用,如上送,则发送商户后台交易结果通知

contentData.put("backUrl", backUrl);// M

// 0:普通商户直连接入2:平台类商户接入

contentData.put("accessType", "0");// M

// 交易

contentData.put("merId", merId);// M

//

// //商户类型为平台类商户接入时必须上送

// contentData.put("subMerId", subMerId);//C

//

// //商户类型为平台类商户接入时必须上送

// contentData.put("subMerName", subMerName);//C

//

// //商户类型为平台类商户接入时必须上送

// contentData.put("subMerAbbr", subMerAbbr);//C

// 交易

contentData.put("orderId", orderId);// M

// 交易

contentData.put("txnTime", txnTime);// M

// // 01:银行卡02:存折03:IC卡帐号类型(卡介质)

//

// contentData.put("accType", accType);//O

// 非绑定类交易时需上送卡号

contentData.put("accNo", "6216261000000000018");// M

//  

contentData.put("txnAmt", "1");// M

// 默认为156交易,填写参考公参

contentData.put("currencyCode", "156");// M

// // 

contentData.put("customerInfo", "{certifTp=01&certifId=341126197709218366&customerNm=全渠道}");// O

//

// //用于唯一标识绑定关系

// contentData.put("bindId", bindId);//O

//

// contentData.put("billType", billType);//O

//

// //账单查询/支付类交易中填写具体账单号码用法一:账单查询/支付类交易中网上缴税用法,填写纳税人编码用法二:账单查询/支付类交易中信用卡还款用法,填写信用卡卡号

// contentData.put("billNo", billNo);//O

//

// //格式为:yyyyMMdd-yyyyMMdd

// contentData.put("billPeriod", billPeriod);//O

//

// //商户自定义保留域,交易应答时会原样返回

// contentData.put("reqReserved", reqReserved);//O

//

// //格式如下:{子域名1=值&子域名2=值&子域名3=值} 移动支付参考消费

// contentData.put("reserved", reserved);//O

//

// //格式如下:{子域名1=值&子域名2=值&子域名3=值}有风险级别要求的商户必填 风险级别 {riskLevel=XX}

// contentData.put("riskRateInfo", riskRateInfo);//O

//

// //当使用银联公钥加密密码等信息时,需上送加密证书的CertID

// contentData.put("encryptCertId", encryptCertId);//C

//

// // 

// contentData.put("termId", termId);//O

//

// //有卡交易必填

// contentData.put("cardTransData", cardTransData);//C

return contentData;

}

public static void main(String[] args) {

SDKConfig.getConfig().loadPropertiesFromSrc();

Map<String, String> resmap = submitDate(setFormDate(), SDKConfig
.getConfig().getBackRequestUrl());

System.out.println(resmap.toString());

}

}

...全文
5979 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zngirls520 2016-09-23
  • 打赏
  • 举报
回复
代付接口能实现转账吗?
jingxiaox 2016-09-23
  • 打赏
  • 举报
回复
怎么解决的...
牧心之 2016-07-15
  • 打赏
  • 举报
回复
利用代付能实现转账的功能吗
qq_21883751 2016-04-08
  • 打赏
  • 举报
回复
哥们,能给我看下文档吗,找不到文档。邮箱songshipengchina@163.com
yyzcar 2015-06-02
  • 打赏
  • 举报
回复
要做base64编码,demo里面有说明 String info =""; if(!StringUtils.isBlank(idTyp)|!StringUtils.isBlank(idNo)|!StringUtils.isBlank(idNo)|!StringUtils.isBlank(cusNm)|!StringUtils.isBlank(usrMbl) |!StringUtils.isBlank(smsCode)|!StringUtils.isBlank(cvN2)|!StringUtils.isBlank(valDt)){ StringBuffer sf = new StringBuffer("{"); if(!StringUtils.isBlank(idTyp)){ sf.append("certifTp=" + idTyp + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(idNo)){ sf.append("certifId=" + idNo + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(cusNm)){ sf.append("customerNm=" + cusNm + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(usrMbl)){ sf.append("phoneNo=" + usrMbl + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(smsCode)){ sf.append("smsCode=" + smsCode + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(cvN2)){ sf.append("cvn2=" + cvN2 + SDKConstants.AMPERSAND); } if(!StringUtils.isBlank(valDt)){ sf.append("expired=" + valDt + SDKConstants.AMPERSAND); } sf.append("}"); info = sf.toString(); info = info.substring(0,info.length()-2)+"}"; log.info("customerInfo:" + info); try { info = new String(SecureUtil.base64Encode(info.getBytes(encoding))); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }
数据库命名、设计规范 1. 数据库表及字段 1. 数据库表的命名规范: 表的前缀应该用系统或模块的英文名的缩写(全部大写)。如果系统功能简单,没有 划分为模块,则可以以系统英文名称的缩写作为前缀,否则以各模块的英文名称缩写作 为前缀。例如:如果有一个模块叫做BBS(缩写为BBS),那么你的数据库的所有对象的名 称都要加上这个前缀:BBS_ + 数据库对象名称,BBS_CustomerInfo标示论坛模块的客户信息表。 表的名称必须是易于理解,能表达表的功能的英文单词或缩写英文单词,无论是完整 英文单词还是缩写英文单词,单词首字母必须大写。如果当前表可用一个英文单词表示 的,请用完整的英文单词来表示;例如:系统资料的客户表的表名可命名为:SYS_Cu stomer。如果当前表需用两个或两个以上的单词来表示时,尽量以完整形式书写,如太 长可采用两个英文单词的缩写形式;例如:系统资料的客户物料表可命名为:SYS_Cu stItem。 表名称不应该取得太长(一般不超过三个英文单词)。表名长度不能超过30个字符, 表名含有单词全部采用单数形式,单词首字母必须大写。在命名表时,用单数形式表 示名称。例如,使用 Employee,而不是 Employees。对于有主明细的表来说。明细表的名称为:主表的名称 + 字符Dts。例如:采购定单的名称为:PO_Order,则采购定单的明细表为:PO_OrderDts ;对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量与前台表名相同,后台独有的表应以_ b作为后缀。如r_gggd_b。 数据库表的命名采用如下规则: 1)表名用模块名_开头,表名长度不能超过30个字符,表名含有单词全部采用单数 形式,单词首字母必须大写。 2)多个单词间用下划线(_)进行连接。若库有多个系统,表名采用系统名称+单词 或多个单词,系统名是开发系统的缩写,如VNET。 3)表含有的单词建议用完整的单词。如果导致表名长度超过30个字符,则从最后 一个单词开始,依次向前采用该单词的缩写。(如果没有约定的缩写,则采用该单词前 4个字母来表示)。 2. 字段的命名、设计规范 1)命名规范 凡是具有国家局标准数据要素字段命名规范的遵照国家局标准定义;国家局尚未制定 标准的遵照信息资源规划三段式命名规则命名,字段名不超过18个字符为限。 三段式命名规则如下:修饰词+基本词+类别词,修饰词可以为空。 类别词描述数据要素的性质,常见的类别词及其定义标准如下表: "类别词 "标注 " "编码 "名称 " "编号 "ID " "金额 "AMT " "编码 "CODE " "名称 "NAME " "数量 "QTY " "日期 "DATE " "说明 "DESC " "时间 "TIME " "是否 "IS " "备注 "NOTE " "类别 "TYPE " "级别 "LVL " "毛利 "GRS " "价格 "PRI " "个数 "NUM " " " " 数据库字段的命名必须遵循以下规范: 采用有意义的字段名。字段的名称必须是易于理解,能表达字段功能的英文单词或缩 写英文单词,单词首字母必须大写,一般不超过三个英文单词。例如:人员信息表的电 话号码可命名为:Telephone或Tel。产品明细表的产品名称可用ProductName表示。( 推荐一般用完整的英文单词)。 系统所有属于内码字段(仅用于标示唯一性和程序内部用到的标示性字段),名称 取为:"ID",采用整型或长整型数,具体根据可能的数据量确定,增加记录时取最大值 加1,该字段通常为主关键字。 系统属于是业务范围内的编号的字段,其代表一定的业务信息,比如资料信息和单 据的编号,这样的字段建议命名为:"Code",其数据类型为varchar,该字段需加唯一索 引。 在命名表的列时,不要重复表的名称;例如,在名为 Employee 的表避免使用名为 EmployeeLastName 的字段。 不要在列的名称包含数据类型。 2)设计规范 所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime 、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值。字符型的默认值为一个空字符值串'';数值型的默认值 为数值0;逻辑型的默认值为数值0;其:系统所有逻辑型数值0表示为"假";数值 1表示为"真"。datetime、smalldatetime类型的字段没有默认值,必须为NULL。当字段
数据库命名、设计规范 1. 数据库表及字段 1. 数据库表的命名规范: 表的前缀应该用系统或模块的英文名的缩写(全部大写)。如果系统功能简单,没有 划分为模块,则可以以系统英文名称的缩写作为前缀,否则以各模块的英文名称缩写作 为前缀。例如:如果有一个模块叫做BBS(缩写为BBS),那么你的数据库的所有对象的名 称都要加上这个前缀:BBS_ + 数据库对象名称,BBS_CustomerInfo标示论坛模块的客户信息表。 表的名称必须是易于理解,能表达表的功能的英文单词或缩写英文单词,无论是完整 英文单词还是缩写英文单词,单词首字母必须大写。如果当前表可用一个英文单词表示 的,请用完整的英文单词来表示;例如:系统资料的客户表的表名可命名为:SYS_Cu stomer。如果当前表需用两个或两个以上的单词来表示时,尽量以完整形式书写,如太 长可采用两个英文单词的缩写形式;例如:系统资料的客户物料表可命名为:SYS_Cu stItem。 表名称不应该取得太长(一般不超过三个英文单词)。表名长度不能超过30个字符, 表名含有单词全部采用单数形式,单词首字母必须大写。在命名表时,用单数形式表 示名称。例如,使用 Employee,而不是 Employees。对于有主明细的表来说。明细表的名称为:主表的名称 + 字符Dts。例如:采购定单的名称为:PO_Order,则采购定单的明细表为:PO_OrderDts ;对于有主明细的表来说,明细表必须包含两个字段:主表关键字、SN,SN字段的类型为 int型,目的为与主表关键字联合组成明细表的关键字,以及标示明细记录的先后顺序, 如1,2,3……。表必须填写描述信息,后台表名尽量与前台表名相同,后台独有的表应以_ b作为后缀。如r_gggd_b。 数据库表的命名采用如下规则: 1)表名用模块名_开头,表名长度不能超过30个字符,表名含有单词全部采用单数 形式,单词首字母必须大写。 2)多个单词间用下划线(_)进行连接。若库有多个系统,表名采用系统名称+单词 或多个单词,系统名是开发系统的缩写,如VNET。 3)表含有的单词建议用完整的单词。如果导致表名长度超过30个字符,则从最后 一个单词开始,依次向前采用该单词的缩写。(如果没有约定的缩写,则采用该单词前 4个字母来表示)。 2. 字段的命名、设计规范 1)命名规范 凡是具有国家局标准数据要素字段命名规范的遵照国家局标准定义;国家局尚未制定 标准的遵照信息资源规划三段式命名规则命名,字段名不超过18个字符为限。 三段式命名规则如下:修饰词+基本词+类别词,修饰词可以为空。 类别词描述数据要素的性质,常见的类别词及其定义标准如下表: "类别词 "标注 " "编码 "名称 " "编号 "ID " "金额 "AMT " "编码 "CODE " "名称 "NAME " "数量 "QTY " "日期 "DATE " "说明 "DESC " "时间 "TIME " "是否 "IS " "备注 "NOTE " "类别 "TYPE " "级别 "LVL " "毛利 "GRS " "价格 "PRI " "个数 "NUM " " " " 数据库字段的命名必须遵循以下规范: 采用有意义的字段名。字段的名称必须是易于理解,能表达字段功能的英文单词或缩 写英文单词,单词首字母必须大写,一般不超过三个英文单词。例如:人员信息表的电 话号码可命名为:Telephone或Tel。产品明细表的产品名称可用ProductName表示。( 推荐一般用完整的英文单词)。 系统所有属于内码字段(仅用于标示唯一性和程序内部用到的标示性字段),名称 取为:"ID",采用整型或长整型数,具体根据可能的数据量确定,增加记录时取最大值 加1,该字段通常为主关键字。 系统属于是业务范围内的编号的字段,其代表一定的业务信息,比如资料信息和单 据的编号,这样的字段建议命名为:"Code",其数据类型为varchar,该字段需加唯一索 引。 在命名表的列时,不要重复表的名称;例如,在名为 Employee 的表避免使用名为 EmployeeLastName 的字段。 不要在列的名称包含数据类型。 2)设计规范 所有字段在设计时,除以下数据类型timestamp、image、datetime、smalldatetime 、uniqueidentifier、binary、sql_variant、binary 、varbinary外,必须有默认值。字符型的默认值为一个空字符值串'';数值型的默认值 为数值0;逻辑型的默认值为数值0;其:系统所有逻辑型数值0表示为"假";数值 1表示为"真"。datetime、smalldatetime类型的字段没有默认值,必须为NULL。当字段

81,094

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧