微信支付宝类接口

自2019年5月5日起上线的新商户,完成入驻后商户需继续完成微信官方实名认证后才能进行交易,请参考 商户实名认证指引 完成实名认证。

209 扫码支付接口

功能说明

调用本接口后,跳转二维码页面,用户使用支付宝或者微信扫码支付。

调用方式:页面浏览器

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 209
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
商品描述 goods_desc 变长127位String 必须  
二维码支付类型 pay_type 定长2位String 必须 04 : 微信 05 : 支付宝
请求类型 request_type 定长2位String 必须 00 : PC端(汇付页面显示二维码) 01 : 移动端(汇付页面显示二维码) 如果需要直接返回二维码地址,请对接APP支付接口(218)
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
分账账户串 div_detail 变长String 必须 该参数表示分账对象,将金额分给不同用户的账户中;分账串定义可参照下表
数据格式:[{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’}],可分给多个对象,每个对象大括号{}用逗号隔开
divCustId和divAcctId即为开户接口返回的user_cust_id和acct_id,若分给商户平台自己,可通过上线邮件中查找商户客户号和子账号信息
操作员 oper_user_Id 变长32位String 可选  
商品类型 goods_type 变长32位String 可选  
设备号 device_info 变长32位String 可选  
商户前台应答地址 ret_url 变长128位的String 可选 请求类型为后端时,必须输入
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
二级商户号 secondary_mer_id 定长10位的String 可选 对于开启二级商户模式的商户,必须输入其配下的二级商户号
是否支持贷记卡 limit_pay 定长1位String 可选 1为禁用,否则可不填
设备信息 dev_info_json 变长1024位String 必须 参见 设备静态信息

分账账户串(div_detail )内容:

参数中文名称 参数名称 数据格式 是否必须 说明
分账客户号 divCustId 变长16位String 必须 div_detail参数下的二级参数 分账客户号
分账账户号 divAcctId 变长9位String 必须 div_detail参数下的二级参数 分账账户号
分账金额 divAmt 变长14位String 必须 div_detail参数下的二级参数 分账金额,保留两位小数
是否冻结标志 divFreezeFg 定长2位String 必须 div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结

返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 209
应答返回码 resp_code 定长6位String 必须 209000–调用成功,其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
银行返回码 bg_bank_code 变长32位String 可选  
银行返回描述 bg_bank_message 变长200位String 可选  
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+ 10位系统流水号
商品描述 goods_desc 变长1024位String 必须  
二维码支付类型 pay_type 定长2位String 必须 04 : 微信 05 : 支付宝
请求类型 request_type 定长2位String 必须 00 : PC端(汇付页面显示二维码) 01 : 移动端(汇付页面显示二维码)
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
分账账户串 div_detail 变长String 必须 业务类型为支付时必传,分账账户必须是入账客户的账户 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}]
二维码链接 qrcode_url 变长128位String 可选  
操作员 oper_user_id 变长32位String 可选  
商品类型 goods_type 变长32位String 可选  
设备号 device_info 变长32位String 可选  
外部订单流水号 out_trans_id 变长64位String 可选 外部订单流水号,指支付宝、微信、银联流水号
商户前台应答地址 ret_url 变长128位的String 可选 请求类型为后端时,必须输入
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
手续费金额 fee_amt 变长14位String 可选 手续费金额,格式为###.00
手续费扣款客户号 fee_cust_id 定长16位String 可选 手续费扣款客户号
手续费子账户号 fee_acct_id 变长9位String 可选 手续费扣款子账户号

返回码

返回码 返回描述
209000 交易成功
209002 请求已受理
209003 交易失败
209004 交易关闭
209098 系统超时
209099 系统异常
209100 请求参数非法
209101 商户无此接口权限
209102 验证签名失败
209103 商户状态异常
209104 用户状态异常
209107 消息类型与签名内容不一致
209108 商户客户号与签名内容不一致
209109 版本号与签名内容不一致
209110 商户号不存在
209104 用户状态异常
209105 账户状态异常
209727 分账信息异常
209721 分账串内容不能超过五个
209722 分账串部分字段为空
209723 分账串金额格式错误
209728 分账串账户信息格式错误
209729 分账串账户异常
209726 分账信息账户状态异常
209725 分账信息用户状态异常
209741 分账串内容重复
209732 分账串客户号信息格式错误
209724 分账串累计金额不等于订单金额
209202 交易订单号重复
209744 商户不支持扫码支付
209204 商户配置异常
209303 商户支付基础信息未配置
209321 支付手续费未配置
209323 支付手续费只能向商户收取
209314 支付手续费账户状态不正常
209215 请补录身份信息
209804 商户超限额或限次
209805 商户未开通该功能权限
209806 商户交易限制
209341 订单已关闭
209342 已支付成功
209343 已支付失败
209344 订单信息不匹配
209345 未获取二维码链接

代码示例

java

