翼支付商户接入规范-条码支付分册V1.4(2)(3)

2018-11-21 22:20

2.1.6 接口说明

1. 商户的商户号由翼支付统一分配,商户需与翼支付的运营人员对接,提供商户资料,申请

正式的商户号。

2. 商户要保证订单号的唯一性。

3. 订单请求流水号不能重复,建议以日期时间(yyyyMMDDhhmmss格式)加一固定长度(不

小于6位)流水号组成,如: 20061012132425 + 0000001等。

4. 订单流水号和订单号可以相同。(使用翼支付提供的“流程测试”商户时除外,如果相同

会提示订单或流水号重复的错误)

5. MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其顺序

如下: a) 顺序

MERCHANTID=123456789&ORDERNO=123456&ORDERREQNO=1234567&ORDERDATE=200603141210&BARCODE=111111&ORDERAMT=1&KEY=123456

b) 此处的KEY为商户的数据KEY,可以通过翼支付的统一运行地址生成。此数据KEY

对本文档其它接口进行

MAC

校验时同样适用。

https://managerwg.bestpay.com.cn/login.jsp

c) 要求:将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行摘要,

然后将摘要果转成16进制字符串,字符串建议使用大写,就是校验域MAC的值,并在提交订单时,将MAC值和订单信息一起提交到翼支付网关翼支付网关平台。 d) 需保证MAC校验时中的各个参数,与下单请求时的参数完全一致。 6. 商户若需分账,则填写ledgerDetail字段,例如:

a) 规则:023101111:4|023102222:3|023103333:1

b) 说明:订单总金额4+3+1=8分,商户023101111分账4分,每组对应关系之间“|”

分隔

c) 分账权限与一般支付权限不同。商户分账支付的权限需要额外申请,并且在结算时翼

支付将形成各个分账商户的对账文件。

7. 下单支付接口返回的success值并不是最终支付结果。支付结果在下单成功情况下,result

的transStatus字段代表支付结果。

8. 返回结果中的翼支付网关流水号ourTransNo,当用户完成支付后才会生成。对于有密支

付情况,由于用户未实际支付,返回的流水号为空字符串。商户可在查询接口获得该流水号。

9. 接口响应中的sign值是网关根据返回结果进行的前面,保证收到结果的完整性,商户可以根据需要进行验签,目前签名默认为MAC形式,参与MAC运算的字符及其顺序如下:

MERCHANTID=0018888888&ORDERNO=1234567890&

ORDERREQNO=20141001&ORDERDATE=null&OURTRANSNO=201508080808&TRANSAMT=10&TRANSSTATUS=B&ENCODETYPE=1&KEY=123456 ORDERDATE在下单接口返回时暂未使用,目前始终为null。

2.1.7 客户端测试用例

注:此用例仅供参考

import com.bestpay.paycenter.commons.util.CryptTool; import org.apache.http.Consts; import org.apache.http.HttpEntity; import org.apache.http.HttpStatus;

import org.apache.http.NameValuePair;

import org.apache.http.client.config.RequestConfig;

import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpPost;

import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients;

import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import javax.net.ssl.SSLContext; import javax.xml.namespace.QName;

import java.security.cert.CertificateException; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

import org.apache.http.conn.ssl.SSLConnectionSocketFactory; import org.apache.http.conn.ssl.SSLContextBuilder; import org.apache.http.conn.ssl.TrustStrategy;

import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;

public class TestClient {

public static void main(String[] args) throws Exception{ String merchantId = \ String orderNo = \

String orderReqNo = \ String orderDate = \ String barcode = \

String orderAmt = \

StringBuilder sb = new StringBuilder();//组装mac加密明文串 sb.append(\ sb.append(\

sb.append(\ sb.append(\TE=\ sb.append(\ sb.append(\

sb.append(\此处是商户的key

String mac = CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)

Map param = new HashMap();//组装请求参数

param.put(\merchantId); param.put(\merchantId); param.put(\barcode); param.put(\orderNo);

param.put(\orderReqNo); param.put(\orderDate); param.put(\\ param.put(\\ param.put(\\

param.put(\orderAmt); param.put(\\ param.put(\\

param.put(\\条码支付\ param.put(\\

param.put(\\ param.put(\\ param.put(\\ param.put(\mac);

//创建信任证书 CloseableHttpClient httpClient = createSSLClientDefault(); HttpPost httpPost = null;

CloseableHttpResponse response = null; try {

httpPost = new HttpPost(\\

List paramList = new ArrayList(); for (String key : param.keySet()) {

paramList.add(new BasicNameValuePair(key, param.get(key))); }

httpPost.setEntity(new UrlEncodedFormEntity(paramList, Consts.UTF_8));

httpPost.setConfig(RequestConfig.custom().setConnectTimeout(30000).setSocketTimeout(30000).build());

response = httpClient.execute(httpPost); HttpEntity entity = response.getEntity();

int statusCode = response.getStatusLine().getStatusCode(); if(HttpStatus.SC_OK == statusCode)//如果响应码是200 System.out.println(EntityUtils.toString(entity));; } finally {

if (response != null) { response.close(); }

if (httpPost != null) {

httpPost.releaseConnection(); }

httpClient.close(); } } }

//创建链接 public static CloseableHttpClient createSSLClientDefault() throws Exception {

SSLContext sslContext = new SSLContextBuilder().loadTrustMaterial(null, new AllTrustStrategy()).build();

SSLConnectionSocketFactory sslSf = new SSLConnectionSocketFactory(sslContext); return HttpClients.custom().setSSLSocketFactory(sslSf).build(); } //加载证书 private static class AllTrustStrategy implements TrustStrategy {

public boolean isTrusted(X509Certificate[] x509Certificates, String s) throws CertificateException { return true; } } }

说明

当使用org.apache.http.client之外的第三方类封装HTTP请求时,需要注意

1. 2.

HTTP请求中的字符串,需要经过URL编码,其中的中文字符使用UTF-8。 HTTP

请求中的

Content-Type

使用

application/x-www-form-urlencoded;

charset=UTF-8,请求方法为POST。

2.1.8 错误码

错误码 BE199999 BARCODE_VALIDATE_ERROR 849 5146 4008 -301 -302 -304 1001 1002 1003 -3061 -3062 -3063 -3064 -3065

卡信息解密失败 查询绑卡信息出错 绑卡信息不存在 订单MAC域验证失败 校验订单出错 商户未配置此交易权限 商户未注册 商户未配置密钥信息 商户未开通银行 分账商户不存在 分账金额有误

分账金额总和不等于订单金额 分账商户父商户有误 分账信息不允许有两个相同商户

BARCODE_STORE_CODE_IS_EMPTY

BE999999

描述

请求参数有误 条形码验证异常

备注

检查HTTP请求相关代码

用户信息异常 用户信息异常 用户信息异常

检查订单金额

检查数据KEY是否申请

条码门店号不能为空

系统繁忙,请稍后再试 系统原因,联系技术支协查


翼支付商户接入规范-条码支付分册V1.4(2)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:小学英语3年级下可数名词单数变复数规则

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: