2.2 订单查询 2.2.1 接口描述
接口名称 接口描述 接口类型 传输方式 数据编码 接口提供者 接口使用者
订单查询接口 为商户提供入口 HTTPS POST Utf-8 翼支付网关平台 商户业务平台 2.2.2 接口地址
生产地址 https://webpaywg.bestpay.com.cn/query/queryOrder
2.2.3 接口参数
属性 merchantId orderNo orderReqNo 含义 商户号 订单号 订单请求交易流水号 类型长度 n30 an30 an30 必填 M M M 备注 由翼支付网关平台统一分配 由商户平台提供,数字或字母组成 由商户平台提供,数字或字母组成 orderDate mac 订单日期 mac校验域 an20 an256 M M 日期格式:yyyyMMdd 默认为0,当加密方式为1时有意义,采用标准的MD5算法,由商户实现
2.2.4 接口响应
参数 含义 类型和长度 备注 success 是否查询到订单 boolean True:成功 False:失败 result 调用返回值 ans100 当success为true时取此值, result中包含的信息见下表 errorCode errorMsg refundFlag 错误码 错误描述 退款标识 ans10 ans10 n1 当success为false时取此值,result为空 当success为false时取此值,result为空 0代表为退款,1 已退款2部分退款 3已冲正
查询成功success为true时响应结果result(MAP)为:
参数 merchantId orderNo orderReqNo orderDate 含义 商户号 商户总订单号 商户总订单请求流水号 商户下单时间 n20 M 类型长度 n30 an30 an30 M M M 必填 一分配 备注 由翼支付网关平台统查询到的商户订单号 查询到的商户请求流水号 yyyyMMDDHHmmss 查询到的订单实际日期,可能与查询请求日期不同 ourTransNo transAmt transStatus 网关平台流水号 交易金额 交易状态 n30 n10 n1 M M M 翼支付生成的内部流水号 单位:分 A:请求(支付中) B:成功(支付成功) C:失败 G:订单作废 encodeType 加密方式 n1 O 1代表MD5 3代表RSA 9代表CA 默认为1 sign sign校验域 an M 验证签名,签名方式根据encodeType决定 refundFlag 退款标识 n1 M 0代表为退款,1 已退款2部分退款 3已冲正 客户条码消费时的支付手机号,中间4位被隐去,用*代替 如180****2687 customerID 客户支付手机号 n11 M
2.2.5 请求及响应示例
请求示例
orderReqNo=20150713093607000001&orderNo=20150713093607&orderDate=20150713&mac=880D9E9DE657E3C351697D3B6CFE5626&merchantId=043101180050000
HTTP请求对参数的顺序没有要求,保证参数名称完全一致(包括大小写)。
响应示例
订单存在
{\ReqNo\:\EABEB39328934144\sg\
订单不存在
{\没有找到符合条件的记录。\
其它错误
{\订单日期格式有误\ 接口响应的格式为JSON。
2.2.6 接口说明
1. MAC校验,保证了交易信息到翼支付网关平台的完整性,参与MAC运算的字符及其
顺序如下: a) 顺
序
:
MERCHANTID=0018888888&ORDERNO=1234567890&
ORDERREQNO=20141001&ORDERDATE=201507020&KEY=123456 b) 要求:将上述固定顺序组织的字符串,参数名均为大写,使用标准md5算法进行
摘要,然后将摘要果转成16进制字符串,字符串建议使用大写, 就是校验域MAC的值,并在提交订单时,将MAC值和订单信息一起提交到翼支付网关翼支付网关平台。KEY值为商户的数据KEY。
2. 接口响应的success字段标识的是查询过程的结果,并不代表交易的成功和失败。交
易的结果当success为true时,取result中的tranStatus字段。字段为A,代表请求状态,表明用户正在输入密码或交易本身在进行中。字段为B时,代表本次交易成功。字段为C时,代表本次交易失败。字段为G时,代表本次交易已被作废。
3. 订单请求时,为了加快查询的速度,需给定下单的日期,实际的查询范围,会在给定日
期的前一天到给定日期的后一天范围内进行。
4. 接口响应中的sign值是网关根据返回结果进行的前面,保证收到结果的完整性,商户
可以根据需要进行验签,目前签名默认为MAC形式,参与MAC运算的字符及其顺序如下: 顺
序
:
MERCHANTID=0018888888&ORDERNO=1234567890&
ORDERREQNO=20141001&ORDERDATE=2015070215000000&OURTRANSNO=201508080808&TRANSAMT=10&TRANSSTATUS=B&ENCODETYPE=1&KEY=123456
2.2.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 java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map;
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;
public class QueryClient {
public static void main(String[] args) throws Exception { String merchantId = \ String orderNo = \
String orderReqNo = \ String orderDate = \
StringBuilder sb = new StringBuilder();//组装mac加密明文串 sb.append(\ sb.append(\
sb.append(\ sb.append(\TE=\
sb.append(\此处是商户的key
String mac = CryptTool.md5Digest(sb.toString());//进行md5加密(商户自己封装MD5加密工具类,此处只提供参考)
Map
param.put(\merchantId); param.put(\orderNo);
param.put(\orderReqNo); param.put(\orderDate); param.put(\mac);
//创建信任证书 CloseableHttpClient httpClient = createSSLClientDefault(); HttpPost httpPost = null;
CloseableHttpResponse response = null; try {
//发起HTTP的POST请求
httpPost = new HttpPost(\ List
paramList.add(new BasicNameValuePair(key, param.get(key)));