String valueObj = "{
       "version": "10",
       "cmd_id": "209",
       "mer_cust_id": "6666000000026086",
       "user_cust_id": "6666000000026190",
       "order_id": "209017108",
       "order_date": "20170829",
       "trans_amt": "0.03",
       "bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
       "mer_priv": "*1erwer.868@",
       "ret_url": "",
       "extension": "u",
       "div_detail": "[{'divCustId':'6666000000026185','divAcctId':'79704','divAmt':'0.02','divFreezeFg':'01'},{'divCustId':'6666000000026086','divAcctId':'79506','divAmt':'0.01','divFreezeFg':'00'}]",
       "device_info": "测试测qq",
       "goods_desc": "分账串,有冻结",
       "goods_type": "试测试试qq",

       "oper_user_id": "试试qq",
       "order_expire_time": "9900",
       "pay_type": "04",
       "request_type": "01"
       }";

 String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
 String checkValue = sign(valueObj);
 String cmdId = "209";
 String merCustId = "6666000000026086";
 String version = "10";
 httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
 PrintWriter out = httpServletResponse.getWriter();
 out.println();
 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
 out.println("<HTML>");
 out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
 out.println(" <BODY style=\"display: none\">");
 out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
 out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
 out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
 out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
 out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
 out.println("</from>");
 out.println("<script>window.document.submitForm.submit();</script>");
 out.println(" </BODY>");
 out.println("</HTML>");
 out.flush();
 out.close();
成功响应:
200
      {
        "cmd_id": "209",
        "resp_code": "209000",
        "resp_desc": "交易成功",
        "mer_cust_id" : "6666000000026086",
        "order_date": "20180327",
        "order_id": "10000000001",
        .......
      }
失败响应:
200
    {
      "cmd_id": "209",
      "resp_code": "209099",
      "resp_desc": "交易失败",
      "mer_cust_id" : "6666000000026086",
      "order_date": "20180327",
      "order_id": "10000000001",
      .......
    }

页面展示

218 APP 支付(支付宝、微信、银联云闪付)

功能说明

本接口支持支付宝正扫、微信正扫、银联正扫、微信 APP 支付、微信公众号支付、APPLE支付、支付宝统一下单和小程序支付功能。

调用方式:系统调用

微信 APP 支付业务流程说明:

_images/wx_flow.png

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 Version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 218
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
支付类型 pay_type 定长2位String 必须 04:微信正扫; 05:支付正扫; 10 : 微信APP支付; 12:支付宝统一下单; 13:微信公众号; 14: APPLE支付; 18: 银联正扫; 19: 小程序支付
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
入账客户号 in_cust_id 定长16位String 可选 (入账客户号、入账账户号) 和 分账串 两者必填一项,且只能填一项
入账账户号 in_acct_id 变长9位String 可选 开户返回的acct_id,若是分给平台自己,可以通过邮件查找商户客户号和子账号信息。(in_cust_id同理)
分账账户串 div_detail 变长String 可选 div_detail和上方的(in_cust_id,in_acct_id)两者必填一项,且只能填一项;分账串定义可参照下表;注:如果不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号
数据格式:[{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’}],可分给多个对象,每个对象大括号{}用逗号隔开
该参数表示分账对象,将金额分给虚拟用户的账户中,divCustId和divAcctId即为开户接口返回的user_cust_id和acct_id,若分给平台自己,可通过上线邮件中查找商户客户号和子账号信息
是否原生态 is_raw 定长1位String 可选 微信公众号支付时的参数 是否原生态 是:1 否:0 注:为空时,默认1
APPID app_id 变长32位String 可选 商户在微信申请的APPID; 支付类型为微信APP支付、微信公众号支付、微信小程序支付时不能为空
买家用户ID buyer_id 变长100位String 可选 支付宝统一下单时必填;微信公众号支付、微信小程序支付时: 联调环境下传空 生产环境下不能为空
商品描述 goods_desc 变长127位String 必须  
商品类型 goods_type 定长4位String 可选  
附加信可选息 attach_info 变长128位String 可选 微信公众号支付的参数
商品标记 good_tag 变长32位String 可选 微信公众号支付的参数 商品标记,优惠标志等
设备号 device_info 变长32位String 可选  
IP地址 ip_addr 变长20位String 可选  
经纬度 location_val 变长30位String 可选 参数格式:116.538799,39.983523
支付返回地址 ret_url 变长128位的String 可选 微信公众号支付时,必须输入 用于微信支付成功后跳转的页面; 支付宝统一下单时,必须输入 ; 微信小程序时,必须输入
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数,数据格式:{“province”:”31”,”city”:”310000”} 参考说明
二级商户号 secondary_mer_id 定长10位的String 可选 对于开启二级商户模式的商户,必须输入其配下的二级商户号
是否支持贷记卡 limit_pay 定长1位的String 可选 1为禁用,否则可不填
设备信息 dev_info_json 变长1024位String 必须 参见 设备静态信息
订单超时时间 order_expire_time 定长14位String 可选 单位秒 格式为YYYYMMDDHHmmss

分账账户串(div_detail )内容:

参数中文名称 参数名称 数据格式 是否必须 说明
分账客户号 divCustId 变长16位String 必须 div_detail参数下的二级参数 分账客户号
分账账户号 divAcctId 变长9位String 必须 div_detail参数下的二级参数 分账账户号
分账金额 divAmt 变长14位String 必须 div_detail参数下的二级参数 分账金额,保留两位小数
是否冻结标志 divFreezeFg 定长2位String 必须 div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结

注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号

同步返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
应答返回码 resp_code 定长6位String 必须 218002–调用成功,其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
银行返回码 bg_bank_code 变长32位String 可选  
银行返回描述 bg_bank_message 变长200位String 可选  
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+ 10位系统流水号
支付地址 pay_url 变长64位String 可选 微信扫码、支付宝扫码、银联扫码交易可通过该url自行生成二维码进行扫码支付
支付宝统一下单时,在支付宝浏览器下直接用此链接请求支付宝支付
动态口令 token_id 变长64位String 可选 微信公众号参数 根据token_id组装如下url地址,在微信下可直接唤起支付 https://pay.swiftpass.cn/pay/jspay?token_id=9a0610bc519e782e6275e8c7dd94a445&showwxtitle=1
支付信息 pay_info 变长String 可选 微信公众号支付时,可通过该参数调微信公众号接口,详看下方 微信公众号开发示例 ,数据格式为: {“appId”:”wx1f87d44db95cba7a”,”timeStamp”:”1514459875237”,”status”:”0”,”signType”:”RSA”,”package”:”prepay_id=wx20171228191755dff683fea20032942684”,”callback_url”:”https://www.baidu.com”,”nonceStr”:”1514459875237”,”paySign”:”5DEE76A6C0CB7BE924BDB11945D591CA”},注:使用pay_info里的调微信公众号时,任何一个参数都不要改,就用返回的参数去调微信公众号
微信APP支付时,可通过该参数调微信app接口,详看下方 微信APP支付商户端开发示例 ,数据格式为: {“sign”:”F21465FEAE87F4C02E639D846B2CFCC2”,”timestamp”:”1504863344”,”noncestr”:”1504863344725”,”partnerid”:”12723495”,”prepayid”:”wx20170908173544b0662982990254372413”,”package”:”Sign=WXPay”,”appid”:”324125”} ,注:使用pay_info里的调微信app支付时,任何一个参数都不要改,就用返回的参数去调微信app支付
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
手续费金额 fee_amt 变长14位String 可选 手续费金额,格式为###.00
手续费扣款客户号 fee_cust_id 定长16位String 可选 手续费扣款客户号
手续费子账户号 fee_acct_id 变长9位String 可选 手续费扣款子账户号
内外扣标志 fee_flag 定长1位String 可选 0 : 内扣; 1 : 外扣

异步返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 218
应答返回码 resp_code 定长6位String 必须 218000—交易成功,其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
银行返回码 bg_bank_code 变长32位String 可选  
银行返回描述 bg_bank_message 变长200位String 可选  
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+ 10位系统流水号
支付地址 pay_url 变长64位String 可选  
动态口令 token_id 变长64位String 可选  
支付信息 pay_info 变长String 可选  
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
支付类型 pay_type 定长2位String 必须 04:微信正扫 05:支付宝正扫 10: 微信APP支付 12:支付宝统一下单 13:微信公众号
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
入账客户号 in_cust_id 定长16位String 可选 (入账客户号、入账账户号) 和 分账账户串必填一项
入账账户号 in_acct_id 变长9位String 可选  
分账账户串 div_detail 变长String 可选 (入账客户号、入账账户号) 和 分账账户串必填一项;
是否原生态 is_raw 定长1位String 可选 微信公众号支付时的参数 是否原生态 是:1 否:0 注:为空时,默认1
APPID app_id 变长32位String 可选 商户在微信的APPID
买家用户ID buyer_id 变长100位String 可选  
商品描述 goods_desc 变长127位String 必须  
商品类型 goods_type 定长4位String 可选  
附加信可选息 attach_info 变长128位String 可选 微信公众号支付的参数
商品标记 good_tag 变长32位String 可选 微信公众号支付的参数 商品标记,优惠标志等
设备号 device_info 变长32位String 可选  
IP地址 ip_addr 变长20位String 可选  
经纬度 location_val 变长30位String 可选  
外部订单流水号 out_trans_id 变长64位String 可选 外部订单流水号,指支付宝、微信、银联流水号
支付返回地址 ret_url 变长128位的String 可选 微信公众号支付时,必须输入 用于微信支付成功后跳转的页面 支付宝统一下单时,必须输入
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
手续费金额 fee_amt 变长14位String 可选 手续费金额,格式为###.00
手续费扣款客户号 fee_cust_id 定长16位String 可选 手续费扣款客户号
手续费子账户号 fee_acct_id 变长9位String 可选 手续费扣款子账户号
内外扣标志 fee_flag 定长1位String 可选 0 : 内扣; 1 : 外扣

微信 APP 支付商户端开发示例

ios调起支付主要方法:

java

    //注册APPID:

//商户APP工程中引入微信lib库和头文件,调用API前,需要先向微信注册您的APPID,代码如下:

[WXApi registerApp:\\@"wxd930ea5d5a258f4f"
withDescription:\\@"demo 2.0"];

    //唤起微信APP:

PayReq \*request = [[[PayReq alloc] init] autorelease];

request.partnerId = \\@"10000100";

request.prepayId= \\@"1101000000140415649af9fc314aa427";

request.package = \\@"Sign=WXPay";

request.nonceStr= \\@"a462b76e7436e98e0ed6e13c64b4fd1c";

request.timeStamp= \\@"1397527777";

request.sign= \\@"582282D72DD2B03AD892830965F428CB16E7A256";

[WXApi sendReq:request];

Android调起支付主要方法:

java

    //注册APPID:

    //商户APP工程中引入微信JAR包,调用API前,需要先向微信注册您的APPID,代码如下:

    final IWXAPI msgApi = WXAPIFactory.createWXAPI(context, null);

    // 将该app注册到微信

    msgApi.registerApp("wxd930ea5d5a258f4f");

//唤起微信APP:

    IWXAPI api;

    PayReq request = new PayReq();

    request.appId = "wxd930ea5d5a258f4f";

    request.partnerId = "1900000109";

    request.prepayId= "1101000000140415649af9fc314aa427",;

    request.packageValue = "Sign=WXPay";

    request.nonceStr= "1101000000140429eb40476f8896f4c9";

    request.timeStamp= "1398746574";

    request.sign= "7FFECB600D7157C5AA49810D2D8F28BC2811827B";

    api.sendReq(request);

注:以上参数值来源于同步返回参数pay_info中

**详细内容请参照 微信官网APP支付 **

微信公众号开发示例

公众号原生态js支付接口(推荐使用)

  • 使用示例

需要注意: 所有传入参数都是字符串类型! 使用 JavaScript、 PHP等弱类型语言需要关注一下。示例代码如下:

java

WeixinJSBridge.invoke('getBrandWCPayRequest',{
            "appId" : "wx2421b1c4370ec43b", //公众号名称, 由商户传入
            "timeStamp":" 1395712654", //时间戳, 自 1970 年以来的秒数
            "nonceStr" : "e61463f8efa94090b1f366cccfbbb444", //随机串
            "package" : "prepay\_id=u802345jgfjsdfgsdg888",
            "signType" : "MD5", //微信签名方式:
            "paySign" : "70EA570631E4BB79628FBCA90534C63FF7FADD89" //微信签名
            },function(res){
            if(res.err\_msg == "get\_brand\_wcpay\_request:ok" ) {}
            // 使用以上方式判断前端返回,微信团队郑重提示: res.err\_msg将在用户支付成功后返回 ok, 但并不保证它绝对可靠。
});

如有疑惑请参照 微信官网公众号支付

  • 交互模式

    请求: 后台请求交互模式 返回结果+通知: 后台请求交互模式+后台通知交互模式

  • 请求参数

字段名 变量名 必填 类型 说明
公众号 id appId String 对应接口3.3中返回的payInfo信息
时间戳 timeStamp String 对应接口3.3中返回的payInfo信息
随机字符串 nonceStr String  
订单详情扩展字符串 Package String 对应接口3.3中返回的payInfo信息
签名方式 signType String 对应接口3.3中返回的payInfo信息
签名 paySign String 对应接口3.3中返回的payInfo信息
  • 返回结果:
返回值 说明
err_msg get_brand_wcpay_request:ok 支付成功
  get_brand_wcpay_request:cancel 支付过程中用户取消
  get_brand_wcpay_request:fail 支付失败

注:JS API 的返回结果 get_brand_wcpay_request:ok仅在用户成功完成支付时返回。由于前端交互复杂,get_brand_wcpay_request:cancel 或者get_brand_wcpay_request:fail 可以统一处理为用户遇到错误或者主动放弃, 不必细化区分。

  • 获取当前微信版本号

    由于微信 5.0 版本后才加入微信支付模块,低版本用户调用微信支付功能将无效。 因此,建议商户通过 user agent 来确定用户当前的版本号后再调用支付接口。 以 iPhone 版本为例,可以通过 user agent 可获取如下微信版本示例信息:

"Mozilla/5.0(iphone;CPU iphone OS 5\_1\_1 like Mac OS X)
     AppleWebKit/534.46(KHTML,likeGeocko) Mobile/9B206 MicroMessenger/5.0"

公众号非原生支付

  • 接口功能

    初始化 JSAPI 请求, 通过生成 token_id 来进行交互验证。 如调用时是用的原生态 js 支付, 此接口可以忽略

  • 交互模式

    请求: 后台请求交互模式

    返回结果+通知: 后台请求交互模式+后台通知交互模式

  • 显示微信安全支付标题

    对于商户具有支付权限且需要调用微信支付的页面,为了让用户增加购买信心,确认交易环境安全, 微信强烈建议商户使用“微信安全支付” 标题。安全支付标题的如下图。

_images/wx_safe_pay_icon.png
  • 显示支付安全标题, 需将原始链接添加上”showwxpaytitle=1”的尾串。

    通过这种方式,商户的页面将出现微信安全支付的标识。 例如,原始 URL 为:htp://weixin.qq.com 显示安全支付标题的 URL 为:htp://weixin.qq.com?showwxpaytitle=1。

    当用户在微信里打开 http://weixin.qq.com 不会直接出现微信安全支付的标题,而打开htp://weixin.qq.com?showwxpaytitle=1 后将出现微信安全支付标题。

  • 请求参数

    请求 url: https://pay.swiftpass.cn/pay/jspay

    请求参数为 http queryString, 即: https://pay.swiftpass.cn/pay/jspay?token_id=xxx

    https://pay.swiftpass.cn/pay/jspay?token_id=9a0610bc519e782e6275e8c7dd94a445&showwxtitle=1

    在服务号中点击这个链接就可调起支付(用户点击页面中的微信支付按钮时实际上就是点击的这个链接,此种方式无需配置支付授权目录,也不用像原生态 jsapi 支付那样获取那些参数后续的操作, 测试时可以将组装好的这个链接放到手机微信端文件传输助手点击调起支付界面)

序号 字段 说明 必填 备注
业务参数        
1 token_id VARCHAR(64) 动态口令
2 showwxpaytitle CHAR(1) 取值 1 或 0, 请填写: 1, 用于页面显示微信 安全支付

返回码

返回码 返回描述
218000 交易成功
218002 请求已受理
218003 交易失败
218004 交易关闭
218098 系统超时
218099 系统异常
218100 请求参数非法
218101 商户无此接口权限
218102 验证签名失败
218103 商户状态异常
218104 用户状态异常
218107 消息类型与签名内容不一致
218108 商户客户号与签名内容不一致
218109 版本号与签名内容不一致
218110 商户号不存在
218104 用户状态异常
218331 微信APP和支付宝APP支付时,APPID不能为空
218332 支付宝统一下单时,买家用户ID不能为空
218232 出账用户状态异常
218228 (入账客户号、入账账户号)与分账串信息必须输入一项
218230 入账客户号和入账账户号必须同时输入
218231 入账用户状态异常
218229 (入账客户号、入账账户号)与分账串信息不可同时输入
218112 账号不存在
218114 入账账户类型错误
218727 分账信息异常
218721 分账串内容不能超过五个
218722 分账串部分字段为空
218723 分账串金额格式错误
218728 分账串账户信息格式错误
218729 分账串账户异常
218726 分账信息账户状态异常
218725 分账信息用户状态异常
218741 分账串内容重复
218732 分账串客户号信息格式错误
218724 分账串累计金额不等于订单金额
218330 商户没有入驻
218202 交易订单号重复
218204 商户配置异常
218303 商户支付基础信息未配置
218321 支付手续费未配置
218323 支付手续费只能向商户收取
218314 支付手续费账户状态不正常
218215 请补录身份信息
218804 商户超限额或限次
218805 商户未开通该功能权限
218806 商户交易限制
218746 支付成功,分账失败
218341 订单已关闭
218342 已支付成功
218343 已支付失败
218344 订单信息不匹配
218345 未获取二维码链接
218346 未获取支付信息

代码示例

java

 String valueObj = "{"version":"10","cmd_id":"218","mer_cust_id":"6666000000217291",
              "user_cust_id":"","order_date":"20170921","order_id":"210014670","pay_type":"13",
              "trans_amt":"0.02","div_detail":"[
              {'divCustId':'6666000000307920','divAcctId':'310545','divAmt':'0.01','divFreezeFg':'00'},
              {'divCustId':'6666000000217291','divAcctId':'219871','divAmt':'0.01','divFreezeFg':'00'}]",
              "in_cust_id":"","in_acct_id":"","app_id":"000","is_raw":"1","buyer_logon_id":"quxiangzhen@21cn.com",
              "buyer_id":"000","goods_desc":"商品描述","goods_type":"5812","attch_info":"attch_info",
              "good_tag":"good_tag","device_info":"device_info","ip_addr":"ip_addr","location_val":"location_val",
              "order_expire_time":"","ret_url":"https://www.baidu.com/index.php?tn=monline_3_dg",
              "bg_ret_url":"http://192.168.0.74:8001/npayCallBack/asyncHandle.json","mer_priv":"","extension":""
              }";

String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
String checkValue = sign(valueObj);
String cmdId = "218";
String merCustId = "6666000000026086";
String version = "10";
String contentType = "application/x-www-form-urlencoded";
String charset = "UTF-8";
String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
String body = httpResponse.bodyText();
String resultObj = parseResult(body);//解密
成功响应:
200
      {
        "cmd_id": "218",
        "resp_code": "218000",
        "resp_desc": "交易成功",
        "mer_cust_id" : "6666000000026086",
        "order_date": "20180327",
        "order_id": "10000000001",
        .......
      }
失败响应:
200
     {
       "cmd_id": "218",
       "resp_code": "218099",
       "resp_desc": "交易失败",
       "mer_cust_id" : "6666000000026086",
       "order_date": "20180327",
       "order_id": "10000000001",
       .......
     }

219 H5 收银台

功能说明

商户调用该接口,跳转到汇付的 H5 收银台,收银台目前支持快捷支付、微信公众号支付

调用方式:页面浏览器

收银台业务流程说明:

_images/cashier_desk_flow.png

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 219
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
入账客户号 in_cust_id 定长16位String 可选 (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项
入账账户号 in_acct_id 变长9位String 可选  
分账串 div_detail 变长String 可选 (入账客户号、入账账户号) 和 分账串必填一项,且只能填一项; 分账串定义可参照下表;
商品描述 goods_desc 变长127位String 必须  
商品类型 goods_type 定长4位String 可选  
页面返回URL ret_url 变长128位的String 可选 用于支付完成跳转的结果页面
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 Extension 变长512位的String 可选 用于扩展请求参数
网站名字 app_name 变长64位String 必须(微信H5支付)其他可选 APP:app的名字WAP:网站名字
应用唯一标识 appInfo_id 变长64位String 必须(微信H5支付)其他可选 苹果APP:IOS应用唯一标识 安卓APP:APP包名WAP:网站首页URL,须保证公网能正常访问到
扫码设备号 device_info 变长32位String 必须(微信H5支付)其他可选 苹果APP:1 安卓APP:2 IOS手机网站: 3 ANDROID手机网站:4
设备IP地址 ip_addr 变长20位的String 可选 微信必传
设备信息 dev_info_json 变长1024位的String 必须 参见 设备静态信息

分账账户串(div_detail )内容:

参数中文名称 参数名称 数据格式 是否必须 说明
分账客户号 divCustId 变长16位String 必须 div_detail参数下的二级参数 分账客户号
分账账户号 divAcctId 变长9位String 必须 div_detail参数下的二级参数 分账账户号
分账金额 divAmt 变长14位String 必须 div_detail参数下的二级参数 分账金额,保留两位小数
是否冻结标志 divFreezeFg 定长2位String 必须 div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结

注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号

同步返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 219、208、218 如果用户在收银台页面选择了快捷支付,则返回的cmdId是208; 如果用户选择了微信支付,则返回的cmdId是218
应答返回码 resp_code 定长6位String 必须 208002、218002–处理中,其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+ 10位系统流水号
商户客户号 mer_cust_id 定长16位String 必须 商户的唯一标识
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
用户客户号 user_cust_id 定长16位String 可选 付款人汇付客户号; 快捷支付时,如果用户未在汇付开过户的话,会自动开户,并返回当前付款人在汇付的客户号
动态口令 token_id 变长64位String 可选 动态口令, 用于后续接口调用中使用(微信支付时的返回参数)
支付信息 pay_info 变长String 可选 json格式字符串,作用于原生态 js 支付时的参数; (微信支付时的返回参数)
开户银行代号 bank_id 变长8位String 必须 付款人快捷支付时的银行卡所属银行代号(快捷支付时的返回参数)
银行卡号 card_no 变长32位String 必须 付款人快捷支付时的银行卡掩码 (快捷支付时的返回参数)
绑定银行卡ID bind_card_id 变长20位String 必须 付款人快捷支付时的快捷绑卡的ID (快捷支付时的返回参数)
借贷标记 dc_flag 定长1位String   (快捷支付时的返回参数)

异步返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 208、218 如果用户在收银台页面选择了快捷支付,则返回的cmdId是208; 如果用户选择了微信支付,则返回的cmdId是218
应答返回码 resp_code 定长6位String 必须 208000、218000—交易成功,其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+10位系统流水号
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一,20位内的字母或数字组合
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
开户银行代号 bank_id 变长8位String 必须 具体见附件:开户银行代号 (快捷支付时的返回参数)
银行卡号 card_no 变长32位String 必须 返回银行卡号掩码 (快捷支付时的返回参数)
绑定银行卡ID bind_card_id 变长20位String 必须 本次快捷绑卡的ID (快捷支付时的返回参数)
借贷标记 dc_flag 定长1位String 必须 0–借记,储蓄卡 1–贷记,信用卡 (快捷支付时的返回参数)
是否原生态 is_raw 定长1位String 可选 (微信支付时的返回参数)
动态口令 token_id 变长64位String 可选 (微信支付时的返回参数)
支付信息 pay_info 变长String 可选 (微信支付时的返回参数)
买家用户ID buyer_id 变长100位String 可选 (微信支付时的返回参数)
商品描述 goods_desc 变长127位String 必须 (微信支付时的返回参数)
商品类型 goods_type 定长4位String 可选 (微信支付时的返回参数)
附加信可选息 attach_info 变长128位String 可选 (微信支付时的返回参数)
入账客户号 in_cust_id 定长16位String 可选  
入账账户号 in_acct_id 变长9位String 可选  
分账账户串 div_detail 变长String 可选  
支付返回地址 ret_url 变长128位的String 可选  
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知商户开户结果 注意:1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 Extension 变长512位的String 可选 用于扩展请求参数

返回码

返回码 返回描述
208000 支付成功
208001 支付请求受理中
208099 系统异常
218000 交易成功
218002 请求已受理
218003 交易失败
218099 系统异常
219003 交易失败
219099 系统异常
219100 请求参数非法
219101 商户无此接口权限
219102 验证签名失败
219110 商户号不存在
219103 商户状态异常
219201 页面数据被篡改
219202 交易订单号重复
219232 出账用户状态异常
219228 (入账客户号、入账账户号)与分账串信息必须输入一项
219230 入账客户号和入账账户号必须同时输入
219231 入账用户状态异常
219229 (入账客户号、入账账户号)与分账串信息不可同时输入
219112 账号不存在
219114 入账账户类型错误
219727 分账信息异常
219721 分账串内容不能超过五个
219722 分账串部分字段为空
219723 分账串金额格式错误
219728 分账串账户信息格式错误
219729 分账串账户异常
219726 分账信息账户状态异常
219725 分账信息用户状态异常
219741 分账串内容重复
219732 分账串客户号信息格式错误
219724 分账串累计金额不等于订单金额
219321 操作超时,请重试
219747 商户收银台未配置
219335 信息被篡改
218332 买家用户ID不能为空
218334 支付返回地址不能为空
218232 出账用户状态异常
218228 (入账客户号、入账账户号)与分账串信息必须输入一项
218230 入账客户号和入账账户号必须同时输入
218231 入账用户状态异常
218229 (入账客户号、入账账户号)与分账串信息不可同时输入
218112 账号不存在
218114 入账账户类型错误
218727 分账信息异常
218721 分账串内容不能超过五个
218722 分账串部分字段为空
218723 分账串金额格式错误
218728 分账串账户信息格式错误
218729 分账串账户异常
218726 分账信息账户状态异常
218725 分账信息用户状态异常
218741 分账串内容重复
218732 分账串客户号信息格式错误
218724 分账串累计金额不等于订单金额
218330 商户没有入驻
218303 商户支付基础信息未配置
218321 支付手续费未配置
218323 支付手续费只能向商户收取
218314 支付手续费账户状态不正常
218110 商户号不存在
218201 页面数据被篡改
218321 操作超时,请重试
218746 支付成功,分账失败
208201 页面数据被篡改
208202 交易订单号重复
208203 账户可用余额不足
208204 商户配置异常
208205 短信验证码验证失败
208206 短信验证码发送手机号与验证手机号不一致
208208 短信验证码已失效请重新获取
208211 短信验证码发送失败
208214 查询出现异常
208215 请补录身份信息
208216 短信验证码发送过于频繁或单日发送次数超限
208301 只有个人用户和个体户能快捷支付
208302 商户支付基础信息未配置
208303 支付手续费账户状态不正常
208304 支付手续费未配置
208306 身份证实名验证错误
208307 银行卡信息与上次绑卡信息不一致,请解绑后再提交绑卡
208308 个人用户信息校验失败
208309 开户手续费收取失败
208310 该笔交易已结束
208311 无任何银行信息
208314 验证码发送失败
208315 验证码发送成功
208317 用户有快捷卡正在绑定中,请勿重复绑卡
208319 验证码发送中
208320 银行卡解绑失败
208321 操作超时,请重试
208322 省份地区信息非法
208324 银行卡信息验证失败
208325 银行卡号与银行、卡类型信息不匹配
208721 分账串内容不能超过五个
208722 分账串部分字段为空
208723 分账串金额格式错误
208724 分账串累计金额不等于订单金额
208725 分账信息用户状态异常
208726 分账信息账户状态异常
208727 分账信息异常
208728 分账串账户信息格式错误
208729 分账串账户异常
208732 分账串客户号信息格式错误
208739 快捷支付短信发送异常
208741 分账串内容重复
208742 快捷支付成功,分账失败
208743 请获取验证码

代码示例

java

String valueObj = "{
       "version": "10",
       "cmd_id": "219",
       "mer_cust_id": "6666000000002619",
       "user_cust_id": "6666000000005942",
       "order_id": "201710268889",
       "order_date": "20171027",
       "trans_amt": "0.02",
       "in_cust_id": "",
       "in_acct_id": "",
       "div_detail": "[{'divCustId':'6666000000002619','divAcctId':'2744','divAmt':'0.01','divFreezeFg':'00'},{'divCustId':'6666000000007485','divAcctId':'7791','divAmt':'0.01','divFreezeFg':'00'}]",
       "goods_desc": "商品描述",
       "goods_type": "5812",
       "order_expire_time": "000",
       "ret_url": "https://www.baidu.com/",
       "bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json"
       }";

 String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
 String checkValue = sign(valueObj);
 String cmdId = "219";
 String merCustId = "6666000000026086";
 String version = "10";
 httpServletResponse.setContentType("application/x-www-form-urlencoded; charset=UTF-8");
 PrintWriter out = httpServletResponse.getWriter();
 out.println();
 out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
 out.println("<HTML>");
 out.println(" <HEAD><TITLE>sender</TITLE></HEAD>");
 out.println(" <BODY style=\"display: none\">");
 out.println("<form name=\"submitForm\" action=\"" + url + "\" method=\"post\">");
 out.println("<input type=\"hidden\" name=\"cmd_id\" value=\"" + cmd_id + "\"/>");
 out.println("<input type=\"hidden\" name=\"version\" value=\"" + version + "\"/>");
 out.println("<input type=\"hidden\" name=\"mer_cust_id\" value=\"" + merCustId + "\"/>");
 out.println("<input type=\"hidden\" name=\"check_value\" value=\"" + checkValue + "\"/>");
 out.println("</from>");
 out.println("<script>window.document.submitForm.submit();</script>");
 out.println(" </BODY>");
 out.println("</HTML>");
 out.flush();
 out.close();
成功响应:
200
      {
        "cmd_id": "219",
        "resp_code": "219000",
        "resp_desc": "交易成功",
        "mer_cust_id" : "6666000000026086",
        "order_date": "20180327",
        "order_id": "10000000001",
        .......
      }
失败响应:
200
   {
     "cmd_id": "219",
     "resp_code": "219099",
     "resp_desc": "交易失败",
     "mer_cust_id" : "6666000000026086",
     "order_date": "20180327",
     "order_id": "10000000001",
     .......
   }

页面展示

_images/cashier_desk_page.png

226 H5 支付

功能说明

调用本接口时,返回微信 H5 支付地址,用于唤起微信支付。

调用方式:页面浏览器

请求参数

参数中文名称 参数名称 数据格式 是否必须 说明
版本号 version 定长2位String 必须 目前固定为10
消息类型 cmd_id 定长3位String 必须 固定226
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
扫码支付类型 pay_type 定长2位String 必须 16 : 微信H5 17 : 支付宝H5
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
分账账户串 div_detail 变长String 必须 业务类型为支付时必传,分账账户必须是入账客户的账户。详见下表 分账账户串 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}]
商品描述 goods_desc 变长127位String 可选  
商品类型 goods_type 定长4位String 可选  
商品标记 good_tag 变长32位String 可选 商品标记,优惠标志等
网站名字 app_name 变长64位String 必须(微信H5支付)其他可选 APP:app的名字WAP:网站名字
应用唯一标识 appInfo_id 变长64位String 必须(微信H5支付)其他可选 苹果APP:IOS应用唯一标识 安卓APP:APP包名WAP:网站首页URL,须保证公网能正常访问到
扫码设备号 device_info 变长32位String 必须(微信H5支付)其他可选 苹果APP:1 安卓APP:2 IOS手机网站: 3 ANDROID手机网站:4
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
二级商户号 secondary_mer_id 定长10位的String 可选 对于开启二级商户模式的商户,必须输入其配下的二级商户号
设备IP地址 ip_addr 变长20位的String 可选 微信必传
设备信息 dev_info_json 变长1024位的String 必须 参见 设备静态信息

