翼支付商户接入规范条码支付分册_第1页
翼支付商户接入规范条码支付分册_第2页
翼支付商户接入规范条码支付分册_第3页
翼支付商户接入规范条码支付分册_第4页
翼支付商户接入规范条码支付分册_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

翼支付商户接入规范条形码支付修订历史记录日期版本说明修订2023.06.081.0初稿林健,张善良2023.07.151.1新增2.1下单业务返回码新增2.2查询接口新增2.3退款http接口(含分账)废弃2.5退款ws接口废弃2.6分账退款ws接口新增2.4冲正http接口废弃2.7冲正ws接口刘永富林健韦家驹2023.07.201.2修订及完善查询接口相关文档韦家驹2023.07.211.3下单接口返回值调整。增长HTTP退款和冲正接口的相关文档韦家驹20查询接口增长退款标志,及支付账户号韦家驹

目录1. 引言 71.1 编写目的 71.2 编写原则 71.3 读者对象 71.4 需求来源 71.5 术语定义 72. 条码支付 72.1 下单支付 72.1.1 接口描述 72.1.2 接口地址 82.1.3 接口参数 82.1.4 接口响应 92.1.5 响应示例 102.1.6 接口说明 102.1.7 客户端测试用例 112.2 查询 132.2.1 接口描述 132.2.2 接口地址 132.2.3 接口参数 142.2.4 接口响应 142.2.5 响应示例 152.2.6 接口说明 152.2.7 客户端测试用例 162.3 退款 162.3.1 接口描述 162.3.2 接口地址 162.3.3 接口参数 172.3.4 接口响应 182.3.5 响应示例 182.3.6 接口说明 182.3.7 客户端测试用例 192.4 冲正 202.4.1 接口描述 202.4.2 接口地址 202.4.3 接口参数 202.4.4 接口响应 212.4.5 响应示例 222.4.6 接口说明 222.4.7 客户端测试用例 222.5 退款【建议使用2.3】 232.5.1 接口描述 232.5.2 接口地址 232.5.3 接口参数 242.5.4 接口响应 242.5.5 响应示例 242.5.6 接口说明 252.5.7 客户端测试用例 252.6 分账退款【建议使用2.3】 262.6.1 接口描述 262.6.2 接口地址 262.6.3 接口参数 262.6.4 接口响应 272.6.5 响应示例 272.6.6 接口说明 272.6.7 客户端测试用例 282.7 冲正【建议使用2.4】 282.7.1 接口描述 282.7.2 接口地址 292.7.3 接口参数 292.7.4 接口响应 302.7.5 响应示例 302.7.6 接口说明 302.7.7 客户端测试用例 302.8 交易结果告知接口 312.8.1 接口描述 312.8.2 接口地址 312.8.3 接口定义 322.8.4 接口说明 333. 条码支付交互流程 344. 权限申请 355. 响应码说明 356. 商品信息填写说明 43

