适用于商户APP内支付场景,商户调用此接口,服务端返回支付参数,据返回的参数唤醒微信、支付宝客户端,消费者完成支付。
接口说明
测试请求URL:https://test-api.huishouqian.com/api/acquiring
生产请求URL:https://api.huishouqian.com/api/acquiring
请求方式:POST
公共请求参数
变量 | 参数名 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
method | 方法名 | string[1,32] | 是 | POLYMERIZE_PROGRAM_CASHIER |
version | 版本 | string[1,16] | 是 | 接口版本:1.0 |
format | 请求格式 | string[1,16] | 是 | 业务请求参数格式,支持:JSON |
merchantNo | 商户号 | string[1,16] | 是 | 商户在慧收钱的商户号,由慧收钱生成并下发 |
signType | 加密类型 | string[1,16] | 是 | RSA2:签名机制查看说明 |
signContent | 业务数据 | string | 是 | 业务请求参数 |
sign | 签名数据 | string[1,128] | 否 | 签名数据 |
业务请求参数
量变 | 参数名 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
subMerchantNo | 门店编号 | string[1,32] | 否 | 商户在慧收钱创建生成的门店编号 |
transNo | 商户订单号 | string[1,64] | 是 | 商户系统内部订单号,唯一不重复 |
payType | 交易类型 | string[1,16] | 是 | ALI_APPLET:支付宝 WECHAT_APPLET:微信 |
returnUrl | 后端通知地址 | string[1,128] | 否 | 当交易有结果时,慧收钱主动通知商户的地址 示例值:https://www.merchant.com/xxx |
orderAmt | 交易金额 | string[1,16] | 是 | 交易金额,单位为:分 示例值:1 |
goodsInfo | 商品信息 | string[1,128] | 是 | 商品说明 示例值:iphone商品 |
requestDate | 请求时间 | string[1,14] | 是 | 请求时间,与当前系统时间相差小于10分钟,格式[yyyyMMddHHmmss] 示例值:20190101140908 |
extend | 附加字段 | string[1,128] | 否 | 附加数据,在查询API和支付通知中原样返回,可作为自定义参数使用 示例值:自定义数据 |
memo | 扩展信息 | string[1,512] | 否 | json格式,将memo参数域转json |
Memo参数域
变量 | 参数名 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
timeExpire | 交易结束时间 | string[1,14] | 否 | 订单失效时间,格式[yyyyMMddHHmmss], 建议:最短失效时间间隔大于1分钟 示例值:20190101140908 |
paylimit | 限制卡类型 | string[1,128] | 否 | 限制不能使用的支付类型 微信:no_credit–指定不能使用信用卡支付 支付宝:查看详情 |
spbillCreateIp | 终端用户IP | string[1,32] | 是 | 消费者端IP,支持ipv4、ipv6格式 示例值:123.12.12.123 |
longitude | 经度 | string[1,32] | 是 | 消费者交易所在地经度 |
latitude | 纬度 | string[1,32] | 是 | 消费者交易所在地纬度 |
公共请求示例
{method=POLYMERIZE_PROGRAM_CASHIER, format=json, signType=RSA2, signContent=【参考业务请求示例】,sign=7ecbad9cb113bd54e6ee45f7fe76883a40428d548b7294ce8f7ba30f211881073820d3ec7a54d3406dcf7a4d3f87f0994c24db54bab430777425147378dbf01afe0491a1c287e5ce380454b0e228a5a20d541874c14addd4100199660e6c4a857fa080ceb4601a0ee21e3fab9d87016198f151a3b16f60a254c1e8b4cd42cdf7, version=1.0, merchantNo=8000000026}
业务请求示例
{
"extend":"自定义字段",
"goodsInfo":"测试",
"memo":"{\"latitude\":\"39.916527\",\"longitude\":\"116.397128\",\"paylimit\":\"balance\",\"spbillCreateIp\":\"172.22.11.2\",\"timeExpire\":\"\"}",
"orderAmt":"1",
"payType":"WECHAT_APPLET",
"requestDate":"20210916133716",
"returnUrl":"",
"transNo":"DD20210916133716294"
}
公共响应参数
变量 | 参数名 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
success | 响应状态 | string[1,32] | 是 | 服务端响应状态,如果为true,则可以调用result;如果为false,则调用errorCode来获取出错信息 |
errorCode | 错误码 | string[1,32] | 否 | 响应码 |
errorMsg | 错误描述 | string[1,128] | 否 | 响应描述 |
result | 响应内容 | string | 否 | 业务响应参数 |
sign | 签名数据 | string[1,128] | 否 | 响应验签数据 |
业务响应参数
变量 | 参数名 | 类型[长度限制] | 必填 | 描述 |
---|---|---|---|---|
transNo | 商户订单号 | string[1,64] | 是 | 原样返回商户订单号 |
tradeNo | 交易订单号 | string[1,32] | 是 | 慧收钱交易订单号 |
orderAmt | 交易金额 | string[1,16] | 是 | 订单交易金额 |
orderStatus | 交易状态 | string[1,16] | 是 | 详见交易状态码 |
finishedDate | 完成时间 | string[1,14] | 否 | 交易完成时间,格式[yyyyMMddHHmmss] 示例值:20190101140908 |
respCode | 错误码 | string[1,32] | 否 | 详见交易响应码 |
respMsg | 错误信息 | string[1,128] | 否 | 详见交易响应码 |
qrCode | 支付参数 | string[1,1024] | 是 | 返回唤醒支付的参数,唤醒方式微信,支付宝。 参考示例: 小程序唤醒示例,原生唤醒示例 |
公共响应示例
{
"success":true,
"result":"【业务响应示例】",
"errorCode":null,
"errorMsg":null,
"sign":"88faca1f2511cc194367ffd96aa78a4cdf25a8284b0cd74b75e331b37c642b26aaeb46f2e4be38080eeb2b78575abd715d58fd30bbf59e167d64d0b714487f9462381e499a48524b1704694f256fa8f6e917d33cd413e365872ef2c7eede37ab4b23f67dcf6f34ec0daf65a34502123f792a646bea6447c126a612087825b17b91e585f74e56220328b198982e62a734387cd8556927e6881878b821969b6e784a20771cf55fad70a4368b8650c0ece0a7903678e1ad6134f6c711329a3e3e456c28ffbfc607fa6bf1f969a4d38b35ca3bf9ad81f71b2d2ad816502d579c0c4fc1f1fccec74a861c4679c5217be0176bf1eebcb57aea381f922fcf920aa471198be972f0c4f9fab10f7885b9c09eda977351b40e9058247ec30da55dd4c0be4a9de7d996e186e9f9ff2693f564f0eaddca9d7ff9f3b813d0c70bdba75b2a1bf9bd4ddf28ff66c45d6ce31e188d8606c82078d842008a9a1b4c1b64b7b2d3632087e46bbc4322181a9832cecd852682fdb72d336b32512bde94e81ba322fe9d2d"
}
业务响应示例
{
"extend":"自定义字段",
"merchantNo":"814000473149",
"orderAmt":"1",
"orderStatus":"INIT",
"payType":"WECHAT_APPLET",
"qrCode":"{\"path\":\"pages/orderInfo/orderInfo\",\"payType\":\"WECHAT_APPLET\",\"miniProgramType\":\"WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_PREVIEW\",\"tradeNo\":\"DYNAMIC2109161337200003650175170\",\"appId\":\"wx09ad161ff5ab0343\",\"ghAppId\":\"gh_cc42edba6b00\"}",
"respCode":"100213",
"respMsg":"订单未支付",
"tradeNo":"DYNAMIC2109161337200003650175170",
"transNo":"DD20210916133716294"
}
小程序唤醒示例
安卓APP微信支付唤醒方式
private void jumpWeiXinMiniProgramPay(OrderBean wxOrderBean, String tradeNo) {
String appId = Constants.APP_ID; // 填移动应用(App)的 AppId,非小程序的 AppID
IWXAPI api = WXAPIFactory.createWXAPI(this, appId);
WXLaunchMiniProgram.Req req = new WXLaunchMiniProgram.Req();
req.userName = wxOrderBean.getGhAppId(); // 填小程序原始id
LogUtil.d("PATH", "+++path:"+wxOrderBean.getPath());
req.path = wxOrderBean.getPath() + "?tradeNo=" + tradeNo; //路径以及参数
if ("WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE".equals(wxOrderBean.getMiniProgramType())) { //正式版
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE;
} else if ("WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_PREVIEW".equals(wxOrderBean.getMiniProgramType())) { //体验版
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_PREVIEW;
} else { //测试版
req.miniprogramType = WXLaunchMiniProgram.Req.MINIPROGRAM_TYPE_TEST;
}
api.sendReq(req);
}
安卓APP支付宝支付唤醒方式
private void jumpAilMiniProgramPay(OrderBean orderBean, String tradeNo) {
StringBuilder stringBuilder = new StringBuilder("alipays://platformapi/startapp?appId=")
.append(orderBean.getAppId())
.append("&page=")
.append(orderBean.getPath())
.append("?tradeNo=")
.append(tradeNo);
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(stringBuilder.toString()));
startActivityForResult(intent, 1001);
}
IOS APP支付宝支付唤醒方式
/**
打开支付宝小程序
@param params 打开参数
*/
- (void)openALiMiniProgramWithZfbId:(NSString *)zfbId path:(NSString *)path params:(NSDictionary *)params
{
NSString *paramsString = nil;
if (params.count>0) {
paramsString = [NSString serializeToUrlByDicString:params];
}
path = [NSString stringWithFormat:@"alipays://platformapi/startapp?appId=%@&page=%@",zfbId,path];
if (paramsString.length>0) {
path = [NSString stringWithFormat:@"%@?%@",path,[paramsString stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
}
NSLog(@"alipath = %@",path);
NSURL *url = [NSURL URLWithString:path];
if (@available(iOS 10.0, *)) {
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:^(BOOL success) {
}];
} else {
// Fallback on earlier versions
[[UIApplication sharedApplication] openURL:url];
}
}
IOS APP微信支付唤醒方式
/**
打开微信小程序
@param params 打开参数
*/
- (void)openWXMiniProgramWithWxId:(NSString *)wxId path:(NSString *)path miniProgramType:(NSString *)miniProgramType Params:(NSDictionary *)params
{
if ([WXApi isWXAppInstalled]) {
NSString *paramsString = nil;
if (params.count>0) {
paramsString = [NSString serializeToUrlByDicString:params];
}
if (paramsString.length>0) {
path = [NSString stringWithFormat:@"%@?%@",path,paramsString];
}
NSLog(@"path = %@",path);
WXLaunchMiniProgramReq *launchMiniProgramReq = [WXLaunchMiniProgramReq object];
launchMiniProgramReq.userName = wxId;
launchMiniProgramReq.path = path;
if ([miniProgramType isEqualToString:@"WXLaunchMiniProgram.Req.MINIPTOGRAM_TYPE_RELEASE"]) {
launchMiniProgramReq.miniProgramType = WXMiniProgramTypeRelease;
}else
{
launchMiniProgramReq.miniProgramType = WXMiniProgramTypePreview;//体验版
}
[WXApi sendReq:launchMiniProgramReq completion:^(BOOL success) {
}];
}else
{
[[ToastView getInstance] displayToastWithMessage:@"请先安装微信App"];
}
}
原生唤醒示例
安卓APP支付宝支付唤醒方式
https://opendocs.alipay.com/open/204/105296
安卓APP微信支付唤醒方式
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml
IOS APP支付宝支付唤醒方式
https://opendocs.alipay.com/open/204/105295
IOS 安卓APP微信支付唤醒方式
https://pay.weixin.qq.com/wiki/doc/apiv3/open/pay/chapter2_5_2.shtml
交易状态码
状态码 | 描述 |
---|---|
INIT | 初始化 |
PROCESSING | 处理中 |
SUCCESS | 成功 |
FAIL | 失败 |
交易响应码
响应码 | 描述 | 解决方案 |
---|---|---|
100004 | 不支持该支付通道的交易 | |
100019 | 无可用渠道 | |
100200 | 订单已支付成功,请勿重复支付 | |
100203 | 交易失败 | |
100204 | 订单已过期,请使用新的订单号发起交易 | |
100205 | 订单已存在 | |
100206 | 订单不存在 | |
100207 | 交易已取消 | |
100208 | 订单已失败 | |
100209 | 交易失败,黑名单用户 | |
100210 | 交易失败,非白名单用户 | |
100211 | 交易记录不存在 | |
100212 | 交易失败,风险受限 | |
100500 | 余额不足 | |
100501 | 交易金额超限 | |
100502 | 交易金额低于限额 | |
100503 | 交易金额不正确 | |
100505 | 单日交易金额超限 | |
100506 | 单笔交易金额超限 | |
100507 | 单月交易金额超限 | |
100600 | 短信验证码错误 | |
100601 | 短信验证码失效 | |
100602 | 请确认是否发送短信,当前交易必须通过短信验证 | |
200002 | 非法的交易 | |
200003 | 订单号已存在,请勿重复提交 | |
200004 | 订单不存在 | |
200005 | 原订单金额校验不通过 | |
200010 | 批次号已存在 | |
200011 | 订单数量超过单批次处理量 | |
200012 | 请求太过频繁,请稍后再试 | |
200015 | 不支持此支付类型 | |
200017 | 订单关闭成功 | |
200018 | 订单关闭失败,请重试! | |
200107 | 分账参数校验异常 | |
200108 | 交易主体从属关系异常 | |
200109 | 业务订单不存在 | |
200110 | 业务订单状态异常 | |
200111 | 支付金额超限 | |
200112 | 业务订单已失效 | |
200113 | 该业务订单不支持部分支付 | |
200114 | 业务订单已关闭 | |
200115 | 非法交易 | |
200116 | 存在成功/处理中订单,请勿重复提交 | |
200117 | 订单已经分账不能发起退款/撤销 | |
200118 | 订单金额不等于交易金额+营销金额 | |
200119 | 订单金额+交易金额不能都为0 | |
200120 | 营销账户信息不能为空 | |
200201 | 商户状态异常,无法进行交易 | |
200203 | 商户与子商户关系不对应,无法进行交易 | |
200204 | 门店信息不存在,无法进行交易 | |
200205 | 终端商户信息不存在,无法进行交易 | |
200206 | 请求ip白名单未配置 | |
200207 | 账户状态异常 | |
200209 | 门店信息不存在 | |
200210 | 设备信息不存在 | |
200302 | 产品渠道不能为空 | |
300401 | 交易非法,订单已完成 | |
300701 | 商户限额校验不通过 |
作者:xiaochen 创建时间:2023-05-15 11:12
最后编辑:xiaochen 更新时间:2024-10-21 15:45
最后编辑:xiaochen 更新时间:2024-10-21 15:45