分账账户串(div_detail )内容:

参数中文名称 参数名称 数据格式 是否必须 说明
分账客户号 divCustId 变长16位String 必须 div_detail参数下的二级参数 分账客户号
分账账户号 divAcctId 变长9位String 必须 div_detail参数下的二级参数 分账账户号
分账金额 divAmt 变长14位String 必须 div_detail参数下的二级参数 分账金额,保留两位小数
是否冻结标志 divFreezeFg 定长2位String 必须 div_detail参数下的二级参数 冻结标志 01:冻结; 00:不冻结

注:如果支付时不需要分账给多个人的话,就不要传分账账户串,直接传入账客户号和入账账户号

同步返回参数

参数中文名称 参数名称 数据格式 是否必须 说明
消息类型 cmd_id 定长3位String 必须 226
应答返回码 resp_code 定长6位String 必须 226000—交易成功 226002—请求受理中 其他见返回码
应答返回描述 resp_desc 变长String 必须 返回码的对应中文描述
商户客户号 mer_cust_id 定长16位String 必须 由汇付生成,商户的唯一性标识
用户客户号 user_cust_id 定长16位String 可选 付款客户号
订单日期 order_date 定长8位String 必须 格式为YYYYMMDD,例如:20160307
订单号 order_id 变长20位String 必须 由商户生成,必须保证唯一, 20位内的字母或数字组合
扫码支付类型 pay_type 定长2位String 必须 16 : 微信H5 17 : 支付宝H5
交易金额 trans_amt 变长14位String 必须 金额格式是###.00
分账账户串 div_detail 变长String 必须 业务类型为支付时必传,分账账户必须是入账客户的账户。详见下表 分账账户串 数据格式: [{‘divCustId’:‘6666000000025350’,’divAcctId’:‘78276’,’divAmt’:‘50.00’,’divFreezeFg’:‘00’},{‘divCustId’:‘6666000000025666’,’divAcctId’:‘78841’,’divAmt’:‘50.00’,’divFreezeFg’:‘01’}]
商品描述 goods_desc 变长127位String 必须  
商品类型 goods_type 定长4位String 可选 MCC,银联支付时必须
支付地址 pay_url 变长64位String 可选 用于拉起微信收银台的URL
操作员 oper_user_id 变长32位String 可选  
设备号 device_info 变长32位String 可选  
本平台交易唯一标识号 platform_seq_id 定长18位String 必须 组成规则:8位本平台日期+ 10位系统流水号
商户后台应答地址 bg_ret_url 变长128位的String 必须 通过后台异步通知结果 注意: 1) 使用时不要包含中文 2) 必须是外网地址
商户私有域 mer_priv 变长120位的String 可选 为商户的自定义字段,该字段在交易完成后由本平台原样返回
扩展域 extension 变长512位的String 可选 用于扩展请求参数
通道返回码 bg_channel_code 变长32位String 可选  
通道返回描述 bg_channel_msg 变长200位String 可选  
银行返回码 bg_bank_code 变长32位String 可选  
银行返回描述 bg_bank_message 变长200位String 可选  

