# 四、上报接口对接
# 上报接口场景说明
交易上报 和 付款码上报 接口集成二选一,具体集成根据商户适合场景。
交易上报: 针对非刷脸支付交易,接口根据商户号(子商户号)和生成的商户订单号作为请求上报。
付款码上报: 针对微信付款码支付交易,而无法获取到商户号和订单号的可以通过此接口做交易上报。
# 接入步骤
1、确保网络符合微信刷脸支付sdk依赖的网络环境,若涉及代理可参考代理设置
2、APP版本:交易上报接口需1.12及以上版本;付款码上报接口需2.11及以上版本
3、推荐使用付款码上报接口,若无法获取付款码,可使用交易上报接口
4、具体接口使用详见接口介绍和实践指引
5、调用上报成功后请联系[微信]进行验收
注:调用上报接口,请确保SDK是正常初始化成功的;接口调用时序需在非刷脸交易成功后调用上报接口
# 1. 付款码上报接口
# 付款码上报(reportPaycode)
接口作用: 设备获取到微信付款码,而无法获取到商户号和订单号的可以通过此接口做交易上报
支持版本: 2.11及以上
//付款码上报
public void reportPaycode(final Map info, final IWxPayfaceCallback callback);
# 请求参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
auth_code | 是 | string | 微信支付18位付款码 |
# 接口返回
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 实践指引
//上报付款码
Map<String, String> m1 = new HashMap<String, String>();
m1.put("auth_code", "填您的微信支付18位付款码");
WxPayFace.getInstance().reportPaycode(m1, new WxpayfaceCallback(){
@Override
public void response(Map info) throws RemoteException {
if (info == null) {
new RuntimeException("调用返回为空").printStackTrace();
return ;
}
String code = (String) info.get("return_code");
Integer errcode = (Integer) info.get("err_code");
String msg = (String) info.get("return_msg");
Log.d(TAG, "response info :: " + code + " | " + msg);
if (code == null || !code.equals("SUCCESS")) {
new RuntimeException("调用返回非成功信息: " + msg).printStackTrace();
return ;
}
Log.d(TAG, "调用返回成功");
/*
在这里处理您自己的业务逻辑
*/
}
});
# 2. 订单上报接口
# 订单上报接口(reportOrder)
接口作用: 设备产生的非刷脸支付交易,都必须调用此接口上报交易信息, 建议每笔非刷脸支付交易发生后,都调用该接口。
支持版本: 1.12及以上
# 接口函数
//订单上报接口。
public void reportOrder(final Map info, final IWxPayfaceCallback callback);
# 请求参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
mch_id | 是 | string | 商户号。(若是服务商模式, 则填服务商商户号) |
sub_mch_id | 否 | string | 子商户号。(服务商模式填写, 其它不填) |
out_trade_no | 是 | string | 商户订单号。 |
# 返回参数
参数 | 必填 | 类型 | 说明 |
---|---|---|---|
return_code | 是 | string | 错误码。公共定义见 公共错误码 |
err_code | 否 | Integer | 可为空,二级错误码,公共定义见 二级错误码 |
return_msg | 是 | string(128) | 对错误码的描述 |
# 实践指引
public void reportOrder() {
Map<String, Object> m1 = new HashMap<String, Object>();
m1.put("mch_id", "填您的商户号"); // 商户号
// m1.put("sub_mch_id", "填您的子商户号"); // 子商户号(非服务商模式不填)
m1.put("out_trade_no", "填您的商户订单号"); // 填写商户订单号
WxPayFace.getInstance().reportOrder(m1, new IWxPayfaceCallback() {
@Override
public void response(Map info) throws RemoteException {
if (info == null) {
new RuntimeException("调用返回为空").printStackTrace();
return ;
}
String code = (String) info.get("return_code");
Integer errcode = (Integer) info.get("err_code");
String msg = (String) info.get("return_msg");
Log.d(TAG, "response info :: " + code + " | " + msg);
if (code == null || !code.equals("SUCCESS")) {
new RuntimeException("调用返回非成功信息: " + msg).printStackTrace();
return ;
}
Log.d(TAG, "调用返回成功");
/*
在这里处理您自己的业务逻辑
*/
}
});
}
# 常见上报不成功问题
Q1: 同一个程序逻辑,有些设备可以上报成功,有些设备却不行?
A1: 和设备没有关系,主要是设备自身是否能连同外网,是否有内网防火墙拦截,iot长连接是否初始化成功等,商户调度的只是简单的人脸SDK接口,理论上刷脸通的话,上报接口就是通的
Q2: 上报接口,重复上报了会有问题吗?或者没交易成功的上报了会怎么样?
A2:重复上报和没交易成功上报只会影响统计,实际商户侧上报的数量会远大于微信侧核实的上报数量
Q3: 非刷脸支付的mch_id和sub_mch_id和扫脸支付的是同一个么?上报时是否可以直接使用扫脸支付的这两个参数?
A3:是同一个,使用刷脸的mch_id和sub_mch_id即可
Q4: 付款码交易上报接口是否只能针对微信付款码?
A4: 需使用设备获取到微信付款码