引言编写目的本文档的目的是为翼支付条码产品定义一个标准接口规范,以帮助外部商户更好的接入翼支付网关平台系统。编写原则根据翼支付系统管理规范,从业务人员的角度对需求的阐述,以及对需求描述的细化限度。此文档将在开发过程随着需求的变更而更改和修订。读者对象本手册的读者对象默认为:接入翼支付条码产品的商户开发人员。需求来源产品部门术语定义条码支付下单支付接口描述接口名称商户下单支付接口描述商户请求翼支付网关,生成订单且完毕支付接口类型HTTPS传输方式Post数据编码Utf-8接口提供者翼支付网关平台接口使用者商户接口地址生产地址/barcode/placeOrder接口参数属性含义类型长度必填备注merchantId商户号n30M由翼支付网关平台统一分派subMerchantId子商户号ans30O由商户平台自己分派,在做支付时,可以一并发送过来,翼支付网关平台可以负责记录,如没有可以不填写barcode条形码号n30M商户POS扫描用户客户端条形码orderNo订单号an30M由商户平台提供,数字或字母组成orderReqNo订单请求交易流水号an30M由商户平台提供,数字或字母组成channel渠道n5M默认填:05busiType业务类型an5M默认填:0001orderDate订单日期n20M由商户提供,长度14位格式yyyyMMddhhmmssorderAmt订单总金额n10M单位:分订单总金额=产品金额+附加金额productAmt产品金额n10M单位:分attachAmt附加金额n10M单位:分goodsName商品名称ans256O商品信息storeId门店号n10M门店号backUrl后台返回地址ans255O商户提供的用于异步接受交易返回结果的后台url,商户可根据需要填写ledgerDetail分账信息ans256O商户需要在结算时进行分账情况,需填写此字段,详情见接口说明attach附加信息ans128O商户附加信息macMAC校验域an256M采用标准的MD5算法,由商户实现接口响应属性含义类型长度必填备注success是否成功booleanMTrue:成功False:失败代表商户下单的成功与失败result调用返回值ans100O当success为true时,result为下单详情,success为false时,result为nullerrorCode错误码ans10O当success为true时,为null,当success为false时,为错误码errorMsg错误描述ans10O当success为true时,为null,当success为false时,为错误描述请求成功success为true时响应结果result为:属性含义类型长度必填备注merchantId商户号n30M由翼支付网关平台统一分派merchantIdorderNo商户总订单号an30M查询到的商户订单号orderNoorderReqNo商户总订单请求流水号an30M查询到的商户请求流水号orderReqNoorderDate预留字段始终为nullourTransNo翼支付交易号an30M翼支付生成的内部流水号(用户支付后生成)transAmt订单金额n10MtransStatus交易状态A:请求(支付中)B:成功(支付成功)C:失败encodeType署名方式n1O1代表MD53代表RSA9代表CA默认为1signsign校验域an30M请求及响应示例请求参数示例:merchantId=000&subMerchantId=000&barcode=5886972&orderNo=60&orderReqNo=601&orderDate=49&channel=05&busiType=0001&&orderAmt=1&productAmt=1&attachAmt=0&goodsName=%E6%9D%A1%E7%A0%81%E6%94%AF%E4%BB%98&storeId=202331&backUrl=http%3A%2F%2F%3A8030%2FwebBgNotice.action&ledgerDetail=&attach=&mac=3B5E200FD1EF8988693F242438A32475响应参数示例:成功:{"success":true,"result":{"merchantId":"000","orderNo":"62","orderReqNo":"621","orderDate":null,"transStatus":"B","transAmt":"1","ourTransNo":"","encodeType":"1","sign":"E1E4E5141AB332F0F2E2A1EA0DE32120"},"errorCode":null,"errorMsg":null}失败:{"success":false,"result":null,"errorCode":"BE300001","errorMsg":"订单MAC域验证失败"}接口说明商户的商户号由翼支付统一分派,商户需与翼支付的运营人员对接,提供商户资料,申请正式的商户号。商户要保证订单号的唯一性。订单请求流水号不能反复,建议以日期时间(yyyyMMDDhhmmss格式)加一固定长度(不小于6位)流水号组成,如:25+0000001等。订单流水号和订单号可以相同。(使用翼支付提供的“流程测试”商户时除外,假如相同会提醒订单或流水号反复的错误)MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其顺序如下:顺序MERCHANTID=&ORDERNO=123456&ORDERREQNO=1234567&ORDERDATE=&BARCODE=111111&ORDERAMT=1&KEY=123456此处的KEY为商户的数据KEY,可以通过翼支付的统一运营地址生成。此数据KEY对本文档其它接口进行MAC校验时同样合用。规定:将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行摘要,然后将摘要果转成16进制字符串,字符串建议使用大写,就是校验域MAC的值,并在提交订单时,将MAC值和订单信息一起提交到翼支付网关翼支付网关平台。需保证MAC校验时中的各个参数,与下单请求时的参数完全一致。商户若需分账,则填写ledgerDetail字段,例如:规则::4|:3|:1说明:订单总金额4+3+1=8分,商户分账4分,每组相应关系之间“|”分隔分账权限与一般支付权限不同。商户分账支付的权限需要额外申请,并且在结算时翼支付将形成各个分账商户的对账文献。下单支付接口返回的success值并不是最终支付结果。支付结果在下单成功情况下,result的transStatus字段代表支付结果。返回结果中的翼支付网关流水号ourTransNo,当用户完毕支付后才会生成。对于有密支付情况,由于用户未实际支付,返回的流水号为空字符串。商户可在查询接口获得该流水号。9.接口响应中的sign值是网关根据返回结果进行的前面,保证收到结果的完整性,商户可以根据需要进行验签,目前署名默认为MAC形式,参与MAC运算的字符及其顺序如下:顺序:MERCHANTID=&ORDERNO=&ORDERREQNO=20231001&ORDERDATE=null&OURTRANSNO=&TRANSAMT=10&TRANSSTATUS=B&ENCODETYPE=1&KEY=123456ORDERDATE在下单接口返回时暂未使用,目前始终为null。客户端测试用例注:此用例仅供参考importmons.util.CryptTool;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.HttpStatus;importorg.apache.http.NameValuePair;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;import.ssl.SSLContext;importspace.QName;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContextBuilder;importorg.apache.http.conn.ssl.TrustStrategy;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassTestClient{publicstaticvoidmain(String[]args)throwsException{StringmerchantId="000";StringorderNo="22";StringorderReqNo="221";StringorderDate="49";Stringbarcode="204002";StringorderAmt="1";StringBuildersb=newStringBuilder();//组装mac加密明文串sb.append("MERCHANTID=").append(merchantId);sb.append("&ORDERNO=").append(orderNo);sb.append("&ORDERREQNO=").append(orderReqNo);sb.append("&ORDERDATE=").append(orderDate);sb.append("&BARCODE=").append(barcode);sb.append("&ORDERAMT=").append(orderAmt);sb.append("&KEY=").append("111");//此处是商户的keyStringmac=CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)Map<String,String>param=newHashMap<String,String>();//组装请求参数param.put("merchantId",merchantId);param.put("subMerchantId",merchantId);param.put("barcode",barcode);param.put("orderNo",orderNo);param.put("orderReqNo",orderReqNo);param.put("orderDate",orderDate);param.put("channel","05");param.put("busiType","0001");param.put("TransType","B");param.put("orderAmt",orderAmt);param.put("productAmt","1");param.put("attachAmt","0");param.put("goodsName","条码支付");param.put("storeId","202331");param.put("backUrl",":8030/webBgNotice.action");param.put("ledgerDetail","");param.put("attach","");param.put("mac",mac);//创建信任证书

CloseableHttpClienthttpClient=createSSLClientDefault();HttpPosthttpPost=null;CloseableHttpResponseresponse=null;try{httpPost=newHttpPost("");List<NameValuePair>paramList=newArrayList<NameValuePair>();for(Stringkey:param.keySet()){paramList.add(newBasicNameValuePair(key,param.get(key)));}httpPost.setEntity(newUrlEncodedFormEntity(paramList,Consts.UTF_8));httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());response=httpClient.execute(httpPost);HttpEntityentity=response.getEntity();intstatusCode=response.getStatusLine().getStatusCode();if(HttpStatus.SC_OK==statusCode)//假如响应码是200System.out.println(EntityUtils.toString(entity));;}finally{if(response!=null){response.close();}if(httpPost!=null){httpPost.releaseConnection();}httpClient.close();}}}//创建链接

publicstaticCloseableHttpClientcreateSSLClientDefault()throwsException{

SSLContextsslContext=newSSLContextBuilder().loadTrustMaterial(null,newAllTrustStrategy()).build();

SSLConnectionSocketFactorysslSf=newSSLConnectionSocketFactory(sslContext);

returnHttpClients.custom().setSSLSocketFactory(sslSf).build();

}

//加载证书

privatestaticclassAllTrustStrategyimplementsTrustStrategy{

publicbooleanisTrusted(X509Certificate[]x509Certificates,Strings)throwsCertificateException{

returntrue;

}

}

}说明当使用org.apache.http.client之外的第三方类封装HTTP请求时,需要注意HTTP请求中的字符串,需要通过URL编码,其中的中文字符使用UTF-8。HTTP请求中的Content-Type使用application/x-www-form-urlencoded;charset=UTF-8,请求方法为POST。错误码错误码描述备注BE199999请求参数有误检查HTTP请求相关代码BARCODE_VALIDATE_ERROR条形码验证异常849卡信息解密失败用户信息异常5146查询绑卡信息犯错用户信息异常4008绑卡信息不存在用户信息异常-301订单MAC域验证失败-302校验订单犯错检查订单金额-304商户未配置此交易权限1001商户未注册1002商户未配置密钥信息检查数据KEY是否申请1003商户未开通银行-3061分账商户不存在-3062分账金额有误-3063分账金额总和不等于订单金额-3064分账商户父商户有误-3065分账信息不允许有两个相同商户BARCODE_STORE_CODE_IS_EMPTY条码门店号不能为空BE999999系统繁忙,请稍后再试系统因素,联系技术支协查订单查询接口描述接口名称订单查询接口接口描述为商户提供入口接口类型HTTPS传输方式POST数据编码Utf-8接口提供者翼支付网关平台接口使用者商户业务平台接口地址生产地址/query/queryOrder接口参数属性含义类型长度必填备注merchantId商户号n30M由翼支付网关平台统一分派orderNo订单号an30M由商户平台提供,数字或字母组成orderReqNo订单请求交易流水号an30M由商户平台提供,数字或字母组成orderDate订单日期an20M日期格式:yyyyMMddmacmac校验域an256M默认为0,当加密方式为1时故意义,采用标准的MD5算法,由商户实现接口响应参数含义类型和长度备注success是否查询到订单booleanTrue:成功False:失败result调用返回值ans100当success为true时取此值,result中包含的信息见下表errorCode错误码ans10当success为false时取此值,result为空errorMsg错误描述ans10当success为false时取此值,result为空refundFlag退款标记n10代表为退款,1已退款2部分退款3已冲正查询成功success为true时响应结果result(MAP)为:参数含义类型长度必填备注merchantId商户号n30M由翼支付网关平台统一分派orderNo商户总订单号an30M查询到的商户订单号orderReqNo商户总订单请求流水号an30M查询到的商户请求流水号orderDate商户下单时间n20MyyyyMMDDHHmmss查询到的订单实际日期,也许与查询请求日期不同ourTransNo网关平台流水号n30M翼支付生成的内部流水号transAmt交易金额n10M单位:分transStatus交易状态n1MA:请求(支付中)B:成功(支付成功)C:失败G:订单作废encodeType加密方式n1O1代表MD53代表RSA9代表CA默认为1signsign校验域anM验证署名,署名方式根据encodeType决定refundFlag退款标记n1M0代表为退款,1已退款2部分退款3已冲正customerID客户支付手机号n11M客户条码消费时的支付手机号,中间4位被隐去,用*代替如180****2687请求及响应示例请求示例orderReqNo=&orderNo=07&orderDate=20230713&mac=880D9E9DE657E3C351697D3B6CFE5626&merchantId=000HTTP请求对参数的顺序没有规定,保证参数名称完全一致(涉及大小写)。响应示例订单存在{"success":true,"result":{"merchantId":"000","orderNo":"23","orderReqNo":"23000001","orderDate":"58","transStatus":"B","transAmt":"1","ourTransNo":"","encodeType":"1","sign":"B0C948619CB5895FEABEB","customerID":"180****2687","refundFlag":"0"},"errorCode":null,"errorMsg":null}订单不存在

{"success":false,"result":null,"errorCode":"BE110062","errorMsg":"没有找到符合条件的记录。"}其它错误

{"success":false,"result":null,"errorCode":"BE199999","errorMsg":"订单日期格式有误"}接口响应的格式为JSON。接口说明MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其顺序如下:顺序:MERCHANTID=&ORDERNO=&ORDERREQNO=20231001&ORDERDATE=&KEY=123456规定:将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行摘要,然后将摘要果转成16进制字符串,字符串建议使用大写,就是校验域MAC的值,并在提交订单时,将MAC值和订单信息一起提交到翼支付网关翼支付网关平台。KEY值为商户的数据KEY。接口响应的success字段标记的是查询过程的结果,并不代表交易的成功和失败。交易的结果当success为true时,取result中的tranStatus字段。字段为A,代表请求状态,表白用户正在输入密码或交易自身在进行中。字段为B时,代表本次交易成功。字段为C时,代表本次交易失败。字段为G时,代表本次交易已被作废。订单请求时,为了加快查询的速度,需给定下单的日期,实际的查询范围,会在给定日期的前一天到给定日期的后一天范围内进行。接口响应中的sign值是网关根据返回结果进行的前面,保证收到结果的完整性,商户可以根据需要进行验签,目前署名默认为MAC形式,参与MAC运算的字符及其顺序如下:顺序:MERCHANTID=&ORDERNO=&ORDERREQNO=20231001&ORDERDATE=0000&OURTRANSNO=&TRANSAMT=10&TRANSSTATUS=B&ENCODETYPE=1&KEY=123456客户端测试用例importmons.util.CryptTool;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.HttpStatus;importorg.apache.http.NameValuePair;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;import.ssl.SSLContext;importspace.QName;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContextBuilder;importorg.apache.http.conn.ssl.TrustStrategy;publicclassQueryClient{publicstaticvoidmain(String[]args)throwsException{StringmerchantId="000";StringorderNo="07";StringorderReqNo="";StringorderDate="20230713";StringBuildersb=newStringBuilder();//组装mac加密明文串sb.append("MERCHANTID=").append(merchantId);sb.append("&ORDERNO=").append(orderNo);sb.append("&ORDERREQNO=").append(orderReqNo);sb.append("&ORDERDATE=").append(orderDate);sb.append("&KEY=").append("111");//此处是商户的keyStringmac=CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)Map<String,String>param=newHashMap<String,String>();//组装请求参数,参数名大小写敏感param.put("merchantId",merchantId);param.put("orderNo",orderNo);param.put("orderReqNo",orderReqNo);param.put("orderDate",orderDate);param.put("mac",mac);//创建信任证书

CloseableHttpClienthttpClient=createSSLClientDefault();HttpPosthttpPost=null;CloseableHttpResponseresponse=null;try{//发起HTTP的POST请求httpPost=newHttpPost("");List<NameValuePair>paramList=newArrayList<NameValuePair>();for(Stringkey:param.keySet()){paramList.add(newBasicNameValuePair(key,param.get(key)));}//UTF8+URL编码httpPost.setEntity(newUrlEncodedFormEntity(paramList,Consts.UTF_8));httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());response=httpClient.execute(httpPost);HttpEntityentity=response.getEntity();intstatusCode=response.getStatusLine().getStatusCode();if(HttpStatus.SC_OK==statusCode)//假如响应码是200System.out.println(EntityUtils.toString(entity));}finally{if(response!=null){response.close();}if(httpPost!=null){httpPost.releaseConnection();}httpClient.close();}}}publicstaticCloseableHttpClientcreateSSLClientDefault()throwsException{

SSLContextsslContext=newSSLContextBuilder().loadTrustMaterial(null,newAllTrustStrategy()).build();

SSLConnectionSocketFactorysslSf=newSSLConnectionSocketFactory(sslContext);

returnHttpClients.custom().setSSLSocketFactory(sslSf).build();

}

//加载证书

privatestaticclassAllTrustStrategyimplementsTrustStrategy{

publicbooleanisTrusted(X509Certificate[]x509Certificates,Strings)throwsCertificateException{

returntrue;

}

}

}错误码错误码描述备注1002商户未配置密钥信息检查数据KEY是否申请BE300001订单MAC域验证失败BE199999请求参数有误具体的参数错误,在描述中有体现BE110062没有找到符合条件的记录。BE999999系统繁忙,请稍后再试系统因素,联系技术支协查普通退款接口描述接口名称支付交易普通退款接口接口描述通过调用退款接口向翼支付网关平台发出退款请求完毕退款。接口类型HTTPS数据编码UTF-8接口提供者翼支付网关平台接口使用者商户接口地址生产地址/refund/commonRefund接口参数属性含义类型长度必填备注merchantId商户代码n20M由翼支付网关平台统一分派给各接入商户subMerchantId商户子代码ans20O商户子代码如没有则填空merchantPwd商户调用密码an20M商户执行时需填入相应密码oldOrderNo原扣款订单号an30M原扣款成功的订单号oldOrderReqNo原订单请求支付流水号an30M原扣款成功的请求支付流水号refundReqNo退款流水号an30M该流水在商户处必须是唯一的,并且每次发起退款时,都必须是唯一的refundReqDate退款请求日期n14MyyyyMMDDtransAmt退款交易金额n12M单位为分,小于等于原订单金额ledgerDetail分账明细n1024O分账示例::10|:10分账规则:父商户可以全额退款,子商户的分账退款金额必须小于支付分账金额,分账金额不能为0。channel渠道n5M01:WEB02:WAP04:语音05:客户端macMac校验域an32Mmd5摘要bgUrl退款回调地址ans256O商户的退款回调地址,当退款受理成功后,会有回调消息以HTTP形式发送至商户接口响应属性含义类型长度必填备注success是否成功booleanMtrue:成功false:失败result调用返回值ans100O预留字段errorCode错误码ans10O当success为true时,为null,当success为false时,为错误码errorMsg错误描述ans10O当success为true时,为null,当success为false时,为错误描述请求响应示例请求示例oldOrderReqNo=&oldOrderNo=07&&mac=880D9E9DE657E3C351697D3B6CFE5626&merchantId=000&transAmt=1&channel=01&refundReqNo=r&refundReqDate=20230708&merchantPwd=123456响应示例成功{"success":true,"result":null,"errorCode":null,"errorMsg":null。"}失败{"success":false,"result":null,"errorCode":"BE110062","errorMsg":"没有找到符合条件的记录。"}接口说明商户要保证退款流水号的唯一性。MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其顺序如下:MERCHANTID=&MERCHANTPWD=123456&OLDORDERNO=123456&OLDORDERREQNO=1234567&REFUNDREQNO=&REFUNDREQDATE=20230720&TRANSAMT=1&LEDGERDETAIL=:1&KEY=123456商户业务平台将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行摘要,然后将摘要果转成16进制字符串,字符串建议使用大写,就是校验域MAC的值,将MAC值和订单信息调用接口时,一起提供应翼支付网关平台。客户端测试用例importmons.util.CryptTool;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.HttpStatus;importorg.apache.http.NameValuePair;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;mport.ssl.SSLContext;importspace.QName;importjava.security.cert.CertificateException;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importorg.apache.http.conn.ssl.SSLConnectionSocketFactory;importorg.apache.http.conn.ssl.SSLContextBuilder;importorg.apache.http.conn.ssl.TrustStrategy;publicclassTestClient{publicstaticvoidmain(String[]args)throwsException{StringmerchantId="000";StringmerchantPwd="111";StringoldOrderNo="31";StringoldOrderReqNo="231";StringrefundReqNo="49";StringrefundReqDate="20230720";StringtransAmt="1";Stringchannel="02";StringledgerDetail="000:1";StringBuildersb=newStringBuilder();//组装mac加密明文串sb.append("MERCHANTID=").append(merchantId);sb.append("&MERCHANTPWD=").append(merchantPwd);sb.append("&OLDORDERNO=").append(oldOrderNo);sb.append("&OLDORDERREQNO=").append(oldOrderReqNo);sb.append("&REFUNDREQNO=").append(refundReqNo);sb.append("&REFUNDREQDATE=").append(refundReqDate);sb.append("&TRANSAMT=").append(transAmt);sb.append("&LEDGERDETAIL=").append(ledgerDetail);sb.append("&KEY=").append("111");//此处是商户的keyStringmac=CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)Map<String,String>param=newHashMap<String,String>();//组装请求参数param.put("merchantId",merchantId);param.put("merchantPwd",merchantPwd);param.put("oldOrderNo",oldOrderNo);param.put("oldOrderReqNo",oldOrderReqNo);param.put("refundReqNo",refundReqNo);param.put("refundReqDate",refundReqDate);param.put("transAmt",transAmt);param.put("channel",channel);param.put("ledgerDetail",ledgerDetail);param.put("mac",mac);//创建信任证书

CloseableHttpClienthttpClient=createSSLClientDefault();HttpPosthttpPost=null;CloseableHttpResponseresponse=null;try{httpPost=newHttpPost("");List<NameValuePair>paramList=newArrayList<NameValuePair>();for(Stringkey:param.keySet()){paramList.add(newBasicNameValuePair(key,param.get(key)));}httpPost.setEntity(newUrlEncodedFormEntity(paramList,Consts.UTF_8));httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());response=httpClient.execute(httpPost);HttpEntityentity=response.getEntity();intstatusCode=response.getStatusLine().getStatusCode();if(HttpStatus.SC_OK==statusCode)//假如响应码是200System.out.println(EntityUtils.toString(entity));}finally{if(response!=null){response.close();}if(httpPost!=null){httpPost.releaseConnection();}httpClient.close();}}}//创建链接publicstaticCloseableHttpClientcreateSSLClientDefault()throwsException{

SSLContextsslContext=newSSLContextBuilder().loadTrustMaterial(null,newAllTrustStrategy()).build();

SSLConnectionSocketFactorysslSf=newSSLConnectionSocketFactory(sslContext);

returnHttpClients.custom().setSSLSocketFactory(sslSf).build();

}

//加载证书

privatestaticclassAllTrustStrategyimplementsTrustStrategy{

publicbooleanisTrusted(X509Certificate[]x509Certificates,Strings)throwsCertificateException{

returntrue;

}

}

}错误码错误码描述备注-309校验商户调用密码犯错-301校验商户MAC校验域犯错1002商户未配置密钥信息BE100002受理机构代码为空BE110028分账信息有误BE110062没有找到符合条件的记录。原订单不存在BE199999请求参数有误具体的参数错误,在描述中有体现BE300000商户不存在BE300006受理机构未配置此交易权限原支付机构不支持退款BE300007商户未配置此交易权限商户没有给定渠道的普通退款权限BE300012分账金额总和不等于订单总金额BE300013商户IP验证异常BE300018订单不支持部分扣款原订单支付机构不支持部分退款BE301001订单金额出现异常,交易失败退款金额不符合规定BE301007不支持批量支付订单的退款,退款失败BE301008订单的业务类型不支持退款,退款失败BE301009订单状态不为成功,退款失败BE301010退款订单受理中,退款失败BE301011订单已退款或冲正,退款失败BE999999系统繁忙,请稍后再试系统因素,联系技术支协查冲正暂未上线,预计8.11暂未上线,预计8.11接口描述接口名称支付交易冲正接口接口描述通过调用退款接口向翼支付网关平台发出冲正请求完毕冲正。接口类型HTTPS数据编码UTF-8接口提供者翼支付网关平台接口使用者商户接口地址生产地址/reverse/reverse接口参数属性含义类型长度必填备注merchantId商户代码n20M由翼支付网关平台统一分派给各接入商户subMerchantId商户子代码ans20O商户子代码如没有则填空merchantPwd商户调用密码an20M商户执行时需填入相应密码oldOrderNo原扣款订单号an30M原扣款成功的订单号oldOrderReqNo原订单请求支付流水号an30M原扣款成功的请求支付流水号refundReqNo退款流水号an30M该流水在商户处必须是唯一的,并且每次发起退款时,都必须是唯一的refundReqDate退款请求日期n14MyyyyMMDDtransAmt冲正金额n12M单位为分,必须为原订单金额channel渠道n5M01:WEB02:WAP04:语音05:客户端macMac校验域an32Mmd5摘要接口响应属性含义类型长度必填备注success是否成功booleanMtrue:成功false:失败result调用返回值ans100O预留字段errorCode错误码ans10O当success为true时,为null,当success为false时,为错误码errorMsg错误描述ans10O当success为true时,为null,当success为false时,为错误描述响应示例请求示例oldOrderReqNo=&oldOrderNo=07&&mac=880D9E9DE657E3C351697D3B6CFE5626&merchantId=000&transAmt=1&channel=01&refundReqNo=r&refundReqDate=20230708&merchantPwd=123456响应示例成功{"success":true,"result":null,"errorCode":null,"errorMsg":null。"}失败{"success":false,"result":null,"errorCode":"BE110062","errorMsg":"没有找到符合条件的记录。"}接口说明商户要保证冲正流水号的唯一性。冲正与退款接口不同在于,冲正接口对于除成功状态外的交易,可以使交易作废。当交易已经成功时,冲正接口会申请退款。冲正接口的调用时间仅限于原交易发生的当天,退款不受此限制。MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其顺序如下:MERCHANTID=&MERCHANTPWD=123456&OLDORDERNO=123456&OLDORDERREQNO=1234567&REFUNDREQNO=&REFUNDREQDATE=20230720&TRANSAMT=1&KEY=123456商户业务平台将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行摘要,然后将摘要结果转成16进制字符串,字符串建议使用大写,就是校验域MAC的值,将MAC值和订单信息调用接口时,一起提供应翼支付网关平台。客户端测试用例importmons.util.CryptTool;importorg.apache.http.Consts;importorg.apache.http.HttpEntity;importorg.apache.http.HttpStatus;importorg.apache.http.NameValuePair;importorg.apache.http.client.config.RequestConfig;importorg.apache.http.client.entity.UrlEncodedFormEntity;importorg.apache.http.client.methods.CloseableHttpResponse;importorg.apache.http.client.methods.HttpPost;importorg.apache.http.impl.client.CloseableHttpClient;importorg.apache.http.impl.client.HttpClients;importorg.apache.http.message.BasicNameValuePair;importorg.apache.http.util.EntityUtils;importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;publicclassTestClient{publicstaticvoidmain(String[]args)throwsException{StringmerchantId="000";StringmerchantPwd="111";StringoldOrderNo="31";StringoldOrderReqNo="231";StringrefundReqNo="49";StringrefundReqDate="20230720";StringtransAmt="1";Stringchannel="02";StringBuildersb=newStringBuilder();//组装mac加密明文串sb.append("MERCHANTID=").append(merchantId);sb.append("&MERCHANTPWD=").append(merchantPwd);sb.append("&OLDORDERNO=").append(oldOrderNo);sb.append("&OLDORDERREQNO=").append(oldOrderReqNo);sb.append("&REFUNDREQNO=").append(refundReqNo);sb.append("&REFUNDREQDATE=").append(refundReqDate);sb.append("&TRANSAMT=").append(transAmt);sb.append("&KEY=").append("111");//此处是商户的keyStringmac=CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)Map<String,String>param=newHashMap<String,String>();//组装请求参数param.put("merchantId",merchantId);param.put("merchantPwd",merchantPwd);param.put("oldOrderNo",oldOrderNo);param.put("oldOrderReqNo",oldOrderReqNo);param.put("refundReqNo",refundReqNo);param.put("refundReqDate",refundReqDate);param.put("transAmt",transAmt);param.put("channel",channel);param.put("mac",mac);CloseableHttpClienthttpClient=HttpClients.createDefault();HttpPosthttpPost=null;CloseableHttpResponseresponse=null;try{httpPost=newHttpPost("");List<NameValuePair>paramList=newArrayList<NameValuePair>();for(Stringkey:param.keySet()){paramList.add(newBasicNameValuePair(key,param.get(key)));}httpPost.setEntity(newUrlEncodedFormEntity(paramList,Consts.UTF_8));httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());response=httpClient.execute(httpPost);HttpEntityentity=response.getEntity();intstatusCode=response.getStatusLine().getStatusCode();if(HttpStatus.SC_OK==statusCode)//假如响应码是200System.out.println(EntityUtils.toString(entity));}finally{if(response!=null){response.close();}if(httpPost!=null){httpPost.releaseConnection();}httpClient.close();}}}错误码错误码描述备注-309校验商户调用密码犯错-301校验商户MAC校验域犯错1002商户未配置密钥信息BE100002受理机构代码为空BE110028分账信息有误BE110062没有找到符合条件的记录。原订单不存在BE199999请求参数有误具体的参数错误,在描述中有体现BE300000商户不存在BE300006受理机构未配置此交易权限原支付机构不支持退款BE300007商户未配置此交易权限商户没有给定渠道的普通退款权限BE300012分账金额总和不等于订单总金额BE300013商户IP验证异常BE300018订单不支持部分扣款原订单支付机构不支持部分退款BE301001订单金额出现异常,交易失败退款金额不符合规定BE301007不支持批量支付订单的退款,退款失败BE301008订单的业务类型不支持退款,退款失败BE301009订单状态不为成功,退款失败BE301010退款订单受理中,退款失败BE301011订单已退款或冲正,退款失败BE301012订单不为未退款,冲正失败BE301013订单状态为作废,冲正失败BE301014原订单不为当天订单,冲正失败BE999999系统繁忙,请稍后再试系统因素,联系技术支协查退款【建议使用2.3】接口描述接口名称

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论