返回码

H5 支付接口(cmd_id=226)  
226000 交易成功
226002 请求已受理
226003 交易失败
226099 系统异常
226100 请求参数非法
226101 商户无此接口权限
226102 验证签名失败
226103 商户状态异常
226104 用户状态异常
226107 消息类型与签名内容不一致
226108 商户客户号与签名内容不一致
226109 版本号与签名内容不一致
226110 商户号不存在
226721 分账串内容不能超过五个
226727 分账信息异常
226204 商户配置异常
226748 二级商户号不存在
226749 二级商户号状态异常
226202 交易订单号重复

代码示例

java

String valueObj = "{
       "version": "10",
       "cmd_id": "226",
       "mer_cust_id": "6666000000037133",
       "user_cust_id": "",
       "order_id": "2018041300095",
       "order_date": "20180419",
       "pay_type": "16",
       "trans_amt": "0.01",
       "div_detail": "[{'divCustId':'6666000000037137','divAcctId':'92127','divAmt':'0.01','divFreezeFg':'00'}]",
       "goods_desc": "1",
       "good_tag": "",
       "app_name": "111",
       "appinfo_id": "idids00000",
       "goods_type": "1222",
       "oper_user_id": "test_oper_user_id",
       "device_info": "1",
       "bg_ret_url": "http://192.168.0.74:8001/npayCallBack/asyncHandle.json",
       "mer_priv": "tess",
       "secondary_mer_id": "NP09050001"
       }";

 String testUrl = "http://192.168.3.170:8083/npay/merchantRequest";
 String checkValue = sign(valueObj);
 String cmdId = "226";
 String merCustId = "6666000000026086";
 String version = "10";
 String contentType = "application/x-www-form-urlencoded";
 String charset = "UTF-8";
 String postStr = "cmd_id=" + cmdId + "&version=" + version + "&mer_cust_id=" + merCustId + "&check_value=" + checkValue;
 jodd.http.HttpRequest httpRequest = jodd.http.HttpRequest.post(testUrl).charset(charset);
 jodd.http.HttpResponse httpResponse = httpRequest.contentType(contentType).body(postStr).send();
 String body = httpResponse.bodyText();
 String resultObj = parseResult(body);//解密
成功响应:
200
      {
        "cmd_id": "226",
        "resp_code": "226000",
        "resp_desc": "交易成功",
        "mer_cust_id" : "6666000000026086",
        "order_date": "20180327",
        "order_id": "10000000001",
        .......
      }
失败响应:
200
    {
      "cmd_id": "226",
      "resp_code": "226099",
      "resp_desc": "交易失败",
      "mer_cust_id" : "6666000000026086",
      "order_date": "20180327",
      "order_id": "10000000001",
      .......
    }